class Expressionist::Context
Public Class Methods
new(data = {})
click to toggle source
# File lib/expressionist/context.rb, line 7 def initialize(data = {}) @data = data end
Public Instance Methods
[](key)
click to toggle source
# File lib/expressionist/context.rb, line 33 def [](key) find(key.split('.'), @data) end
[]=(key, value)
click to toggle source
# File lib/expressionist/context.rb, line 11 def []=(key, value) segments = key.split('.') len = segments.length data = @data (0...len).each do |i| key = segments[i] data = (data[key] ||= {}) end data['.'] = value end
cast(value)
click to toggle source
# File lib/expressionist/context.rb, line 66 def cast(value) case value when 'true' true when 'false' false when /[0-9]+[.,][0-9]+/ Float(value) when /[0-9]+/ Integer(value) else value end end
delete(key)
click to toggle source
# File lib/expressionist/context.rb, line 22 def delete(key) segments = key.split('.') len = segments.length data = @data (0...len).each do |i| break unless data data = data[segments[i]] end data.delete('.') if data end
export()
click to toggle source
# File lib/expressionist/context.rb, line 62 def export @data end
find(segments = [], data = nil)
click to toggle source
# File lib/expressionist/context.rb, line 37 def find(segments = [], data = nil) data ||= @data segment = segments[0] subsegments = segments[1..-1] case when data == nil [nil] when segments.length == 0 [cast(data['.'])] when segment == '?' (data.keys - ['.']).map do |k| find(subsegments, data[k]) end when segment == '*' && subsegments.length > 0 && data[subsegments[0]] find(subsegments[1..-1], data[subsegments[0]]) when segment == '*' (subsegments.length == 0 ? [data['.']] : []) + (data.keys - ['.']).map do |k| find(segments, data[k]) end else find(subsegments, data[segment]) end.flatten.compact end