remarkable_activerecord 3.1.8 → 3.1.9

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 (48) hide show
  1. data/CHANGELOG +140 -138
  2. data/LICENSE +20 -20
  3. data/README +80 -80
  4. data/lib/remarkable_activerecord.rb +29 -29
  5. data/lib/remarkable_activerecord/base.rb +248 -237
  6. data/lib/remarkable_activerecord/describe.rb +27 -27
  7. data/lib/remarkable_activerecord/human_names.rb +36 -36
  8. data/lib/remarkable_activerecord/matchers/accept_nested_attributes_for_matcher.rb +30 -30
  9. data/lib/remarkable_activerecord/matchers/allow_mass_assignment_of_matcher.rb +59 -59
  10. data/lib/remarkable_activerecord/matchers/allow_values_for_matcher.rb +85 -94
  11. data/lib/remarkable_activerecord/matchers/association_matcher.rb +283 -283
  12. data/lib/remarkable_activerecord/matchers/have_column_matcher.rb +68 -68
  13. data/lib/remarkable_activerecord/matchers/have_default_scope_matcher.rb +38 -38
  14. data/lib/remarkable_activerecord/matchers/have_index_matcher.rb +73 -73
  15. data/lib/remarkable_activerecord/matchers/have_readonly_attributes_matcher.rb +30 -30
  16. data/lib/remarkable_activerecord/matchers/have_scope_matcher.rb +85 -85
  17. data/lib/remarkable_activerecord/matchers/validate_acceptance_of_matcher.rb +50 -50
  18. data/lib/remarkable_activerecord/matchers/validate_associated_matcher.rb +97 -97
  19. data/lib/remarkable_activerecord/matchers/validate_confirmation_of_matcher.rb +44 -44
  20. data/lib/remarkable_activerecord/matchers/validate_exclusion_of_matcher.rb +53 -53
  21. data/lib/remarkable_activerecord/matchers/validate_inclusion_of_matcher.rb +52 -52
  22. data/lib/remarkable_activerecord/matchers/validate_length_of_matcher.rb +150 -150
  23. data/lib/remarkable_activerecord/matchers/validate_numericality_of_matcher.rb +181 -181
  24. data/lib/remarkable_activerecord/matchers/validate_presence_of_matcher.rb +29 -29
  25. data/lib/remarkable_activerecord/matchers/validate_uniqueness_of_matcher.rb +233 -233
  26. data/locale/en.yml +261 -261
  27. data/spec/accept_nested_attributes_for_matcher_spec.rb +1 -1
  28. data/spec/allow_mass_assignment_of_matcher_spec.rb +90 -82
  29. data/spec/allow_values_for_matcher_spec.rb +72 -63
  30. data/spec/association_matcher_spec.rb +612 -612
  31. data/spec/describe_spec.rb +3 -3
  32. data/spec/have_column_matcher_spec.rb +73 -73
  33. data/spec/have_default_scope_matcher_spec.rb +1 -1
  34. data/spec/have_index_matcher_spec.rb +87 -87
  35. data/spec/have_readonly_attributes_matcher_spec.rb +47 -47
  36. data/spec/have_scope_matcher_spec.rb +77 -77
  37. data/spec/model_builder.rb +101 -101
  38. data/spec/rcov.opts +1 -1
  39. data/spec/spec.opts +4 -4
  40. data/spec/spec_helper.rb +27 -27
  41. data/spec/validate_acceptance_of_matcher_spec.rb +68 -68
  42. data/spec/validate_associated_matcher_spec.rb +121 -121
  43. data/spec/validate_confirmation_of_matcher_spec.rb +58 -58
  44. data/spec/validate_length_of_matcher_spec.rb +218 -218
  45. data/spec/validate_numericality_of_matcher_spec.rb +179 -179
  46. data/spec/validate_presence_of_matcher_spec.rb +56 -56
  47. data/spec/validate_uniqueness_of_matcher_spec.rb +164 -164
  48. metadata +5 -5
@@ -1,4 +1,4 @@
1
- require File.expand_path(File.dirname(__FILE__) + '/spec_helper')
1
+ require File.expand_path(File.dirname(__FILE__) + '/spec_helper')
2
2
 
3
3
  RAILS_I18n = true
4
4
 
@@ -15,7 +15,7 @@ class Post
15
15
  "MyPost"
16
16
  end
17
17
  end
18
-
18
+
19
19
  describe Post do
20
20
  it "should use human name on description" do
21
21
  self.class.description.should == "MyPost"
@@ -99,4 +99,4 @@ describe Post do
99
99
  self.class.description.should match(/published is true/)
100
100
  end
101
101
  end
102
- end
102
+ end
@@ -1,78 +1,78 @@
1
- require File.expand_path(File.dirname(__FILE__) + '/spec_helper')
2
-
3
- describe 'have_column_matcher' do
4
- include ModelBuilder
5
-
6
- before(:each) do
7
- @model = define_model :product, :table => lambda {|table|
8
- table.string :name, :null => true
9
- table.string :email, :limit => '255', :default => 'jose.valim@gmail.com'
10
- table.decimal :price, :precision => 10, :scale => 2
11
- }
12
- end
13
-
14
- describe 'messages' do
15
-
16
- it 'should contain a description' do
17
- @matcher = have_column(:name, :email)
18
- @matcher.description.should == 'have column(s) named name and email'
19
-
20
- @matcher.type(:string)
21
- @matcher.description.should == 'have column(s) named name and email with type :string'
22
- end
23
-
24
- it 'should set column_exists? message' do
25
- @matcher = have_column(:password)
26
- @matcher.matches?(@model)
27
- @matcher.failure_message.should == 'Expected Product to have column named password'
28
- end
29
-
30
- it 'should set options_match? message' do
31
- @matcher = have_column(:name, :type => :integer)
32
- @matcher.matches?(@model)
33
- @matcher.failure_message.should == 'Expected Product to have column name with options {:type=>"integer"}, got {:type=>"string"}'
34
- end
35
- end
36
-
37
- describe 'matchers' do
38
- it { should have_column(:name) }
39
- it { should have_columns(:name, :email) }
40
- it { should have_columns(:name, :email, :price) }
41
-
42
- it { should have_column(:name).null }
43
- it { should have_column(:email).limit(255) }
44
- it { should have_column(:email).default('jose.valim@gmail.com') }
45
- it { should have_column(:price).precision(10) }
46
- it { should have_column(:price).precision(10).scale(2) }
47
-
48
- it { should_not have_column(:name).null(false) }
49
- it { should_not have_column(:email).limit(400) }
50
- it { should_not have_column(:email).default('') }
51
- it { should_not have_column(:price).precision(1) }
52
- it { should_not have_column(:price).precision(10).scale(5) }
53
- end
54
-
55
- describe 'macros' do
56
- should_have_column :name
57
- should_have_columns :name, :email
58
- should_have_columns :name, :email, :price
59
-
60
- should_have_column :name, :null => true
61
- should_have_column :email, :limit => 255
62
- should_have_column :email, :default => 'jose.valim@gmail.com'
63
- should_have_column :price, :precision => 10
1
+ require File.expand_path(File.dirname(__FILE__) + '/spec_helper')
2
+
3
+ describe 'have_column_matcher' do
4
+ include ModelBuilder
5
+
6
+ before(:each) do
7
+ @model = define_model :product, :table => lambda {|table|
8
+ table.string :name, :null => true
9
+ table.string :email, :limit => '255', :default => 'jose.valim@gmail.com'
10
+ table.decimal :price, :precision => 10, :scale => 2
11
+ }
12
+ end
13
+
14
+ describe 'messages' do
15
+
16
+ it 'should contain a description' do
17
+ @matcher = have_column(:name, :email)
18
+ @matcher.description.should == 'have column(s) named name and email'
19
+
20
+ @matcher.type(:string)
21
+ @matcher.description.should == 'have column(s) named name and email with type :string'
22
+ end
23
+
24
+ it 'should set column_exists? message' do
25
+ @matcher = have_column(:password)
26
+ @matcher.matches?(@model)
27
+ @matcher.failure_message.should == 'Expected Product to have column named password'
28
+ end
29
+
30
+ it 'should set options_match? message' do
31
+ @matcher = have_column(:name, :type => :integer)
32
+ @matcher.matches?(@model)
33
+ @matcher.failure_message.should == 'Expected Product to have column name with options {:type=>"integer"}, got {:type=>"string"}'
34
+ end
35
+ end
36
+
37
+ describe 'matchers' do
38
+ it { should have_column(:name) }
39
+ it { should have_columns(:name, :email) }
40
+ it { should have_columns(:name, :email, :price) }
41
+
42
+ it { should have_column(:name).null }
43
+ it { should have_column(:email).limit(255) }
44
+ it { should have_column(:email).default('jose.valim@gmail.com') }
45
+ it { should have_column(:price).precision(10) }
46
+ it { should have_column(:price).precision(10).scale(2) }
47
+
48
+ it { should_not have_column(:name).null(false) }
49
+ it { should_not have_column(:email).limit(400) }
50
+ it { should_not have_column(:email).default('') }
51
+ it { should_not have_column(:price).precision(1) }
52
+ it { should_not have_column(:price).precision(10).scale(5) }
53
+ end
54
+
55
+ describe 'macros' do
56
+ should_have_column :name
57
+ should_have_columns :name, :email
58
+ should_have_columns :name, :email, :price
59
+
60
+ should_have_column :name, :null => true
61
+ should_have_column :email, :limit => 255
62
+ should_have_column :email, :default => 'jose.valim@gmail.com'
63
+ should_have_column :price, :precision => 10
64
64
  should_have_column :price, :precision => 10, :scale => 2
65
65
 
66
66
  should_have_column :price do |m|
67
67
  m.scale = 2
68
68
  m.precision = 10
69
- end
70
-
71
- should_not_have_column :name, :null => false
72
- should_not_have_column :email, :limit => 400
73
- should_not_have_column :email, :default => ''
74
- should_not_have_column :price, :precision => 1
75
- should_not_have_column :price, :precision => 10, :scale => 5
76
- end
77
- end
78
-
69
+ end
70
+
71
+ should_not_have_column :name, :null => false
72
+ should_not_have_column :email, :limit => 400
73
+ should_not_have_column :email, :default => ''
74
+ should_not_have_column :price, :precision => 1
75
+ should_not_have_column :price, :precision => 10, :scale => 5
76
+ end
77
+ end
78
+
@@ -1,6 +1,6 @@
1
1
  require File.expand_path(File.dirname(__FILE__) + '/spec_helper')
2
2
 
3
- if RAILS_VERSION == '2.3.2'
3
+ if RAILS_VERSION == '2.3.3'
4
4
  describe 'have_default_scope' do
5
5
  include ModelBuilder
6
6
 
@@ -1,87 +1,87 @@
1
- require File.expand_path(File.dirname(__FILE__) + '/spec_helper')
2
-
3
- describe 'have_index_matcher' do
4
- include ModelBuilder
5
-
6
- before(:each) do
7
- @model = define_model :users, :table => lambda {|table|
8
- table.string :name, :null => true
9
- table.string :email, :limit => '255', :default => 'jose.valim@gmail.com'
10
- }
11
-
12
- create_table "users_watchers" do |t|
13
- t.integer :user_id
14
- t.integer :watcher_id
15
- end
16
-
17
- ActiveRecord::Base.connection.add_index :users, :name
18
- ActiveRecord::Base.connection.add_index :users, :email, :unique => true
19
- ActiveRecord::Base.connection.add_index :users, [:email, :name], :unique => true
20
- ActiveRecord::Base.connection.add_index :users_watchers, :user_id
21
- end
22
-
23
- describe 'messages' do
24
- it 'should contain a description' do
25
- @matcher = have_index(:name)
26
- @matcher.description.should == 'have index for column(s) name'
27
-
28
- @matcher.unique
29
- @matcher.description.should == 'have index for column(s) name with unique values'
30
-
31
- @matcher.table_name("another")
32
- @matcher.description.should == 'have index for column(s) name on table another and with unique values'
33
- end
34
-
35
- it 'should set index_exists? message' do
36
- @matcher = have_index(:password).table_name("special_users")
37
- @matcher.matches?(@model)
38
- @matcher.failure_message.should == 'Expected index password to exist on table special_users'
39
- end
40
-
41
- it 'should set is_unique? message' do
42
- @matcher = have_index(:email, :unique => false)
43
- @matcher.matches?(@model)
44
- @matcher.failure_message.should == 'Expected index on email with unique equals to false, got true'
45
- end
46
- end
47
-
48
- describe 'matchers' do
49
- it { should have_index(:name) }
50
- it { should have_index(:email) }
51
- it { should have_index([:email, :name]) }
52
- it { should have_index(:name, :email) }
53
-
54
- it { should have_index(:name).unique(false) }
55
- it { should have_index(:email).unique }
56
- it { should have_index(:user_id).table_name(:users_watchers) }
57
-
58
- it { should_not have_index(:password) }
59
- it { should_not have_index(:name).unique(true) }
60
- it { should_not have_index(:email).unique(false) }
61
- it { should_not have_index(:watcher_id).table_name(:users_watchers) }
62
- end
63
-
64
- describe 'macros' do
65
- should_have_index :name
66
- should_have_index :email
67
- should_have_index [:email, :name]
68
- should_have_index :name, :email
69
-
70
- should_have_index :name, :unique => false
71
- should_have_index :email, :unique => true
72
- should_have_index :user_id, :table_name => :users_watchers
73
-
74
- should_not_have_index :password
75
- should_not_have_index :name, :unique => true
76
- should_not_have_index :email, :unique => false
77
- should_not_have_index :watcher_id, :table_name => :users_watchers
78
- end
79
-
80
- describe "aliases" do
81
- should_have_indices :name
82
- should_have_db_index :name
83
- should_have_db_indices :name
84
- end
85
-
86
- end
87
-
1
+ require File.expand_path(File.dirname(__FILE__) + '/spec_helper')
2
+
3
+ describe 'have_index_matcher' do
4
+ include ModelBuilder
5
+
6
+ before(:each) do
7
+ @model = define_model :users, :table => lambda {|table|
8
+ table.string :name, :null => true
9
+ table.string :email, :limit => '255', :default => 'jose.valim@gmail.com'
10
+ }
11
+
12
+ create_table "users_watchers" do |t|
13
+ t.integer :user_id
14
+ t.integer :watcher_id
15
+ end
16
+
17
+ ActiveRecord::Base.connection.add_index :users, :name
18
+ ActiveRecord::Base.connection.add_index :users, :email, :unique => true
19
+ ActiveRecord::Base.connection.add_index :users, [:email, :name], :unique => true
20
+ ActiveRecord::Base.connection.add_index :users_watchers, :user_id
21
+ end
22
+
23
+ describe 'messages' do
24
+ it 'should contain a description' do
25
+ @matcher = have_index(:name)
26
+ @matcher.description.should == 'have index for column(s) name'
27
+
28
+ @matcher.unique
29
+ @matcher.description.should == 'have index for column(s) name with unique values'
30
+
31
+ @matcher.table_name("another")
32
+ @matcher.description.should == 'have index for column(s) name on table another and with unique values'
33
+ end
34
+
35
+ it 'should set index_exists? message' do
36
+ @matcher = have_index(:password).table_name("special_users")
37
+ @matcher.matches?(@model)
38
+ @matcher.failure_message.should == 'Expected index password to exist on table special_users'
39
+ end
40
+
41
+ it 'should set is_unique? message' do
42
+ @matcher = have_index(:email, :unique => false)
43
+ @matcher.matches?(@model)
44
+ @matcher.failure_message.should == 'Expected index on email with unique equals to false, got true'
45
+ end
46
+ end
47
+
48
+ describe 'matchers' do
49
+ it { should have_index(:name) }
50
+ it { should have_index(:email) }
51
+ it { should have_index([:email, :name]) }
52
+ it { should have_index(:name, :email) }
53
+
54
+ it { should have_index(:name).unique(false) }
55
+ it { should have_index(:email).unique }
56
+ it { should have_index(:user_id).table_name(:users_watchers) }
57
+
58
+ it { should_not have_index(:password) }
59
+ it { should_not have_index(:name).unique(true) }
60
+ it { should_not have_index(:email).unique(false) }
61
+ it { should_not have_index(:watcher_id).table_name(:users_watchers) }
62
+ end
63
+
64
+ describe 'macros' do
65
+ should_have_index :name
66
+ should_have_index :email
67
+ should_have_index [:email, :name]
68
+ should_have_index :name, :email
69
+
70
+ should_have_index :name, :unique => false
71
+ should_have_index :email, :unique => true
72
+ should_have_index :user_id, :table_name => :users_watchers
73
+
74
+ should_not_have_index :password
75
+ should_not_have_index :name, :unique => true
76
+ should_not_have_index :email, :unique => false
77
+ should_not_have_index :watcher_id, :table_name => :users_watchers
78
+ end
79
+
80
+ describe "aliases" do
81
+ should_have_indices :name
82
+ should_have_db_index :name
83
+ should_have_db_indices :name
84
+ end
85
+
86
+ end
87
+
@@ -1,47 +1,47 @@
1
- require File.expand_path(File.dirname(__FILE__) + '/spec_helper')
2
-
3
- describe 'have_readonly_attributes' do
4
- include ModelBuilder
5
-
6
- def define_and_validate(options={})
7
- @model = define_model :product, :title => :string, :category => :string do
8
- attr_readonly :title, :category if options[:readonly] == true
9
- attr_readonly *options[:readonly] if options[:readonly].is_a?(Array)
10
- end
11
-
12
- have_readonly_attributes(:title, :category)
13
- end
14
-
15
- describe 'messages' do
16
-
17
- it 'should contain a description' do
18
- @matcher = have_readonly_attributes(:title, :category)
19
- @matcher.description.should == 'make title and category read-only'
20
- end
21
-
22
- it 'should set is_readonly? message' do
23
- @matcher = define_and_validate(:readonly => [:another])
24
- @matcher.matches?(@model)
25
- @matcher.failure_message.should == 'Expected Product to make title read-only, got ["another"]'
26
- end
27
-
28
- end
29
-
30
- describe 'matchers' do
31
- it { should define_and_validate(:readonly => true) }
32
- it { should_not define_and_validate(:readonly => false) }
33
- it { should_not define_and_validate(:accessible => [:another]) }
34
- end
35
-
36
- describe 'macros' do
37
- before(:each){ define_and_validate(:readonly => true) }
38
-
39
- should_have_readonly_attributes :title
40
- should_have_readonly_attributes :category
41
- should_have_readonly_attributes :title, :category
42
-
43
- should_not_have_readonly_attributes :another
44
- should_not_have_readonly_attributes :title, :another
45
- end
46
- end
47
-
1
+ require File.expand_path(File.dirname(__FILE__) + '/spec_helper')
2
+
3
+ describe 'have_readonly_attributes' do
4
+ include ModelBuilder
5
+
6
+ def define_and_validate(options={})
7
+ @model = define_model :product, :title => :string, :category => :string do
8
+ attr_readonly :title, :category if options[:readonly] == true
9
+ attr_readonly *options[:readonly] if options[:readonly].is_a?(Array)
10
+ end
11
+
12
+ have_readonly_attributes(:title, :category)
13
+ end
14
+
15
+ describe 'messages' do
16
+
17
+ it 'should contain a description' do
18
+ @matcher = have_readonly_attributes(:title, :category)
19
+ @matcher.description.should == 'make title and category read-only'
20
+ end
21
+
22
+ it 'should set is_readonly? message' do
23
+ @matcher = define_and_validate(:readonly => [:another])
24
+ @matcher.matches?(@model)
25
+ @matcher.failure_message.should == 'Expected Product to make title read-only, got ["another"]'
26
+ end
27
+
28
+ end
29
+
30
+ describe 'matchers' do
31
+ it { should define_and_validate(:readonly => true) }
32
+ it { should_not define_and_validate(:readonly => false) }
33
+ it { should_not define_and_validate(:accessible => [:another]) }
34
+ end
35
+
36
+ describe 'macros' do
37
+ before(:each){ define_and_validate(:readonly => true) }
38
+
39
+ should_have_readonly_attributes :title
40
+ should_have_readonly_attributes :category
41
+ should_have_readonly_attributes :title, :category
42
+
43
+ should_not_have_readonly_attributes :another
44
+ should_not_have_readonly_attributes :title, :another
45
+ end
46
+ end
47
+