looksist 0.0.4 → 0.0.5

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
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