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 +4 -4
- data/VERSION +1 -1
- data/lib/tarvit-helpers/modules/hash_presenter/cached_hash_presenter.rb +0 -1
- data/lib/tarvit-helpers/modules/hash_presenter/custom_hash_presenter.rb +27 -45
- data/lib/tarvit-helpers/modules/hash_presenter/with_rules_hash_presenter.rb +62 -0
- data/lib/tarvit-helpers/modules/hash_presenter.rb +1 -0
- data/spec/modules/hash_presenter_spec.rb +15 -2
- data/tarvit-helpers.gemspec +4 -3
- metadata +3 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 1e736059b1e4ba9be2a14c72da7181ed9ac8ff9a
|
4
|
+
data.tar.gz: 15a634622c8d7f8ffcd3912019d0868af0732f81
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 3d0e930b2cd0cd563471183b86c6210243623557fabb09c8a36eebd286b6606562829804b439b3fb15fef62bd5715e5f42bbbaa638182c19f6d0b5b30120fd42
|
7
|
+
data.tar.gz: 27c9eceaa2616e5ac1288e353293d6961a3862aeda69210cea0bd87475d2f403873d9a7a6f0ada8352dbde46194cd602897d5639f7d5f158940231ca22f7e629
|
data/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
0.0.
|
1
|
+
0.0.18
|
@@ -1,66 +1,48 @@
|
|
1
1
|
module TarvitHelpers
|
2
2
|
module HashPresenter
|
3
3
|
|
4
|
-
class Custom <
|
5
|
-
attr_reader :_rules_holder
|
4
|
+
class Custom < WithRules
|
6
5
|
|
7
|
-
def
|
8
|
-
|
9
|
-
|
10
|
-
|
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
|
21
|
-
|
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
|
-
|
27
|
-
|
28
|
-
|
17
|
+
if rule_path.empty?
|
18
|
+
_assign_value(node, rule, current_path, current_level) && return
|
19
|
+
end
|
29
20
|
|
30
|
-
|
21
|
+
current_node = node[current_level]
|
22
|
+
current_path << current_level
|
31
23
|
|
32
|
-
|
33
|
-
|
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
|
37
|
-
|
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
|
-
|
41
|
-
|
42
|
-
|
43
|
-
|
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
|
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
|
data/tarvit-helpers.gemspec
CHANGED
@@ -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.
|
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.
|
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-
|
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.
|
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-
|
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
|