tarvit-helpers 0.0.17 → 0.0.18

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: f05ecb11ce055643c43b40cc820e3c66f999374f
4
- data.tar.gz: d94035c4af11f06e9f0d16ad037cb8e09582d247
3
+ metadata.gz: 1e736059b1e4ba9be2a14c72da7181ed9ac8ff9a
4
+ data.tar.gz: 15a634622c8d7f8ffcd3912019d0868af0732f81
5
5
  SHA512:
6
- metadata.gz: 36b61567a2c03af8f0c6223d5f41fee45a3d447a23fe0b940bb57fa8ded14c868aa1fbc30a65e9f30e50f6a2296df22ab3dfdae121409fd65b3e68711321945a
7
- data.tar.gz: 45eb5df5f82f596c64d894d2016cf1e094bb64717c37b792b96d45d95fefb5b601c94ea7c7774494fd3604fefdd2eff4fe30c5c8962af7d4f2a858cf0b1e497a
6
+ metadata.gz: 3d0e930b2cd0cd563471183b86c6210243623557fabb09c8a36eebd286b6606562829804b439b3fb15fef62bd5715e5f42bbbaa638182c19f6d0b5b30120fd42
7
+ data.tar.gz: 27c9eceaa2616e5ac1288e353293d6961a3862aeda69210cea0bd87475d2f403873d9a7a6f0ada8352dbde46194cd602897d5639f7d5f158940231ca22f7e629
data/VERSION CHANGED
@@ -1 +1 @@
1
- 0.0.17
1
+ 0.0.18
@@ -12,4 +12,3 @@ module TarvitHelpers
12
12
  end
13
13
  end
14
14
  end
15
-
@@ -1,66 +1,48 @@
1
1
  module TarvitHelpers
2
2
  module HashPresenter
3
3
 
4
- class Custom < Cached
5
- attr_reader :_rules_holder
4
+ class Custom < WithRules
6
5
 
7
- def initialize(hash, levels=[], rules_holder=nil, &rules)
8
- super(hash, levels)
9
- @_rules_holder = rules_holder || _init_rules_holder
10
- _init_rules
11
- rules.call(_rules_holder) if rules
12
- end
13
-
14
- def _current_path(method_name)
15
- _levels + [ method_name ]
6
+ def _custom_hash
7
+ _rules_holder.rules.each_with_object(_hash.clone) do |rule, res|
8
+ _apply_rule(res, rule, rule.path.clone, [])
9
+ end
16
10
  end
17
11
 
18
12
  protected
19
13
 
20
- def _hash_value(method_name)
21
- value = super
22
- rule = _rules_holder.rule_for(_path(method_name))
23
- rule ? rule.value_transformer.call(value, self) : value
24
- end
14
+ def _apply_rule(node, rule, rule_path, current_path)
15
+ current_level = rule_path.shift
25
16
 
26
- def _new_level_presenter(value, method_name)
27
- self.class.new(value, _path(method_name), _rules_holder)
28
- end
17
+ if rule_path.empty?
18
+ _assign_value(node, rule, current_path, current_level) && return
19
+ end
29
20
 
30
- def _init_rules; end
21
+ current_node = node[current_level]
22
+ current_path << current_level
31
23
 
32
- def _init_rules_holder
33
- RulesHolder.new
24
+ if current_node.is_a?(Array)
25
+ current_node.each_with_index do |node_element, index|
26
+ _apply_rule(node_element, rule, rule_path.clone, (current_path + [ index ]))
27
+ end
28
+ else
29
+ _apply_rule(current_node, rule, rule_path.clone, current_path.clone)
30
+ end
34
31
  end
35
32
 
36
- def _accessor_method?(method_name)
37
- super(method_name) || _rules_holder.rules.map{|r| r.path.last }.include?(method_name)
33
+ def _assign_value(node, rule, current_path, current_level)
34
+ presenter = _path_presenter(current_path)
35
+ node[ current_level ] = rule.value_transformer.call(node[current_level], presenter)
38
36
  end
39
37
 
40
- alias_method :_rules, :_rules_holder
41
-
42
- class RulesHolder
43
- attr_reader :rules
44
-
45
- def initialize
46
- @rules = []
47
- end
48
-
49
- def when(path, &_transform_value)
50
- self.rules << Rule.new(path, _transform_value)
51
- end
52
-
53
- def rule_for(path)
54
- rules.find{|r| r.path == path }
38
+ def _path_presenter(path)
39
+ res = self
40
+ path.each do |level|
41
+ res = res.is_a?(Array) ? res[level] : res.send(level)
55
42
  end
43
+ res
56
44
  end
57
45
 
58
- class Rule
59
- attr_reader :path, :value_transformer
60
- def initialize(path, value_transformer)
61
- @path, @value_transformer = path, value_transformer
62
- end
63
- end
64
46
  end
65
47
  end
66
48
  end
@@ -0,0 +1,62 @@
1
+ module TarvitHelpers
2
+ module HashPresenter
3
+
4
+ class WithRules < Cached
5
+ attr_reader :_rules_holder
6
+
7
+ def initialize(hash, levels=[], rules_holder=nil, &rules)
8
+ super(hash, levels)
9
+ @_rules_holder = rules_holder || RulesHolder.new
10
+ _init_rules if _rules_holder.rules.empty?
11
+ rules.call(_rules_holder) if rules
12
+ end
13
+
14
+ def _current_path(method_name)
15
+ _levels + [ method_name ]
16
+ end
17
+
18
+ protected
19
+
20
+ def _hash_value(method_name)
21
+ value = super
22
+ rule = _rules_holder.rule_for(_path(method_name))
23
+ rule ? rule.value_transformer.call(value, self) : value
24
+ end
25
+
26
+ def _new_level_presenter(value, method_name)
27
+ self.class.new(value, _path(method_name), _rules_holder)
28
+ end
29
+
30
+ def _init_rules; end
31
+
32
+ def _accessor_method?(method_name)
33
+ super(method_name) || _rules_holder.rules.map{|r| r.path.last }.include?(method_name)
34
+ end
35
+
36
+ alias_method :_rules, :_rules_holder
37
+
38
+ class RulesHolder
39
+ attr_reader :rules
40
+
41
+ def initialize
42
+ @rules = []
43
+ end
44
+
45
+ def when(path, &_transform_value)
46
+ self.rules << Rule.new(path, _transform_value)
47
+ end
48
+
49
+ def rule_for(path)
50
+ rules.find{|r| r.path == path }
51
+ end
52
+ end
53
+
54
+ class Rule
55
+ attr_reader :path, :value_transformer
56
+ def initialize(path, value_transformer)
57
+ @path, @value_transformer = path, value_transformer
58
+ end
59
+ end
60
+ end
61
+ end
62
+ end
@@ -3,6 +3,7 @@ module TarvitHelpers
3
3
  require_relative '../modules/hash_presenter/simple_hash_presenter'
4
4
  require_relative '../modules/hash_presenter/cached_hash_presenter'
5
5
  require_relative '../modules/hash_presenter/observable_hash_presenter'
6
+ require_relative '../modules/hash_presenter/with_rules_hash_presenter'
6
7
  require_relative '../modules/hash_presenter/custom_hash_presenter'
7
8
 
8
9
  def self.present(hash, option = :cached )
@@ -148,7 +148,7 @@ describe HashPresenter::Custom do
148
148
 
149
149
  rules.when([ :user, :age ]){|age| age.to_i }
150
150
  rules.when([ :user, :posts, :title ]){|title| title.capitalize }
151
- rules.when([ :user,:address ]){|list| list.join(?/) }
151
+ rules.when([ :user, :address ]){|list| list.join(?/) }
152
152
  end
153
153
 
154
154
  expect(presenter.user.date).to eq(Date.new(2015, 11, 11))
@@ -227,8 +227,21 @@ describe HashPresenter::Custom do
227
227
  expect(account.collections[0].folder).to eq('folders/TestCollection')
228
228
  expect(account.collections[1].name).to eq('BestCollection')
229
229
  expect(account.collections[1].folder).to eq('folders/BestCollection')
230
- end
231
230
 
231
+ expect(@presenter._custom_hash).to eq({
232
+ :accounts => [
233
+ {
234
+ :id=>1,
235
+ :name=>'director',
236
+ :collections=>[
237
+ {:id=>42, :name=>'TestCollection', :folder=>'folders/TestCollection'},
238
+ {:id=>24, :name=>'BestCollection', :folder=>'folders/BestCollection'},
239
+ ],
240
+ :website=>'www.johndoe.com/director'
241
+ }
242
+ ]
243
+ })
244
+ end
232
245
  end
233
246
  end
234
247
  end
@@ -2,16 +2,16 @@
2
2
  # DO NOT EDIT THIS FILE DIRECTLY
3
3
  # Instead, edit Jeweler::Tasks in Rakefile, and run 'rake gemspec'
4
4
  # -*- encoding: utf-8 -*-
5
- # stub: tarvit-helpers 0.0.17 ruby lib
5
+ # stub: tarvit-helpers 0.0.18 ruby lib
6
6
 
7
7
  Gem::Specification.new do |s|
8
8
  s.name = "tarvit-helpers"
9
- s.version = "0.0.17"
9
+ s.version = "0.0.18"
10
10
 
11
11
  s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
12
12
  s.require_paths = ["lib"]
13
13
  s.authors = ["Vitaly Tarasenko"]
14
- s.date = "2015-10-26"
14
+ s.date = "2015-10-27"
15
15
  s.description = " Simple extensions to standard Ruby classes and useful helpers. "
16
16
  s.email = "vetal.tarasenko@gmail.com"
17
17
  s.extra_rdoc_files = [
@@ -34,6 +34,7 @@ Gem::Specification.new do |s|
34
34
  "lib/tarvit-helpers/modules/hash_presenter/custom_hash_presenter.rb",
35
35
  "lib/tarvit-helpers/modules/hash_presenter/observable_hash_presenter.rb",
36
36
  "lib/tarvit-helpers/modules/hash_presenter/simple_hash_presenter.rb",
37
+ "lib/tarvit-helpers/modules/hash_presenter/with_rules_hash_presenter.rb",
37
38
  "lib/tarvit-helpers/modules/non_shared_accessors.rb",
38
39
  "lib/tarvit-helpers/modules/recursive_loader.rb",
39
40
  "lib/tarvit-helpers/modules/simple_crypt.rb",
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: tarvit-helpers
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.17
4
+ version: 0.0.18
5
5
  platform: ruby
6
6
  authors:
7
7
  - Vitaly Tarasenko
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2015-10-26 00:00:00.000000000 Z
11
+ date: 2015-10-27 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: activesupport
@@ -117,6 +117,7 @@ files:
117
117
  - lib/tarvit-helpers/modules/hash_presenter/custom_hash_presenter.rb
118
118
  - lib/tarvit-helpers/modules/hash_presenter/observable_hash_presenter.rb
119
119
  - lib/tarvit-helpers/modules/hash_presenter/simple_hash_presenter.rb
120
+ - lib/tarvit-helpers/modules/hash_presenter/with_rules_hash_presenter.rb
120
121
  - lib/tarvit-helpers/modules/non_shared_accessors.rb
121
122
  - lib/tarvit-helpers/modules/recursive_loader.rb
122
123
  - lib/tarvit-helpers/modules/simple_crypt.rb