remockable 0.2.1 → 0.3.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (57) hide show
  1. checksums.yaml +7 -0
  2. data/.gitignore +1 -0
  3. data/.rspec +1 -0
  4. data/.travis.yml +2 -3
  5. data/CHANGELOG.md +6 -0
  6. data/README.markdown +18 -4
  7. data/lib/remockable/active_model/allow_values_for.rb +14 -13
  8. data/lib/remockable/active_model/helpers.rb +7 -6
  9. data/lib/remockable/active_model/validate_acceptance_of.rb +9 -11
  10. data/lib/remockable/active_model/validate_confirmation_of.rb +9 -11
  11. data/lib/remockable/active_model/validate_exclusion_of.rb +9 -11
  12. data/lib/remockable/active_model/validate_format_of.rb +9 -11
  13. data/lib/remockable/active_model/validate_inclusion_of.rb +9 -11
  14. data/lib/remockable/active_model/validate_length_of.rb +32 -19
  15. data/lib/remockable/active_model/validate_numericality_of.rb +23 -12
  16. data/lib/remockable/active_model/validate_presence_of.rb +9 -11
  17. data/lib/remockable/active_record/accept_nested_attributes_for.rb +10 -13
  18. data/lib/remockable/active_record/belong_to.rb +21 -13
  19. data/lib/remockable/active_record/have_and_belong_to_many.rb +16 -13
  20. data/lib/remockable/active_record/have_column.rb +14 -11
  21. data/lib/remockable/active_record/have_default_scope.rb +38 -20
  22. data/lib/remockable/active_record/have_index.rb +12 -13
  23. data/lib/remockable/active_record/have_many.rb +22 -13
  24. data/lib/remockable/active_record/have_one.rb +21 -13
  25. data/lib/remockable/active_record/have_scope.rb +40 -25
  26. data/lib/remockable/active_record/helpers.rb +3 -0
  27. data/lib/remockable/active_record/validate_associated.rb +9 -11
  28. data/lib/remockable/active_record/validate_uniqueness_of.rb +19 -11
  29. data/lib/remockable/helpers.rb +58 -6
  30. data/lib/remockable/version.rb +1 -1
  31. data/remockable.gemspec +3 -3
  32. data/spec/active_model/allow_values_for_spec.rb +19 -13
  33. data/spec/active_model/validate_acceptance_of_spec.rb +0 -2
  34. data/spec/active_model/validate_confirmation_of_spec.rb +0 -2
  35. data/spec/active_model/validate_exclusion_of_spec.rb +7 -9
  36. data/spec/active_model/validate_format_of_spec.rb +9 -11
  37. data/spec/active_model/validate_inclusion_of_spec.rb +7 -9
  38. data/spec/active_model/validate_length_of_spec.rb +16 -18
  39. data/spec/active_model/validate_numericality_of_spec.rb +14 -16
  40. data/spec/active_model/validate_presence_of_spec.rb +0 -2
  41. data/spec/active_record/accept_nested_attributes_for_spec.rb +22 -18
  42. data/spec/active_record/belong_to_spec.rb +26 -26
  43. data/spec/active_record/have_and_belong_to_many_spec.rb +22 -20
  44. data/spec/active_record/have_column_spec.rb +32 -35
  45. data/spec/active_record/have_default_scope_spec.rb +54 -55
  46. data/spec/active_record/have_index_spec.rb +24 -27
  47. data/spec/active_record/have_many_spec.rb +10 -11
  48. data/spec/active_record/have_one_spec.rb +26 -25
  49. data/spec/active_record/have_scope_spec.rb +75 -75
  50. data/spec/active_record/validate_associated_spec.rb +11 -11
  51. data/spec/active_record/validate_uniqueness_of_spec.rb +11 -13
  52. data/spec/spec_helper.rb +2 -4
  53. data/spec/support/active_record_example_group.rb +3 -4
  54. data/spec/support/class_builder.rb +15 -11
  55. data/spec/support/shared/a_validation_matcher.rb +25 -25
  56. data/spec/support/shared/an_active_record_matcher.rb +14 -12
  57. metadata +60 -84
@@ -1,30 +1,33 @@
1
- RSpec::Matchers.define(:have_and_belong_to_many) do |*association|
2
- extend Remockable::ActiveRecord::Helpers
1
+ RSpec::Matchers.define(:have_and_belong_to_many) do
2
+ include Remockable::ActiveRecord::Helpers
3
3
 
4
- @expected = association.extract_options!
5
- @association = association.shift
6
-
7
- valid_options %w(class_name join_table foreign_key association_foreign_key
8
- validate autosave)
4
+ valid_options %i(
5
+ association_foreign_key
6
+ autosave
7
+ class_name
8
+ foreign_key
9
+ join_table
10
+ validate
11
+ )
9
12
 
10
13
  match do |actual|
11
- if association = subject.class.reflect_on_association(@association)
14
+ if association = subject.class.reflect_on_association(attribute)
12
15
  macro_matches = association.macro == :has_and_belongs_to_many
13
- options_match = association.options.slice(*expected.keys) == expected
16
+ options_match = association.options.slice(*options.keys) == options
14
17
  macro_matches && options_match
15
18
  end
16
19
  end
17
20
 
18
- failure_message_for_should do |actual|
21
+ failure_message do |actual|
19
22
  "Expected #{subject.class.name} to #{description}"
20
23
  end
21
24
 
22
- failure_message_for_should_not do |actual|
25
+ failure_message_when_negated do |actual|
23
26
  "Did not expect #{subject.class.name} to #{description}"
24
27
  end
25
28
 
26
29
  description do
27
- with = " with #{expected.inspect}" if expected.any?
28
- "have and belong to #{@association}#{with}"
30
+ with = " with #{options.inspect}" if options.any?
31
+ "have and belong to #{attribute}#{with}"
29
32
  end
30
33
  end
@@ -1,27 +1,30 @@
1
- RSpec::Matchers.define(:have_column) do |*column|
2
- extend Remockable::ActiveRecord::Helpers
1
+ RSpec::Matchers.define(:have_column) do
2
+ include Remockable::ActiveRecord::Helpers
3
3
 
4
- @expected = column.extract_options!
5
- @column = column.shift
4
+ valid_options %i(default limit null precision scale type)
6
5
 
7
- valid_options %w(default limit null precision scale type)
6
+ def column
7
+ @column ||= subject.class.columns.detect { |column|
8
+ column.name == attribute.to_s
9
+ }
10
+ end
8
11
 
9
12
  match do |actual|
10
- if column = subject.class.columns.detect { |column| column.name == @column.to_s }
11
- @expected.all? { |key, value| column.send(key).should == value }
13
+ if column
14
+ options.all? { |key, value| column.send(key) == value }
12
15
  end
13
16
  end
14
17
 
15
- failure_message_for_should do |actual|
18
+ failure_message do |actual|
16
19
  "Expected #{subject.class.name} to #{description}"
17
20
  end
18
21
 
19
- failure_message_for_should_not do |actual|
22
+ failure_message_when_negated do |actual|
20
23
  "Did not expect #{subject.class.name} to #{description}"
21
24
  end
22
25
 
23
26
  description do
24
- with = " with #{expected.inspect}" if expected.any?
25
- "have column #{@column}#{with}"
27
+ with = " with #{options.inspect}" if options.any?
28
+ "have column #{attribute}#{with}"
26
29
  end
27
30
  end
@@ -1,23 +1,22 @@
1
- RSpec::Matchers.define(:have_default_scope) do |*expected|
2
- extend Remockable::ActiveRecord::Helpers
1
+ RSpec::Matchers.define(:have_default_scope) do
2
+ include Remockable::ActiveRecord::Helpers
3
3
 
4
- @expected = expected.extract_options!
5
- @relation = nil
4
+ attr_accessor :relation
6
5
 
7
- valid_options %w()
6
+ valid_options %i()
8
7
 
9
8
  match do |actual|
10
9
  if subject.class.respond_to?(:all)
11
10
  scope = subject.class.all
12
11
 
13
12
  if scope.is_a?(ActiveRecord::Relation)
14
- if @relation
15
- query_matches = scope.arel.to_sql == @relation.arel.to_sql
16
- eager_load_matches = scope.eager_load_values == @relation.eager_load_values
17
- includes_matches = scope.includes_values == @relation.includes_values
18
- lock_matches = scope.lock_value == @relation.lock_value
19
- preload_matches = scope.preload_values == @relation.preload_values
20
- readonly_matches = scope.readonly_value == @relation.readonly_value
13
+ if relation
14
+ query_matches = scope.arel.to_sql == relation.arel.to_sql
15
+ eager_load_matches = scope.eager_load_values == relation.eager_load_values
16
+ includes_matches = scope.includes_values == relation.includes_values
17
+ lock_matches = scope.lock_value == relation.lock_value
18
+ preload_matches = scope.preload_values == relation.preload_values
19
+ readonly_matches = scope.readonly_value == relation.readonly_value
21
20
 
22
21
  query_matches && eager_load_matches && includes_matches && lock_matches && preload_matches && readonly_matches
23
22
  elsif subject.class.respond_to?(:default_scopes) # Rails 3.1
@@ -30,28 +29,47 @@ RSpec::Matchers.define(:have_default_scope) do |*expected|
30
29
  end
31
30
 
32
31
  def method_missing(method, *args, &block)
33
- unsupported_query_methods = %(create_with eager_load includes lock preload readonly)
34
- query_methods = %w(from group having joins limit offset order reorder select where)
32
+ unsupported_query_methods = %i(
33
+ create_with
34
+ eager_load
35
+ includes
36
+ lock
37
+ preload
38
+ readonly
39
+ )
35
40
 
36
- if query_methods.include?(method.to_s)
37
- @relation ||= subject.class.unscoped
38
- @relation = @relation.send(method, *args)
41
+ query_methods = %i(
42
+ from
43
+ group
44
+ having
45
+ joins
46
+ limit
47
+ offset
48
+ order
49
+ reorder
50
+ select
51
+ where
52
+ )
53
+
54
+ if query_methods.include?(method)
55
+ self.relation ||= subject.class.unscoped
56
+ self.relation = relation.send(method, *args)
39
57
  self
40
58
  else
41
59
  super
42
60
  end
43
61
  end
44
62
 
45
- failure_message_for_should do |actual|
63
+ failure_message do |actual|
46
64
  "Expected #{subject.class.name} to #{description}"
47
65
  end
48
66
 
49
- failure_message_for_should_not do |actual|
67
+ failure_message_when_negated do |actual|
50
68
  "Did not expect #{subject.class.name} to #{description}"
51
69
  end
52
70
 
53
71
  description do
54
- with = " with #{@expected.inspect}" if @expected.any?
72
+ with = " with #{options.inspect}" if options.any?
55
73
  "have a default scope#{with}"
56
74
  end
57
75
  end
@@ -1,18 +1,17 @@
1
- RSpec::Matchers.define(:have_index) do |*columns|
2
- extend Remockable::ActiveRecord::Helpers
1
+ RSpec::Matchers.define(:have_index) do
2
+ include Remockable::ActiveRecord::Helpers
3
3
 
4
- @expected = columns.extract_options!
5
- @columns = columns
4
+ valid_options %i(name unique)
6
5
 
7
- valid_options %w(name unique)
6
+ def column_names
7
+ @column_names ||= expected_as_array.flatten.collect(&:to_s)
8
+ end
8
9
 
9
10
  match do |actual|
10
- name = @expected[:name]
11
- unique = @expected[:unique]
11
+ name = options[:name]
12
+ unique = options[:unique]
12
13
  indexes = ActiveRecord::Base.connection.indexes(subject.class.table_name)
13
14
 
14
- column_names = @columns.flatten.collect(&:to_s)
15
-
16
15
  index = indexes.detect do |index|
17
16
  if column_names.any?
18
17
  index.columns == column_names
@@ -33,16 +32,16 @@ RSpec::Matchers.define(:have_index) do |*columns|
33
32
  index.name == name.to_s
34
33
  end
35
34
 
36
- failure_message_for_should do |actual|
35
+ failure_message do |actual|
37
36
  "Expected #{subject.class.name} to #{description}"
38
37
  end
39
38
 
40
- failure_message_for_should_not do |actual|
39
+ failure_message_when_negated do |actual|
41
40
  "Did not expect #{subject.class.name} to #{description}"
42
41
  end
43
42
 
44
43
  description do
45
- with = " with #{expected.inspect}" if expected.any?
46
- "have index on #{@columns.to_sentence}#{with}"
44
+ with = " with #{options.inspect}" if options.any?
45
+ "have index on #{column_names.to_sentence}#{with}"
47
46
  end
48
47
  end
@@ -1,30 +1,39 @@
1
- RSpec::Matchers.define(:have_many) do |*association|
2
- extend Remockable::ActiveRecord::Helpers
1
+ RSpec::Matchers.define(:have_many) do
2
+ include Remockable::ActiveRecord::Helpers
3
3
 
4
- @expected = association.extract_options!
5
- @association = association.shift
6
-
7
- valid_options %w(class_name foreign_key primary_key dependent counter_cache
8
- as through source source_type validate autosave inverse_of)
4
+ valid_options %i(
5
+ as
6
+ autosave
7
+ class_name
8
+ counter_cache
9
+ dependent
10
+ foreign_key
11
+ inverse_of
12
+ primary_key
13
+ source
14
+ source_type
15
+ through
16
+ validate
17
+ )
9
18
 
10
19
  match do |actual|
11
- if association = subject.class.reflect_on_association(@association)
20
+ if association = subject.class.reflect_on_association(attribute)
12
21
  macro_matches = association.macro == :has_many
13
- options_match = association.options.slice(*expected.keys) == expected
22
+ options_match = association.options.slice(*options.keys) == options
14
23
  macro_matches && options_match
15
24
  end
16
25
  end
17
26
 
18
- failure_message_for_should do |actual|
27
+ failure_message do |actual|
19
28
  "Expected #{subject.class.name} to #{description}"
20
29
  end
21
30
 
22
- failure_message_for_should_not do |actual|
31
+ failure_message_when_negated do |actual|
23
32
  "Did not expect #{subject.class.name} to #{description}"
24
33
  end
25
34
 
26
35
  description do
27
- with = " with #{expected.inspect}" if expected.any?
28
- "have many #{@association}#{with}"
36
+ with = " with #{options.inspect}" if options.any?
37
+ "have many #{attribute}#{with}"
29
38
  end
30
39
  end
@@ -1,30 +1,38 @@
1
- RSpec::Matchers.define(:have_one) do |*association|
2
- extend Remockable::ActiveRecord::Helpers
1
+ RSpec::Matchers.define(:have_one) do
2
+ include Remockable::ActiveRecord::Helpers
3
3
 
4
- @expected = association.extract_options!
5
- @association = association.shift
6
-
7
- valid_options %w(class_name dependent foreign_key primary_key as through
8
- source source_type validate autosave inverse_of)
4
+ valid_options %i(
5
+ class_name
6
+ dependent
7
+ foreign_key
8
+ primary_key
9
+ as
10
+ through
11
+ source
12
+ source_type
13
+ validate
14
+ autosave
15
+ inverse_of
16
+ )
9
17
 
10
18
  match do |actual|
11
- if association = subject.class.reflect_on_association(@association)
19
+ if association = subject.class.reflect_on_association(attribute)
12
20
  macro_matches = association.macro == :has_one
13
- options_match = association.options.slice(*expected.keys) == expected
21
+ options_match = association.options.slice(*options.keys) == options
14
22
  macro_matches && options_match
15
23
  end
16
24
  end
17
25
 
18
- failure_message_for_should do |actual|
26
+ failure_message do |actual|
19
27
  "Expected #{subject.class.name} to #{description}"
20
28
  end
21
29
 
22
- failure_message_for_should_not do |actual|
30
+ failure_message_when_negated do |actual|
23
31
  "Did not expect #{subject.class.name} to #{description}"
24
32
  end
25
33
 
26
34
  description do
27
- with = " with #{expected.inspect}" if expected.any?
28
- "have a #{@association}#{with}"
35
+ with = " with #{options.inspect}" if options.any?
36
+ "have a #{attribute}#{with}"
29
37
  end
30
38
  end
@@ -1,29 +1,27 @@
1
1
  RSpec::Matchers.define(:have_scope) do |*name|
2
- extend Remockable::ActiveRecord::Helpers
2
+ include Remockable::ActiveRecord::Helpers
3
3
 
4
- @expected = name.extract_options!
5
- @name = name.shift
6
- @relation = nil
4
+ attr_accessor :relation
7
5
 
8
- valid_options %w(with)
6
+ valid_options %i(with)
9
7
 
10
8
  match do |actual|
11
- if subject.class.respond_to?(@name)
12
- scope = if @expected.key?(:with)
13
- with = [@expected[:with]] unless @expected[:with].is_a?(Array)
14
- subject.class.send(@name, *with)
9
+ if subject.class.respond_to?(attribute)
10
+ scope = if options.key?(:with)
11
+ with = [options[:with]] unless options[:with].is_a?(Array)
12
+ subject.class.send(attribute, *with)
15
13
  else
16
- subject.class.send(@name)
14
+ subject.class.send(attribute)
17
15
  end
18
16
 
19
17
  if scope.is_a?(ActiveRecord::Relation)
20
- if @relation
21
- query_matches = scope.arel.to_sql == @relation.arel.to_sql
22
- eager_load_matches = scope.eager_load_values == @relation.eager_load_values
23
- includes_matches = scope.includes_values == @relation.includes_values
24
- lock_matches = scope.lock_value == @relation.lock_value
25
- preload_matches = scope.preload_values == @relation.preload_values
26
- readonly_matches = scope.readonly_value == @relation.readonly_value
18
+ if relation
19
+ query_matches = scope.arel.to_sql == relation.arel.to_sql
20
+ eager_load_matches = scope.eager_load_values == relation.eager_load_values
21
+ includes_matches = scope.includes_values == relation.includes_values
22
+ lock_matches = scope.lock_value == relation.lock_value
23
+ preload_matches = scope.preload_values == relation.preload_values
24
+ readonly_matches = scope.readonly_value == relation.readonly_value
27
25
 
28
26
  query_matches && eager_load_matches && includes_matches && lock_matches && preload_matches && readonly_matches
29
27
  else
@@ -35,27 +33,44 @@ RSpec::Matchers.define(:have_scope) do |*name|
35
33
 
36
34
  def method_missing(method, *args, &block)
37
35
  unsupported_query_methods = %(create_with)
38
- query_methods = %w(eager_load from group having includes joins limit lock offset order preload readonly reorder select where)
39
36
 
40
- if query_methods.include?(method.to_s)
41
- @relation ||= subject.class.all
42
- @relation = @relation.send(method, *args)
37
+ query_methods = %i(
38
+ eager_load
39
+ from
40
+ group
41
+ having
42
+ includes
43
+ joins
44
+ limit
45
+ lock
46
+ offset
47
+ order
48
+ preload
49
+ readonly
50
+ reorder
51
+ select
52
+ where
53
+ )
54
+
55
+ if query_methods.include?(method)
56
+ self.relation ||= subject.class.all
57
+ self.relation = relation.send(method, *args)
43
58
  self
44
59
  else
45
60
  super
46
61
  end
47
62
  end
48
63
 
49
- failure_message_for_should do |actual|
64
+ failure_message do |actual|
50
65
  "Expected #{subject.class.name} to #{description}"
51
66
  end
52
67
 
53
- failure_message_for_should_not do |actual|
68
+ failure_message_when_negated do |actual|
54
69
  "Did not expect #{subject.class.name} to #{description}"
55
70
  end
56
71
 
57
72
  description do
58
- with = " with #{@expected.inspect}" if @expected.any?
59
- "have scope #{@name}#{with}"
73
+ with = " with #{options.inspect}" if options.any?
74
+ "have scope #{attribute}#{with}"
60
75
  end
61
76
  end
@@ -1,8 +1,11 @@
1
+ require 'active_support/concern'
2
+
1
3
  require 'remockable/helpers'
2
4
 
3
5
  module Remockable
4
6
  module ActiveRecord
5
7
  module Helpers
8
+ extend ActiveSupport::Concern
6
9
  include Remockable::Helpers
7
10
  end
8
11
  end
@@ -1,27 +1,25 @@
1
- RSpec::Matchers.define(:validate_associated) do |*attribute|
2
- extend Remockable::ActiveModel::Helpers
1
+ RSpec::Matchers.define(:validate_associated) do
2
+ include Remockable::ActiveModel::Helpers
3
3
 
4
- @type = :associated
5
- @expected = attribute.extract_options!
6
- @attribute = attribute.shift
4
+ type :associated
7
5
 
8
- valid_options %w(if message on unless)
6
+ valid_options %i(if message on unless)
9
7
 
10
8
  match do |actual|
11
- validator = validator_for(@attribute)
9
+ validator = validator_for(attribute)
12
10
  validator && options_match(validator) && conditionals_match(validator)
13
11
  end
14
12
 
15
- failure_message_for_should do |actual|
13
+ failure_message do |actual|
16
14
  "Expected #{subject.class.name} to #{description}"
17
15
  end
18
16
 
19
- failure_message_for_should_not do |actual|
17
+ failure_message_when_negated do |actual|
20
18
  "Did not expect #{subject.class.name} to #{description}"
21
19
  end
22
20
 
23
21
  description do
24
- with = " with #{expected.inspect}" if expected.any?
25
- "validate #{type} #{@attribute}#{with}"
22
+ with = " with #{options.inspect}" if options.any?
23
+ "validate #{type} #{attribute}#{with}"
26
24
  end
27
25
  end
@@ -1,27 +1,35 @@
1
- RSpec::Matchers.define(:validate_uniqueness_of) do |*attribute|
2
- extend Remockable::ActiveModel::Helpers
1
+ require 'rspec/expectations'
3
2
 
4
- @type = :uniqueness
5
- @expected = attribute.extract_options!
6
- @attribute = attribute.shift
3
+ RSpec::Matchers.define :validate_uniqueness_of do |expected|
4
+ include Remockable::ActiveModel::Helpers
7
5
 
8
- valid_options %w(allow_nil allow_blank case_sensitive if message scope unless)
6
+ type :uniqueness
7
+
8
+ valid_options %i(
9
+ allow_blank
10
+ allow_nil
11
+ case_sensitive
12
+ if
13
+ message
14
+ scope
15
+ unless
16
+ )
9
17
 
10
18
  match do |actual|
11
- validator = validator_for(@attribute)
19
+ validator = validator_for(attribute)
12
20
  validator && options_match(validator) && conditionals_match(validator)
13
21
  end
14
22
 
15
- failure_message_for_should do |actual|
23
+ failure_message do |actual|
16
24
  "Expected #{subject.class.name} to #{description}"
17
25
  end
18
26
 
19
- failure_message_for_should_not do |actual|
27
+ failure_message_when_negated do |actual|
20
28
  "Did not expect #{subject.class.name} to #{description}"
21
29
  end
22
30
 
23
31
  description do
24
- with = " with #{expected.inspect}" if expected.any?
25
- "validate #{type} of #{@attribute}#{with}"
32
+ with = " with #{options.inspect}" if options.any?
33
+ "validate #{type} of #{attribute}#{with}"
26
34
  end
27
35
  end
@@ -1,16 +1,68 @@
1
+ require 'active_support/concern'
2
+
1
3
  module Remockable
2
4
  module Helpers
3
- def unsupported_options(keys)
4
- @expected.keys.each do |key|
5
- if keys.collect(&:to_sym).include?(key.to_sym)
5
+ extend ActiveSupport::Concern
6
+
7
+ module ClassMethods
8
+ def type(type)
9
+ define_method :type do
10
+ type
11
+ end
12
+ end
13
+
14
+ def unsupported_options(keys)
15
+ define_method :unsupported_options do
16
+ keys
17
+ end
18
+ end
19
+
20
+ def valid_options(keys)
21
+ define_method :valid_options do
22
+ keys
23
+ end
24
+ end
25
+ end
26
+
27
+ def attribute
28
+ @attribute ||= expected_as_array.first
29
+ end
30
+
31
+ def options
32
+ @options ||= expected_as_array.extract_options!
33
+ end
34
+
35
+ def matches?(actual)
36
+ validate_options!
37
+ super
38
+ end
39
+
40
+ def unsupported_options
41
+ []
42
+ end
43
+
44
+ def valid_options
45
+ []
46
+ end
47
+
48
+ def validate_options!
49
+ check_unsupported_options!
50
+ check_valid_options!
51
+ end
52
+
53
+ private
54
+
55
+ def check_unsupported_options!
56
+ options.each_key do |key|
57
+ if unsupported_options.include?(key.to_sym)
6
58
  raise ArgumentError.new("Unsupported option #{key.inspect}")
7
59
  end
8
60
  end
9
61
  end
10
62
 
11
- def valid_options(keys)
12
- @expected.keys.each do |key|
13
- unless keys.collect(&:to_sym).include?(key.to_sym)
63
+ def check_valid_options!
64
+ options.each_key do |key|
65
+ unless valid_options.include?(key.to_sym)
14
66
  raise ArgumentError.new("Unknown option #{key.inspect}")
15
67
  end
16
68
  end
@@ -1,3 +1,3 @@
1
1
  module Remockable
2
- VERSION = '0.2.1'
2
+ VERSION = '0.3.0'
3
3
  end
data/remockable.gemspec CHANGED
@@ -11,9 +11,9 @@ Gem::Specification.new do |spec|
11
11
  spec.add_dependency 'activemodel', '~> 4.0'
12
12
  spec.add_dependency 'activerecord', '~> 4.0'
13
13
  spec.add_dependency 'activesupport', '~> 4.0'
14
- spec.add_dependency 'rspec-core', '~> 2.0'
15
- spec.add_dependency 'rspec-expectations', '~> 2.0'
16
- spec.add_dependency 'rspec-mocks', '~> 2.0'
14
+ spec.add_dependency 'rspec-core', '~> 3.0'
15
+ spec.add_dependency 'rspec-expectations', '~> 3.0'
16
+ spec.add_dependency 'rspec-mocks', '~> 3.0'
17
17
  spec.add_development_dependency 'rake'
18
18
  spec.add_development_dependency 'sqlite3', '~> 1.3.4'
19
19