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