Class: Settings

Inherits:
Object
  • Object
show all
Defined in:
lib/settings/setting.rb,
lib/settings/registry.rb,
lib/settings/settings.rb,
lib/settings/data_source.rb,
lib/settings/controls/data.rb,
lib/settings/setting/macro.rb,
lib/settings/data_source/env.rb,
lib/settings/controls/subject.rb,
lib/settings/data_source/file.rb,
lib/settings/data_source/hash.rb,
lib/settings/controls/settings.rb,
lib/settings/data_source/build.rb,
lib/settings/setting/assignment.rb,
lib/settings/controls/data_source.rb

Defined Under Namespace

Modules: Controls, Setting Classes: DataSource, Error, Registry

Instance Attribute Summary collapse

Class Method Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(data) ⇒ Settings

Returns a new instance of Settings.



6
7
8
# File 'lib/settings/settings.rb', line 6

def initialize(data)
  @data = data
end

Instance Attribute Details

#dataObject (readonly)

Returns the value of attribute data.



4
5
6
# File 'lib/settings/settings.rb', line 4

def data
  @data
end

Class Method Details

.build(source = nil) ⇒ Object



10
11
12
13
14
15
16
17
18
19
20
# File 'lib/settings/settings.rb', line 10

def self.build(source=nil)
  source ||= implementer_source

  data_source = DataSource::Build.(source)

  data = data_source.get_data

  instance = new(data)

  instance
end

.implementer_sourceObject



22
23
24
25
26
27
28
# File 'lib/settings/settings.rb', line 22

def self.implementer_source
  unless self.respond_to?(:data_source)
    return nil
  end

  self.data_source
end

Instance Method Details

#assign_value(receiver, attribute, value, strict = false) ⇒ Object



70
71
72
# File 'lib/settings/settings.rb', line 70

def assign_value(receiver, attribute, value, strict=false)
  Settings::Setting::Assignment.assign(receiver, attribute, value, strict)
end

#get(*namespace) ⇒ Object



74
75
76
77
78
79
80
81
82
83
84
85
86
87
# File 'lib/settings/settings.rb', line 74

def get(*namespace)
  namespace.flatten!

  keys = namespace.map { |n| n.is_a?(Symbol) ? n.to_s : n }

  value = nil
  if keys.empty?
    value = data
  else
    value = data.dig(*keys)
  end

  value
end

#set(receiver, *namespace, attribute: nil, strict: true) ⇒ Object



30
31
32
33
34
35
36
37
# File 'lib/settings/settings.rb', line 30

def set(receiver, *namespace, attribute: nil, strict: true)
  unless attribute.nil?
    value = set_attribute(receiver, attribute, namespace, strict)
  else
    receiver = set_object(receiver, namespace, strict)
  end
  value || receiver
end

#set_attribute(receiver, attribute, namespace, strict) ⇒ Object



39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
# File 'lib/settings/settings.rb', line 39

def set_attribute(receiver, attribute, namespace, strict)
  attribute = attribute.to_s if attribute.is_a?(Symbol)

  attribute_namespace = namespace.dup
  attribute_namespace << attribute

  value = get(attribute_namespace)

  if value.nil?
    raise Settings::Error, "#{attribute_namespace} not found in the data"
  end

  Settings::Setting::Assignment::Attribute.assign(receiver, attribute.to_sym, value, strict)

  value
end

#set_object(receiver, namespace, strict) ⇒ Object



56
57
58
59
60
61
62
63
64
65
66
67
68
# File 'lib/settings/settings.rb', line 56

def set_object(receiver, namespace, strict)
  data = get(namespace)

  if data.nil?
    raise Settings::Error, "#{namespace} not found in the data"
  end

  data.each do |attribute, value|
    Settings::Setting::Assignment::Object.assign(receiver, attribute.to_sym, value, strict)
  end

  receiver
end