Class: MiniviteRails::Configuration

Inherits:
Object
  • Object
show all
Defined in:
lib/minivite_rails/configuration.rb

Overview

Class to manage configuration related logics.

Defined Under Namespace

Classes: Error

Constant Summary collapse

ROOT_DEFAULT_ID =
:''

Class Method Summary collapse

Instance Method Summary collapse

Constructor Details

#initializeConfiguration

Initializes a new instance of Configuration class.



34
35
36
37
38
# File 'lib/minivite_rails/configuration.rb', line 34

def initialize
  @parent = nil
  @children = {}
  @config = {}
end

Class Method Details

.config_attr(prop, default: nil) ⇒ Object



11
12
13
14
15
16
17
18
19
20
21
22
# File 'lib/minivite_rails/configuration.rb', line 11

def config_attr(prop, default: nil)
  define_method(prop) do
    # If not overridden, children will use parent's setting
    @config.fetch(prop) do
      @parent ? @parent.public_send(prop) : default
    end
  end

  define_method(:"#{prop}=") do |v|
    @config[prop] = v
  end
end

Instance Method Details

#add(child_id) ⇒ Object

Raises:



53
54
55
56
57
58
59
60
61
62
63
# File 'lib/minivite_rails/configuration.rb', line 53

def add(child_id)
  raise Error, 'Can only define sub configuration from root config' unless root?
  raise Error, 'Id already used by root configuration' if child_id == id

  @children[child_id] ||= self.class.new.tap do |c|
    c.instance_variable_set(:@parent, self)
    c.instance_variable_set(:@children, nil)
    c.id = child_id
    yield c if block_given?
  end
end

#child_by_id(child_id) ⇒ Object



65
66
67
68
69
70
71
72
73
# File 'lib/minivite_rails/configuration.rb', line 65

def child_by_id(child_id)
  raise Error, 'Can only get sub configuration from root config' unless root?

  return self if child_id == id # return itself if id is root id

  @children.fetch(child_id)
rescue KeyError
  raise Error, "No sub configuration with id #{id}"
end

#manifestObject



44
45
46
# File 'lib/minivite_rails/configuration.rb', line 44

def manifest
  @manifest ||= Manifest.new(self)
end

#public_asset_dirObject



40
41
42
# File 'lib/minivite_rails/configuration.rb', line 40

def public_asset_dir
  File.expand_path('.', File.join(public_dir, public_base_path))
end

#reload_manifestObject



48
49
50
51
# File 'lib/minivite_rails/configuration.rb', line 48

def reload_manifest
  @manifest&.update_config(self)
  @children.each_value(&:reload_manifest)
end

#root?Boolean

Returns:

  • (Boolean)


75
76
77
# File 'lib/minivite_rails/configuration.rb', line 75

def root?
  @parent.nil?
end