fixjour 0.0.3 → 0.0.4

Sign up to get free protection for your applications and to get access to all the features.
@@ -55,6 +55,7 @@ module Fixjour
55
55
  def define_new(name, &block)
56
56
  define_method("new_#{name}") do |*args|
57
57
  overrides = args.first || { }
58
+ overrides.extend(OverrideProcessing)
58
59
  result = block.bind(self).call(overrides)
59
60
  result
60
61
  end
@@ -93,5 +94,13 @@ module Fixjour
93
94
  klass.new
94
95
  end
95
96
  end
97
+
98
+ module OverrideProcessing
99
+ def process(key)
100
+ if value = delete(key)
101
+ yield value
102
+ end
103
+ end
104
+ end
96
105
  end
97
106
  end
@@ -0,0 +1,31 @@
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)_([a-zA-Z0-9]+)(_attributes)?/
19
+
20
+ def method_added(sym)
21
+ name = sym.to_s
22
+
23
+ if match = name.match(BUILDER_METHOD_PATTERN)
24
+ klass_name = match[2].classify
25
+ if Fixjour.builder_defined?(klass_name)
26
+ raise RedundantBuilder.new("You already defined a builder for #{inspect}")
27
+ end
28
+ end
29
+ end
30
+ end
31
+ end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: fixjour
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.3
4
+ version: 0.0.4
5
5
  platform: ruby
6
6
  authors:
7
7
  - Pat Nakajima
@@ -37,6 +37,7 @@ files:
37
37
  - lib/fixjour/builders.rb
38
38
  - lib/fixjour/errors.rb
39
39
  - lib/fixjour/verify.rb
40
+ - lib/fixjour/redundant_check.rb
40
41
  - lib/fixjour.rb
41
42
  has_rdoc: true
42
43
  homepage: http://github.com/nakajima/fixjour