Class: Magma::Config::MLT
- Inherits:
-
ActiveSupport::HashWithIndifferentAccess
- Object
- ActiveSupport::HashWithIndifferentAccess
- Magma::Config::MLT
- Defined in:
- lib/magma/config/mlt.rb
Constant Summary collapse
- VERSION =
1
- ALLOWED_KEYS =
%w[ assets globals scopes type version ].freeze
Instance Attribute Summary collapse
-
#data ⇒ Object
readonly
Returns the value of attribute data.
Instance Method Summary collapse
- #globals ⇒ Object
-
#initialize(hash = {}) ⇒ MLT
constructor
A new instance of MLT.
- #operations ⇒ Object
- #resolve(context = {}) ⇒ Object
- #resolved? ⇒ Boolean
- #scopes ⇒ Object
- #transform(doc) ⇒ Object
- #variables ⇒ Object
Constructor Details
Instance Attribute Details
#data ⇒ Object (readonly)
Returns the value of attribute data.
15 16 17 |
# File 'lib/magma/config/mlt.rb', line 15 def data @data end |
Instance Method Details
#globals ⇒ Object
27 28 29 |
# File 'lib/magma/config/mlt.rb', line 27 def globals self[:globals] end |
#operations ⇒ Object
31 32 33 34 |
# File 'lib/magma/config/mlt.rb', line 31 def operations raise 'needs to be resolved' unless resolved? data.select { |key, _value| key[0] == '$' } end |
#resolve(context = {}) ⇒ Object
36 37 38 39 40 41 |
# File 'lib/magma/config/mlt.rb', line 36 def resolve(context = {}) @data = context.reduce(globals.clone) do |res, (key, value)| scope = scopes.fetch(key, {}).fetch(value, nil) res.tap { |r| r.deep_merge!(scope) if scope } end end |
#resolved? ⇒ Boolean
43 44 45 |
# File 'lib/magma/config/mlt.rb', line 43 def resolved? data && true end |
#scopes ⇒ Object
47 48 49 |
# File 'lib/magma/config/mlt.rb', line 47 def scopes self[:scopes] end |
#transform(doc) ⇒ Object
51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 |
# File 'lib/magma/config/mlt.rb', line 51 def transform(doc) raise 'needs to be resolved' unless resolved? operations.each do |key, obj| # Skip if not prefixed with $ leader = key[0] next unless leader == '$' # Select node set nodeset = doc.css(key[1..-1]) case obj when Hash obj.each do |name, value| if value nodeset.attr(name, value) else nodeset.remove_attr(name) end end else text = obj.to_s nodeset.each { |node| node.content = text } end end doc end |
#variables ⇒ Object
78 79 80 81 |
# File 'lib/magma/config/mlt.rb', line 78 def variables raise 'needs to be resolved' unless resolved? data.reject { |key, _value| key[0] == '$' } end |