remarkable_activerecord 3.1.9 → 3.1.10

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.
@@ -181,7 +181,11 @@ module Remarkable
181
181
  def error_message_from_model(model, attribute, message) #:nodoc:
182
182
  if message.is_a? Symbol
183
183
  message = if RAILS_I18N # Rails >= 2.2
184
- model.errors.generate_message(attribute, message, :count => '12345')
184
+ if ::ActiveRecord.const_defined?(:Error)
185
+ ::ActiveRecord::Error.new(model, attribute, message, :count => '12345').to_s
186
+ else
187
+ model.errors.generate_message(attribute, message, :count => '12345')
188
+ end
185
189
  else # Rails <= 2.1
186
190
  ::ActiveRecord::Errors.default_error_messages[message] % '12345'
187
191
  end
@@ -108,7 +108,6 @@ module Remarkable
108
108
  def describe(*args, &block)
109
109
  if described_class && args.first.is_a?(Hash)
110
110
  attributes = args.shift
111
-
112
111
  connector = Remarkable.t "remarkable.active_record.describe.connector", :default => " and "
113
112
 
114
113
  description = if self.describe_subject_attributes.blank?
@@ -130,7 +129,7 @@ module Remarkable
130
129
  :key => translated_key.downcase, :value => value.inspect)
131
130
  end
132
131
 
133
- description << pieces.join(connector)
132
+ description += pieces.join(connector)
134
133
  args.unshift(description)
135
134
 
136
135
  # Creates an example group, set the subject and eval the given block.
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: remarkable_activerecord
3
3
  version: !ruby/object:Gem::Version
4
- version: 3.1.9
4
+ version: 3.1.10
5
5
  platform: ruby
6
6
  authors:
7
7
  - Carlos Brando
@@ -11,7 +11,7 @@ autorequire:
11
11
  bindir: bin
12
12
  cert_chain: []
13
13
 
14
- date: 2009-08-30 00:00:00 +02:00
14
+ date: 2009-10-01 00:00:00 -03:00
15
15
  default_executable:
16
16
  dependencies:
17
17
  - !ruby/object:Gem::Dependency
@@ -32,7 +32,7 @@ dependencies:
32
32
  requirements:
33
33
  - - ~>
34
34
  - !ruby/object:Gem::Version
35
- version: 3.1.9
35
+ version: 3.1.10
36
36
  version:
37
37
  description: "Remarkable ActiveRecord: collection of matchers and macros with I18n for ActiveRecord"
38
38
  email:
@@ -52,26 +52,26 @@ files:
52
52
  - LICENSE
53
53
  - CHANGELOG
54
54
  - lib/remarkable_activerecord/base.rb
55
- - lib/remarkable_activerecord/human_names.rb
56
55
  - lib/remarkable_activerecord/describe.rb
57
- - lib/remarkable_activerecord/matchers/validate_confirmation_of_matcher.rb
58
- - lib/remarkable_activerecord/matchers/validate_length_of_matcher.rb
59
- - lib/remarkable_activerecord/matchers/have_default_scope_matcher.rb
60
- - lib/remarkable_activerecord/matchers/have_readonly_attributes_matcher.rb
56
+ - lib/remarkable_activerecord/human_names.rb
61
57
  - lib/remarkable_activerecord/matchers/accept_nested_attributes_for_matcher.rb
62
- - lib/remarkable_activerecord/matchers/validate_exclusion_of_matcher.rb
63
- - lib/remarkable_activerecord/matchers/validate_associated_matcher.rb
64
- - lib/remarkable_activerecord/matchers/have_column_matcher.rb
65
- - lib/remarkable_activerecord/matchers/association_matcher.rb
66
- - lib/remarkable_activerecord/matchers/validate_presence_of_matcher.rb
67
- - lib/remarkable_activerecord/matchers/have_scope_matcher.rb
58
+ - lib/remarkable_activerecord/matchers/allow_mass_assignment_of_matcher.rb
68
59
  - lib/remarkable_activerecord/matchers/allow_values_for_matcher.rb
60
+ - lib/remarkable_activerecord/matchers/association_matcher.rb
61
+ - lib/remarkable_activerecord/matchers/have_column_matcher.rb
62
+ - lib/remarkable_activerecord/matchers/have_default_scope_matcher.rb
69
63
  - lib/remarkable_activerecord/matchers/have_index_matcher.rb
70
- - lib/remarkable_activerecord/matchers/validate_inclusion_of_matcher.rb
64
+ - lib/remarkable_activerecord/matchers/have_readonly_attributes_matcher.rb
65
+ - lib/remarkable_activerecord/matchers/have_scope_matcher.rb
71
66
  - lib/remarkable_activerecord/matchers/validate_acceptance_of_matcher.rb
72
- - lib/remarkable_activerecord/matchers/validate_uniqueness_of_matcher.rb
67
+ - lib/remarkable_activerecord/matchers/validate_associated_matcher.rb
68
+ - lib/remarkable_activerecord/matchers/validate_confirmation_of_matcher.rb
69
+ - lib/remarkable_activerecord/matchers/validate_exclusion_of_matcher.rb
70
+ - lib/remarkable_activerecord/matchers/validate_inclusion_of_matcher.rb
71
+ - lib/remarkable_activerecord/matchers/validate_length_of_matcher.rb
73
72
  - lib/remarkable_activerecord/matchers/validate_numericality_of_matcher.rb
74
- - lib/remarkable_activerecord/matchers/allow_mass_assignment_of_matcher.rb
73
+ - lib/remarkable_activerecord/matchers/validate_presence_of_matcher.rb
74
+ - lib/remarkable_activerecord/matchers/validate_uniqueness_of_matcher.rb
75
75
  - lib/remarkable_activerecord.rb
76
76
  - locale/en.yml
77
77
  has_rdoc: true
@@ -98,31 +98,9 @@ required_rubygems_version: !ruby/object:Gem::Requirement
98
98
  requirements: []
99
99
 
100
100
  rubyforge_project: remarkable
101
- rubygems_version: 1.3.5
101
+ rubygems_version: 1.3.4
102
102
  signing_key:
103
103
  specification_version: 3
104
104
  summary: "Remarkable ActiveRecord: collection of matchers and macros with I18n for ActiveRecord"
105
- test_files:
106
- - spec/validate_associated_matcher_spec.rb
107
- - spec/validate_length_of_matcher_spec.rb
108
- - spec/rcov.opts
109
- - spec/spec_helper.rb
110
- - spec/validate_acceptance_of_matcher_spec.rb
111
- - spec/accept_nested_attributes_for_matcher_spec.rb
112
- - spec/describe_spec.rb
113
- - spec/allow_mass_assignment_of_matcher_spec.rb
114
- - spec/have_scope_matcher_spec.rb
115
- - spec/validate_inclusion_of_matcher_spec.rb
116
- - spec/spec.opts
117
- - spec/have_readonly_attributes_matcher_spec.rb
118
- - spec/validate_confirmation_of_matcher_spec.rb
119
- - spec/allow_values_for_matcher_spec.rb
120
- - spec/validate_uniqueness_of_matcher_spec.rb
121
- - spec/have_column_matcher_spec.rb
122
- - spec/have_default_scope_matcher_spec.rb
123
- - spec/have_index_matcher_spec.rb
124
- - spec/association_matcher_spec.rb
125
- - spec/validate_exclusion_of_matcher_spec.rb
126
- - spec/model_builder.rb
127
- - spec/validate_numericality_of_matcher_spec.rb
128
- - spec/validate_presence_of_matcher_spec.rb
105
+ test_files: []
106
+
@@ -1,130 +0,0 @@
1
- require File.expand_path(File.dirname(__FILE__) + '/spec_helper')
2
-
3
- if RAILS_VERSION == '2.3.3'
4
- describe 'accept_nested_attributes_for' do
5
- include ModelBuilder
6
-
7
- def define_and_validate(default=:category, options={})
8
- @model = define_model :product do
9
- has_one :category
10
- has_many :orders
11
- has_many :labels
12
- has_many :tags, :autosave => true
13
-
14
- accepts_nested_attributes_for :category, options
15
- accepts_nested_attributes_for :orders, options
16
- end
17
-
18
- accept_nested_attributes_for *default
19
- end
20
-
21
- describe 'messages' do
22
-
23
- it 'should contain a description' do
24
- matcher = define_and_validate
25
- matcher.description.should == 'accept nested attributes for category'
26
-
27
- matcher.allow_destroy
28
- matcher.description.should == 'accept nested attributes for category allowing destroy'
29
-
30
- matcher.accept(:name => 'jose')
31
- matcher.accept(:name => 'maria')
32
- matcher.description.should == 'accept nested attributes for category allowing destroy and accepting {:name=>"jose"} and {:name=>"maria"}'
33
- end
34
-
35
- it 'should set association_match? message' do
36
- matcher = define_and_validate(:nothing)
37
- matcher.matches?(@model)
38
- matcher.failure_message.should == 'Expected Product to have association nothing, but does not'
39
- end
40
-
41
- it 'should set is_autosave? message' do
42
- matcher = define_and_validate(:labels)
43
- matcher.matches?(@model)
44
- matcher.failure_message.should == 'Expected Product to have association labels with autosave true, got false'
45
- end
46
-
47
- it 'should set responds_to_attributes? message' do
48
- matcher = define_and_validate(:tags)
49
- matcher.matches?(@model)
50
- matcher.failure_message.should == 'Expected Product to respond to :tags_attributes=, but does not'
51
- end
52
-
53
- it 'should set allows_destroy? message' do
54
- matcher = define_and_validate(:category, :allow_destroy => false)
55
- matcher.allow_destroy.matches?(@model)
56
- matcher.failure_message.should == 'Expected Product with allow destroy equals to true, got false'
57
- end
58
-
59
- it 'should set accepts? message' do
60
- matcher = define_and_validate(:category, :reject_if => proc{|a| true })
61
- matcher.accept({}).matches?(@model)
62
- matcher.failure_message.should == 'Expected Product to accept attributes {} for category, but does not'
63
- end
64
-
65
- it 'should set rejects? message' do
66
- matcher = define_and_validate(:category, :reject_if => proc{|a| false })
67
- matcher.reject({}).matches?(@model)
68
- matcher.failure_message.should == 'Expected Product to reject attributes {} for category, but does not'
69
- end
70
-
71
- end
72
-
73
- describe 'matchers' do
74
- it { should define_and_validate(:category) }
75
- it { should define_and_validate(:orders) }
76
-
77
- it { should_not define_and_validate(:nothing) }
78
- it { should_not define_and_validate(:labels) }
79
- it { should_not define_and_validate(:tags) }
80
-
81
- describe 'with allow destroy as option' do
82
- it { should define_and_validate(:category, :allow_destroy => true).allow_destroy }
83
- it { should define_and_validate(:category, :allow_destroy => false).allow_destroy(false) }
84
- it { should_not define_and_validate(:category, :allow_destroy => false).allow_destroy }
85
- it { should_not define_and_validate(:category, :allow_destroy => true).allow_destroy(false) }
86
-
87
- it { should define_and_validate(:orders, :allow_destroy => true).allow_destroy }
88
- it { should define_and_validate(:orders, :allow_destroy => false).allow_destroy(false) }
89
- it { should_not define_and_validate(:orders, :allow_destroy => false).allow_destroy }
90
- it { should_not define_and_validate(:orders, :allow_destroy => true).allow_destroy(false) }
91
- end
92
-
93
- describe 'with accept as option' do
94
- it { should define_and_validate(:category, :reject_if => proc{ |a| a[:name].blank? }).accept({ :name => 'Jose' }) }
95
- it { should define_and_validate(:category, :reject_if => proc{ |a| a[:name].blank? }).accept({ :name => 'Jose' }, { :name => 'Maria' }) }
96
- it { should_not define_and_validate(:category, :reject_if => proc{ |a| a[:name].blank? }).accept({ :name => '' }) }
97
- end
98
-
99
- describe 'with reject as option' do
100
- it { should define_and_validate(:category, :reject_if => proc{ |a| !a[:name].blank? }).reject({ :name => 'Jose' }) }
101
- it { should define_and_validate(:category, :reject_if => proc{ |a| !a[:name].blank? }).reject({ :name => 'Jose' }, { :name => 'Maria' }) }
102
- it { should_not define_and_validate(:category, :reject_if => proc{ |a| !a[:name].blank? }).reject({ :name => '' }) }
103
- end
104
- end
105
-
106
- describe 'macros' do
107
- before(:each){ define_and_validate(:category, :allow_destroy => true, :reject_if => proc{ |a| a[:name].blank? }) }
108
-
109
- should_accept_nested_attributes_for :category
110
- should_accept_nested_attributes_for :category, :allow_destroy => true
111
- should_accept_nested_attributes_for :category, :accept => { :name => 'Jose' }
112
- should_accept_nested_attributes_for :category, :accept => [ { :name => 'Jose' }, { :name => 'Maria' } ]
113
- should_accept_nested_attributes_for :category, :reject => [ { :name => '' } ]
114
-
115
- should_accept_nested_attributes_for :category do |m|
116
- m.allow_destroy
117
- m.accept :name => "Jose"
118
- m.accept :name => "Maria"
119
- m.reject :name => ""
120
- end
121
-
122
- should_not_accept_nested_attributes_for :nothing
123
- should_not_accept_nested_attributes_for :labels
124
- should_not_accept_nested_attributes_for :tags
125
- should_not_accept_nested_attributes_for :category, :allow_destroy => false
126
- should_not_accept_nested_attributes_for :category, :accept => [ { :name => '' } ]
127
- should_not_accept_nested_attributes_for :category, :reject => [ { :name => 'Jose' }, { :name => 'Maria' } ]
128
- end
129
- end
130
- end
@@ -1,106 +0,0 @@
1
- require File.expand_path(File.dirname(__FILE__) + '/spec_helper')
2
-
3
- describe 'allow_mass_assignment_of' do
4
- include ModelBuilder
5
-
6
- def define_and_validate(options={})
7
- @model = define_model :product, :title => :string, :category => :string do
8
- attr_protected :title, :category if options[:protected]
9
-
10
- attr_accessible :title, :category if options[:accessible] == true
11
- attr_accessible *options[:accessible] if options[:accessible].is_a?(Array)
12
- end
13
-
14
- allow_mass_assignment_of(:title, :category)
15
- end
16
-
17
- describe 'messages' do
18
-
19
- it 'should contain a description' do
20
- @matcher = allow_mass_assignment_of(:title, :category)
21
- @matcher.description.should == 'allow mass assignment of title and category'
22
- end
23
-
24
- it 'should set allows? message' do
25
- define_and_validate(:protected => true)
26
- @matcher = allow_mass_assignment_of
27
- @matcher.matches?(@model)
28
- @matcher.failure_message.should == 'Expected Product to allow mass assignment (Product is protecting category and title)'
29
- end
30
-
31
- it 'should set is_protected? message' do
32
- @matcher = define_and_validate(:protected => true)
33
- @matcher.matches?(@model)
34
- @matcher.failure_message.should == 'Expected Product to allow mass assignment of title (Product is protecting title)'
35
- end
36
-
37
- it 'should set is_accessible? message' do
38
- @matcher = define_and_validate(:accessible => [:another])
39
- @matcher.matches?(@model)
40
- @matcher.failure_message.should == 'Expected Product to allow mass assignment of title (Product has not made title accessible)'
41
- end
42
-
43
- end
44
-
45
- describe 'matchers' do
46
- it { should define_and_validate }
47
- it { should define_and_validate(:accessible => true) }
48
-
49
- it { should_not define_and_validate(:protected => true) }
50
- it { should_not define_and_validate(:accessible => [:another]) }
51
-
52
- describe 'with no argument' do
53
- it 'should allow mass assignment if no attribute is accessible or protected' do
54
- define_and_validate
55
- should allow_mass_assignment_of
56
- end
57
-
58
- it 'should allow mass assignment if attributes are accessible' do
59
- define_and_validate(:accessible => true)
60
- should allow_mass_assignment_of
61
- end
62
-
63
- it 'should not allow mass assignment if attributes are protected' do
64
- define_and_validate(:protected => true)
65
- should_not allow_mass_assignment_of
66
- end
67
- end
68
- end
69
-
70
- describe 'macros' do
71
- before(:each){ define_and_validate(:accessible => true) }
72
-
73
- should_allow_mass_assignment_of :title
74
- should_allow_mass_assignment_of :category
75
- should_allow_mass_assignment_of :title, :category
76
-
77
- should_not_allow_mass_assignment_of :another
78
- end
79
-
80
- describe 'failures' do
81
- it "should fail if some attribute is accessible when it shuold be protected" do
82
- define_and_validate(:accessible => true)
83
-
84
- lambda {
85
- should_not allow_mass_assignment_of :title, :another
86
- }.should raise_error(Spec::Expectations::ExpectationNotMetError, /Product has made title accessible/)
87
- end
88
-
89
- it "should fail if attributes are accessible when none should" do
90
- define_and_validate(:accessible => true)
91
-
92
- lambda {
93
- should_not allow_mass_assignment_of
94
- }.should raise_error(Spec::Expectations::ExpectationNotMetError, /Product made category and title accessible/)
95
- end
96
-
97
- it "should fail if nothing was declared but expected to be protected" do
98
- define_and_validate
99
-
100
- lambda {
101
- should_not allow_mass_assignment_of(:title)
102
- }.should raise_error(Spec::Expectations::ExpectationNotMetError, /Did not expect Product to allow mass assignment of title/)
103
- end
104
- end
105
- end
106
-
@@ -1,80 +0,0 @@
1
- require File.expand_path(File.dirname(__FILE__) + '/spec_helper')
2
-
3
- describe 'allow_values_for' do
4
- include ModelBuilder
5
-
6
- # Defines a model, create a validation and returns a raw matcher
7
- def define_and_validate(options={})
8
- @model = define_model :product, :title => :string, :category => :string do
9
- validates_format_of :title, options
10
- end
11
-
12
- allow_values_for(:title)
13
- end
14
-
15
- describe 'messages' do
16
- before(:each){ @matcher = define_and_validate(:with => /X|Y|Z/) }
17
-
18
- it 'should contain a description' do
19
- @matcher = allow_values_for(:title, "X", "Y", "Z")
20
- @matcher.description.should == 'allow "X", "Y", and "Z" as values for title'
21
- end
22
-
23
- it 'should set is_valid? message' do
24
- @matcher.in("A").matches?(@model)
25
- @matcher.failure_message.should == 'Expected Product to be valid when title is set to "A"'
26
- end
27
-
28
- it 'should set allow_nil? message' do
29
- @matcher.allow_nil.matches?(@model)
30
- @matcher.failure_message.should == 'Expected Product to allow nil values for title'
31
- end
32
-
33
- it 'should set allow_blank? message' do
34
- @matcher.allow_blank.matches?(@model)
35
- @matcher.failure_message.should == 'Expected Product to allow blank values for title'
36
- end
37
- end
38
-
39
- describe 'matchers' do
40
- it { should define_and_validate(:with => /X|Y|Z/).in('X', 'Y', 'Z') }
41
-
42
- it { should_not define_and_validate(:with => /X|Y|Z/).in('A') }
43
- it { should_not define_and_validate(:with => /X|Y|Z/, :message => 'invalid').in('A') }
44
-
45
- create_optional_boolean_specs(:allow_nil, self, :with => /X|Y|Z/)
46
- create_optional_boolean_specs(:allow_blank, self, :with => /X|Y|Z/)
47
- end
48
-
49
- describe 'macros' do
50
- before(:each){ define_and_validate(:with => /X|Y|Z/) }
51
-
52
- should_allow_values_for :title, 'X'
53
- should_not_allow_values_for :title, 'A'
54
- end
55
-
56
- describe 'failures' do
57
- before(:each) do
58
- define_and_validate(:with => /X|Y|Z/)
59
- end
60
-
61
- it "should fail if any of the values are valid on invalid cases" do
62
- lambda {
63
- should_not allow_values_for :title, 'A', 'X', 'B'
64
- }.should raise_error(Spec::Expectations::ExpectationNotMetError, /Did not expect Product to be valid/)
65
- end
66
-
67
- it "should also fail if all values are valid" do
68
- lambda {
69
- should_not allow_values_for :title, 'X', 'Y', 'Z'
70
- }.should raise_error(Spec::Expectations::ExpectationNotMetError, /Did not expect Product to be valid/)
71
- end
72
-
73
- it "should not fail if all values are invalid" do
74
- lambda {
75
- should_not allow_values_for :title, 'A', 'B', 'C'
76
- }.should_not raise_error
77
- end
78
- end
79
- end
80
-