looksist 0.0.4 → 0.0.5

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: b5a7bf0e877c516e9c5e5d3ab5592a3f7e2dbea3
4
- data.tar.gz: 16575e3d5b0a651e0ed801db1769f640d9401f75
3
+ metadata.gz: 030f8794b73dd763721680befd241cb03ec7accd
4
+ data.tar.gz: d2733173bbe4358c815292d6688f9b3a0e9605b4
5
5
  SHA512:
6
- metadata.gz: 5efb4ef3b7c9ce4d39c35b1e91d8ff61bb95b270fcb4582bb73f0df9d0388c317890086b0215aa9307127286ae16ff6e2080a15e0469b748712804d82eaf11d2
7
- data.tar.gz: ac6029d274ab7e31148abded157c583e39c6486c10dc7f53eed148e604c2497b501f756805bac912ecb394256a9daa704b523c8bdce804bb09d6d9d03ddb44a8
6
+ metadata.gz: c40ccf107034ee352a64e22da82c4c481b0b1bff0fec2ae856bc6a7386ec57ceb2d9d4ba608c9ac614fc7d957d79a150f4ab342f2c9738b064e4cd39277282c6
7
+ data.tar.gz: a56ca3e2de786acdf5189258ca5ae744b5b28456aecb2d0228c54e46c7bf4395d7d4883636cf06c98564e6d46a823e277a149ee6951cfacb6b61e32f0e5b5347
data/lib/looksist.rb CHANGED
@@ -1,4 +1,6 @@
1
1
  require 'looksist/version'
2
+ require 'jsonpath'
3
+ require 'json'
2
4
  require 'looksist/redis_service'
3
5
  require 'looksist/hashed'
4
6
  require 'looksist/her_collection'
@@ -1,3 +1,6 @@
1
+ require 'jsonpath'
2
+ require 'json'
3
+
1
4
  module Looksist
2
5
  module Hashed
3
6
  extend ActiveSupport::Concern
@@ -18,14 +21,16 @@ module Looksist
18
21
  define_method("#{opts[:after]}_with_inject") do |*args|
19
22
  hash = send("#{opts[:after]}_without_inject".to_sym, *args)
20
23
  self.class.instance_variable_get(:@rules)[opts[:after]].each do |opts|
21
- keys = hash[opts[:at]][opts[:using]]
22
- entity_name = entity(opts[:using])
23
- values = Hashed.redis_service.send("#{entity_name}_for", keys)
24
- hash[opts[:at]][opts[:populate]] = values
24
+ if opts[:at].is_a? String
25
+ hash = JsonPath.for(hash.with_indifferent_access).gsub(opts[:at]) do |i|
26
+ inject_attributes_at(i, opts)
27
+ end.to_hash.deep_symbolize_keys
28
+ else
29
+ inject_attributes_at(hash[opts[:at]], opts)
30
+ end
25
31
  end
26
32
  hash
27
33
  end
28
-
29
34
  alias_method_chain opts[:after], :inject
30
35
  end
31
36
  end
@@ -34,8 +39,17 @@ module Looksist
34
39
  base.class_attribute :rules
35
40
  end
36
41
 
42
+ private
37
43
  def entity(entity_id)
38
44
  entity_id.to_s.gsub('_id', '')
39
45
  end
46
+
47
+ def inject_attributes_at(hash_offset, opts)
48
+ keys = hash_offset[opts[:using]]
49
+ entity_name = entity(opts[:using])
50
+ values = Hashed.redis_service.send("#{entity_name}_for", keys)
51
+ hash_offset[opts[:populate]] = values
52
+ hash_offset
53
+ end
40
54
  end
41
55
  end
@@ -1,3 +1,3 @@
1
1
  module Lookist
2
- VERSION = '0.0.4'
2
+ VERSION = '0.0.5'
3
3
  end
data/looksist.gemspec CHANGED
@@ -28,5 +28,7 @@ Gem::Specification.new do |spec|
28
28
  spec.add_development_dependency 'faraday'
29
29
  spec.add_development_dependency 'faraday_middleware'
30
30
 
31
+ spec.add_runtime_dependency 'jsonpath', '~> 0.5.6'
32
+
31
33
 
32
34
  end
data/spec/hashed_spec.rb CHANGED
@@ -17,6 +17,34 @@ describe Looksist::Hashed do
17
17
 
18
18
 
19
19
  context 'inject ' do
20
+ it 'should be capable to deep lookup and inject' do
21
+ class DeepHash
22
+ include Looksist::Hashed
23
+
24
+ def metrics
25
+ {
26
+ table: {
27
+ inner_table: {
28
+ employee_id: [10, 20]
29
+ }
30
+ }
31
+ }
32
+ end
33
+
34
+ inject after: :metrics, at: '$.table.inner_table', using: :employee_id, populate: :employee_name
35
+ end
36
+
37
+ expect(@mock).to receive(:get).with('employees/10').and_return(OpenStruct.new(value: 'emp 1'))
38
+ expect(@mock).to receive(:get).with('employees/20').and_return(OpenStruct.new(value: 'emp 2'))
39
+
40
+ expect(DeepHash.new.metrics).to eq({table: {
41
+ inner_table: {
42
+ employee_id: [10, 20],
43
+ employee_name: ['emp 1', 'emp 2']
44
+ }
45
+ }})
46
+ end
47
+
20
48
  it 'should inject single attribute to an existing hash' do
21
49
  class HashService1
22
50
  include Looksist::Hashed
@@ -32,8 +60,8 @@ describe Looksist::Hashed do
32
60
  inject after: :metrics, at: :table, using: :employee_id, populate: :employee_name
33
61
  end
34
62
 
35
- expect(@mock).to receive(:get).with('employees/1').and_return(OpenStruct.new(value:'emp 1'))
36
- expect(@mock).to receive(:get).with('employees/2').and_return(OpenStruct.new(value:'emp 2'))
63
+ expect(@mock).to receive(:get).with('employees/1').and_return(OpenStruct.new(value: 'emp 1'))
64
+ expect(@mock).to receive(:get).with('employees/2').and_return(OpenStruct.new(value: 'emp 2'))
37
65
 
38
66
  expect(HashService1.new.metrics).to eq({table: {
39
67
  employee_id: [1, 2],
@@ -58,11 +86,11 @@ describe Looksist::Hashed do
58
86
  inject after: :metrics, at: :table, using: :employer_id, populate: :employer_name
59
87
  end
60
88
 
61
- expect(@mock).to receive(:get).with('employees/5').and_return(OpenStruct.new(value:'emp 5'))
62
- expect(@mock).to receive(:get).with('employees/6').and_return(OpenStruct.new(value:'emp 6'))
89
+ expect(@mock).to receive(:get).with('employees/5').and_return(OpenStruct.new(value: 'emp 5'))
90
+ expect(@mock).to receive(:get).with('employees/6').and_return(OpenStruct.new(value: 'emp 6'))
63
91
 
64
- expect(@mock).to receive(:get).with('employers/3').and_return(OpenStruct.new(value:'empr 3'))
65
- expect(@mock).to receive(:get).with('employers/4').and_return(OpenStruct.new(value:'empr 4'))
92
+ expect(@mock).to receive(:get).with('employers/3').and_return(OpenStruct.new(value: 'empr 3'))
93
+ expect(@mock).to receive(:get).with('employers/4').and_return(OpenStruct.new(value: 'empr 4'))
66
94
 
67
95
  expect(HashService.new.metrics).to eq({table: {
68
96
  employee_id: [5, 6],
@@ -99,11 +127,11 @@ describe Looksist::Hashed do
99
127
  inject after: :stock, at: :table, using: :dc_id, populate: :dc_name
100
128
  end
101
129
 
102
- expect(@mock).to receive(:get).with('shrinks/1').and_return(OpenStruct.new(value:'shrink 1'))
103
- expect(@mock).to receive(:get).with('shrinks/2').and_return(OpenStruct.new(value:'shrink 2'))
130
+ expect(@mock).to receive(:get).with('shrinks/1').and_return(OpenStruct.new(value: 'shrink 1'))
131
+ expect(@mock).to receive(:get).with('shrinks/2').and_return(OpenStruct.new(value: 'shrink 2'))
104
132
 
105
- expect(@mock).to receive(:get).with('dcs/7').and_return(OpenStruct.new(value:'dc 7'))
106
- expect(@mock).to receive(:get).with('dcs/8').and_return(OpenStruct.new(value:'dc 8'))
133
+ expect(@mock).to receive(:get).with('dcs/7').and_return(OpenStruct.new(value: 'dc 7'))
134
+ expect(@mock).to receive(:get).with('dcs/8').and_return(OpenStruct.new(value: 'dc 8'))
107
135
 
108
136
  hash_service_super = HashServiceSuper.new
109
137
  expect(hash_service_super.shrinkage).to eq({table: {
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: looksist
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.4
4
+ version: 0.0.5
5
5
  platform: ruby
6
6
  authors:
7
7
  - RC
@@ -9,7 +9,7 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2014-10-16 00:00:00.000000000 Z
12
+ date: 2014-10-17 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: bundler
@@ -137,6 +137,20 @@ dependencies:
137
137
  - - ">="
138
138
  - !ruby/object:Gem::Version
139
139
  version: '0'
140
+ - !ruby/object:Gem::Dependency
141
+ name: jsonpath
142
+ requirement: !ruby/object:Gem::Requirement
143
+ requirements:
144
+ - - "~>"
145
+ - !ruby/object:Gem::Version
146
+ version: 0.5.6
147
+ type: :runtime
148
+ prerelease: false
149
+ version_requirements: !ruby/object:Gem::Requirement
150
+ requirements:
151
+ - - "~>"
152
+ - !ruby/object:Gem::Version
153
+ version: 0.5.6
140
154
  description: Redis backed lookup for your her models
141
155
  email:
142
156
  - rmchandru@thoughtworks.com