superators 0.9.0 → 0.9.1

Sign up to get free protection for your applications and to get access to all the features.
@@ -13,7 +13,7 @@ module SuperatorMixin
13
13
  if respond_to_superator? sup
14
14
  __send__ superator_definition_name_for(sup), operand
15
15
  else
16
- raise NameError, "Superator #{sup} has not been defined on #{self.class}" unless superator_definition
16
+ raise NoMethodError, "Superator #{sup} has not been defined on #{self.class}"
17
17
  end
18
18
  end
19
19
 
@@ -29,7 +29,7 @@ module SuperatorMixin
29
29
 
30
30
  def superator(operator, &block)
31
31
  raise ArgumentError, "block not supplied" unless block_given?
32
- raise NameError, "Not a valid superator!" unless superator_valid?(operator)
32
+ raise ArgumentError, "Not a valid superator!" unless superator_valid?(operator)
33
33
 
34
34
  real_operator = real_operator_from_superator operator
35
35
 
@@ -46,7 +46,7 @@ module SuperatorMixin
46
46
  # When we get to the method defining, we have to know whether the superator had to be aliased
47
47
  # or if it's new entirely.
48
48
  define_method(real_operator) do |operand|
49
- if operand.kind_of? SuperatorFlag
49
+ if operand.kind_of?(SuperatorFlag) && operand.superator_queue.any?
50
50
  sup = operand.superator_queue.unshift(real_operator).join
51
51
  operand.superator_queue.clear
52
52
 
@@ -56,7 +56,7 @@ module SuperatorMixin
56
56
  if respond_to? alias_for_real_method
57
57
  __send__(alias_for_real_method, operand)
58
58
  else
59
- raise NameError, "undefined method #{real_operator} for #{operand.inspect}:#{operand.class}"
59
+ raise NoMethodError, "undefined method #{real_operator} for #{operand.inspect}:#{operand.class}"
60
60
  end
61
61
  end
62
62
  end
@@ -77,7 +77,7 @@ module SuperatorMixin
77
77
  end
78
78
  end
79
79
  else
80
- raise NameError, "undefined superator #{sup} for #{self.inspect}:#{self.class}"
80
+ raise NoMethodError, "undefined superator #{sup} for #{self.inspect}:#{self.class}"
81
81
  end
82
82
  end
83
83
  end
@@ -1,4 +1,4 @@
1
1
  class Superators
2
- MAJOR,MINOR,TINY = 0,9,0
2
+ MAJOR,MINOR,TINY = 0,9,1
3
3
  VERSION = [MAJOR,MINOR,TINY].join '.'
4
4
  end
@@ -54,6 +54,7 @@ describe "The 'superator' macro" do
54
54
  end.new
55
55
  lambda { victim << Object.new }.should throw_symbol(:original_method)
56
56
  lambda { victim <<~~ Object.new }.should throw_symbol(:superator)
57
+
57
58
  end
58
59
 
59
60
  # This one is going to be very difficult to implement. method_added() maybe?
@@ -67,6 +68,20 @@ describe "The 'superator' macro" do
67
68
  lambda { victim.new() <~~ Object.new }.should throw_symbol(:superator)
68
69
  end
69
70
 
71
+ it "should allow the 'real' operator to be called within the superator definition" do
72
+ victim = "Super"
73
+ class << victim
74
+ superator "++" do |operand|
75
+ upcase + operand.upcase
76
+ end
77
+ superator "-~+~-" do |operand|
78
+ self + operand
79
+ end
80
+ end
81
+ (victim ++ "ators").should == "SUPERATORS"
82
+ lambda { victim -~+~- "man" }.should_not raise_error
83
+ end
84
+
70
85
  end
71
86
 
72
87
  describe "Defined binary superators" do
@@ -99,6 +114,7 @@ describe "Defined binary superators" do
99
114
  end.new <--- Object.new
100
115
  end.should throw_symbol(:last)
101
116
  end
117
+
102
118
  end
103
119
 
104
120
  describe "The superator_send method" do
metadata CHANGED
@@ -3,8 +3,8 @@ rubygems_version: 0.9.4
3
3
  specification_version: 1
4
4
  name: superators
5
5
  version: !ruby/object:Gem::Version
6
- version: 0.9.0
7
- date: 2007-08-22 00:00:00 +01:00
6
+ version: 0.9.1
7
+ date: 2007-08-29 00:00:00 -07:00
8
8
  summary: Superators add new sexy operators to your Ruby objects.
9
9
  require_paths:
10
10
  - lib