itchef/cookbooks/cpe_chrome/libraries/windows_chrome_settingv2.rb (50 lines of code) (raw):
#
# Cookbook Name:: cpe_chrome
# Libraries:: windows_chrome_settingv2
#
# Copyright (c) Facebook, Inc. and its affiliates.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
require_relative 'chrome_windows'
# This class is a superclass for implementing different types of chrome
# settings.
# All subclasses must implement `to_chef_reg_provider` to regurgitate something
# that chef can consume via the `registry_key` resource.
class WindowsChromeSettingV2
include CPE::ChromeManagement
attr_accessor :registry_location, :subkey, :iterable, :value, :type
def initialize(registry_location, subkey, type, iterable)
@registry_location = registry_location
@subkey = subkey
@type = type
@iterable = iterable
end
def to_chef_reg_provider
fail NotImplementedError, 'subclasses must implement this'
end
# This method is used to output a proper class constructor.
# The generated string is set up in such a way that the linter will properly
# autoformat it such that is will cooperate with our static analysis tooling.
def generated_form
initializer = self.instance_variables.each_with_object([]) do |v, a|
value = self.instance_variable_get(v)
if value.is_a?(String)
a << "'#{value}'"
elsif value.is_a?(Symbol)
a << ":#{value}"
elsif value.is_a?(NilClass)
a << 'nil'
elsif value.is_a?(TrueClass) || value.is_a?(FalseClass)
a << value
end
end
"#{self.class.name}.new(\n#{initializer.join(", \n")},)"
end
end
class WindowsChromeIterableSetting < WindowsChromeSettingV2
# Chrome settings in the registry with multiple entries are laid out
# sequentially from [1...N]
def to_chef_reg_provider
list = []
@value.each_with_index do |entry, index|
list << { :name => (index + 1).to_s, :type => @type, :data => entry }
end
list
end
end
class WindowsChromeFlatSetting < WindowsChromeSettingV2
def to_chef_reg_provider
if @value.is_a?(TrueClass)
@value = 1
elsif @value.is_a?(FalseClass)
@value = 0
elsif JSONIFY_REG_KEYS['Chrome'].include?(@subkey)
@value = @value.to_json
end
[{ :name => @subkey, :type => @type, :data => @value }]
end
end