carlosbrando-remarkable 2.2.6 → 2.2.7

Sign up to get free protection for your applications and to get access to all the features.
@@ -52,7 +52,7 @@ module Remarkable # :nodoc:
52
52
  # It checks for the key, if it exists and it's true, tests that the value
53
53
  # given is bad, otherwise tests that the value is good.
54
54
  #
55
- def assert_bad_or_good_if_key(key, value, missing, message_key = :message, count_for_interpolation = 0)
55
+ def assert_bad_or_good_if_key(key, value, missing, message_key = :message)
56
56
  return true unless @options.key? key
57
57
 
58
58
  if @options[key]
@@ -70,14 +70,14 @@ module Remarkable # :nodoc:
70
70
  # It checks for the key, if it exists and it's true, tests that the value
71
71
  # given is good, otherwise tests that the value is bad.
72
72
  #
73
- def assert_good_or_bad_if_key(key, value, missing, message_key = :message, count_for_interpolation = 0)
73
+ def assert_good_or_bad_if_key(key, value, missing, message_key = :message)
74
74
  return true unless @options.key? key
75
75
 
76
76
  if @options[key]
77
- return true if good?(value, message_key, count_for_interpolation)
77
+ return true if good?(value, message_key)
78
78
  missing = 'not ' + missing
79
79
  else
80
- return true if bad?(value, message_key, count_for_interpolation)
80
+ return true if bad?(value, message_key)
81
81
  end
82
82
 
83
83
  @missing = missing
@@ -89,9 +89,9 @@ module Remarkable # :nodoc:
89
89
  # Notice that it checks for @options[:message], so be sure that this option
90
90
  # is properly set.
91
91
  #
92
- def allow_nil?(message_key = :message, count_for_interpolation = 0)
92
+ def allow_nil?(message_key = :message)
93
93
  message = "allow #{@attribute} be set to nil"
94
- assert_good_or_bad_if_key(:allow_nil, nil, message, message_key, count_for_interpolation)
94
+ assert_good_or_bad_if_key(:allow_nil, nil, message, message_key)
95
95
  end
96
96
 
97
97
  # Default allow_blank? validation.
@@ -99,25 +99,25 @@ module Remarkable # :nodoc:
99
99
  # Notice that it checks for @options[:message], so be sure that this option
100
100
  # is properly set.
101
101
  #
102
- def allow_blank?(message_key = :message, count_for_interpolation = 0)
102
+ def allow_blank?(message_key = :message)
103
103
  message = "allow #{@attribute} be set to blank"
104
- assert_good_or_bad_if_key(:allow_blank, '', message, message_key, count_for_interpolation)
104
+ assert_good_or_bad_if_key(:allow_blank, '', message, message_key)
105
105
  end
106
106
 
107
107
  # Shortcut for assert_good_value.
108
108
  # Please notice that it has instance variables hard coded. So do not use
109
109
  # it if you are trying to assert another instance besides @subject.
110
110
  #
111
- def good?(value, message_sym = :message, count_for_interpolation = 0)
112
- assert_good_value(@subject, @attribute, value, @options[message_sym], count_for_interpolation)
111
+ def good?(value, message_sym = :message)
112
+ assert_good_value(@subject, @attribute, value, @options[message_sym])
113
113
  end
114
114
 
115
115
  # Shortcut for assert_bad_value.
116
116
  # Please notice that it has instance variables hard coded. So do not use
117
117
  # it if you are trying to assert another instance besides @subject.
118
118
  #
119
- def bad?(value, message_sym = :message, count_for_interpolation = 0)
120
- assert_bad_value(@subject, @attribute, value, @options[message_sym], count_for_interpolation)
119
+ def bad?(value, message_sym = :message)
120
+ assert_bad_value(@subject, @attribute, value, @options[message_sym])
121
121
  end
122
122
 
123
123
  # Asserts that an Active Record model validates with the passed
@@ -137,13 +137,13 @@ module Remarkable # :nodoc:
137
137
  # @product = Product.new(:tangible => false)
138
138
  # assert_good_value(Product, :price, "0")
139
139
  #
140
- def assert_good_value(object_or_klass, attribute, value, error_message_to_avoid = //, count_for_interpolation = 0) # :nodoc:
140
+ def assert_good_value(object_or_klass, attribute, value, error_message_to_avoid = //) # :nodoc:
141
141
  object = get_instance_of(object_or_klass)
142
142
  object.send("#{attribute}=", value)
143
143
 
144
144
  return true if object.valid?
145
145
 
146
- error_message_to_avoid = error_message_from_model(object, attribute, error_message_to_avoid, count_for_interpolation)
146
+ error_message_to_avoid = error_message_from_model(object, attribute, error_message_to_avoid)
147
147
 
148
148
  assert_does_not_contain(object.errors.on(attribute), error_message_to_avoid)
149
149
  end
@@ -165,14 +165,14 @@ module Remarkable # :nodoc:
165
165
  # @product = Product.new(:tangible => true)
166
166
  # assert_bad_value(Product, :price, "0")
167
167
  #
168
- def assert_bad_value(object_or_klass, attribute, value, error_message_to_expect = :invalid, count_for_interpolation = 0) # :nodoc:
168
+ def assert_bad_value(object_or_klass, attribute, value, error_message_to_expect = :invalid) # :nodoc:
169
169
  object = get_instance_of(object_or_klass)
170
170
  object.send("#{attribute}=", value)
171
171
 
172
172
  return false if object.valid?
173
173
  return false unless object.errors.on(attribute)
174
174
 
175
- error_message_to_expect = error_message_from_model(object, attribute, error_message_to_expect, count_for_interpolation)
175
+ error_message_to_expect = error_message_from_model(object, attribute, error_message_to_expect)
176
176
 
177
177
  assert_contains(object.errors.on(attribute), error_message_to_expect)
178
178
  end
@@ -207,18 +207,25 @@ module Remarkable # :nodoc:
207
207
  # Using the underlying mechanism inside ActiveRecord makes us free from
208
208
  # all thos errors.
209
209
  #
210
- # The count value is used to do interpolation.
210
+ # We replace {{count}} interpolation for __count__ which later is
211
+ # replaced by a regexp which contains \d+.
211
212
  #
212
- def error_message_from_model(model, attribute, message, count_value = 0)
213
+ def error_message_from_model(model, attribute, message) #:nodoc:
213
214
  if message.is_a? Symbol
214
- if Object.const_defined?(:I18n) # Rails >= 2.2
215
- model.errors.generate_message(attribute, message, :count => count_value)
215
+ message = if Object.const_defined?(:I18n) # Rails >= 2.2
216
+ model.errors.generate_message(attribute, message, :count => '__count__')
216
217
  else # Rails <= 2.1
217
- ::ActiveRecord::Errors.default_error_messages[message] % count_value
218
+ ::ActiveRecord::Errors.default_error_messages[message] % '__count__'
219
+ end
220
+
221
+ if message =~ /__count__/
222
+ message = Regexp.escape(message)
223
+ message.gsub!('__count__', '\d+')
224
+ message = /#{message}/
218
225
  end
219
- else
220
- message
221
226
  end
227
+
228
+ message
222
229
  end
223
230
 
224
231
  end
@@ -10,7 +10,7 @@ module Remarkable # :nodoc:
10
10
 
11
11
  # TODO: remove it
12
12
  def of_type(type)
13
- warn "[DEPRECATION] option of_type is deprecated. Use type instead."
13
+ warn "[DEPRECATION] option of_type is deprecated in have_db_column. Use type instead."
14
14
  @options[:type] = type
15
15
  self
16
16
  end
@@ -13,6 +13,7 @@ module Remarkable # :nodoc:
13
13
  #
14
14
  # Options:
15
15
  #
16
+ # * <tt>:in</tt> - values to test exclusion.
16
17
  # * <tt>:allow_nil</tt> - when supplied, validates if it allows nil or not.
17
18
  # * <tt>:allow_blank</tt> - when supplied, validates if it allows blank or not.
18
19
  # * <tt>:message</tt> - value the test expects to find in <tt>errors.on(:attribute)</tt>.
@@ -20,12 +21,27 @@ module Remarkable # :nodoc:
20
21
  #
21
22
  # Example:
22
23
  #
23
- # it { should validate_exclusion_of(:username, "admin", "user") }
24
- # it { should_not validate_exclusion_of(:username, "clark_kent", "peter_park") }
24
+ # it { should validate_exclusion_of(:username, :in => ["admin", "user"]) }
25
+ # it { should validate_exclusion_of(:age, :in => 30..60) }
25
26
  #
26
- # it { should validate_exclusion_of(:age, 30..60) }
27
+ # should_validate_exclusion_of :username, :in => ["admin", "user"]
28
+ # should_validate_exclusion_of :age, :in => 30..60
27
29
  #
28
30
  def validate_exclusion_of(attribute, *good_values)
31
+ # TODO Remove this until the next comment
32
+ options = good_values.extract_options!
33
+
34
+ unless options.key?(:in) || good_values.empty?
35
+ warn "[DEPRECATION] Please use validate_exclusion_of #{attribute.inspect}, :in => #{good_values[0..-2].inspect} " <<
36
+ "instead of validate_exclusion_of #{attribute.inspect}, #{good_values[0..-2].inspect[1..-2]}."
37
+ end
38
+
39
+ options[:in] ||= good_values
40
+
41
+ # From now on is what should be the actual method.
42
+ good_values = [options.delete(:in)].flatten.compact
43
+ good_values << options
44
+
29
45
  if good_values.first.is_a? Range
30
46
  EnsureValueInRangeMatcher.new(attribute, :exclusion, *good_values)
31
47
  else
@@ -13,6 +13,7 @@ module Remarkable # :nodoc:
13
13
  #
14
14
  # Options:
15
15
  #
16
+ # * <tt>:in</tt> - values to test inclusion.
16
17
  # * <tt>:allow_nil</tt> - when supplied, validates if it allows nil or not.
17
18
  # * <tt>:allow_blank</tt> - when supplied, validates if it allows blank or not.
18
19
  # * <tt>:message</tt> - value the test expects to find in <tt>errors.on(:attribute)</tt>.
@@ -20,12 +21,27 @@ module Remarkable # :nodoc:
20
21
  #
21
22
  # Example:
22
23
  #
23
- # it { should validate_inclusion_of(:isbn, "isbn 1 2345 6789 0", "ISBN 1-2345-6789-0") }
24
- # it { should_not validate_inclusion_of(:isbn, "bad 1", "bad 2") }
25
- #
24
+ # it { should validate_inclusion_of(:size, :in => ["S", "M", "L", "XL"]) }
26
25
  # it { should validate_inclusion_of(:age, 18..100) }
27
26
  #
27
+ # should_validate_inclusion_of :size, :in => ["S", "M", "L", "XL"]
28
+ # should_validate_inclusion_of :age, :in => 18..100
29
+ #
28
30
  def validate_inclusion_of(attribute, *good_values)
31
+ # TODO Remove this until the next comment
32
+ options = good_values.extract_options!
33
+
34
+ unless options.key?(:in) || good_values.empty?
35
+ warn "[DEPRECATION] Please use validate_inclusion_of #{attribute.inspect}, :in => #{good_values[0..-2].inspect} " <<
36
+ "instead of validate_inclusion_of #{attribute.inspect}, #{good_values[0..-2].inspect[1..-2]}."
37
+ end
38
+
39
+ options[:in] ||= good_values
40
+
41
+ # From now on is what should be the actual method.
42
+ good_values = [options.delete(:in)].flatten.compact
43
+ good_values << options
44
+
29
45
  if good_values.first.is_a? Range
30
46
  EnsureValueInRangeMatcher.new(attribute, :inclusion, *good_values)
31
47
  else
@@ -70,16 +70,16 @@ module Remarkable # :nodoc:
70
70
  end
71
71
 
72
72
  def allow_nil?
73
- super(:short_message, @options[:minimum])
73
+ super(:short_message)
74
74
  end
75
75
 
76
76
  def allow_blank?
77
- super(:short_message, @options[:minimum])
77
+ super(:short_message)
78
78
  end
79
79
 
80
80
  def less_than_min_length?
81
81
  return true if @behavior == :maximum || @options[:minimum] <= 0
82
- return true if bad?(value_for_length(@options[:minimum] - 1), :short_message, @options[:minimum])
82
+ return true if bad?(value_for_length(@options[:minimum] - 1), :short_message)
83
83
 
84
84
  @missing = "allow #{@attribute} to be less than #{@options[:minimum]} chars long"
85
85
  return false
@@ -87,7 +87,7 @@ module Remarkable # :nodoc:
87
87
 
88
88
  def exactly_min_length?
89
89
  return true if @behavior == :maximum || @options[:minimum] <= 0
90
- return true if good?(value_for_length(@options[:minimum]), :short_message, @options[:minimum])
90
+ return true if good?(value_for_length(@options[:minimum]), :short_message)
91
91
 
92
92
  @missing = "not allow #{@attribute} to be exactly #{@options[:minimum]} chars long"
93
93
  return false
@@ -95,7 +95,7 @@ module Remarkable # :nodoc:
95
95
 
96
96
  def more_than_max_length?
97
97
  return true if @behavior == :minimum
98
- return true if bad?(value_for_length(@options[:maximum] + 1), :long_message, @options[:maximum])
98
+ return true if bad?(value_for_length(@options[:maximum] + 1), :long_message)
99
99
 
100
100
  @missing = "allow #{@attribute} to be more than #{@options[:maximum]} chars long"
101
101
  return false
@@ -103,7 +103,7 @@ module Remarkable # :nodoc:
103
103
 
104
104
  def exactly_max_length?
105
105
  return true if @behavior == :minimum || @options[:minimum] == @options[:maximum]
106
- return true if good?(value_for_length(@options[:maximum]), :long_message, @options[:maximum])
106
+ return true if good?(value_for_length(@options[:maximum]), :long_message)
107
107
 
108
108
  @missing = "not allow #{@attribute} to be exactly #{@options[:maximum]} chars long"
109
109
  return false
@@ -66,7 +66,7 @@ module Remarkable # :nodoc:
66
66
 
67
67
  def equal_to?(key, add = 0)
68
68
  return true unless @options.key?(key)
69
- return true if good?(@options[key] + add, default_message_for(key), @options[key])
69
+ return true if good?(@options[key] + add, default_message_for(key))
70
70
 
71
71
  @missing = "did not allow value equals to #{@options[key]} for #{@attribute}"
72
72
  false
@@ -74,7 +74,7 @@ module Remarkable # :nodoc:
74
74
 
75
75
  def more_than_maximum?(key, add = 0)
76
76
  return true unless @options.key?(key)
77
- return true if bad?(@options[key] + add, default_message_for(key), @options[key])
77
+ return true if bad?(@options[key] + add, default_message_for(key))
78
78
 
79
79
  # We should do @options[key] + add - 1 to adjust messages in less_than cases.
80
80
  @missing = "allowed value #{@options[key] + add} which is more than #{@options[key] + add - 1} for #{@attribute}"
@@ -83,7 +83,7 @@ module Remarkable # :nodoc:
83
83
 
84
84
  def less_than_minimum?(key, add = 0)
85
85
  return true unless @options.key?(key)
86
- return true if bad?(@options[key] + add, default_message_for(key), @options[key])
86
+ return true if bad?(@options[key] + add, default_message_for(key))
87
87
 
88
88
  # We should do @options[key] + add + 1 to adjust messages in greater_than cases.
89
89
  @missing = "allowed value #{@options[key] + add} which is less than #{@options[key] + add + 1} for #{@attribute}"
@@ -50,7 +50,7 @@ module Remarkable # :nodoc:
50
50
 
51
51
  def after_initialize
52
52
  if @options[:scoped_to] # TODO Deprecate scoped_to
53
- warn "[DEPRECATION] :scoped_to is deprecated. Use :scope instead."
53
+ warn "[DEPRECATION] :scoped_to is deprecated in should_validate_uniqueness_of. Use :scope instead."
54
54
  @options[:scope] = [*@options.delete(:scoped_to)].compact
55
55
  else
56
56
  @options[:scope] = [*@options[:scope]].compact
@@ -9,7 +9,7 @@ module Remarkable # :nodoc:
9
9
  @names = names
10
10
  @options[:equals] = block if block_given?
11
11
 
12
- warn "[DEPRECATION] Strings given in :equals to assign_to won't be evaluated anymore. You can give procs or use blocks instead." if @options[:equals].is_a?(String)
12
+ warn "[DEPRECATION] Strings given in :equals to should_assign_to won't be evaluated anymore. You can give procs or use blocks instead." if @options[:equals].is_a?(String)
13
13
  end
14
14
 
15
15
  def matches?(subject)
@@ -34,7 +34,7 @@ module Remarkable # :nodoc:
34
34
  expected_value = if @expected.is_a?(Proc)
35
35
  @spec.instance_eval &@expected
36
36
  else
37
- warn "[DEPRECATION] Strings given to set_session won't be evaluated anymore. Give a block or a proc instead."
37
+ warn "[DEPRECATION] Strings given to should_set_session won't be evaluated anymore. Give a block or a proc instead."
38
38
  @spec.instance_eval(@expected) rescue @expected
39
39
  end
40
40
  return true if @session[@key] == expected_value
@@ -61,7 +61,7 @@ module Remarkable # :nodoc:
61
61
  end
62
62
 
63
63
  def return_from_session(*args, &block)
64
- warn "[DEPRECATION] return_from_session is deprecated. Use set_session instead."
64
+ warn "[DEPRECATION] should_return_from_session is deprecated. Use should_set_session instead."
65
65
  set_session(*args, &block)
66
66
  end
67
67
  end
@@ -22,7 +22,7 @@ module Remarkable # :nodoc:
22
22
  elsif url.is_a?(Proc)
23
23
  self.instance_eval &url
24
24
  else
25
- warn "[DEPRECATION] Strings given to redirect_to won't be evaluated anymore. Give a proc or a block instead." if url.is_a?(String)
25
+ warn "[DEPRECATION] Strings given to should_redirect_to won't be evaluated anymore. Give a proc or a block instead." if url.is_a?(String)
26
26
  self.instance_eval(url) rescue url
27
27
  end
28
28
 
@@ -37,7 +37,7 @@ module Remarkable # :nodoc:
37
37
  elsif url.is_a?(Proc)
38
38
  self.instance_eval &url
39
39
  else
40
- warn "[DEPRECATION] Strings given to redirect_to won't be evaluated anymore. Give a proc or a block instead." if url.is_a?(String)
40
+ warn "[DEPRECATION] Strings given to should_not_redirect_to won't be evaluated anymore. Give a proc or a block instead." if url.is_a?(String)
41
41
  self.instance_eval(url) rescue url
42
42
  end
43
43
 
data/lib/remarkable.rb CHANGED
@@ -2,7 +2,7 @@ $:.unshift(File.dirname(__FILE__)) unless
2
2
  $:.include?(File.dirname(__FILE__)) || $:.include?(File.expand_path(File.dirname(__FILE__)))
3
3
 
4
4
  module Remarkable
5
- VERSION = '2.2.4'
5
+ VERSION = '2.2.7'
6
6
  end
7
7
 
8
8
  if ENV['RAILS_ENV'] == 'test'
data/remarkable.gemspec CHANGED
@@ -2,7 +2,7 @@
2
2
 
3
3
  Gem::Specification.new do |s|
4
4
  s.name = %q{remarkable}
5
- s.version = "2.2.6"
5
+ s.version = "2.2.7"
6
6
 
7
7
  s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
8
8
  s.authors = ["Carlos Brando", "Jos\303\251 Valim", "Diego Carrion"]
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: carlosbrando-remarkable
3
3
  version: !ruby/object:Gem::Version
4
- version: 2.2.6
4
+ version: 2.2.7
5
5
  platform: ruby
6
6
  authors:
7
7
  - Carlos Brando