looksist 0.2.8 → 0.2.9

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: af0970edfde1eaaedf7ff9dfeb7618e1c815beb9
4
- data.tar.gz: 6a05e43560a57b6cbc150bb59b149f02316fd923
3
+ metadata.gz: a94198209689c7f7d3ab46c70ea437e34aa94ec9
4
+ data.tar.gz: 371c038b94dcf344047530fcebb5dbc0ea06851c
5
5
  SHA512:
6
- metadata.gz: 5ce3783053136540929bc910c84b51c6e0fa00f0aa448e2fc1b88449863096f3cba725e43e58b9ee804600dd59c2ab11b653d8757431ffe84b396c799ab35573
7
- data.tar.gz: feb2a4bb3cb516f7b34d95c4d474011fb5636cceae2fa32013948b0e72a3c764200cf1bd69a52fc3752c9be86448835086cd344dfd0a0d85fb5e36e39a52dc34
6
+ metadata.gz: f8adf4a7ba0580561c474dac05c47bbd4b31bc9f7567f26a8ed88a94b002af699b3b989957bf0ea550f6fe7fd16445dfff331da2793f6e10d78f9d04b48e3366
7
+ data.tar.gz: 5bb2d70eea93254ece6a6c9ebf890f19bc19195c3836f44a5f5134412f319e0ad42ee4f62b1c4f374a5abc84e79526b7953c980d4fab63f374fcd7753e5db3b5
@@ -27,4 +27,18 @@ Feature: Enrich hashes
27
27
  Then I should see the following "item name" enriched for each sub hash at "$.table.menu"
28
28
  | value |
29
29
  | Idly |
30
- | Pongal |
30
+ | Pongal |
31
+
32
+ @array_of_hashes
33
+ Scenario: I should be able to enrich an array of hashes
34
+ Given I have the following keys setup in Redis
35
+ | key | value |
36
+ | items/1 | Idly |
37
+ | items/2 | Pongal |
38
+ | items/3 | Off Menu |
39
+ When I ask ArrayOfHash for menu
40
+ Then I should see the following "item name" in all the hashes
41
+ | value |
42
+ | Idly |
43
+ | Pongal |
44
+ | Off Menu |
@@ -0,0 +1,16 @@
1
+ class ArrayOfHash
2
+ include Looksist
3
+
4
+ def menu
5
+ [{
6
+ item_id: 1
7
+ }, {
8
+ item_id: 2
9
+ }, {
10
+ item_id: 3
11
+ }
12
+ ]
13
+ end
14
+
15
+ inject after: :menu, at: '$', using: :item_id, populate: :item_name
16
+ end
@@ -1,4 +1,4 @@
1
- When(/^I ask (DeepHash|Menu) for (metrics|menu)$/) do |lookup_service, method|
1
+ When(/^I ask (DeepHash|Menu|ArrayOfHash) for (metrics|menu)$/) do |lookup_service, method|
2
2
  @enriched_hash = Object.const_get(lookup_service.classify).new.send(method)
3
3
  end
4
4
 
@@ -11,4 +11,15 @@ end
11
11
 
12
12
  Then(/^I should see the following "([^"]*)" enriched for each sub hash at "([^"]*)"$/) do |name, jsonpath, table|
13
13
  expect(JsonPath.new(jsonpath).on(@enriched_hash.with_indifferent_access).first.collect { |i| i[name.parameterize.underscore.to_sym] }).to eq(table.hashes.collect { |i| i[:value] })
14
+ end
15
+
16
+
17
+ Then(/^I should see the following "([^"]*)" in all the hashes$/) do |name, table|
18
+ expected_names = table.hashes.collect { |row| row[:value] }
19
+ method_name = "#{name.parameterize.underscore.singularize}"
20
+ actual_names = @enriched_hash.collect do |elt|
21
+ elt.with_indifferent_access["#{method_name}"]
22
+ end
23
+ expect(actual_names).to eq(expected_names)
24
+
14
25
  end
@@ -19,7 +19,7 @@ module Looksist
19
19
  hash = send("#{after}_without_inject".to_sym, *args)
20
20
  self.class.instance_variable_get(:@rules)[after].each do |opts|
21
21
  if opts[:at].is_a? String
22
- hash = update_using_json_path(hash, opts).to_hash.deep_symbolize_keys
22
+ hash = update_using_json_path(hash, opts)
23
23
  else
24
24
  inject_attributes_at(hash[opts[:at]], opts)
25
25
  end
@@ -50,12 +50,17 @@ module Looksist
50
50
  end
51
51
 
52
52
  def update_using_json_path(hash, opts)
53
- JsonPath.for(hash.with_indifferent_access).gsub!(opts[:at]) do |i|
54
- i.is_a?(Array) ? inject_attributes_for(i, opts) : inject_attributes_at(i, opts) unless i.empty?
55
- i
53
+ if hash.is_a?(Hash)
54
+ JsonPath.for(hash.with_indifferent_access).gsub!(opts[:at]) do |i|
55
+ i.is_a?(Array) ? inject_attributes_for(i, opts) : inject_attributes_at(i, opts) unless (i.nil? or i.empty?)
56
+ i
57
+ end.to_hash.deep_symbolize_keys
58
+ else
59
+ inject_attributes_for(hash, opts)
56
60
  end
57
61
  end
58
62
 
63
+
59
64
  def inject_attributes_for(arry_of_hashes, opts)
60
65
  entity_name = __entity__(opts[:bucket_name] || opts[:using])
61
66
  keys = (arry_of_hashes.collect { |i| i[opts[:using]] }).compact.uniq
@@ -1,3 +1,3 @@
1
1
  module Lookist
2
- VERSION = '0.2.8'
2
+ VERSION = '0.2.9'
3
3
  end
@@ -49,6 +49,7 @@ describe Looksist::Hashed do
49
49
  })
50
50
  end
51
51
 
52
+
52
53
  it 'should be capable to deep lookup and inject from custom bucket' do
53
54
  class CustomizedMenu
54
55
  include Looksist
@@ -370,5 +371,37 @@ describe Looksist::Hashed do
370
371
  }
371
372
  }})
372
373
  end
374
+
375
+ it 'should work for array of hashes' do
376
+ class ArrayOfHashes
377
+ include Looksist
378
+
379
+ def metrics
380
+ [
381
+ {
382
+ item_id: 1
383
+ },
384
+ {
385
+ item_id: 2
386
+ }
387
+ ]
388
+ end
389
+
390
+ inject after: :metrics, at: '$', using: :item_id, populate: :item_name
391
+ end
392
+
393
+ expect(@mock).to receive(:mget).once.with(*%w(items/1 items/2)).and_return(%w(Idly Pongal))
394
+
395
+ expect(ArrayOfHashes.new.metrics).to eq(
396
+ [{
397
+ item_id: 1,
398
+ item_name: 'Idly'
399
+ },
400
+ {
401
+ item_id: 2,
402
+ item_name: 'Pongal'
403
+ }]
404
+ )
405
+ end
373
406
  end
374
407
  end
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.2.8
4
+ version: 0.2.9
5
5
  platform: ruby
6
6
  authors:
7
7
  - RC
@@ -198,6 +198,7 @@ files:
198
198
  - Rakefile
199
199
  - features/bucket_lookup.feature
200
200
  - features/hash_lookup.feature
201
+ - features/hash_services/array_of_hash.rb
201
202
  - features/hash_services/deep_hash.rb
202
203
  - features/hash_services/menu.rb
203
204
  - features/model_lookup.feature
@@ -246,6 +247,7 @@ summary: Redis backed lookup for your models
246
247
  test_files:
247
248
  - features/bucket_lookup.feature
248
249
  - features/hash_lookup.feature
250
+ - features/hash_services/array_of_hash.rb
249
251
  - features/hash_services/deep_hash.rb
250
252
  - features/hash_services/menu.rb
251
253
  - features/model_lookup.feature