ruby-features 1.2.0 → 1.2.1
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/ruby-features/concern/apply_to.rb +24 -19
- data/lib/ruby-features/version.rb +1 -1
- data/spec/conditions_spec.rb +1 -1
- data/spec/define_spec.rb +19 -7
- metadata +1 -1
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: a3632d4e9a9c9f523e3c5279507d817125afd3b3
|
4
|
+
data.tar.gz: 96790e0dd4cc23a527c790490c328643cb0eb1ca
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: d8826d60283b8688f51d71277fb105f0d3258e4714f64296247ef460e88208a826a4192baab2597c5cf88875930c83ab64e63cd8cd77316af1ac8d16de017433
|
7
|
+
data.tar.gz: 20aa851febfc4ce36ffb7b97c1436f9afb9b6a6ba98a13562250895c8a525fa34b3cad6f2f7bf2792e3c296da8d0cc2d9203f10697442ae09426eb511910ee77
|
@@ -26,38 +26,43 @@ module RubyFeatures
|
|
26
26
|
end
|
27
27
|
|
28
28
|
def class_methods(asserts = {}, &block)
|
29
|
-
_methods('
|
29
|
+
_methods('AddClassMethods', asserts, block)
|
30
30
|
end
|
31
31
|
|
32
32
|
def instance_methods(asserts = {}, &block)
|
33
|
-
_methods('
|
33
|
+
_methods('AddInstanceMethods', asserts, block)
|
34
34
|
end
|
35
35
|
|
36
36
|
def rewrite_instance_methods(asserts = {}, &block)
|
37
|
-
_methods('
|
37
|
+
_methods('RewriteInstanceMethods', asserts, block)
|
38
38
|
end
|
39
39
|
|
40
40
|
def _apply_methods(target_class)
|
41
|
-
|
42
|
-
|
43
|
-
when /^Extend/ then [:extend, :methods, :exclusion]
|
44
|
-
when /^Include/ then [:include, :instance_methods, :exclusion]
|
45
|
-
when /^RewriteInstance/ then [:prepend, :instance_methods, :inclusion]
|
46
|
-
else raise ArgumentError.new("Wrong mixin constant: #{constant}")
|
47
|
-
end
|
41
|
+
target_class_methods = target_class.methods + target_class.private_methods
|
42
|
+
target_instance_methods = target_class.instance_methods + target_class.private_instance_methods
|
48
43
|
|
44
|
+
constants.each do |constant|
|
49
45
|
mixin = const_get(constant)
|
46
|
+
mixin_methods = mixin.instance_methods + mixin.private_instance_methods
|
50
47
|
|
51
|
-
case(
|
52
|
-
when
|
53
|
-
existing_methods =
|
54
|
-
raise NameError.new("Tried to
|
55
|
-
|
56
|
-
not_existing_methods = mixin.instance_methods - target_class.public_send(existing_methods_method)
|
57
|
-
raise NameError.new("Tried to #{mixin_method} not existing methods: #{not_existing_methods.inspect}") unless not_existing_methods.empty?
|
58
|
-
end
|
48
|
+
case(constant)
|
49
|
+
when /^AddClassMethods/
|
50
|
+
existing_methods = mixin_methods & target_class_methods
|
51
|
+
raise NameError.new("Tried to add already existing class methods: #{existing_methods.inspect}") unless existing_methods.empty?
|
52
|
+
target_class.send(:extend, mixin)
|
59
53
|
|
60
|
-
|
54
|
+
when /^AddInstanceMethods/
|
55
|
+
existing_methods = mixin_methods & target_instance_methods
|
56
|
+
raise NameError.new("Tried to add already existing instance methods: #{existing_methods.inspect}") unless existing_methods.empty?
|
57
|
+
target_class.send(:include, mixin)
|
58
|
+
|
59
|
+
when /^RewriteInstanceMethods/
|
60
|
+
not_existing_methods = mixin_methods - target_instance_methods
|
61
|
+
raise NameError.new("Tried to rewrite not existing instance methods: #{not_existing_methods.inspect}") unless not_existing_methods.empty?
|
62
|
+
target_class.send(:prepend, mixin)
|
63
|
+
|
64
|
+
else raise ArgumentError.new("Wrong mixin constant: #{constant}")
|
65
|
+
end
|
61
66
|
end
|
62
67
|
end
|
63
68
|
|
data/spec/conditions_spec.rb
CHANGED
@@ -54,7 +54,7 @@ describe RubyFeatures do
|
|
54
54
|
expect(subject).to_not respond_to(:boolean_false)
|
55
55
|
|
56
56
|
expect(subject.singleton_class.included_modules).to include(
|
57
|
-
RubyFeatures::Mixins::ConditionsTestFeature::ConditionsTestClass::
|
57
|
+
RubyFeatures::Mixins::ConditionsTestFeature::ConditionsTestClass::AddClassMethodsIfBooleanIsTrueAndStringIsString
|
58
58
|
)
|
59
59
|
end
|
60
60
|
|
data/spec/define_spec.rb
CHANGED
@@ -13,7 +13,7 @@ describe RubyFeatures::Concern::Feature do
|
|
13
13
|
|
14
14
|
|
15
15
|
expect(test_class.singleton_class.included_modules).to include(
|
16
|
-
RubyFeatures::Mixins::DefineTestModule::DefineTestClass::ClassMethodsFeature::DefineTestModule::DefineTestClass::
|
16
|
+
RubyFeatures::Mixins::DefineTestModule::DefineTestClass::ClassMethodsFeature::DefineTestModule::DefineTestClass::AddClassMethods
|
17
17
|
)
|
18
18
|
end
|
19
19
|
|
@@ -27,7 +27,7 @@ describe RubyFeatures::Concern::Feature do
|
|
27
27
|
}.to change{test_class.new.respond_to?(:test_instance_method)}.from(false).to(true)
|
28
28
|
|
29
29
|
expect(test_class.included_modules).to include(
|
30
|
-
RubyFeatures::Mixins::DefineTestModule::DefineTestClass::InstanceMethodsFeature::DefineTestModule::DefineTestClass::
|
30
|
+
RubyFeatures::Mixins::DefineTestModule::DefineTestClass::InstanceMethodsFeature::DefineTestModule::DefineTestClass::AddInstanceMethods
|
31
31
|
)
|
32
32
|
end
|
33
33
|
|
@@ -49,7 +49,7 @@ describe RubyFeatures::Concern::Feature do
|
|
49
49
|
}.to change{test_class.new.test_rewrite_instance_method}.from(2).to(6)
|
50
50
|
|
51
51
|
expect(test_class.included_modules).to include(
|
52
|
-
RubyFeatures::Mixins::DefineTestModule::DefineTestClass::RewriteInstanceMethodsFeature::DefineTestModule::DefineTestClass::
|
52
|
+
RubyFeatures::Mixins::DefineTestModule::DefineTestClass::RewriteInstanceMethodsFeature::DefineTestModule::DefineTestClass::RewriteInstanceMethods
|
53
53
|
)
|
54
54
|
end
|
55
55
|
|
@@ -71,30 +71,40 @@ describe RubyFeatures::Concern::Feature do
|
|
71
71
|
|
72
72
|
it 'should raise error if target already has feature class method' do
|
73
73
|
test_class.class_eval do
|
74
|
-
|
74
|
+
class << self
|
75
|
+
def existing_class_method; end
|
76
|
+
private
|
77
|
+
def existing_private_class_method; end
|
78
|
+
end
|
75
79
|
end
|
76
80
|
|
77
81
|
expect{
|
78
82
|
define_test_feature('existing_class_method') do
|
79
83
|
class_methods do
|
80
84
|
def existing_class_method; end
|
85
|
+
private
|
86
|
+
def existing_private_class_method; end
|
81
87
|
end
|
82
88
|
end.apply
|
83
|
-
}.to raise_error(/Tried to
|
89
|
+
}.to raise_error(/Tried to add already existing class methods: \[:existing_class_method, :existing_private_class_method\]/)
|
84
90
|
end
|
85
91
|
|
86
92
|
it 'should raise error if target already has feature instance method' do
|
87
93
|
test_class.class_eval do
|
88
94
|
def existing_instance_method; end
|
95
|
+
private
|
96
|
+
def existing_private_instance_method; end
|
89
97
|
end
|
90
98
|
|
91
99
|
expect{
|
92
100
|
define_test_feature('existing_instance_method') do
|
93
101
|
instance_methods do
|
94
102
|
def existing_instance_method; end
|
103
|
+
private
|
104
|
+
def existing_private_instance_method; end
|
95
105
|
end
|
96
106
|
end.apply
|
97
|
-
}.to raise_error(/Tried to
|
107
|
+
}.to raise_error(/Tried to add already existing instance methods: \[:existing_instance_method, :existing_private_instance_method\]/)
|
98
108
|
end
|
99
109
|
|
100
110
|
it 'should raise error if target has no feature rewrite instance method' do
|
@@ -102,9 +112,11 @@ describe RubyFeatures::Concern::Feature do
|
|
102
112
|
define_test_feature('not_existing_rewrite_instance_method') do
|
103
113
|
rewrite_instance_methods do
|
104
114
|
def not_existing_instance_method; end
|
115
|
+
private
|
116
|
+
def not_existing_private_instance_method; end
|
105
117
|
end
|
106
118
|
end.apply
|
107
|
-
}.to raise_error(/Tried to
|
119
|
+
}.to raise_error(/Tried to rewrite not existing instance methods: \[:not_existing_instance_method, :not_existing_private_instance_method\]/)
|
108
120
|
end
|
109
121
|
|
110
122
|
end
|