nakajima-fixjour 0.0.4 → 0.0.5
Sign up to get free protection for your applications and to get access to all the features.
- data/lib/fixjour/builders.rb +1 -10
- data/lib/fixjour/overrides_hash.rb +15 -0
- data/lib/fixjour/redundant_check.rb +36 -0
- data/lib/fixjour.rb +1 -0
- metadata +3 -1
data/lib/fixjour/builders.rb
CHANGED
@@ -54,8 +54,7 @@ module Fixjour
|
|
54
54
|
# Defines the new_* method
|
55
55
|
def define_new(name, &block)
|
56
56
|
define_method("new_#{name}") do |*args|
|
57
|
-
overrides = args.first || { }
|
58
|
-
overrides.extend(OverrideProcessing)
|
57
|
+
overrides = OverridesHash.new(args.first || { })
|
59
58
|
result = block.bind(self).call(overrides)
|
60
59
|
result
|
61
60
|
end
|
@@ -94,13 +93,5 @@ module Fixjour
|
|
94
93
|
klass.new
|
95
94
|
end
|
96
95
|
end
|
97
|
-
|
98
|
-
module OverrideProcessing
|
99
|
-
def process(key)
|
100
|
-
if value = delete(key)
|
101
|
-
yield value
|
102
|
-
end
|
103
|
-
end
|
104
|
-
end
|
105
96
|
end
|
106
97
|
end
|
@@ -0,0 +1,36 @@
|
|
1
|
+
module Fixjour
|
2
|
+
# Raised when a builder is defined for a class that already
|
3
|
+
# has one.
|
4
|
+
class RedundantBuilder < StandardError; end
|
5
|
+
|
6
|
+
def self.included(klass)
|
7
|
+
klass.extend(RedundancyChecker)
|
8
|
+
end
|
9
|
+
|
10
|
+
def self.builder_defined?(builder)
|
11
|
+
case builder
|
12
|
+
when Class then builders.include?(builders)
|
13
|
+
when String, Symbol then builders.map(&:name).include?(builder)
|
14
|
+
end
|
15
|
+
end
|
16
|
+
|
17
|
+
module RedundancyChecker
|
18
|
+
BUILDER_METHOD_PATTERN = /^(new|create|valid)_(\w+)(_attributes)?$/
|
19
|
+
|
20
|
+
def method_added(sym)
|
21
|
+
name = sym.to_s
|
22
|
+
|
23
|
+
if klass_name = get_klass_name(name)
|
24
|
+
if Fixjour.builder_defined?(klass_name)
|
25
|
+
raise RedundantBuilder.new("You already defined a builder for #{inspect}")
|
26
|
+
end
|
27
|
+
end
|
28
|
+
end
|
29
|
+
|
30
|
+
def get_klass_name(name)
|
31
|
+
if match = name.match(BUILDER_METHOD_PATTERN)
|
32
|
+
match[2].classify.gsub(/Attribute$/, '')
|
33
|
+
end
|
34
|
+
end
|
35
|
+
end
|
36
|
+
end
|
data/lib/fixjour.rb
CHANGED
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: nakajima-fixjour
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
4
|
+
version: 0.0.5
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Pat Nakajima
|
@@ -36,6 +36,8 @@ files:
|
|
36
36
|
- lib/fixjour/builders.rb
|
37
37
|
- lib/fixjour/errors.rb
|
38
38
|
- lib/fixjour/verify.rb
|
39
|
+
- lib/fixjour/redundant_check.rb
|
40
|
+
- lib/fixjour/overrides_hash.rb
|
39
41
|
- lib/fixjour.rb
|
40
42
|
has_rdoc: true
|
41
43
|
homepage: http://github.com/nakajima/fixjour
|