class MotionConfigVars::HashlikeObjectConfigurer
Public Class Methods
new(options={})
click to toggle source
# File lib/motion-config-vars/embed/hashlike_object_configurer.rb, line 4 def initialize options={} @hashlike_object = options[:hashlike_object] raise ArgumentError, "'hashlike_object' missing" unless @hashlike_object @config_vars_data = options[:config_vars_data] raise ArgumentError, "'config_vars_data' missing" unless @config_vars_data @config_name_for_facet_named = options[:config_name_for_facet_named] raise ArgumentError, "'config_name_for_facet_named' missing" unless @config_name_for_facet_named self.validate_config_name_for_facet_named_is_closure self.validate_hashlike_object_is_hashlike self.validate_all_configured_facets_are_requested self.validate_all_facets_requested_configurations_available end
Public Instance Methods
perform!()
click to toggle source
# File lib/motion-config-vars/embed/hashlike_object_configurer.rb, line 17 def perform! self.requested_facets_names.each do |requested_facet_name| configuration_name = @config_name_for_facet_named.call requested_facet_name self.set requested_facet_name, configuration_name facet_data = @config_vars_data[requested_facet_name] return unless facet_data.is_a? Hash configuration_data = facet_data[configuration_name] configuration_data.each { |key, value| self.set key, value } end end
Protected Instance Methods
all_configured_facets_are_requested?()
click to toggle source
# File lib/motion-config-vars/embed/hashlike_object_configurer.rb, line 53 def all_configured_facets_are_requested? self.configured_facets_names.all? do |facet_name| self.requested_facets_names.include? facet_name end end
configured_facets_names()
click to toggle source
# File lib/motion-config-vars/embed/hashlike_object_configurer.rb, line 59 def configured_facets_names @config_vars_data.keys end
requested_facets_names()
click to toggle source
# File lib/motion-config-vars/embed/hashlike_object_configurer.rb, line 67 def requested_facets_names self.configured_facets_names.map do |facet_name| facet_name if @config_name_for_facet_named.call(facet_name) end end
set(key, value)
click to toggle source
# File lib/motion-config-vars/embed/hashlike_object_configurer.rb, line 30 def set key, value @hashlike_object[key] ||= value end
unrequested_configured_facets_names()
click to toggle source
# File lib/motion-config-vars/embed/hashlike_object_configurer.rb, line 63 def unrequested_configured_facets_names self.configured_facets_names - requested_facets_names end
validate_all_configured_facets_are_requested()
click to toggle source
# File lib/motion-config-vars/embed/hashlike_object_configurer.rb, line 46 def validate_all_configured_facets_are_requested unless self.all_configured_facets_are_requested? names = self.unrequested_configured_facets_names.join ", " raise ConfigurationError, "configured facet not specified: #{names}" end end
validate_all_facets_requested_configurations_available()
click to toggle source
# File lib/motion-config-vars/embed/hashlike_object_configurer.rb, line 73 def validate_all_facets_requested_configurations_available self.requested_facets_names.each do |requested_facet_name| configuration_name = @config_name_for_facet_named.call requested_facet_name facet_data = @config_vars_data[requested_facet_name] unless (facet_data.is_a?(Hash) && facet_data[configuration_name]) or (facet_data.is_a?(Array) && facet_data.include?(configuration_name)) raise ConfigurationError, "configuration '#{configuration_name}' unavailable for '#{requested_facet_name}'" end end end
validate_config_name_for_facet_named_is_closure()
click to toggle source
# File lib/motion-config-vars/embed/hashlike_object_configurer.rb, line 34 def validate_config_name_for_facet_named_is_closure unless @config_name_for_facet_named.respond_to? :call raise ArgumentError, "'config_name_for_facet_named' must be a closure" end end
validate_hashlike_object_is_hashlike()
click to toggle source
# File lib/motion-config-vars/embed/hashlike_object_configurer.rb, line 40 def validate_hashlike_object_is_hashlike unless @hashlike_object.respond_to?(:[]=) raise ArgumentError, "hashlike_object must respond to []=" end end