Class: Shokkenki::Term::JsonPathsTerm

Inherits:
Term show all
Defined in:
lib/shokkenki/term/json_paths_term.rb

Instance Attribute Summary

Attributes inherited from Term

#value

Class Method Summary collapse

Instance Method Summary collapse

Methods inherited from Term

#to_shokkenki_term, #type

Constructor Details

#initialize(values) ⇒ JsonPathsTerm

Returns a new instance of JsonPathsTerm.



24
25
26
27
28
29
30
# File 'lib/shokkenki/term/json_paths_term.rb', line 24

def initialize values
  @value = values.inject({}) do |mapped, kv|
    k, v = *kv
    mapped[k] = v.to_shokkenki_term
    mapped
  end
end

Class Method Details

.from_json(json) ⇒ Object



14
15
16
17
18
19
20
21
22
# File 'lib/shokkenki/term/json_paths_term.rb', line 14

def self.from_json json
  values = json[:value].inject({}) do |hash, kv|
    key, value = *kv
    hash[key] = TermFactory.from_json(value)
    hash
  end

  new values
end

.typeObject



12
# File 'lib/shokkenki/term/json_paths_term.rb', line 12

def self.type; :json_paths; end

Instance Method Details

#exampleObject



39
40
41
42
43
44
45
# File 'lib/shokkenki/term/json_paths_term.rb', line 39

def example
  @value.inject({}) do |generated, keyvalue|
    path, term = *keyvalue
    generated.deep_merge! JsonPathExample.new(path, term).to_example
    generated
  end.to_json
end

#match?(compare) ⇒ Boolean

Returns:

  • (Boolean)


32
33
34
35
36
37
# File 'lib/shokkenki/term/json_paths_term.rb', line 32

def match? compare
  compare && @value.all? do |key, value|
    path = JsonPath.new(key)
    value.match? path.on(compare)
  end
end

#to_hashObject



47
48
49
50
51
52
53
54
55
56
57
58
# File 'lib/shokkenki/term/json_paths_term.rb', line 47

def to_hash
  mapped_values = @value.inject({}) do |mapped, keyvalue|
    key, value = *keyvalue
    mapped[key] = value.respond_to?(:to_hash) ? value.to_hash : value
    mapped
  end

  {
    :type => type,
    :value => mapped_values
  }
end