looksist 0.2.8 → 0.2.9

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: 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