tarvit-helpers 0.0.9 → 0.0.10
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.rb +2 -1
- data/lib/tarvit-helpers/modules/hash_presenter.rb +44 -0
- data/spec/modules/hash_presenter_spec.rb +32 -0
- data/spec/modules/non_shared_accessors_spec.rb +20 -20
- data/tarvit-helpers.gemspec +6 -4
- metadata +5 -3
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 047b0913876d901d412a7e7cc11216c66ebcf892
|
4
|
+
data.tar.gz: e8818a9f0f1bf8f0eff4f583760768e0b2311889
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 9ee9af47dc6705145a2b9cd5cf13eaa603506b64851e3afa92c2345b921153c9d893686444b26297b697df46c3cf58b621412c918a7e69042949945bf804a1c8
|
7
|
+
data.tar.gz: 800b7f04ca01b573eeb069ce030f649a7aa7a5728dc184c1d321da133172420869ce66ac012faa337307a2d2c1bb4375b45fc4185c5386c295bb19595f33c5c4
|
data/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
0.0.
|
1
|
+
0.0.10
|
data/lib/tarvit-helpers.rb
CHANGED
@@ -0,0 +1,44 @@
|
|
1
|
+
module TarvitHelpers
|
2
|
+
class HashPresenter
|
3
|
+
require 'active_support/core_ext/string'
|
4
|
+
|
5
|
+
attr_reader :hash
|
6
|
+
|
7
|
+
def initialize(hash)
|
8
|
+
@hash = prepare_keys(hash)
|
9
|
+
end
|
10
|
+
|
11
|
+
def method_missing(m, *args)
|
12
|
+
return value(m) if accessor_method?(m)
|
13
|
+
super
|
14
|
+
end
|
15
|
+
|
16
|
+
protected
|
17
|
+
|
18
|
+
def value(method_name)
|
19
|
+
res = @hash[method_name]
|
20
|
+
transform_value(res)
|
21
|
+
end
|
22
|
+
|
23
|
+
def transform_value(x)
|
24
|
+
return x.map{|x| transform_value(x) } if x.is_a?(Array)
|
25
|
+
x.is_a?(Hash) ? self.class.new(x) : x
|
26
|
+
end
|
27
|
+
|
28
|
+
def accessor_method?(method_name)
|
29
|
+
@hash.keys.include?(method_name)
|
30
|
+
end
|
31
|
+
|
32
|
+
def key_to_method(key)
|
33
|
+
key.to_s.gsub(/\s+/, ?_).underscore.to_sym
|
34
|
+
end
|
35
|
+
|
36
|
+
def prepare_keys(hash)
|
37
|
+
res = hash.map do |k ,v|
|
38
|
+
[ key_to_method(k), v ]
|
39
|
+
end
|
40
|
+
Hash[res]
|
41
|
+
end
|
42
|
+
|
43
|
+
end
|
44
|
+
end
|
@@ -0,0 +1,32 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe HashPresenter do
|
4
|
+
|
5
|
+
it 'should present a flat hash' do
|
6
|
+
hp = HashPresenter.new(a: 1, b: 2, 'c' => [ 3 ] )
|
7
|
+
expect(hp.a).to eq(1)
|
8
|
+
expect(hp.b).to eq(2)
|
9
|
+
expect(hp.c).to eq([ 3 ])
|
10
|
+
expect(->{ hp.d }).to raise_error(NoMethodError)
|
11
|
+
end
|
12
|
+
|
13
|
+
it 'should transform complex keys' do
|
14
|
+
hp = HashPresenter.new('A very big key' => :value)
|
15
|
+
expect(hp.a_very_big_key).to eq(:value)
|
16
|
+
end
|
17
|
+
|
18
|
+
it 'should present nested hashes' do
|
19
|
+
hp = HashPresenter.new(a: { b: 1, c: { d: 2 } })
|
20
|
+
expect(hp.a).to be_a(HashPresenter)
|
21
|
+
expect(hp.a.b).to eq(1)
|
22
|
+
expect(hp.a.c.d).to eq(2)
|
23
|
+
end
|
24
|
+
|
25
|
+
it 'should present arrays with hashes' do
|
26
|
+
hp = HashPresenter.new(a: [ { b: 1 }, { c: 2 }, 3 ])
|
27
|
+
expect(hp.a[0].b).to eq(1)
|
28
|
+
expect(hp.a[1].c).to eq(2)
|
29
|
+
expect(hp.a[2]).to eq(3)
|
30
|
+
end
|
31
|
+
|
32
|
+
end
|
@@ -5,52 +5,52 @@ describe NonSharedAccessors do
|
|
5
5
|
context 'Native Class Accessor in Ruby' do
|
6
6
|
|
7
7
|
it 'should explain native behavior (shared class variable)' do
|
8
|
-
class
|
8
|
+
class A1
|
9
9
|
cattr_accessor :value
|
10
10
|
end
|
11
11
|
|
12
|
-
class
|
12
|
+
class B1 < A1
|
13
13
|
|
14
14
|
end
|
15
15
|
|
16
|
-
expect(
|
17
|
-
expect(
|
16
|
+
expect(A1.value).to be_nil
|
17
|
+
expect(B1.value).to be_nil
|
18
18
|
|
19
|
-
|
19
|
+
A1.value = 2
|
20
20
|
|
21
|
-
expect(
|
22
|
-
expect(
|
21
|
+
expect(A1.value).to eq(2)
|
22
|
+
expect(B1.value).to eq(2)
|
23
23
|
|
24
|
-
|
24
|
+
B1.value = 3
|
25
25
|
|
26
|
-
expect(
|
27
|
-
expect(
|
26
|
+
expect(A1.value).to eq(3)
|
27
|
+
expect(B1.value).to eq(3)
|
28
28
|
end
|
29
29
|
end
|
30
30
|
|
31
31
|
it 'should behave as a separate accessor(separate class valiable)' do
|
32
32
|
|
33
|
-
class
|
33
|
+
class A2
|
34
34
|
include NonSharedAccessors
|
35
35
|
non_shared_cattr_accessor :value
|
36
36
|
end
|
37
37
|
|
38
|
-
class
|
38
|
+
class B2 < A2
|
39
39
|
|
40
40
|
end
|
41
41
|
|
42
|
-
expect(
|
43
|
-
expect(
|
42
|
+
expect(A2.value).to be_nil
|
43
|
+
expect(B2.value).to be_nil
|
44
44
|
|
45
|
-
|
45
|
+
A2.value = 2
|
46
46
|
|
47
|
-
expect(
|
48
|
-
expect(
|
47
|
+
expect(A2.value).to eq(2)
|
48
|
+
expect(B2.value).to eq(nil)
|
49
49
|
|
50
|
-
|
50
|
+
B2.value = 3
|
51
51
|
|
52
|
-
expect(
|
53
|
-
expect(
|
52
|
+
expect(A2.value).to eq(2)
|
53
|
+
expect(B2.value).to eq(3)
|
54
54
|
end
|
55
55
|
|
56
56
|
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.10 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.10"
|
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-
|
14
|
+
s.date = "2015-10-21"
|
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 = [
|
@@ -29,9 +29,11 @@ Gem::Specification.new do |s|
|
|
29
29
|
"lib/tarvit-helpers/extensions/colored_string.rb",
|
30
30
|
"lib/tarvit-helpers/extensions/counter.rb",
|
31
31
|
"lib/tarvit-helpers/modules/conditional_logger.rb",
|
32
|
+
"lib/tarvit-helpers/modules/hash_presenter.rb",
|
32
33
|
"lib/tarvit-helpers/modules/non_shared_accessors.rb",
|
33
34
|
"lib/tarvit-helpers/modules/simple_crypt.rb",
|
34
35
|
"spec/extensions/counter_spec.rb",
|
36
|
+
"spec/modules/hash_presenter_spec.rb",
|
35
37
|
"spec/modules/non_shared_accessors_spec.rb",
|
36
38
|
"spec/modules/simple_crypt_spec.rb",
|
37
39
|
"spec/spec_helper.rb",
|
@@ -39,7 +41,7 @@ Gem::Specification.new do |s|
|
|
39
41
|
]
|
40
42
|
s.homepage = "http://github.com/tarvit/tarvit-helpers"
|
41
43
|
s.licenses = ["MIT"]
|
42
|
-
s.rubygems_version = "2.
|
44
|
+
s.rubygems_version = "2.4.8"
|
43
45
|
s.summary = "Simple extensions to standard Ruby classes and useful helpers."
|
44
46
|
|
45
47
|
if s.respond_to? :specification_version then
|
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.10
|
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-
|
11
|
+
date: 2015-10-21 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: activesupport
|
@@ -112,9 +112,11 @@ files:
|
|
112
112
|
- lib/tarvit-helpers/extensions/colored_string.rb
|
113
113
|
- lib/tarvit-helpers/extensions/counter.rb
|
114
114
|
- lib/tarvit-helpers/modules/conditional_logger.rb
|
115
|
+
- lib/tarvit-helpers/modules/hash_presenter.rb
|
115
116
|
- lib/tarvit-helpers/modules/non_shared_accessors.rb
|
116
117
|
- lib/tarvit-helpers/modules/simple_crypt.rb
|
117
118
|
- spec/extensions/counter_spec.rb
|
119
|
+
- spec/modules/hash_presenter_spec.rb
|
118
120
|
- spec/modules/non_shared_accessors_spec.rb
|
119
121
|
- spec/modules/simple_crypt_spec.rb
|
120
122
|
- spec/spec_helper.rb
|
@@ -139,7 +141,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
139
141
|
version: '0'
|
140
142
|
requirements: []
|
141
143
|
rubyforge_project:
|
142
|
-
rubygems_version: 2.
|
144
|
+
rubygems_version: 2.4.8
|
143
145
|
signing_key:
|
144
146
|
specification_version: 4
|
145
147
|
summary: Simple extensions to standard Ruby classes and useful helpers.
|