better_helpers 0.1.1 → 0.1.2
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/lib/better_helpers.rb +1 -1
- data/lib/better_helpers/base.rb +5 -1
- data/lib/better_helpers/hash_hierarchy_to_class.rb +39 -0
- data/lib/better_helpers/version.rb +1 -1
- data/spec/better_helpers/base_spec.rb +22 -0
- data/spec/better_helpers/hash_hierarchy_to_class_spec.rb +131 -0
- data/spec/fixtures/inside_module_helper.rb +12 -0
- metadata +6 -6
- data/lib/better_helpers/hash_to_object.rb +0 -28
- data/spec/better_helpers/hash_to_object_spec.rb +0 -36
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 59e0dcdc57a82caa0ac352e95c921c38cb5c1538
|
4
|
+
data.tar.gz: be6447d2ce60248ec87aebcef3eaf43fdb760f5e
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 6c2194c8a920d73f7dc3e045b14696903eabf754907e7670f6569e7cc51183266eb0d2d75b6a3f8b92734ec935864a1f632fa2065a96edc5a86816ae3279a253
|
7
|
+
data.tar.gz: 0adac9536f828fa06408acceb23e7bc3af7e3e540a34bc440daf63ca5ed8f7080ebc96d62538d78913b133a5c6f5bf324dc6fb8d8db539aeaf786c69e6d039ae
|
data/lib/better_helpers.rb
CHANGED
data/lib/better_helpers/base.rb
CHANGED
@@ -6,6 +6,10 @@ module BetterHelpers
|
|
6
6
|
end
|
7
7
|
|
8
8
|
module ClassMethods
|
9
|
+
def self.extended base
|
10
|
+
@@BetterHelpersMasterHelper ||= Class.new
|
11
|
+
end
|
12
|
+
|
9
13
|
def better_helpers namespace = nil, &block
|
10
14
|
helper_class = Class.new(&block)
|
11
15
|
helper_class.class_eval do
|
@@ -20,7 +24,7 @@ module BetterHelpers
|
|
20
24
|
name = names.shift
|
21
25
|
|
22
26
|
hash = NamespaceToHash.new(helper_class, names).perform
|
23
|
-
value =
|
27
|
+
value = HashHierarchyToClass.new(hash, @@BetterHelpersMasterHelper).apply
|
24
28
|
|
25
29
|
self.send(:define_method, name) { value }
|
26
30
|
end
|
@@ -0,0 +1,39 @@
|
|
1
|
+
module BetterHelpers
|
2
|
+
class HashHierarchyToClass
|
3
|
+
|
4
|
+
def initialize hash, parent_class
|
5
|
+
@hash = hash
|
6
|
+
@parent_class = parent_class
|
7
|
+
end
|
8
|
+
|
9
|
+
def apply
|
10
|
+
value = apply_to_class @hash, @parent_class.new
|
11
|
+
@hash.keys.first.nil? ? value : @parent_class.new
|
12
|
+
end
|
13
|
+
|
14
|
+
private
|
15
|
+
def apply_to_class obj, parent_obj
|
16
|
+
if obj.is_a? Hash
|
17
|
+
key = obj.keys.first
|
18
|
+
value = obj[key]
|
19
|
+
|
20
|
+
return value if key.nil?
|
21
|
+
|
22
|
+
if parent_obj.respond_to?(key)
|
23
|
+
apply_to_class value, parent_obj.send(key)
|
24
|
+
else
|
25
|
+
|
26
|
+
klass = Class.new
|
27
|
+
instance = klass.new
|
28
|
+
return_obj = apply_to_class value, instance
|
29
|
+
|
30
|
+
parent_obj.class.send(:define_method, key) { return_obj }
|
31
|
+
return parent_obj
|
32
|
+
end
|
33
|
+
end
|
34
|
+
|
35
|
+
obj
|
36
|
+
end
|
37
|
+
|
38
|
+
end
|
39
|
+
end
|
@@ -56,6 +56,28 @@ describe BetterHelpers::Base do
|
|
56
56
|
helpers.custom_helper.helper_method.should eql "test4"
|
57
57
|
end
|
58
58
|
end
|
59
|
+
|
60
|
+
context "for helpers sharing a module" do
|
61
|
+
let :helpers do
|
62
|
+
Module.new do
|
63
|
+
extend InsideModuleHelper::A::B
|
64
|
+
extend InsideModuleHelper::A::C
|
65
|
+
end
|
66
|
+
end
|
67
|
+
|
68
|
+
it "should include both helpers in the same module" do
|
69
|
+
helpers.should respond_to :inside_module_helper
|
70
|
+
helpers.inside_module_helper.should respond_to :a
|
71
|
+
helpers.inside_module_helper.a.should respond_to :b
|
72
|
+
helpers.inside_module_helper.a.should respond_to :c
|
73
|
+
|
74
|
+
helpers.inside_module_helper.a.b.should respond_to :helper_method
|
75
|
+
helpers.inside_module_helper.a.c.should respond_to :helper_method
|
76
|
+
|
77
|
+
helpers.inside_module_helper.a.b.helper_method.should eql "test3"
|
78
|
+
helpers.inside_module_helper.a.c.helper_method.should eql "test6"
|
79
|
+
end
|
80
|
+
end
|
59
81
|
end
|
60
82
|
|
61
83
|
end
|
@@ -0,0 +1,131 @@
|
|
1
|
+
require "spec_helper"
|
2
|
+
|
3
|
+
describe BetterHelpers::HashHierarchyToClass do
|
4
|
+
|
5
|
+
let :parent_class do
|
6
|
+
Class.new
|
7
|
+
end
|
8
|
+
|
9
|
+
let :hash do
|
10
|
+
{a: {b: {c: 1}}}
|
11
|
+
end
|
12
|
+
|
13
|
+
let :apply do
|
14
|
+
BetterHelpers::HashHierarchyToClass.new(hash, parent_class).apply
|
15
|
+
end
|
16
|
+
|
17
|
+
describe "when modifying the class" do
|
18
|
+
subject { parent_class.new }
|
19
|
+
|
20
|
+
context "for unique modules" do
|
21
|
+
before { apply }
|
22
|
+
|
23
|
+
it "should include the methods into the parent class" do
|
24
|
+
apply
|
25
|
+
subject.should respond_to :a
|
26
|
+
subject.should_not respond_to :b
|
27
|
+
subject.should_not respond_to :c
|
28
|
+
|
29
|
+
subject.a.should respond_to :b
|
30
|
+
subject.a.should_not respond_to :a
|
31
|
+
subject.a.should_not respond_to :c
|
32
|
+
|
33
|
+
subject.a.b.should respond_to :c
|
34
|
+
subject.a.b.should_not respond_to :a
|
35
|
+
subject.a.b.should_not respond_to :b
|
36
|
+
|
37
|
+
subject.a.b.c.should eql 1
|
38
|
+
end
|
39
|
+
|
40
|
+
it "should allow new instances with the same methods" do
|
41
|
+
apply
|
42
|
+
instance2 = parent_class.new
|
43
|
+
instance3 = parent_class.new
|
44
|
+
|
45
|
+
[instance2, instance3].each do |instance|
|
46
|
+
instance.should respond_to :a
|
47
|
+
instance.should_not respond_to :b
|
48
|
+
instance.should_not respond_to :c
|
49
|
+
|
50
|
+
instance.a.should respond_to :b
|
51
|
+
instance.a.should_not respond_to :a
|
52
|
+
instance.a.should_not respond_to :c
|
53
|
+
|
54
|
+
instance.a.b.should respond_to :c
|
55
|
+
instance.a.b.should_not respond_to :a
|
56
|
+
instance.a.b.should_not respond_to :b
|
57
|
+
|
58
|
+
instance.a.b.c.should eql 1
|
59
|
+
end
|
60
|
+
end
|
61
|
+
end
|
62
|
+
|
63
|
+
context "for different modules with the same parent" do
|
64
|
+
let :hash1 do
|
65
|
+
{a: {b: {d: 1}}}
|
66
|
+
end
|
67
|
+
|
68
|
+
let :hash2 do
|
69
|
+
{a: {c: {d: 2}}}
|
70
|
+
end
|
71
|
+
|
72
|
+
before do
|
73
|
+
BetterHelpers::HashHierarchyToClass.new(hash1, parent_class).apply
|
74
|
+
BetterHelpers::HashHierarchyToClass.new(hash2, parent_class).apply
|
75
|
+
end
|
76
|
+
|
77
|
+
it "should define the method in the parent class" do
|
78
|
+
subject.should respond_to :a
|
79
|
+
subject.should_not respond_to :b
|
80
|
+
subject.should_not respond_to :c
|
81
|
+
subject.should_not respond_to :d
|
82
|
+
|
83
|
+
subject.a.should respond_to :b
|
84
|
+
subject.a.should respond_to :c
|
85
|
+
subject.a.should_not respond_to :a
|
86
|
+
subject.a.should_not respond_to :d
|
87
|
+
|
88
|
+
subject.a.b.should respond_to :d
|
89
|
+
subject.a.b.should_not respond_to :a
|
90
|
+
subject.a.b.should_not respond_to :b
|
91
|
+
subject.a.b.should_not respond_to :c
|
92
|
+
|
93
|
+
subject.a.b.d.should eql 1
|
94
|
+
|
95
|
+
subject.a.c.should respond_to :d
|
96
|
+
subject.a.c.should_not respond_to :a
|
97
|
+
subject.a.c.should_not respond_to :b
|
98
|
+
subject.a.c.should_not respond_to :c
|
99
|
+
|
100
|
+
subject.a.c.d.should eql 2
|
101
|
+
end
|
102
|
+
end
|
103
|
+
end
|
104
|
+
|
105
|
+
describe "when returning value" do
|
106
|
+
subject { apply }
|
107
|
+
|
108
|
+
context "when key is nil" do
|
109
|
+
let :hash do
|
110
|
+
{nil => 1}
|
111
|
+
end
|
112
|
+
|
113
|
+
it "should return the value" do
|
114
|
+
subject.should eql 1
|
115
|
+
end
|
116
|
+
end
|
117
|
+
|
118
|
+
context "when exist some hierarchy" do
|
119
|
+
let :hash do
|
120
|
+
{a: {b: 1}}
|
121
|
+
end
|
122
|
+
|
123
|
+
it "should return an instance of a callable object" do
|
124
|
+
subject.should respond_to :a
|
125
|
+
subject.a.should respond_to :b
|
126
|
+
subject.a.b.should eql 1
|
127
|
+
end
|
128
|
+
end
|
129
|
+
end
|
130
|
+
|
131
|
+
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: better_helpers
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.1.
|
4
|
+
version: 0.1.2
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- tulios
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2014-
|
11
|
+
date: 2014-04-06 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: railties
|
@@ -86,11 +86,11 @@ files:
|
|
86
86
|
- better_helpers.gemspec
|
87
87
|
- lib/better_helpers.rb
|
88
88
|
- lib/better_helpers/base.rb
|
89
|
-
- lib/better_helpers/
|
89
|
+
- lib/better_helpers/hash_hierarchy_to_class.rb
|
90
90
|
- lib/better_helpers/namespace_to_hash.rb
|
91
91
|
- lib/better_helpers/version.rb
|
92
92
|
- spec/better_helpers/base_spec.rb
|
93
|
-
- spec/better_helpers/
|
93
|
+
- spec/better_helpers/hash_hierarchy_to_class_spec.rb
|
94
94
|
- spec/better_helpers/namespace_to_hash_spec.rb
|
95
95
|
- spec/fixtures/another_helper.rb
|
96
96
|
- spec/fixtures/inside_module_custom_helper.rb
|
@@ -117,13 +117,13 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
117
117
|
version: '0'
|
118
118
|
requirements: []
|
119
119
|
rubyforge_project:
|
120
|
-
rubygems_version: 2.
|
120
|
+
rubygems_version: 2.1.11
|
121
121
|
signing_key:
|
122
122
|
specification_version: 4
|
123
123
|
summary: It is a better way to organize and maintain your Rails helpers
|
124
124
|
test_files:
|
125
125
|
- spec/better_helpers/base_spec.rb
|
126
|
-
- spec/better_helpers/
|
126
|
+
- spec/better_helpers/hash_hierarchy_to_class_spec.rb
|
127
127
|
- spec/better_helpers/namespace_to_hash_spec.rb
|
128
128
|
- spec/fixtures/another_helper.rb
|
129
129
|
- spec/fixtures/inside_module_custom_helper.rb
|
@@ -1,28 +0,0 @@
|
|
1
|
-
module BetterHelpers
|
2
|
-
class HashToObject
|
3
|
-
def initialize obj
|
4
|
-
@obj = obj
|
5
|
-
end
|
6
|
-
|
7
|
-
def perform
|
8
|
-
generate_obj @obj
|
9
|
-
end
|
10
|
-
|
11
|
-
private
|
12
|
-
def generate_obj obj
|
13
|
-
if obj.is_a? Hash
|
14
|
-
key = obj.keys.first
|
15
|
-
value = obj[key]
|
16
|
-
|
17
|
-
return value if key.nil?
|
18
|
-
return_obj = generate_obj value
|
19
|
-
|
20
|
-
c = Class.new
|
21
|
-
c.send(:define_method, key) { return_obj }
|
22
|
-
return c.new
|
23
|
-
end
|
24
|
-
|
25
|
-
obj
|
26
|
-
end
|
27
|
-
end
|
28
|
-
end
|
@@ -1,36 +0,0 @@
|
|
1
|
-
require "spec_helper"
|
2
|
-
|
3
|
-
describe BetterHelpers::HashToObject do
|
4
|
-
|
5
|
-
let :hash do
|
6
|
-
{
|
7
|
-
a: {
|
8
|
-
b: {
|
9
|
-
c: 1
|
10
|
-
}
|
11
|
-
}
|
12
|
-
}
|
13
|
-
end
|
14
|
-
|
15
|
-
subject do
|
16
|
-
BetterHelpers::HashToObject.new(hash).perform
|
17
|
-
end
|
18
|
-
|
19
|
-
it "should generate nested objects following the hash structure" do
|
20
|
-
subject.should respond_to :a
|
21
|
-
subject.a.should respond_to :b
|
22
|
-
subject.a.b.should respond_to :c
|
23
|
-
subject.a.b.c.should eql 1
|
24
|
-
end
|
25
|
-
|
26
|
-
describe "when key is nil" do
|
27
|
-
let :hash do
|
28
|
-
{nil => 1}
|
29
|
-
end
|
30
|
-
|
31
|
-
it "should return the value" do
|
32
|
-
subject.should eql 1
|
33
|
-
end
|
34
|
-
end
|
35
|
-
|
36
|
-
end
|