fixjour 0.0.3 → 0.0.4

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.
@@ -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