looksist 0.2.9 → 0.2.10

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: a94198209689c7f7d3ab46c70ea437e34aa94ec9
4
- data.tar.gz: 371c038b94dcf344047530fcebb5dbc0ea06851c
3
+ metadata.gz: 357a6b9dc9b97cc730994ffefd01db24f4349afc
4
+ data.tar.gz: a13b5765b68bc304bb0ee08725d20ce3cc8411a9
5
5
  SHA512:
6
- metadata.gz: f8adf4a7ba0580561c474dac05c47bbd4b31bc9f7567f26a8ed88a94b002af699b3b989957bf0ea550f6fe7fd16445dfff331da2793f6e10d78f9d04b48e3366
7
- data.tar.gz: 5bb2d70eea93254ece6a6c9ebf890f19bc19195c3836f44a5f5134412f319e0ad42ee4f62b1c4f374a5abc84e79526b7953c980d4fab63f374fcd7753e5db3b5
6
+ metadata.gz: 84d35f48ca1af7fcba1ef5656f23cdf1cff8a389c46c95bcd709026b74a60307ebd00bf5f1d62f7d52c188f62758c72e25480b44e02a89ee6a460862d6846740
7
+ data.tar.gz: 68709cd5211aa716e5a22ac8f91cd35e45a3e2147107e4511f606d06725acd9d604b584d2821660e92af104cc4f5f9f19b3d07713184b4fba1153c7dd525c352
data/README.md CHANGED
@@ -83,6 +83,35 @@ lookup [:name, :age], using: :id, as: {name: 'nome'}
83
83
  ### With Plain Hashes
84
84
 
85
85
 
86
+ #### Array Of Hashes
87
+
88
+ ```ruby
89
+ it 'should inject single attribute into array of hashes' do
90
+ class HashService
91
+ include Looksist
92
+
93
+ def metrics
94
+ [
95
+ {
96
+ employee_id: 5
97
+ },
98
+ {
99
+ employer_id: 3
100
+ }
101
+ [
102
+ end
103
+
104
+ inject after: :metrics, at: '$',
105
+ using: :employee_id, populate: :employee_name
106
+ end
107
+ # Removed mock expectations, look at the tests for actuals
108
+ expect(HashService.new.metrics).to eq([{employeed_id: 5, employee_name: 'Emp 5'},{employeed_id: 3, employee_name: 'Emp 3'}])
109
+ end
110
+ end
111
+
112
+ ```
113
+
114
+
86
115
  #### Columnar Hashes
87
116
 
88
117
  * First Level look ups
@@ -45,7 +45,8 @@ module Looksist
45
45
  keys = hash_offset[opts[:using]]
46
46
  entity_name = __entity__(opts[:bucket_name] || opts[:using])
47
47
  values = Looksist.redis_service.send("#{entity_name}_for", keys)
48
- hash_offset[opts[:populate]] = values
48
+ alias_method = find_alias(opts, opts[:populate])
49
+ hash_offset[alias_method] = values
49
50
  hash_offset
50
51
  end
51
52
 
@@ -65,9 +66,29 @@ module Looksist
65
66
  entity_name = __entity__(opts[:bucket_name] || opts[:using])
66
67
  keys = (arry_of_hashes.collect { |i| i[opts[:using]] }).compact.uniq
67
68
  values = Hash[keys.zip(Looksist.redis_service.send("#{entity_name}_for", keys))]
69
+ opts[:populate].is_a?(Array) ? composite_attribute_lookup(arry_of_hashes, opts, values) : single_attribute_lookup(arry_of_hashes, opts, values)
70
+ end
71
+
72
+ def single_attribute_lookup(arry_of_hashes, opts, values)
68
73
  arry_of_hashes.each do |elt|
69
- elt[opts[:populate]] = values[elt[opts[:using]]]
74
+ alias_method = find_alias(opts, opts[:populate])
75
+ elt[alias_method] = values[elt[opts[:using]]]
70
76
  end
71
77
  end
78
+
79
+ def composite_attribute_lookup(arry_of_hashes, opts, values)
80
+ arry_of_hashes.each do |elt|
81
+ opts[:populate].each do |_key|
82
+ parsed_key = JSON.parse(values[elt[opts[:using]]]).deep_symbolize_keys
83
+ alias_method = find_alias(opts, _key)
84
+ elt[alias_method] = parsed_key[_key]
85
+ end
86
+ end
87
+ end
88
+
89
+ def find_alias(opts,what)
90
+ as_map = opts[:as]
91
+ (as_map and as_map.has_key?(what)) ? as_map[what].to_sym : what
92
+ end
72
93
  end
73
94
  end
@@ -1,3 +1,3 @@
1
1
  module Lookist
2
- VERSION = '0.2.9'
2
+ VERSION = '0.2.10'
3
3
  end
@@ -380,27 +380,56 @@ describe Looksist::Hashed do
380
380
  [
381
381
  {
382
382
  item_id: 1
383
- },
383
+ },
384
384
  {
385
385
  item_id: 2
386
- }
386
+ }
387
387
  ]
388
388
  end
389
389
 
390
- inject after: :metrics, at: '$', using: :item_id, populate: :item_name
390
+ inject after: :metrics, at: '$', using: :item_id, populate: :item_name, as: {item_name: 'dish_name'}
391
391
  end
392
392
 
393
393
  expect(@mock).to receive(:mget).once.with(*%w(items/1 items/2)).and_return(%w(Idly Pongal))
394
394
 
395
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
- }]
396
+ [{
397
+ item_id: 1,
398
+ dish_name: 'Idly'
399
+ },
400
+ {
401
+ item_id: 2,
402
+ dish_name: 'Pongal'
403
+ }]
404
+ )
405
+
406
+ end
407
+
408
+ it 'should work for multiple attributes' do
409
+ class HashWithMultipleAttributes
410
+ include Looksist
411
+
412
+ def metrics
413
+ [
414
+ {
415
+ hero_id: 1
416
+ },
417
+ {
418
+ hero_id: 2
419
+ }
420
+ ]
421
+ end
422
+
423
+ inject after: :metrics, at: '$', using: :hero_id, populate: [:name,:mnemonic], as: {name: 'hero_name', mnemonic: 'hero_mnemonic'}
424
+ end
425
+ js1 = {name: 'Rajini', mnemonic: 'SuperStart'}.to_json
426
+ js2 = {name: 'Kamal', mnemonic: 'Ulaganayagan'}.to_json
427
+ jsons = [js1,js2]
428
+ expect(@mock).to receive(:mget).once.with(*%w(heros/1 heros/2)).and_return(jsons)
429
+
430
+ expect(HashWithMultipleAttributes.new.metrics).to eq(
431
+ [{:hero_id=>1, :hero_name=>"Rajini", :hero_mnemonic=>"SuperStart"},
432
+ {:hero_id=>2, :hero_name=>"Kamal", :hero_mnemonic=>"Ulaganayagan"}]
404
433
  )
405
434
  end
406
435
  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.9
4
+ version: 0.2.10
5
5
  platform: ruby
6
6
  authors:
7
7
  - RC