warp 1.2.3 → 1.3.0

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.
Files changed (42) hide show
  1. checksums.yaml +13 -5
  2. data/.travis.yml +0 -1
  3. data/CHANGELOG.md +6 -0
  4. data/Gemfile +4 -1
  5. data/README.md +10 -0
  6. data/gemfiles/rails_3.2_rspec_2.14.gemfile +3 -1
  7. data/gemfiles/rails_3.2_rspec_2.99.gemfile +3 -1
  8. data/gemfiles/rails_3.2_rspec_3.1.gemfile +3 -1
  9. data/gemfiles/rails_4.0_rspec_2.14.gemfile +3 -1
  10. data/gemfiles/rails_4.0_rspec_2.99.gemfile +3 -1
  11. data/gemfiles/rails_4.0_rspec_3.1.gemfile +3 -1
  12. data/gemfiles/rails_4.1_rspec_2.14.gemfile +3 -1
  13. data/gemfiles/rails_4.1_rspec_2.99.gemfile +3 -1
  14. data/gemfiles/rails_4.1_rspec_3.1.gemfile +3 -1
  15. data/gemfiles/rails_4.2.rc1_rspec_2.14.gemfile +3 -1
  16. data/gemfiles/rails_4.2.rc1_rspec_2.99.gemfile +3 -1
  17. data/gemfiles/rails_4.2.rc1_rspec_3.1.gemfile +3 -1
  18. data/lib/warp/action_matchers/create_matcher.rb +48 -0
  19. data/lib/warp/action_matchers/matcher.rb +11 -0
  20. data/lib/warp/action_matchers.rb +9 -0
  21. data/lib/warp/controller_matchers/assign_matcher.rb +2 -0
  22. data/lib/warp/controller_matchers/set_flash_matcher.rb +2 -0
  23. data/lib/warp/controller_matchers.rb +1 -1
  24. data/lib/warp/instrument.rb +81 -0
  25. data/lib/warp/matcher.rb +2 -0
  26. data/lib/warp/model_matchers/association_matcher.rb +2 -0
  27. data/lib/warp/model_matchers/attribute_matcher.rb +3 -1
  28. data/lib/warp/model_matchers/matcher.rb +2 -0
  29. data/lib/warp/model_matchers/validation_matcher.rb +2 -0
  30. data/lib/warp/model_matchers.rb +1 -3
  31. data/lib/warp/version.rb +2 -2
  32. data/lib/warp.rb +1 -4
  33. data/spec/spec_helper.rb +4 -1
  34. data/spec/support/model_helpers.rb +3 -1
  35. data/spec/warp/action_matchers/create_matcher_spec.rb +39 -0
  36. data/spec/warp/controller_matchers/assign_matcher_spec.rb +1 -1
  37. data/spec/warp/controller_matchers/set_flash_matcher_spec.rb +1 -1
  38. data/spec/warp/instrument_spec.rb +50 -0
  39. data/spec/warp/model_helpers/association_matcher_spec.rb +1 -1
  40. data/spec/warp/model_helpers/attribute_matcher_spec.rb +1 -1
  41. data/spec/warp/model_helpers/validation_matcher_spec.rb +1 -1
  42. metadata +19 -11
checksums.yaml CHANGED
@@ -1,7 +1,15 @@
1
1
  ---
2
- SHA1:
3
- metadata.gz: effa8ba349f121dcb6e51ef2eb1ff3f22e9b05bb
4
- data.tar.gz: ac4cee18df6a7b412bda6a1554017c51e76bcf7d
2
+ !binary "U0hBMQ==":
3
+ metadata.gz: !binary |-
4
+ NDliNWY1MmRlZmM1NjRlMDJhMzYwNWYxMTQ5NjAzNjY3MTM1NzBhYg==
5
+ data.tar.gz: !binary |-
6
+ YTMzNzFhMGE3YTcwYzRhNDcwY2Q1ZThmODE1NzFlOGQ2YjNjMDVmYQ==
5
7
  SHA512:
6
- metadata.gz: 0b82cd6436a54a0ff4a8d6562d60ff3158e55a048ea7dfa8dcac98fa6345546a00bbd7fccf0434a5591a519d81a18515bd60e8addb6a63ac7f7af9c21fba4635
7
- data.tar.gz: 8400d766af304265baf4bf3ab533ff1baf67f53aa5c95c45bad17be3be1acc622054c84af48c7e3afba40e1d9b2c30a30f27787cf22f512826e266a8679c87c7
8
+ metadata.gz: !binary |-
9
+ ZjgxODljNmI3MmY0MTZiYzViM2M5OWI3ZjY5NTkwM2JlYTY3YTY5MWVkZjg1
10
+ M2Y5ZGRkN2M5N2I0Nzg5ZTAwNjJlZjg4YjAxNjAwY2ZiYTZjMDk2MWQ5ZmE0
11
+ NDAwOTdiYjlkNDYyMWU4MjBlM2NhYzZiNDU3NmVhNTRlMmVmMjM=
12
+ data.tar.gz: !binary |-
13
+ ZDI5NGY0NGNmMWU2MmExMTE5MmUwZjYyZTFmYTUxMDkwYmFlMGM4NWI1OTMx
14
+ OWIzZjkwMjNkMjgzMWFhZTI5NmFhZDUxNWJlMzQ3OTEzNDk1NTUzOTJjNDk1
15
+ ZjFhN2RkOWVjNmE0ZWJlODY1MGQ4NmIzYjc1MGYxZWFhZDkyM2M=
data/.travis.yml CHANGED
@@ -7,7 +7,6 @@ env:
7
7
  rvm:
8
8
  - 1.9.3
9
9
  - 2.1.5
10
- - 2.0.0-preview2
11
10
 
12
11
  gemfile:
13
12
  - gemfiles/rails_3.2_rspec_2.14.gemfile
data/CHANGELOG.md CHANGED
@@ -1,3 +1,9 @@
1
+ - 1.2.3
2
+ - Now compatible with Rails 4.2.
3
+
4
+ - 1.2.2
5
+ - Fixed issue with model validation matchers failing when validation has configuration present.
6
+
1
7
  - 1.2.1
2
8
  - Altered model matchers to be more robust against non-ActiveRecord objects.
3
9
 
data/Gemfile CHANGED
@@ -11,8 +11,11 @@ gem "fuubar"
11
11
  gem "simplecov", require: false
12
12
  gem "coveralls", require: false
13
13
 
14
+ gem "activerecord-nulldb-adapter", require: false
15
+
14
16
  group :tools do
15
17
  gem "guard"
16
18
  gem "guard-rspec"
17
- gem "byebug"
19
+ gem "byebug", platform: [:ruby_20, :ruby_21]
20
+ gem "debugger", platform: :ruby_19
18
21
  end
data/README.md CHANGED
@@ -218,6 +218,16 @@ Ensures that a `validates_uniqueness_of` validator is present on the attribute.
218
218
  specify { expect(user).to validate_uniqueness_of(:email, scope: :company) }
219
219
  ```
220
220
 
221
+ ### Creation Matchers
222
+
223
+ #### creates
224
+
225
+ Ensures that a record is created.
226
+
227
+ ```ruby
228
+ specify { expect{post :create, params}.to create(Post) }
229
+ ```
230
+
221
231
  ## Contributing
222
232
 
223
233
  1. Fork it
@@ -8,6 +8,7 @@ gem "rake"
8
8
  gem "fuubar"
9
9
  gem "simplecov", :require => false
10
10
  gem "coveralls", :require => false
11
+ gem "activerecord-nulldb-adapter", :require => false
11
12
  gem "activesupport", "~> 3.2", :require => "active_support/all"
12
13
  gem "actionpack", "~> 3.2", :require => "action_controller"
13
14
  gem "activerecord", "~> 3.2", :require => "active_record"
@@ -16,7 +17,8 @@ gem "rspec", "~> 2.14"
16
17
  group :tools do
17
18
  gem "guard"
18
19
  gem "guard-rspec"
19
- gem "byebug"
20
+ gem "byebug", :platform => [:ruby_20, :ruby_21]
21
+ gem "debugger", :platform => :ruby_19
20
22
  end
21
23
 
22
24
  gemspec :path => "../"
@@ -8,6 +8,7 @@ gem "rake"
8
8
  gem "fuubar"
9
9
  gem "simplecov", :require => false
10
10
  gem "coveralls", :require => false
11
+ gem "activerecord-nulldb-adapter", :require => false
11
12
  gem "activesupport", "~> 3.2", :require => "active_support/all"
12
13
  gem "actionpack", "~> 3.2", :require => "action_controller"
13
14
  gem "activerecord", "~> 3.2", :require => "active_record"
@@ -16,7 +17,8 @@ gem "rspec", "~> 2.99"
16
17
  group :tools do
17
18
  gem "guard"
18
19
  gem "guard-rspec"
19
- gem "byebug"
20
+ gem "byebug", :platform => [:ruby_20, :ruby_21]
21
+ gem "debugger", :platform => :ruby_19
20
22
  end
21
23
 
22
24
  gemspec :path => "../"
@@ -8,6 +8,7 @@ gem "rake"
8
8
  gem "fuubar"
9
9
  gem "simplecov", :require => false
10
10
  gem "coveralls", :require => false
11
+ gem "activerecord-nulldb-adapter", :require => false
11
12
  gem "activesupport", "~> 3.2", :require => "active_support/all"
12
13
  gem "actionpack", "~> 3.2", :require => "action_controller"
13
14
  gem "activerecord", "~> 3.2", :require => "active_record"
@@ -16,7 +17,8 @@ gem "rspec", "~> 3.1"
16
17
  group :tools do
17
18
  gem "guard"
18
19
  gem "guard-rspec"
19
- gem "byebug"
20
+ gem "byebug", :platform => [:ruby_20, :ruby_21]
21
+ gem "debugger", :platform => :ruby_19
20
22
  end
21
23
 
22
24
  gemspec :path => "../"
@@ -8,6 +8,7 @@ gem "rake"
8
8
  gem "fuubar"
9
9
  gem "simplecov", :require => false
10
10
  gem "coveralls", :require => false
11
+ gem "activerecord-nulldb-adapter", :require => false
11
12
  gem "activesupport", "~> 4.0", :require => "active_support/all"
12
13
  gem "actionpack", "~> 4.0", :require => "action_controller"
13
14
  gem "activerecord", "~> 4.0", :require => "active_record"
@@ -16,7 +17,8 @@ gem "rspec", "~> 2.14"
16
17
  group :tools do
17
18
  gem "guard"
18
19
  gem "guard-rspec"
19
- gem "byebug"
20
+ gem "byebug", :platform => [:ruby_20, :ruby_21]
21
+ gem "debugger", :platform => :ruby_19
20
22
  end
21
23
 
22
24
  gemspec :path => "../"
@@ -8,6 +8,7 @@ gem "rake"
8
8
  gem "fuubar"
9
9
  gem "simplecov", :require => false
10
10
  gem "coveralls", :require => false
11
+ gem "activerecord-nulldb-adapter", :require => false
11
12
  gem "activesupport", "~> 4.0", :require => "active_support/all"
12
13
  gem "actionpack", "~> 4.0", :require => "action_controller"
13
14
  gem "activerecord", "~> 4.0", :require => "active_record"
@@ -16,7 +17,8 @@ gem "rspec", "~> 2.99"
16
17
  group :tools do
17
18
  gem "guard"
18
19
  gem "guard-rspec"
19
- gem "byebug"
20
+ gem "byebug", :platform => [:ruby_20, :ruby_21]
21
+ gem "debugger", :platform => :ruby_19
20
22
  end
21
23
 
22
24
  gemspec :path => "../"
@@ -8,6 +8,7 @@ gem "rake"
8
8
  gem "fuubar"
9
9
  gem "simplecov", :require => false
10
10
  gem "coveralls", :require => false
11
+ gem "activerecord-nulldb-adapter", :require => false
11
12
  gem "activesupport", "~> 4.0", :require => "active_support/all"
12
13
  gem "actionpack", "~> 4.0", :require => "action_controller"
13
14
  gem "activerecord", "~> 4.0", :require => "active_record"
@@ -16,7 +17,8 @@ gem "rspec", "~> 3.1"
16
17
  group :tools do
17
18
  gem "guard"
18
19
  gem "guard-rspec"
19
- gem "byebug"
20
+ gem "byebug", :platform => [:ruby_20, :ruby_21]
21
+ gem "debugger", :platform => :ruby_19
20
22
  end
21
23
 
22
24
  gemspec :path => "../"
@@ -8,6 +8,7 @@ gem "rake"
8
8
  gem "fuubar"
9
9
  gem "simplecov", :require => false
10
10
  gem "coveralls", :require => false
11
+ gem "activerecord-nulldb-adapter", :require => false
11
12
  gem "activesupport", "~> 4.1", :require => "active_support/all"
12
13
  gem "actionpack", "~> 4.1", :require => "action_controller"
13
14
  gem "activerecord", "~> 4.1", :require => "active_record"
@@ -17,7 +18,8 @@ gem "rspec", "~> 2.14"
17
18
  group :tools do
18
19
  gem "guard"
19
20
  gem "guard-rspec"
20
- gem "byebug"
21
+ gem "byebug", :platform => [:ruby_20, :ruby_21]
22
+ gem "debugger", :platform => :ruby_19
21
23
  end
22
24
 
23
25
  gemspec :path => "../"
@@ -8,6 +8,7 @@ gem "rake"
8
8
  gem "fuubar"
9
9
  gem "simplecov", :require => false
10
10
  gem "coveralls", :require => false
11
+ gem "activerecord-nulldb-adapter", :require => false
11
12
  gem "activesupport", "~> 4.1", :require => "active_support/all"
12
13
  gem "actionpack", "~> 4.1", :require => "action_controller"
13
14
  gem "activerecord", "~> 4.1", :require => "active_record"
@@ -17,7 +18,8 @@ gem "rspec", "~> 2.99"
17
18
  group :tools do
18
19
  gem "guard"
19
20
  gem "guard-rspec"
20
- gem "byebug"
21
+ gem "byebug", :platform => [:ruby_20, :ruby_21]
22
+ gem "debugger", :platform => :ruby_19
21
23
  end
22
24
 
23
25
  gemspec :path => "../"
@@ -8,6 +8,7 @@ gem "rake"
8
8
  gem "fuubar"
9
9
  gem "simplecov", :require => false
10
10
  gem "coveralls", :require => false
11
+ gem "activerecord-nulldb-adapter", :require => false
11
12
  gem "activesupport", "~> 4.1", :require => "active_support/all"
12
13
  gem "actionpack", "~> 4.1", :require => "action_controller"
13
14
  gem "activerecord", "~> 4.1", :require => "active_record"
@@ -17,7 +18,8 @@ gem "rspec", "~> 3.1"
17
18
  group :tools do
18
19
  gem "guard"
19
20
  gem "guard-rspec"
20
- gem "byebug"
21
+ gem "byebug", :platform => [:ruby_20, :ruby_21]
22
+ gem "debugger", :platform => :ruby_19
21
23
  end
22
24
 
23
25
  gemspec :path => "../"
@@ -8,6 +8,7 @@ gem "rake"
8
8
  gem "fuubar"
9
9
  gem "simplecov", :require => false
10
10
  gem "coveralls", :require => false
11
+ gem "activerecord-nulldb-adapter", :require => false
11
12
  gem "activesupport", "~> 4.2.rc1", :require => "active_support/all"
12
13
  gem "actionpack", "~> 4.2.rc1", :require => "action_controller"
13
14
  gem "activerecord", "~> 4.2.rc1", :require => "active_record"
@@ -16,7 +17,8 @@ gem "rspec", "~> 2.14"
16
17
  group :tools do
17
18
  gem "guard"
18
19
  gem "guard-rspec"
19
- gem "byebug"
20
+ gem "byebug", :platform => [:ruby_20, :ruby_21]
21
+ gem "debugger", :platform => :ruby_19
20
22
  end
21
23
 
22
24
  gemspec :path => "../"
@@ -8,6 +8,7 @@ gem "rake"
8
8
  gem "fuubar"
9
9
  gem "simplecov", :require => false
10
10
  gem "coveralls", :require => false
11
+ gem "activerecord-nulldb-adapter", :require => false
11
12
  gem "activesupport", "~> 4.2.rc1", :require => "active_support/all"
12
13
  gem "actionpack", "~> 4.2.rc1", :require => "action_controller"
13
14
  gem "activerecord", "~> 4.2.rc1", :require => "active_record"
@@ -16,7 +17,8 @@ gem "rspec", "~> 2.99"
16
17
  group :tools do
17
18
  gem "guard"
18
19
  gem "guard-rspec"
19
- gem "byebug"
20
+ gem "byebug", :platform => [:ruby_20, :ruby_21]
21
+ gem "debugger", :platform => :ruby_19
20
22
  end
21
23
 
22
24
  gemspec :path => "../"
@@ -8,6 +8,7 @@ gem "rake"
8
8
  gem "fuubar"
9
9
  gem "simplecov", :require => false
10
10
  gem "coveralls", :require => false
11
+ gem "activerecord-nulldb-adapter", :require => false
11
12
  gem "activesupport", "~> 4.2.rc1", :require => "active_support/all"
12
13
  gem "actionpack", "~> 4.2.rc1", :require => "action_controller"
13
14
  gem "activerecord", "~> 4.2.rc1", :require => "active_record"
@@ -16,7 +17,8 @@ gem "rspec", "~> 3.1"
16
17
  group :tools do
17
18
  gem "guard"
18
19
  gem "guard-rspec"
19
- gem "byebug"
20
+ gem "byebug", :platform => [:ruby_20, :ruby_21]
21
+ gem "debugger", :platform => :ruby_19
20
22
  end
21
23
 
22
24
  gemspec :path => "../"
@@ -0,0 +1,48 @@
1
+ require "warp/action_matchers/matcher"
2
+ require "warp/instrument"
3
+
4
+ module Warp
5
+ module ActionMatchers
6
+ class CreateMatcher < Warp::ActionMatchers::Matcher
7
+ if ActiveRecord::Base.private_method_defined?(:_create_record)
8
+ CREATE_METHOD = :_create_record
9
+ else
10
+ CREATE_METHOD = :create
11
+ end
12
+
13
+ attr_reader :model
14
+
15
+ def initialize(model)
16
+ @model = model
17
+ end
18
+
19
+ def matches?(actual)
20
+ unless actual.respond_to?(:call)
21
+ raise "The create matcher can only match against callables."
22
+ end
23
+
24
+ instrument = Warp::Instrument.for(model, CREATE_METHOD)
25
+
26
+ instrument.run { actual.call }
27
+
28
+ instrument.calls.size > 0
29
+ end
30
+
31
+ def description
32
+ "create a #{model.name}"
33
+ end
34
+
35
+ def failure_message
36
+ "expected a #{model.name} to be created"
37
+ end
38
+
39
+ def failure_message_when_negated
40
+ "expected no #{model.name} to be created"
41
+ end
42
+ end
43
+
44
+ def create(model)
45
+ CreateMatcher.new(model)
46
+ end
47
+ end
48
+ end
@@ -0,0 +1,11 @@
1
+ require "warp/matcher"
2
+
3
+ module Warp
4
+ module ActionMatchers
5
+ class Matcher < Warp::Matcher
6
+
7
+ private
8
+
9
+ end
10
+ end
11
+ end
@@ -0,0 +1,9 @@
1
+ unless defined?(ActiveModel)
2
+ raise RuntimeError, "ActiveModel is required to use Warp::ActionMatchers."
3
+ end
4
+
5
+ require "warp/action_matchers/create_matcher"
6
+
7
+ RSpec.configure do |config|
8
+ config.include Warp::ActionMatchers
9
+ end
@@ -1,3 +1,5 @@
1
+ require "warp/matcher"
2
+
1
3
  module Warp
2
4
  module ControllerMatchers
3
5
  class AssignMatcher < Warp::Matcher
@@ -1,3 +1,5 @@
1
+ require "warp/matcher"
2
+
1
3
  module Warp
2
4
  module ControllerMatchers
3
5
  class SetFlashMatcher < Warp::Matcher
@@ -6,5 +6,5 @@ require "warp/controller_matchers/assign_matcher"
6
6
  require "warp/controller_matchers/set_flash_matcher"
7
7
 
8
8
  RSpec.configure do |config|
9
- config.include Warp::ControllerMatchers
9
+ config.include Warp::ControllerMatchers, type: :controller
10
10
  end
@@ -0,0 +1,81 @@
1
+ module Warp
2
+ class Instrument
3
+ class << self
4
+ def for(klass, method)
5
+ @@registry ||= {}
6
+ @@registry[klass] ||= {}
7
+ @@registry[klass][method] || new(klass, method)
8
+ end
9
+
10
+ private
11
+
12
+ def register(instrument)
13
+ @@registry ||= {}
14
+ @@registry[instrument.klass] ||= {}
15
+ @@registry[instrument.klass][instrument.method] = instrument
16
+ end
17
+ end
18
+
19
+ attr_accessor :klass, :method, :hook, :enabled, :calls
20
+
21
+ def initialize(klass, method)
22
+ self.klass = klass
23
+ self.method = method
24
+ self.enabled = false
25
+ self.calls = []
26
+ setup_hook
27
+
28
+ self.class.send(:register, self)
29
+ end
30
+
31
+ def run
32
+ enable
33
+ yield
34
+ disable
35
+ end
36
+
37
+ def enabled?
38
+ enabled
39
+ end
40
+
41
+ def log(args)
42
+ calls << args
43
+ end
44
+
45
+ private
46
+
47
+ def enable
48
+ self.enabled = true
49
+ end
50
+
51
+ def disable
52
+ self.enabled = false
53
+ end
54
+
55
+ def setup_hook
56
+ if Module.method_defined?(:prepend)
57
+ self.hook = Module.new
58
+
59
+ hook.send(:define_method, method) do |*args|
60
+ if Warp::Instrument.for(self.class, __method__).enabled?
61
+ Warp::Instrument.for(self.class, __method__).log(args)
62
+ end
63
+
64
+ super(*args)
65
+ end
66
+
67
+ klass.prepend(hook)
68
+ else
69
+ original_method = klass.instance_method(method)
70
+
71
+ klass.send(:define_method, method) do |*args|
72
+ if Warp::Instrument.for(self.class, __method__).enabled?
73
+ Warp::Instrument.for(self.class, __method__).log(args)
74
+ end
75
+
76
+ original_method.bind(self).call(*args)
77
+ end
78
+ end
79
+ end
80
+ end
81
+ end
data/lib/warp/matcher.rb CHANGED
@@ -1,3 +1,5 @@
1
+ require "rspec"
2
+
1
3
  module Warp
2
4
  class Matcher
3
5
  # Composable matchers are new in RSpec 3.
@@ -1,3 +1,5 @@
1
+ require "warp/model_matchers/matcher"
2
+
1
3
  module Warp
2
4
  module ModelMatchers
3
5
  class AssociationMatcher < Warp::ModelMatchers::Matcher
@@ -1,4 +1,6 @@
1
- module Warp
1
+ require "warp/model_matchers/matcher"
2
+
3
+ module Warp
2
4
  module ModelMatchers
3
5
  class AttributeMatcher < Warp::ModelMatchers::Matcher
4
6
  attr_reader :attr_name
@@ -1,3 +1,5 @@
1
+ require "warp/matcher"
2
+
1
3
  module Warp
2
4
  module ModelMatchers
3
5
  class Matcher < Warp::Matcher
@@ -1,3 +1,5 @@
1
+ require "warp/model_matchers/matcher"
2
+
1
3
  module Warp
2
4
  module ModelMatchers
3
5
  class ValidationMatcher < Warp::ModelMatchers::Matcher
@@ -2,8 +2,6 @@ unless defined?(ActiveModel)
2
2
  raise RuntimeError, "ActiveModel is required to use Warp::ModelMatchers."
3
3
  end
4
4
 
5
- require "warp/model_matchers/matcher"
6
-
7
5
  # require "warp/model_matchers/error_matcher"
8
6
  require "warp/model_matchers/validation_matcher"
9
7
 
@@ -13,5 +11,5 @@ if defined?(ActiveRecord)
13
11
  end
14
12
 
15
13
  RSpec.configure do |config|
16
- config.include Warp::ModelMatchers
14
+ config.include Warp::ModelMatchers, type: :model
17
15
  end
data/lib/warp/version.rb CHANGED
@@ -1,8 +1,8 @@
1
1
  module Warp
2
2
  module VERSION
3
3
  MAJOR = 1
4
- MINOR = 2
5
- PATCH = 3
4
+ MINOR = 3
5
+ PATCH = 0
6
6
 
7
7
  BETA = nil
8
8
 
data/lib/warp.rb CHANGED
@@ -1,8 +1,5 @@
1
1
  require "warp/version"
2
2
 
3
- require "rspec"
4
-
5
- require "warp/matcher"
6
-
3
+ require "warp/action_matchers"
7
4
  require "warp/controller_matchers"
8
5
  require "warp/model_matchers"
data/spec/spec_helper.rb CHANGED
@@ -25,7 +25,7 @@ else
25
25
  Bundler.require(:default, :tools)
26
26
  end
27
27
 
28
- if ActionPack.respond_to?(:version) && ActionPack.version.to_s =~ /^4\.2/
28
+ if defined?(Rails) && !Rails.respond_to?(:env)
29
29
  module Rails
30
30
  def self.env
31
31
  "default_env"
@@ -33,6 +33,9 @@ if ActionPack.respond_to?(:version) && ActionPack.version.to_s =~ /^4\.2/
33
33
  end
34
34
  end
35
35
 
36
+ require "activerecord-nulldb-adapter"
37
+ ActiveRecord::Base.establish_connection adapter: :nulldb
38
+
36
39
  Dir[File.expand_path("../support/**/*.rb", __FILE__)].each {|f| require f }
37
40
 
38
41
  RSpec.configure do |config|
@@ -2,6 +2,8 @@ module ModelHelpers
2
2
  def build_model(&blk)
3
3
  let(:model) do
4
4
  Class.new(ActiveRecord::Base) do
5
+ attr_accessor :id
6
+
5
7
  def self.name
6
8
  "TestModel"
7
9
  end
@@ -27,7 +29,7 @@ module ModelHelpers
27
29
  columns << ActiveRecord::ConnectionAdapters::Column.new(name.to_s, default, sql_type.to_s, null)
28
30
  end
29
31
 
30
- instance_eval(&blk)
32
+ instance_eval(&blk) if blk
31
33
  end
32
34
  end
33
35
  end
@@ -0,0 +1,39 @@
1
+ require "spec_helper"
2
+
3
+ describe Warp::ActionMatchers::CreateMatcher do
4
+ build_model
5
+
6
+ subject { create(model) }
7
+
8
+ context "when created with #create" do
9
+ let(:block) { -> { model.create({}) } }
10
+
11
+ specify { expect(subject).to match block }
12
+ end
13
+
14
+ context "when created with #save" do
15
+ let(:block) { -> { model.new.save } }
16
+
17
+ specify { expect(subject).to match block }
18
+ end
19
+
20
+ context "when nothing created" do
21
+ let(:block) { -> { return } }
22
+
23
+ specify { expect(subject).to_not match block }
24
+ end
25
+
26
+ describe "#desciption" do
27
+ subject { super().description }
28
+
29
+ specify { expect(subject).to eq "create a TestModel" }
30
+ end
31
+
32
+ describe_failure_message do
33
+ specify { expect(subject).to eq "expected a TestModel to be created" }
34
+ end
35
+
36
+ describe_failure_message_when_negated do
37
+ specify { expect(subject).to eq "expected no TestModel to be created" }
38
+ end
39
+ end
@@ -1,6 +1,6 @@
1
1
  require "spec_helper"
2
2
 
3
- describe Warp::ControllerMatchers::AssignMatcher do
3
+ describe Warp::ControllerMatchers::AssignMatcher, type: :controller do
4
4
  with_contexts do
5
5
  context "with implicit controller" do
6
6
  build_controller(:controller)
@@ -1,6 +1,6 @@
1
1
  require "spec_helper"
2
2
 
3
- describe Warp::ControllerMatchers::SetFlashMatcher do
3
+ describe Warp::ControllerMatchers::SetFlashMatcher, type: :controller do
4
4
  with_contexts do
5
5
  context "with implicit controller" do
6
6
  build_controller(:controller)
@@ -0,0 +1,50 @@
1
+ require "spec_helper"
2
+
3
+ describe Warp::Instrument do
4
+ let(:klass) { Class.new }
5
+ let(:method) { :foo }
6
+ let(:instrument) { Warp::Instrument.for(klass, method) }
7
+
8
+ before do
9
+ klass.send(:define_method, method) {|*_| return nil }
10
+ end
11
+
12
+ describe ".for" do
13
+ subject { instrument }
14
+
15
+ context "with no existing instrument" do
16
+ specify { expect(subject).to be_a Warp::Instrument }
17
+ specify { expect(subject).to_not be_enabled }
18
+ end
19
+
20
+ context "with an existing instrument" do
21
+ let!(:existing) { subject }
22
+
23
+ specify { expect(subject).to equal existing }
24
+ end
25
+ end
26
+
27
+ describe "#run" do
28
+ specify { expect{|blk| instrument.run(&blk) }.to yield_control }
29
+ end
30
+
31
+ describe "#calls" do
32
+ subject { instrument.calls }
33
+
34
+ context "when no calls have been logged" do
35
+ specify { expect(subject).to eq [] }
36
+ end
37
+
38
+ context "when a call has been logged" do
39
+ let(:args) { [{baz: :quz}] }
40
+
41
+ before do
42
+ instrument.run do
43
+ klass.new.send(method, *args)
44
+ end
45
+ end
46
+
47
+ specify { expect(subject).to eq [args] }
48
+ end
49
+ end
50
+ end
@@ -1,6 +1,6 @@
1
1
  require "spec_helper"
2
2
 
3
- describe Warp::ModelMatchers::AssociationMatcher do
3
+ describe Warp::ModelMatchers::AssociationMatcher, type: :model do
4
4
  build_model do
5
5
  belongs_to :foo
6
6
  has_many :bars
@@ -1,6 +1,6 @@
1
1
  require "spec_helper"
2
2
 
3
- describe Warp::ModelMatchers::AttributeMatcher do
3
+ describe Warp::ModelMatchers::AttributeMatcher, type: :model do
4
4
  build_model do
5
5
  column :foo
6
6
  end
@@ -1,6 +1,6 @@
1
1
  require "spec_helper"
2
2
 
3
- describe Warp::ModelMatchers::ValidationMatcher do
3
+ describe Warp::ModelMatchers::ValidationMatcher, type: :model do
4
4
  build_model do
5
5
  column :foo
6
6
  end
metadata CHANGED
@@ -1,27 +1,27 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: warp
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.2.3
4
+ version: 1.3.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Thomas Drake-Brockman
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2014-12-05 00:00:00.000000000 Z
11
+ date: 2014-12-07 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rspec
15
15
  requirement: !ruby/object:Gem::Requirement
16
16
  requirements:
17
- - - ">="
17
+ - - ! '>='
18
18
  - !ruby/object:Gem::Version
19
19
  version: 2.14.0
20
20
  type: :runtime
21
21
  prerelease: false
22
22
  version_requirements: !ruby/object:Gem::Requirement
23
23
  requirements:
24
- - - ">="
24
+ - - ! '>='
25
25
  - !ruby/object:Gem::Version
26
26
  version: 2.14.0
27
27
  description: Warp provides a selection of inteligent RSpec matchers for your model,
@@ -32,11 +32,11 @@ executables: []
32
32
  extensions: []
33
33
  extra_rdoc_files: []
34
34
  files:
35
- - ".gitignore"
36
- - ".rspec"
37
- - ".ruby-gemset"
38
- - ".ruby-version"
39
- - ".travis.yml"
35
+ - .gitignore
36
+ - .rspec
37
+ - .ruby-gemset
38
+ - .ruby-version
39
+ - .travis.yml
40
40
  - Appraisals
41
41
  - CHANGELOG.md
42
42
  - Gemfile
@@ -57,9 +57,13 @@ files:
57
57
  - gemfiles/rails_4.2.rc1_rspec_2.99.gemfile
58
58
  - gemfiles/rails_4.2.rc1_rspec_3.1.gemfile
59
59
  - lib/warp.rb
60
+ - lib/warp/action_matchers.rb
61
+ - lib/warp/action_matchers/create_matcher.rb
62
+ - lib/warp/action_matchers/matcher.rb
60
63
  - lib/warp/controller_matchers.rb
61
64
  - lib/warp/controller_matchers/assign_matcher.rb
62
65
  - lib/warp/controller_matchers/set_flash_matcher.rb
66
+ - lib/warp/instrument.rb
63
67
  - lib/warp/matcher.rb
64
68
  - lib/warp/model_matchers.rb
65
69
  - lib/warp/model_matchers/association_matcher.rb
@@ -74,8 +78,10 @@ files:
74
78
  - spec/support/match_helpers.rb
75
79
  - spec/support/model_helpers.rb
76
80
  - spec/support/with_contexts_helpers.rb
81
+ - spec/warp/action_matchers/create_matcher_spec.rb
77
82
  - spec/warp/controller_matchers/assign_matcher_spec.rb
78
83
  - spec/warp/controller_matchers/set_flash_matcher_spec.rb
84
+ - spec/warp/instrument_spec.rb
79
85
  - spec/warp/model_helpers/association_matcher_spec.rb
80
86
  - spec/warp/model_helpers/attribute_matcher_spec.rb
81
87
  - spec/warp/model_helpers/validation_matcher_spec.rb
@@ -90,12 +96,12 @@ require_paths:
90
96
  - lib
91
97
  required_ruby_version: !ruby/object:Gem::Requirement
92
98
  requirements:
93
- - - ">="
99
+ - - ! '>='
94
100
  - !ruby/object:Gem::Version
95
101
  version: '0'
96
102
  required_rubygems_version: !ruby/object:Gem::Requirement
97
103
  requirements:
98
- - - ">="
104
+ - - ! '>='
99
105
  - !ruby/object:Gem::Version
100
106
  version: '0'
101
107
  requirements: []
@@ -111,8 +117,10 @@ test_files:
111
117
  - spec/support/match_helpers.rb
112
118
  - spec/support/model_helpers.rb
113
119
  - spec/support/with_contexts_helpers.rb
120
+ - spec/warp/action_matchers/create_matcher_spec.rb
114
121
  - spec/warp/controller_matchers/assign_matcher_spec.rb
115
122
  - spec/warp/controller_matchers/set_flash_matcher_spec.rb
123
+ - spec/warp/instrument_spec.rb
116
124
  - spec/warp/model_helpers/association_matcher_spec.rb
117
125
  - spec/warp/model_helpers/attribute_matcher_spec.rb
118
126
  - spec/warp/model_helpers/validation_matcher_spec.rb