Class: MiniviteRails::Configuration
- Inherits:
-
Object
- Object
- MiniviteRails::Configuration
- 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
- #add(child_id) ⇒ Object
- #child_by_id(child_id) ⇒ Object
-
#initialize ⇒ Configuration
constructor
Initializes a new instance of Configuration class.
- #manifest ⇒ Object
- #public_asset_dir ⇒ Object
- #reload_manifest ⇒ Object
- #root? ⇒ Boolean
Constructor Details
#initialize ⇒ Configuration
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
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 |
#manifest ⇒ Object
44 45 46 |
# File 'lib/minivite_rails/configuration.rb', line 44 def manifest @manifest ||= Manifest.new(self) end |
#public_asset_dir ⇒ Object
40 41 42 |
# File 'lib/minivite_rails/configuration.rb', line 40 def public_asset_dir File.('.', File.join(public_dir, public_base_path)) end |
#reload_manifest ⇒ Object
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
75 76 77 |
# File 'lib/minivite_rails/configuration.rb', line 75 def root? @parent.nil? end |