Class: JsonAccessor

Inherits:
Object
  • Object
show all
Defined in:
lib/random_api/json_accessor.rb

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(code, mutator) ⇒ JsonAccessor

Returns a new instance of JsonAccessor.



4
5
6
7
8
9
# File 'lib/random_api/json_accessor.rb', line 4

def initialize(code, mutator)
  self.code = code
  self.access_methods = []
  self.mutator = mutator
  build
end

Instance Attribute Details

#access_methodsObject

Returns the value of attribute access_methods.



2
3
4
# File 'lib/random_api/json_accessor.rb', line 2

def access_methods
  @access_methods
end

#codeObject

Returns the value of attribute code.



2
3
4
# File 'lib/random_api/json_accessor.rb', line 2

def code
  @code
end

#mutatorObject

Returns the value of attribute mutator.



2
3
4
# File 'lib/random_api/json_accessor.rb', line 2

def mutator
  @mutator
end

Instance Method Details

#buildObject



19
20
21
22
23
24
25
26
27
28
# File 'lib/random_api/json_accessor.rb', line 19

def build
  keys = code.split(".")
  if keys.first == "$"
    access_methods << gen_root_access_lambda
    keys.shift
  end
  keys.each do |key|
    access_methods << gen_access_key_lambda(key)
  end
end

#call(json) ⇒ Object



30
31
32
33
34
35
36
# File 'lib/random_api/json_accessor.rb', line 30

def call(json)
  ret = json
  access_methods.each do |method|
    ret = method.(ret)
  end
  mutate(ret)
end

#gen_access_key_lambda(key) ⇒ Object



15
16
17
# File 'lib/random_api/json_accessor.rb', line 15

def gen_access_key_lambda(key)
  ->(json) { json[key] }
end

#gen_root_access_lambdaObject



11
12
13
# File 'lib/random_api/json_accessor.rb', line 11

def gen_root_access_lambda
  ->(json) { json }
end

#mutate(value) ⇒ Object



38
39
40
41
42
43
44
# File 'lib/random_api/json_accessor.rb', line 38

def mutate(value)
  unless mutator.nil?
    mutator.(value)
  else
    value
  end
end