Class: Magma::Config::MLT

Inherits:
ActiveSupport::HashWithIndifferentAccess
  • Object
show all
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

Instance Method Summary collapse

Constructor Details

#initialize(hash = {}) ⇒ MLT

Returns a new instance of MLT.



17
18
19
20
21
22
23
24
25
# File 'lib/magma/config/mlt.rb', line 17

def initialize(hash = {})
  super({
    globals: {},
    scopes: {},
    type: 'mlt',
    version: VERSION,
  }.merge(hash))
  validate!
end

Instance Attribute Details

#dataObject (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

#globalsObject



27
28
29
# File 'lib/magma/config/mlt.rb', line 27

def globals
  self[:globals]
end

#operationsObject



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

Returns:

  • (Boolean)


43
44
45
# File 'lib/magma/config/mlt.rb', line 43

def resolved?
  data && true
end

#scopesObject



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

#variablesObject



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