remarkable 3.1.2 → 3.1.3

Sign up to get free protection for your applications and to get access to all the features.
data/CHANGELOG CHANGED
@@ -1,5 +1,7 @@
1
1
  # v3.1
2
2
 
3
+ * Remarkable.include_matchers! require just one argument [#80]
4
+
3
5
  * Pending groups show proper backtrace and run by default in execute mode [#49]
4
6
 
5
7
  * Added support to blocks configuration. All Remarkable matcher and macros can
@@ -9,7 +9,15 @@ module Remarkable
9
9
  # If the module to be included responds to :after_include, it's called with the
10
10
  # target as argument.
11
11
  #
12
- def self.include_matchers!(base, target)
12
+ def self.include_matchers!(base, target=nil)
13
+ if target.nil?
14
+ if rspec_defined?
15
+ target = Spec::Example::ExampleGroup
16
+ else
17
+ raise ArgumentError, "You haven't supplied the target to include_matchers! and RSpec is not loaded, so we cannot infer one."
18
+ end
19
+ end
20
+
13
21
  target.send :extend, Remarkable::Pending
14
22
  target.send :extend, Remarkable::Macros
15
23
 
@@ -23,5 +31,9 @@ module Remarkable
23
31
  if base.respond_to?(:after_include)
24
32
  base.after_include(target)
25
33
  end
34
+ end
35
+
36
+ def self.rspec_defined? #:nodoc:
37
+ defined?(Spec)
26
38
  end
27
39
  end
@@ -1,62 +1,66 @@
1
1
  module Remarkable
2
- module Pending
3
-
4
- # We cannot put the alias method in the module because it's a Ruby 1.8 bug
5
- # http://coderrr.wordpress.com/2008/03/28/alias_methodmodule-bug-in-ruby-18/
6
- #
7
- def self.extended(base) #:nodoc:
8
- class << base
9
- alias :it :example
10
- alias :specify :example
11
- end
12
- end
13
-
14
- # Adds a pending block to your specs.
15
- #
16
- # == Examples
17
- #
18
- # pending 'create manager resource' do
19
- # should_have_one :manager
20
- # should_validate_associated :manager
21
- # end
22
- #
23
- # By default, it executes the examples inside the pending block. So as soon
24
- # as you add the has_one :manager relationship to your model, your specs
25
- # will say that this was already fixed and there is no need to be treated
26
- # as pending. To disable this behavior, you can give :execute => false:
27
- #
28
- # pending 'create manager resource', :execute => false
2
+
3
+ module Pending
4
+
5
+ # We cannot put the alias method in the module because it's a Ruby 1.8 bug
6
+ # http://coderrr.wordpress.com/2008/03/28/alias_methodmodule-bug-in-ruby-18/
7
+ #
8
+ def self.extended(base) #:nodoc:
9
+ class << base
10
+ alias_method :example_without_pending, :example
11
+ alias_method :example, :example_with_pending
12
+ alias :it :example
13
+ alias :specify :example
14
+ end
15
+ end
16
+
17
+ # Adds a pending block to your specs.
18
+ #
19
+ # == Examples
20
+ #
21
+ # pending 'create manager resource' do
22
+ # should_have_one :manager
23
+ # should_validate_associated :manager
24
+ # end
25
+ #
26
+ # By default, it executes the examples inside the pending block. So as soon
27
+ # as you add the has_one :manager relationship to your model, your specs
28
+ # will say that this was already fixed and there is no need to be treated
29
+ # as pending. To disable this behavior, you can give :execute => false:
30
+ #
31
+ # pending 'create manager resource', :execute => false
29
32
  #
30
- def pending(*args, &block)
31
- options = { :execute => true }.merge(args.extract_options!)
32
-
33
- @_pending_group = true
34
- @_pending_group_description = args.first || "TODO"
35
- @_pending_group_execute = options.delete(:execute)
36
-
37
- self.instance_eval(&block)
38
-
39
- @_pending_group = false
40
- @_pending_group_description = nil
41
- @_pending_group_execute = nil
42
- end
43
-
44
- def example(description=nil, options={}, backtrace=nil, &implementation) #:nodoc:
45
- if block_given? && @_pending_group
46
- pending_caller = caller.detect{ |c| c !~ /method_missing'/ }
47
- pending_description = @_pending_group_description
48
-
49
- pending_block = if @_pending_group_execute
50
- proc{ pending(pending_description){ self.instance_eval(&implementation) } }
51
- else
52
- proc{ pending(pending_description) }
53
- end
54
-
55
- super(description, options, backtrace || pending_caller, &pending_block)
56
- else
57
- super(description, options, backtrace || caller(0)[1], &implementation)
58
- end
59
- end
33
+ def pending(*args, &block)
34
+ options = { :execute => true }.merge(args.extract_options!)
35
+
36
+ @_pending_group = true
37
+ @_pending_group_description = args.first || "TODO"
38
+ @_pending_group_execute = options.delete(:execute)
39
+
40
+ self.instance_eval(&block)
41
+
42
+ @_pending_group = false
43
+ @_pending_group_description = nil
44
+ @_pending_group_execute = nil
45
+ end
46
+
47
+ def example_with_pending(description=nil, options={}, backtrace=nil, &implementation) #:nodoc:
48
+ if block_given? && @_pending_group
49
+ pending_caller = caller.detect{ |c| c !~ /method_missing'/ }
50
+ pending_description = @_pending_group_description
51
+
52
+ pending_block = if @_pending_group_execute
53
+ proc{ pending(pending_description){ self.instance_eval(&implementation) } }
54
+ else
55
+ proc{ pending(pending_description) }
56
+ end
57
+
58
+ example_without_pending(description, options, backtrace || pending_caller, &pending_block)
59
+ else
60
+ example_without_pending(description, options, backtrace || caller(0)[1], &implementation)
61
+ end
62
+ end
60
63
 
61
64
  end
65
+
62
66
  end
@@ -1,3 +1,3 @@
1
1
  module Remarkable
2
- VERSION = '3.1.2' unless self.const_defined?('VERSION')
2
+ VERSION = '3.1.3' unless self.const_defined?('VERSION')
3
3
  end
data/spec/base_spec.rb CHANGED
@@ -38,5 +38,11 @@ describe Remarkable::Base do
38
38
  it 'should allow Macros and Matchers to be added to any class' do
39
39
  MatchersSandbox.new.should respond_to(:contain)
40
40
  end
41
-
41
+
42
+ it 'should raise an error if include matchers is called without target and rspec is not loaded' do
43
+ Remarkable.stub!(:rspec_defined?).and_return(false)
44
+ lambda {
45
+ Remarkable.include_matchers!(String)
46
+ }.should raise_error(ArgumentError, "You haven't supplied the target to include_matchers! and RSpec is not loaded, so we cannot infer one.")
47
+ end
42
48
  end
@@ -1,22 +1,23 @@
1
+ # encoding: utf-8
1
2
  require File.expand_path(File.dirname(__FILE__) + '/../spec_helper')
2
3
 
3
- describe Remarkable::DSL::Optionals do
4
-
4
+ describe Remarkable::DSL::Optionals do
5
+
5
6
  describe "without config blocks" do
6
-
7
+
7
8
  before(:each) do
8
9
  @matcher = Remarkable::Specs::Matchers::BeAPersonMatcher.new
9
- end
10
-
11
- describe "as optionals" do
10
+ end
11
+
12
+ describe "as optionals" do
12
13
  it "should allow optionals to be set" do
13
14
  @matcher.first_name('José')
14
15
  @matcher.options[:first_name].should == 'José'
15
16
 
16
17
  @matcher.last_name('Valim')
17
18
  @matcher.options[:last_name].should == 'Valim'
18
- end
19
-
19
+ end
20
+
20
21
  it "should allow defaults values" do
21
22
  @matcher.age
22
23
  @matcher.options[:age].should == 18
@@ -25,173 +26,173 @@ describe Remarkable::DSL::Optionals do
25
26
  it "should allow alias to be set" do
26
27
  @matcher.family_name('Valim')
27
28
  @matcher.options[:last_name].should == 'Valim'
28
- end
29
-
30
- it "should allow multiple options to be given" do
31
- @matcher.bands(:incubus, :foo_fighters)
32
- @matcher.options[:bands].should == [:incubus, :foo_fighters]
33
- end
34
-
35
- it "should allow multiple options to be appended once at a time" do
36
- @matcher.bands(:incubus)
37
- @matcher.bands(:foo_fighters)
38
- @matcher.options[:bands].should == [:incubus, :foo_fighters]
39
- end
40
-
41
- it "should allow blocks to given to options" do
42
- @matcher.builder {|i| i + 10 }
43
- @matcher.options[:builder].call(10).should == 20
44
-
45
- @matcher.builder proc{|i| i + 20 }
46
- @matcher.options[:builder].call(10).should == 30
47
- end
48
- end
49
-
50
- describe "as optionals=" do
29
+ end
30
+
31
+ it "should allow multiple options to be given" do
32
+ @matcher.bands(:incubus, :foo_fighters)
33
+ @matcher.options[:bands].should == [:incubus, :foo_fighters]
34
+ end
35
+
36
+ it "should allow multiple options to be appended once at a time" do
37
+ @matcher.bands(:incubus)
38
+ @matcher.bands(:foo_fighters)
39
+ @matcher.options[:bands].should == [:incubus, :foo_fighters]
40
+ end
41
+
42
+ it "should allow blocks to given to options" do
43
+ @matcher.builder {|i| i + 10 }
44
+ @matcher.options[:builder].call(10).should == 20
45
+
46
+ @matcher.builder proc{|i| i + 20 }
47
+ @matcher.options[:builder].call(10).should == 30
48
+ end
49
+ end
50
+
51
+ describe "as optionals=" do
51
52
  it "should allow optionals to be set" do
52
53
  @matcher.first_name = 'José'
53
54
  @matcher.options[:first_name].should == 'José'
54
55
 
55
56
  @matcher.last_name = 'Valim'
56
57
  @matcher.options[:last_name].should == 'Valim'
57
- end
58
-
58
+ end
59
+
59
60
  it "should allow alias to be set" do
60
61
  @matcher.family_name = 'Valim'
61
62
  @matcher.options[:last_name].should == 'Valim'
62
- end
63
-
64
- it "should allow multiple options to be given" do
65
- @matcher.bands = [ :incubus, :foo_fighters ]
66
- @matcher.options[:bands].should == [ :incubus, :foo_fighters ]
67
- end
68
-
69
- it "should overwrite previous options" do
70
- @matcher.bands = [ :incubus ]
71
- @matcher.bands = [ :foo_fighters ]
72
- @matcher.options[:bands].should == [:foo_fighters]
73
- end
74
-
75
- it "should allow blocks to given to options" do
76
- @matcher.builder = proc{|i| i + 20 }
77
- @matcher.options[:builder].call(10).should == 30
78
- end
79
- end
80
-
81
- end
82
-
63
+ end
64
+
65
+ it "should allow multiple options to be given" do
66
+ @matcher.bands = [ :incubus, :foo_fighters ]
67
+ @matcher.options[:bands].should == [ :incubus, :foo_fighters ]
68
+ end
69
+
70
+ it "should overwrite previous options" do
71
+ @matcher.bands = [ :incubus ]
72
+ @matcher.bands = [ :foo_fighters ]
73
+ @matcher.options[:bands].should == [:foo_fighters]
74
+ end
75
+
76
+ it "should allow blocks to given to options" do
77
+ @matcher.builder = proc{|i| i + 20 }
78
+ @matcher.options[:builder].call(10).should == 30
79
+ end
80
+ end
81
+
82
+ end
83
+
83
84
  describe "with config blocks" do
84
-
85
- def builder(*args, &block)
85
+
86
+ def builder(*args, &block)
86
87
  Remarkable::Specs::Matchers::BeAPersonMatcher.new(*args, &block)
87
- end
88
-
89
- describe "as optionals" do
90
- it "should allow optionals to be set" do
91
- matcher = builder do |m|
92
- m.first_name 'José'
93
- m.last_name 'Valim'
88
+ end
89
+
90
+ describe "as optionals" do
91
+ it "should allow optionals to be set" do
92
+ matcher = builder do |m|
93
+ m.first_name 'José'
94
+ m.last_name 'Valim'
94
95
  end
95
-
96
+
96
97
  matcher.options[:first_name].should == 'José'
97
98
  matcher.options[:last_name].should == 'Valim'
98
- end
99
-
100
- it "should allow defaults values" do
101
- matcher = builder do |m|
102
- m.age
103
- end
99
+ end
100
+
101
+ it "should allow defaults values" do
102
+ matcher = builder do |m|
103
+ m.age
104
+ end
104
105
 
105
106
  matcher.options[:age].should == 18
106
107
  end
107
108
 
108
- it "should allow alias to be set" do
109
- matcher = builder do |m|
110
- m.family_name 'Valim'
111
- end
109
+ it "should allow alias to be set" do
110
+ matcher = builder do |m|
111
+ m.family_name 'Valim'
112
+ end
112
113
 
113
114
  matcher.options[:last_name].should == 'Valim'
114
- end
115
-
116
- it "should allow multiple options to be given" do
117
- matcher = builder do |m|
118
- m.bands(:incubus, :foo_fighters)
119
- end
120
-
121
- matcher.options[:bands].should == [:incubus, :foo_fighters]
122
- end
123
-
124
- it "should allow multiple options to be appended once at a time" do
125
- matcher = builder do |m|
126
- m.bands(:incubus)
127
- m.bands(:foo_fighters)
128
- end
129
-
130
- matcher.options[:bands].should == [:incubus, :foo_fighters]
131
- end
132
-
133
- it "should allow blocks to given to options" do
134
- matcher = builder do |m|
135
- m.builder {|i| i + 10 }
136
- end
137
-
138
- matcher.options[:builder].call(10).should == 20
139
-
140
- matcher = builder do |m|
141
- m.builder proc {|i| i + 20 }
142
- end
143
-
144
- matcher.options[:builder].call(10).should == 30
145
- end
146
- end
147
-
148
- describe "as optionals=" do
115
+ end
116
+
117
+ it "should allow multiple options to be given" do
118
+ matcher = builder do |m|
119
+ m.bands(:incubus, :foo_fighters)
120
+ end
121
+
122
+ matcher.options[:bands].should == [:incubus, :foo_fighters]
123
+ end
124
+
125
+ it "should allow multiple options to be appended once at a time" do
126
+ matcher = builder do |m|
127
+ m.bands(:incubus)
128
+ m.bands(:foo_fighters)
129
+ end
130
+
131
+ matcher.options[:bands].should == [:incubus, :foo_fighters]
132
+ end
133
+
134
+ it "should allow blocks to given to options" do
135
+ matcher = builder do |m|
136
+ m.builder {|i| i + 10 }
137
+ end
138
+
139
+ matcher.options[:builder].call(10).should == 20
140
+
141
+ matcher = builder do |m|
142
+ m.builder proc {|i| i + 20 }
143
+ end
144
+
145
+ matcher.options[:builder].call(10).should == 30
146
+ end
147
+ end
148
+
149
+ describe "as optionals=" do
149
150
  it "should allow optionals to be set" do
150
- matcher = builder do |m|
151
- m.first_name = 'José'
152
- m.last_name = 'Valim'
151
+ matcher = builder do |m|
152
+ m.first_name = 'José'
153
+ m.last_name = 'Valim'
153
154
  end
154
-
155
+
155
156
  matcher.options[:first_name].should == 'José'
156
157
  matcher.options[:last_name].should == 'Valim'
157
- end
158
-
158
+ end
159
+
159
160
  it "should allow alias to be set" do
160
- matcher = builder do |m|
161
- m.family_name = 'Valim'
162
- end
161
+ matcher = builder do |m|
162
+ m.family_name = 'Valim'
163
+ end
163
164
 
164
165
  matcher.options[:last_name].should == 'Valim'
165
- end
166
-
167
- it "should allow multiple options to be given" do
168
- matcher = builder do |m|
169
- m.bands = [ :incubus, :foo_fighters ]
170
- end
171
-
172
- matcher.options[:bands].should == [ :incubus, :foo_fighters ]
173
- end
174
-
175
- it "should overwrite previous options" do
176
- matcher = builder do |m|
177
- m.bands = [ :incubus ]
178
- m.bands = [ :foo_fighters ]
179
- end
180
-
181
- matcher.options[:bands].should == [ :foo_fighters ]
182
- end
183
-
184
- it "should allow blocks to given to options" do
185
- matcher = builder do |m|
186
- m.builder = proc {|i| i + 20 }
187
- end
188
-
189
- matcher.options[:builder].call(10).should == 30
190
- end
191
- end
192
-
166
+ end
167
+
168
+ it "should allow multiple options to be given" do
169
+ matcher = builder do |m|
170
+ m.bands = [ :incubus, :foo_fighters ]
171
+ end
172
+
173
+ matcher.options[:bands].should == [ :incubus, :foo_fighters ]
174
+ end
175
+
176
+ it "should overwrite previous options" do
177
+ matcher = builder do |m|
178
+ m.bands = [ :incubus ]
179
+ m.bands = [ :foo_fighters ]
180
+ end
181
+
182
+ matcher.options[:bands].should == [ :foo_fighters ]
183
+ end
184
+
185
+ it "should allow blocks to given to options" do
186
+ matcher = builder do |m|
187
+ m.builder = proc {|i| i + 20 }
188
+ end
189
+
190
+ matcher.options[:builder].call(10).should == 30
191
+ end
192
+ end
193
+
193
194
  end
194
-
195
+
195
196
  describe "description" do
196
197
  it "should provide a description with optionals" do
197
198
  matcher = Remarkable::Specs::Matchers::SingleContainMatcher.new(1)
@@ -207,21 +208,21 @@ describe Remarkable::DSL::Optionals do
207
208
  matcher.description.should == 'contain 1 allowing nil and with blank equal true'
208
209
 
209
210
  matcher.allow_nil(false)
210
- matcher.description.should == 'contain 1 not allowing nil and with blank equal true'
211
- end
212
-
213
- it "should provide a sentence interpolation option to optionals" do
214
- matcher = Remarkable::Specs::Matchers::SingleContainMatcher.new(1)
211
+ matcher.description.should == 'contain 1 not allowing nil and with blank equal true'
212
+ end
213
+
214
+ it "should provide a sentence interpolation option to optionals" do
215
+ matcher = Remarkable::Specs::Matchers::SingleContainMatcher.new(1)
215
216
  matcher.values(1, 2, 3)
216
- matcher.description.should == 'contain 1 not checking for blank and values equal to 1, 2, and 3'
217
- end
218
-
219
- it "should inspect values in sentence interpolation options" do
220
- matcher = Remarkable::Specs::Matchers::SingleContainMatcher.new(1)
217
+ matcher.description.should == 'contain 1 not checking for blank and values equal to 1, 2, and 3'
218
+ end
219
+
220
+ it "should inspect values in sentence interpolation options" do
221
+ matcher = Remarkable::Specs::Matchers::SingleContainMatcher.new(1)
221
222
  matcher.values(:a, :b, :c)
222
- matcher.description.should == 'contain 1 not checking for blank and values equal to :a, :b, and :c'
223
- end
224
-
223
+ matcher.description.should == 'contain 1 not checking for blank and values equal to :a, :b, and :c'
224
+ end
225
+
225
226
  it "should provide a description with optionals through namespace lookup" do
226
227
  matcher = Remarkable::Specs::Matchers::CollectionContainMatcher.new(1)
227
228
  matcher.description.should == 'contain 1'
@@ -231,6 +232,6 @@ describe Remarkable::DSL::Optionals do
231
232
 
232
233
  matcher.allow_nil(false)
233
234
  matcher.description.should == 'contain 1 not allowing nil'
234
- end
235
+ end
235
236
  end
236
237
  end
@@ -1,3 +1,4 @@
1
+ # encoding: utf-8
1
2
  require File.expand_path(File.dirname(__FILE__) + '/spec_helper')
2
3
 
3
4
  describe Remarkable::Messages do
data/spec/spec_helper.rb CHANGED
@@ -1,7 +1,6 @@
1
1
  $TESTING=true
2
2
 
3
3
  require 'rubygems'
4
- require 'ruby-debug'
5
4
 
6
5
  dir = File.dirname(__FILE__)
7
6
  require File.join(dir, '..', 'lib', 'remarkable')
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: remarkable
3
3
  version: !ruby/object:Gem::Version
4
- version: 3.1.2
4
+ version: 3.1.3
5
5
  platform: ruby
6
6
  authors:
7
7
  - Carlos Brando
@@ -10,7 +10,7 @@ autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
12
 
13
- date: 2009-05-15 00:00:00 +02:00
13
+ date: 2009-05-28 00:00:00 +02:00
14
14
  default_executable:
15
15
  dependencies:
16
16
  - !ruby/object:Gem::Dependency