acts_as_defaultable 0.0.5 → 0.0.6
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.
- checksums.yaml +5 -13
- data/README.md +56 -0
- data/acts_as_defaultable.gemspec +1 -1
- data/lib/acts_as_defaultable.rb +40 -9
- data/lib/acts_as_defaultable/version.rb +1 -1
- data/spec/dummy/app/models/admin.rb +4 -0
- data/spec/dummy/app/models/blog_post.rb +4 -0
- data/spec/dummy/app/models/fail_one.rb +1 -1
- data/spec/dummy/app/models/user.rb +4 -0
- data/spec/dummy/config/database.yml +9 -38
- data/spec/dummy/db/migrate/20150522153654_create_users.rb +10 -0
- data/spec/dummy/db/migrate/20150522155643_create_blog_posts.rb +9 -0
- data/spec/dummy/db/migrate/20150522160050_create_admins.rb +11 -0
- data/spec/dummy/db/schema.rb +18 -17
- data/spec/factories/admin.rb +9 -0
- data/spec/factories/blog_post.rb +10 -0
- data/spec/factories/user.rb +10 -0
- data/spec/models/admin_spec.rb +79 -0
- data/spec/models/another_spec.rb +2 -2
- data/spec/models/boolean_default_spec.rb +2 -2
- data/spec/models/string_default_spec.rb +2 -2
- data/spec/models/test_default_spec.rb +2 -2
- data/spec/models/user_spec.rb +78 -0
- data/spec/spec_helper.rb +1 -1
- metadata +38 -27
checksums.yaml
CHANGED
@@ -1,15 +1,7 @@
|
|
1
1
|
---
|
2
|
-
|
3
|
-
metadata.gz:
|
4
|
-
|
5
|
-
data.tar.gz: !binary |-
|
6
|
-
MmNjN2QzMzRjN2Q5ZjhlOTVlNDc3YTQ4NDdiOWI2ZmVkNjY3YjkzNA==
|
2
|
+
SHA1:
|
3
|
+
metadata.gz: d3c07b7c979b4d6fc886d29b71f7970a3e89b549
|
4
|
+
data.tar.gz: 88ed9fc097fe1e5ddc696661303cdea0539afe46
|
7
5
|
SHA512:
|
8
|
-
metadata.gz:
|
9
|
-
|
10
|
-
NTgyZTFjMTIyZGE3NjI1NzNmZTMwNzkzOWJhNDZiNTQ1NmNhMDUxZGY5M2Q3
|
11
|
-
ZmZmZmQ3MDVlMzI0MjRlN2RmZjAzZmFkMTMzYWI1OTI2MDc3MWM=
|
12
|
-
data.tar.gz: !binary |-
|
13
|
-
MTNkZTVhYzMwZTJjOTk5NmVhMGMzM2IzMWU2YWM4YjY4YmJmZDk1MTBhOWE3
|
14
|
-
NzJjYjZiZDUyOWFkZTE1OTk4OTkxZTFmNGEwMTE0ZDM1Y2QwNTNlOTU3ZDBk
|
15
|
-
NDdhOGU2MGIwM2NlOGFjODczOTBlYmM4NzYwYjVhYWMwY2RkNzM=
|
6
|
+
metadata.gz: bbd13fa4634173d4e9d122e6edb88b7807c6d9240e3b758f5fe32c1e50bc29ee49de1d1b2c815f614ee5b02f0c4900cf5753a39cce316988f27d2714a7207b81
|
7
|
+
data.tar.gz: 85ec76f6f5f1b86c5d57201f9df470aa16bc2d9a2790bbd391c0d776531b16e0fc4af296b882cdfaa717a3e81e90fc0a25165233d5752f50ee9855e370beb95b
|
data/README.md
CHANGED
@@ -2,12 +2,15 @@
|
|
2
2
|
|
3
3
|
[](https://travis-ci.org/chief/acts_as_defaultable)
|
4
4
|
[](https://codeclimate.com/github/chief/acts_as_defaultable)
|
5
|
+
[](http://badge.fury.io/rb/acts_as_defaultable)
|
6
|
+
[](https://gemnasium.com/chief/acts_as_defaultable)
|
5
7
|
|
6
8
|
## Description
|
7
9
|
|
8
10
|
This ``acts_as`` extension provides the capability for having a default object.
|
9
11
|
The class that has this specified needs to have a default column defined as an integer,
|
10
12
|
string or boolean on the mapped database table.
|
13
|
+
There is also optional support for each record to have a default object of another model.
|
11
14
|
|
12
15
|
## Install
|
13
16
|
|
@@ -21,6 +24,8 @@ Currently is tested on rails3.2, ruby 1.9.3 and mysql
|
|
21
24
|
|
22
25
|
## Example
|
23
26
|
|
27
|
+
### Default object
|
28
|
+
|
24
29
|
```ruby
|
25
30
|
class Country < ActiveRecord::Base
|
26
31
|
acts_as_defaultable :default
|
@@ -38,12 +43,63 @@ Currently is tested on rails3.2, ruby 1.9.3 and mysql
|
|
38
43
|
|
39
44
|
If no options provided `default` column is assumed.
|
40
45
|
|
46
|
+
### Default object for each record
|
47
|
+
|
48
|
+
```ruby
|
49
|
+
class User < ActiveRecord::Base
|
50
|
+
acts_as_defaultable :default, relation: :post
|
51
|
+
end
|
52
|
+
|
53
|
+
class Post < ActiveRecord::Base
|
54
|
+
after_destroy User.new
|
55
|
+
end
|
56
|
+
|
57
|
+
class Comment < ActiveRecord::Base
|
58
|
+
end
|
59
|
+
|
60
|
+
user = User.new
|
61
|
+
post = Post.create
|
62
|
+
user.default_post = post
|
63
|
+
user.save
|
64
|
+
user.default_post == post # => true
|
65
|
+
|
66
|
+
post.destroy
|
67
|
+
user.reload
|
68
|
+
user.default_post == nil # => true
|
69
|
+
|
70
|
+
user.default_post = Comment.create
|
71
|
+
user.default_post == nil # => true
|
72
|
+
```
|
73
|
+
|
74
|
+
Only an object of the relation class will be accepted.
|
75
|
+
The `after_destroy` callback is optional but will ensure that results stay consistent in the event
|
76
|
+
that a newly created **post** gets the same id as the one destroyed
|
77
|
+
|
41
78
|
## Notes
|
42
79
|
|
43
80
|
The option to acts_as_defaultable is the `column` of the Model that defines default
|
44
81
|
behaviour. This column can be a string, a boolean or an integer with default
|
45
82
|
positive values 'on', true, 1 and default negative values 'off', false, 0 respectively.
|
46
83
|
|
84
|
+
The column name for a default relation is `default_column` _ `relation_column` and can be either a string or an integer.
|
85
|
+
|
86
|
+
Examples:
|
87
|
+
|
88
|
+
```
|
89
|
+
class User < ActiveRecord::Base
|
90
|
+
acts_as_defaultable :default, relation: :post
|
91
|
+
end
|
92
|
+
```
|
93
|
+
|
94
|
+
Column name in users table must be `default_post`
|
95
|
+
|
96
|
+
```
|
97
|
+
class User < ActiveRecord::Base
|
98
|
+
acts_as_defaultable :unique, relation: :post
|
99
|
+
end
|
100
|
+
```
|
101
|
+
|
102
|
+
Column name must be `unique_post`
|
47
103
|
|
48
104
|
## License
|
49
105
|
|
data/acts_as_defaultable.gemspec
CHANGED
@@ -23,7 +23,7 @@ Gem::Specification.new do |s|
|
|
23
23
|
s.add_dependency 'activesupport', ['>= 3.0.0']
|
24
24
|
s.add_dependency 'activerecord', ['>= 3.0.0']
|
25
25
|
|
26
|
-
s.add_development_dependency '
|
26
|
+
s.add_development_dependency 'sqlite3'
|
27
27
|
s.add_development_dependency 'rails', ['= 3.2.16']
|
28
28
|
s.add_development_dependency "rspec"
|
29
29
|
s.add_development_dependency "rspec-rails"
|
data/lib/acts_as_defaultable.rb
CHANGED
@@ -8,14 +8,28 @@ module ActsAsDefaultable
|
|
8
8
|
|
9
9
|
after_save :set_unique_default
|
10
10
|
|
11
|
-
|
12
|
-
|
11
|
+
if options.size > 1
|
12
|
+
column = options.first
|
13
|
+
relation = options.second[:relation]
|
14
|
+
elsif options.first.is_a?(Hash)
|
15
|
+
relation = options.first[:relation]
|
16
|
+
else
|
17
|
+
column = options.first
|
18
|
+
end
|
19
|
+
|
20
|
+
column ||= :default
|
21
|
+
column = column.to_s
|
22
|
+
relation = relation.to_s
|
23
|
+
relation_column = column + '_' + relation
|
13
24
|
|
14
|
-
puts "acts_as_defaultable: Specify a column #{column} in #{self
|
25
|
+
puts "acts_as_defaultable: Specify a column #{column} in #{self}" unless column_names.include?(column)
|
26
|
+
if !relation.blank? && !column_names.include?(relation_column)
|
27
|
+
puts "acts_as_defaultable: Specify a column #{relation_column} in #{self}"
|
28
|
+
end
|
15
29
|
|
16
|
-
if
|
30
|
+
if column_names.include?(column)
|
17
31
|
positive_value =
|
18
|
-
case
|
32
|
+
case columns_hash[column].type
|
19
33
|
when :integer
|
20
34
|
1
|
21
35
|
when :boolean
|
@@ -25,7 +39,7 @@ module ActsAsDefaultable
|
|
25
39
|
end
|
26
40
|
|
27
41
|
negative_value =
|
28
|
-
case
|
42
|
+
case columns_hash[column].type
|
29
43
|
when :integer
|
30
44
|
0
|
31
45
|
when :boolean
|
@@ -37,7 +51,11 @@ module ActsAsDefaultable
|
|
37
51
|
|
38
52
|
class_methods = %(
|
39
53
|
def self.default_column
|
40
|
-
"#{column
|
54
|
+
"#{column}"
|
55
|
+
end
|
56
|
+
|
57
|
+
def self.default_relation_column
|
58
|
+
"#{relation_column}"
|
41
59
|
end
|
42
60
|
|
43
61
|
def self.default_positive_value
|
@@ -54,11 +72,11 @@ module ActsAsDefaultable
|
|
54
72
|
#{class_methods}
|
55
73
|
|
56
74
|
def self.default
|
57
|
-
|
75
|
+
all_defaults.first
|
58
76
|
end
|
59
77
|
|
60
78
|
def self.all_defaults
|
61
|
-
where(
|
79
|
+
where(default_column => default_positive_value)
|
62
80
|
end
|
63
81
|
|
64
82
|
def set_unique_default
|
@@ -69,6 +87,19 @@ module ActsAsDefaultable
|
|
69
87
|
end
|
70
88
|
end
|
71
89
|
|
90
|
+
def #{relation_column}
|
91
|
+
Object.const_get("#{relation.classify}").find_by_id(read_attribute(self.class.default_relation_column))
|
92
|
+
end
|
93
|
+
|
94
|
+
def #{relation_column}=(obj)
|
95
|
+
default_relation_id = obj.instance_of?(#{relation.classify}) ? obj.id : 0
|
96
|
+
write_attribute(self.class.default_relation_column, default_relation_id)
|
97
|
+
end
|
98
|
+
|
99
|
+
def after_destroy(record)
|
100
|
+
self.class.where(self.class.default_relation_column => record.id).update_all(self.class.default_relation_column => 0)
|
101
|
+
end
|
102
|
+
|
72
103
|
EOF
|
73
104
|
|
74
105
|
end
|
@@ -1,42 +1,13 @@
|
|
1
|
-
|
2
|
-
|
3
|
-
# Install the MYSQL driver
|
4
|
-
# gem install mysql2
|
5
|
-
#
|
6
|
-
# Ensure the MySQL gem is defined in your Gemfile
|
7
|
-
# gem 'mysql2'
|
8
|
-
#
|
9
|
-
# And be sure to use new-style password hashing:
|
10
|
-
# http://dev.mysql.com/doc/refman/5.0/en/old-client.html
|
11
|
-
development:
|
12
|
-
adapter: mysql2
|
13
|
-
encoding: utf8
|
14
|
-
reconnect: false
|
15
|
-
database: dummy_development
|
1
|
+
default: &default
|
2
|
+
adapter: sqlite3
|
16
3
|
pool: 5
|
17
|
-
|
18
|
-
|
19
|
-
|
4
|
+
timeout: 5000
|
5
|
+
|
6
|
+
development:
|
7
|
+
<<: *default
|
8
|
+
database: db/development.sqlite3
|
20
9
|
|
21
|
-
# Warning: The database defined as "test" will be erased and
|
22
|
-
# re-generated from your development database when you run "rake".
|
23
|
-
# Do not set this db to the same as development or production.
|
24
10
|
test:
|
25
|
-
|
26
|
-
|
27
|
-
reconnect: false
|
28
|
-
database: dummy_test
|
29
|
-
pool: 5
|
30
|
-
username: root
|
31
|
-
password:
|
32
|
-
socket: /var/run/mysqld/mysqld.sock
|
11
|
+
<<: *default
|
12
|
+
database: db/test.sqlite3
|
33
13
|
|
34
|
-
production:
|
35
|
-
adapter: mysql2
|
36
|
-
encoding: utf8
|
37
|
-
reconnect: false
|
38
|
-
database: dummy_production
|
39
|
-
pool: 5
|
40
|
-
username: root
|
41
|
-
password:
|
42
|
-
socket: /var/run/mysqld/mysqld.sock
|
data/spec/dummy/db/schema.rb
CHANGED
@@ -11,7 +11,15 @@
|
|
11
11
|
#
|
12
12
|
# It's strongly recommended to check this file into your version control system.
|
13
13
|
|
14
|
-
ActiveRecord::Schema.define(:version =>
|
14
|
+
ActiveRecord::Schema.define(:version => 20150522160050) do
|
15
|
+
|
16
|
+
create_table "admins", :force => true do |t|
|
17
|
+
t.string "name"
|
18
|
+
t.boolean "main"
|
19
|
+
t.string "main_blog_post"
|
20
|
+
t.datetime "created_at", :null => false
|
21
|
+
t.datetime "updated_at", :null => false
|
22
|
+
end
|
15
23
|
|
16
24
|
create_table "anothers", :force => true do |t|
|
17
25
|
t.string "test"
|
@@ -20,23 +28,22 @@ ActiveRecord::Schema.define(:version => 20120105110842) do
|
|
20
28
|
t.datetime "updated_at", :null => false
|
21
29
|
end
|
22
30
|
|
23
|
-
create_table "
|
24
|
-
t.string "
|
25
|
-
t.boolean "default"
|
31
|
+
create_table "blog_posts", :force => true do |t|
|
32
|
+
t.string "text"
|
26
33
|
t.datetime "created_at", :null => false
|
27
34
|
t.datetime "updated_at", :null => false
|
28
35
|
end
|
29
36
|
|
30
|
-
create_table "
|
37
|
+
create_table "boolean_defaults", :force => true do |t|
|
31
38
|
t.string "name"
|
32
39
|
t.boolean "default"
|
33
40
|
t.datetime "created_at", :null => false
|
34
41
|
t.datetime "updated_at", :null => false
|
35
42
|
end
|
36
43
|
|
37
|
-
create_table "
|
44
|
+
create_table "fail_ones", :force => true do |t|
|
38
45
|
t.string "name"
|
39
|
-
t.
|
46
|
+
t.boolean "default"
|
40
47
|
t.datetime "created_at", :null => false
|
41
48
|
t.datetime "updated_at", :null => false
|
42
49
|
end
|
@@ -56,17 +63,11 @@ ActiveRecord::Schema.define(:version => 20120105110842) do
|
|
56
63
|
end
|
57
64
|
|
58
65
|
create_table "users", :force => true do |t|
|
59
|
-
t.string "role"
|
60
66
|
t.string "name"
|
61
|
-
t.
|
62
|
-
t.
|
63
|
-
|
64
|
-
|
65
|
-
create_table "without_cancans", :force => true do |t|
|
66
|
-
t.string "name"
|
67
|
-
t.integer "position"
|
68
|
-
t.datetime "created_at", :null => false
|
69
|
-
t.datetime "updated_at", :null => false
|
67
|
+
t.boolean "default"
|
68
|
+
t.integer "default_blog_post"
|
69
|
+
t.datetime "created_at", :null => false
|
70
|
+
t.datetime "updated_at", :null => false
|
70
71
|
end
|
71
72
|
|
72
73
|
end
|
@@ -0,0 +1,79 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe Admin do
|
4
|
+
|
5
|
+
let(:admin1) { FactoryGirl.create(:admin) }
|
6
|
+
let(:admin2) { FactoryGirl.create(:admin2) }
|
7
|
+
let(:post1) { FactoryGirl.create(:blogPost) }
|
8
|
+
let(:post2) { FactoryGirl.build(:blogPost2) }
|
9
|
+
let(:other) { FactoryGirl.create(:other) }
|
10
|
+
|
11
|
+
it 'should have a default relation column definition' do
|
12
|
+
Admin.respond_to?('default_relation_column').should be true
|
13
|
+
end
|
14
|
+
|
15
|
+
it 'should return the argument as the default relation column' do
|
16
|
+
Admin.default_relation_column.should be_eql('main_blog_post')
|
17
|
+
end
|
18
|
+
|
19
|
+
it 'should have an attribute named main_blog_post' do
|
20
|
+
admin1.has_attribute?('main_blog_post').should be true
|
21
|
+
end
|
22
|
+
|
23
|
+
it 'should return nil if there is no default relation object' do
|
24
|
+
admin1.main_blog_post.should be_nil
|
25
|
+
end
|
26
|
+
|
27
|
+
it 'should return the default relation object' do
|
28
|
+
admin1.main_blog_post = post1
|
29
|
+
admin1.save
|
30
|
+
admin1.main_blog_post.should be_eql(post1)
|
31
|
+
end
|
32
|
+
|
33
|
+
it 'should return nil if relation object is deleted' do
|
34
|
+
admin1.main_blog_post = post1
|
35
|
+
admin1.save
|
36
|
+
post1.destroy
|
37
|
+
admin1.reload
|
38
|
+
admin1.main_blog_post.should be_nil
|
39
|
+
end
|
40
|
+
|
41
|
+
it "should return nil if relation object is deleted and another one take it's place" do
|
42
|
+
admin1.main_blog_post = post1
|
43
|
+
admin1.save
|
44
|
+
id = post1.id
|
45
|
+
post1.destroy
|
46
|
+
|
47
|
+
post2.id = id
|
48
|
+
post2.save
|
49
|
+
admin1.reload
|
50
|
+
admin1.reload.main_blog_post.should be_nil
|
51
|
+
end
|
52
|
+
|
53
|
+
it 'both users should return nil if relation object is deleted' do
|
54
|
+
admin1.main_blog_post = post1
|
55
|
+
admin2.main_blog_post = post1
|
56
|
+
|
57
|
+
id = post1.id
|
58
|
+
post1.destroy
|
59
|
+
post2.id = id
|
60
|
+
post2.save
|
61
|
+
admin1.reload
|
62
|
+
admin2.reload
|
63
|
+
|
64
|
+
admin1.main_blog_post.should be_nil
|
65
|
+
admin2.main_blog_post.should be_nil
|
66
|
+
end
|
67
|
+
|
68
|
+
it 'should return nil if relation object is not saved' do
|
69
|
+
admin1.main_blog_post = post2
|
70
|
+
admin1.main_blog_post.should be_nil
|
71
|
+
end
|
72
|
+
|
73
|
+
it 'should return nil if wrong relation object class is saved' do
|
74
|
+
admin1.main_blog_post = other
|
75
|
+
admin1.main_blog_post.should be_nil
|
76
|
+
end
|
77
|
+
|
78
|
+
end
|
79
|
+
|
data/spec/models/another_spec.rb
CHANGED
@@ -6,11 +6,11 @@ describe Another do
|
|
6
6
|
let(:other) { FactoryGirl.build(:other) }
|
7
7
|
|
8
8
|
it 'should have a class method named default' do
|
9
|
-
Another.respond_to?('default').should
|
9
|
+
Another.respond_to?('default').should be true
|
10
10
|
end
|
11
11
|
|
12
12
|
it 'should have a default column definition' do
|
13
|
-
Another.respond_to?('default_column').should
|
13
|
+
Another.respond_to?('default_column').should be true
|
14
14
|
end
|
15
15
|
|
16
16
|
it 'should return the argument as the default column' do
|
@@ -6,11 +6,11 @@ describe BooleanDefault do
|
|
6
6
|
let(:two) { FactoryGirl.build(:true_boolean_default) }
|
7
7
|
|
8
8
|
it 'should have a class method named default' do
|
9
|
-
BooleanDefault.respond_to?('default').should
|
9
|
+
BooleanDefault.respond_to?('default').should be true
|
10
10
|
end
|
11
11
|
|
12
12
|
it 'should have a default column definition' do
|
13
|
-
BooleanDefault.respond_to?('default_column').should
|
13
|
+
BooleanDefault.respond_to?('default_column').should be true
|
14
14
|
end
|
15
15
|
|
16
16
|
it 'should return the argument as the default column' do
|
@@ -6,11 +6,11 @@ describe StringDefault do
|
|
6
6
|
let(:two) { FactoryGirl.build(:true_string_default) }
|
7
7
|
|
8
8
|
it 'should have a class method named default' do
|
9
|
-
StringDefault.respond_to?('default').should
|
9
|
+
StringDefault.respond_to?('default').should be true
|
10
10
|
end
|
11
11
|
|
12
12
|
it 'should have a default column definition' do
|
13
|
-
StringDefault.respond_to?('default_column').should
|
13
|
+
StringDefault.respond_to?('default_column').should be true
|
14
14
|
end
|
15
15
|
|
16
16
|
it 'should return the argument as the default column' do
|
@@ -6,11 +6,11 @@ describe TestDefault do
|
|
6
6
|
let(:two) { FactoryGirl.build(:td_two) }
|
7
7
|
|
8
8
|
it 'should have a class method named default' do
|
9
|
-
TestDefault.respond_to?('default').should
|
9
|
+
TestDefault.respond_to?('default').should be true
|
10
10
|
end
|
11
11
|
|
12
12
|
it 'should have a default column definition' do
|
13
|
-
TestDefault.respond_to?('default_column').should
|
13
|
+
TestDefault.respond_to?('default_column').should be true
|
14
14
|
end
|
15
15
|
|
16
16
|
it 'should return the argument as the default column' do
|
@@ -0,0 +1,78 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe User do
|
4
|
+
|
5
|
+
let(:user1) { FactoryGirl.create(:user) }
|
6
|
+
let(:user2) { FactoryGirl.create(:user2) }
|
7
|
+
let(:post1) { FactoryGirl.create(:blogPost) }
|
8
|
+
let(:post2) { FactoryGirl.build(:blogPost2) }
|
9
|
+
let(:other) { FactoryGirl.create(:other) }
|
10
|
+
|
11
|
+
it 'should have a default relation column definition' do
|
12
|
+
User.respond_to?('default_relation_column').should be true
|
13
|
+
end
|
14
|
+
|
15
|
+
it 'should return the argument as the default relation column' do
|
16
|
+
User.default_relation_column.should be_eql('default_blog_post')
|
17
|
+
end
|
18
|
+
|
19
|
+
it 'should have an attribute named default_blog_post' do
|
20
|
+
user1.has_attribute?('default_blog_post').should be true
|
21
|
+
end
|
22
|
+
|
23
|
+
it 'should return nil if there is no default relation object' do
|
24
|
+
user1.default_blog_post.should be_nil
|
25
|
+
end
|
26
|
+
|
27
|
+
it 'should return the default relation object' do
|
28
|
+
user1.default_blog_post = post1
|
29
|
+
user1.save
|
30
|
+
user1.default_blog_post.should be_eql(post1)
|
31
|
+
end
|
32
|
+
|
33
|
+
it 'should return nil if relation object is deleted' do
|
34
|
+
user1.default_blog_post = post1
|
35
|
+
user1.save
|
36
|
+
post1.destroy
|
37
|
+
user1.reload
|
38
|
+
user1.default_blog_post.should be_nil
|
39
|
+
end
|
40
|
+
|
41
|
+
it "should return nil if relation object is deleted and another one take it's place" do
|
42
|
+
user1.default_blog_post = post1
|
43
|
+
user1.save
|
44
|
+
id = post1.id
|
45
|
+
post1.destroy
|
46
|
+
|
47
|
+
post2.id = id
|
48
|
+
post2.save
|
49
|
+
user1.reload
|
50
|
+
user1.reload.default_blog_post.should be_nil
|
51
|
+
end
|
52
|
+
|
53
|
+
it 'both users should return nil if relation object is deleted' do
|
54
|
+
user1.default_blog_post = post1
|
55
|
+
user2.default_blog_post = post1
|
56
|
+
|
57
|
+
id = post1.id
|
58
|
+
post1.destroy
|
59
|
+
post2.id = id
|
60
|
+
post2.save
|
61
|
+
user1.reload
|
62
|
+
user2.reload
|
63
|
+
user1.default_blog_post.should be_nil
|
64
|
+
user2.default_blog_post.should be_nil
|
65
|
+
end
|
66
|
+
|
67
|
+
it 'should return nil if relation object is not saved' do
|
68
|
+
user1.default_blog_post = post2
|
69
|
+
user1.default_blog_post.should be_nil
|
70
|
+
end
|
71
|
+
|
72
|
+
it 'should return nil if wrong relation object class is saved' do
|
73
|
+
user1.default_blog_post = other
|
74
|
+
user1.default_blog_post.should be_nil
|
75
|
+
end
|
76
|
+
|
77
|
+
end
|
78
|
+
|
data/spec/spec_helper.rb
CHANGED
@@ -11,7 +11,6 @@ Spork.prefork do
|
|
11
11
|
require File.expand_path("../dummy/config/environment", __FILE__)
|
12
12
|
|
13
13
|
require 'rspec/rails'
|
14
|
-
require 'rspec/autorun'
|
15
14
|
|
16
15
|
# Requires supporting ruby files with custom matchers and macros, etc,
|
17
16
|
# in spec/support/ and its subdirectories.
|
@@ -72,6 +71,7 @@ Spork.prefork do
|
|
72
71
|
|
73
72
|
# Include factory_girl's helpers
|
74
73
|
#config.include FactoryGirl::Syntax::Methods
|
74
|
+
config.expect_with(:rspec) { |c| c.syntax = :should }
|
75
75
|
end
|
76
76
|
end
|
77
77
|
|
metadata
CHANGED
@@ -1,55 +1,55 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: acts_as_defaultable
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
4
|
+
version: 0.0.6
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Giorgos Tsiftsis
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2015-05-23 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: activesupport
|
15
15
|
requirement: !ruby/object:Gem::Requirement
|
16
16
|
requirements:
|
17
|
-
- -
|
17
|
+
- - ">="
|
18
18
|
- !ruby/object:Gem::Version
|
19
19
|
version: 3.0.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: 3.0.0
|
27
27
|
- !ruby/object:Gem::Dependency
|
28
28
|
name: activerecord
|
29
29
|
requirement: !ruby/object:Gem::Requirement
|
30
30
|
requirements:
|
31
|
-
- -
|
31
|
+
- - ">="
|
32
32
|
- !ruby/object:Gem::Version
|
33
33
|
version: 3.0.0
|
34
34
|
type: :runtime
|
35
35
|
prerelease: false
|
36
36
|
version_requirements: !ruby/object:Gem::Requirement
|
37
37
|
requirements:
|
38
|
-
- -
|
38
|
+
- - ">="
|
39
39
|
- !ruby/object:Gem::Version
|
40
40
|
version: 3.0.0
|
41
41
|
- !ruby/object:Gem::Dependency
|
42
|
-
name:
|
42
|
+
name: sqlite3
|
43
43
|
requirement: !ruby/object:Gem::Requirement
|
44
44
|
requirements:
|
45
|
-
- -
|
45
|
+
- - ">="
|
46
46
|
- !ruby/object:Gem::Version
|
47
47
|
version: '0'
|
48
48
|
type: :development
|
49
49
|
prerelease: false
|
50
50
|
version_requirements: !ruby/object:Gem::Requirement
|
51
51
|
requirements:
|
52
|
-
- -
|
52
|
+
- - ">="
|
53
53
|
- !ruby/object:Gem::Version
|
54
54
|
version: '0'
|
55
55
|
- !ruby/object:Gem::Dependency
|
@@ -70,84 +70,84 @@ dependencies:
|
|
70
70
|
name: rspec
|
71
71
|
requirement: !ruby/object:Gem::Requirement
|
72
72
|
requirements:
|
73
|
-
- -
|
73
|
+
- - ">="
|
74
74
|
- !ruby/object:Gem::Version
|
75
75
|
version: '0'
|
76
76
|
type: :development
|
77
77
|
prerelease: false
|
78
78
|
version_requirements: !ruby/object:Gem::Requirement
|
79
79
|
requirements:
|
80
|
-
- -
|
80
|
+
- - ">="
|
81
81
|
- !ruby/object:Gem::Version
|
82
82
|
version: '0'
|
83
83
|
- !ruby/object:Gem::Dependency
|
84
84
|
name: rspec-rails
|
85
85
|
requirement: !ruby/object:Gem::Requirement
|
86
86
|
requirements:
|
87
|
-
- -
|
87
|
+
- - ">="
|
88
88
|
- !ruby/object:Gem::Version
|
89
89
|
version: '0'
|
90
90
|
type: :development
|
91
91
|
prerelease: false
|
92
92
|
version_requirements: !ruby/object:Gem::Requirement
|
93
93
|
requirements:
|
94
|
-
- -
|
94
|
+
- - ">="
|
95
95
|
- !ruby/object:Gem::Version
|
96
96
|
version: '0'
|
97
97
|
- !ruby/object:Gem::Dependency
|
98
98
|
name: factory_girl_rails
|
99
99
|
requirement: !ruby/object:Gem::Requirement
|
100
100
|
requirements:
|
101
|
-
- -
|
101
|
+
- - ">="
|
102
102
|
- !ruby/object:Gem::Version
|
103
103
|
version: '0'
|
104
104
|
type: :development
|
105
105
|
prerelease: false
|
106
106
|
version_requirements: !ruby/object:Gem::Requirement
|
107
107
|
requirements:
|
108
|
-
- -
|
108
|
+
- - ">="
|
109
109
|
- !ruby/object:Gem::Version
|
110
110
|
version: '0'
|
111
111
|
- !ruby/object:Gem::Dependency
|
112
112
|
name: spork
|
113
113
|
requirement: !ruby/object:Gem::Requirement
|
114
114
|
requirements:
|
115
|
-
- -
|
115
|
+
- - ">="
|
116
116
|
- !ruby/object:Gem::Version
|
117
117
|
version: '0'
|
118
118
|
type: :development
|
119
119
|
prerelease: false
|
120
120
|
version_requirements: !ruby/object:Gem::Requirement
|
121
121
|
requirements:
|
122
|
-
- -
|
122
|
+
- - ">="
|
123
123
|
- !ruby/object:Gem::Version
|
124
124
|
version: '0'
|
125
125
|
- !ruby/object:Gem::Dependency
|
126
126
|
name: database_cleaner
|
127
127
|
requirement: !ruby/object:Gem::Requirement
|
128
128
|
requirements:
|
129
|
-
- -
|
129
|
+
- - ">="
|
130
130
|
- !ruby/object:Gem::Version
|
131
131
|
version: '0'
|
132
132
|
type: :development
|
133
133
|
prerelease: false
|
134
134
|
version_requirements: !ruby/object:Gem::Requirement
|
135
135
|
requirements:
|
136
|
-
- -
|
136
|
+
- - ">="
|
137
137
|
- !ruby/object:Gem::Version
|
138
138
|
version: '0'
|
139
139
|
- !ruby/object:Gem::Dependency
|
140
140
|
name: guard-rspec
|
141
141
|
requirement: !ruby/object:Gem::Requirement
|
142
142
|
requirements:
|
143
|
-
- -
|
143
|
+
- - ">="
|
144
144
|
- !ruby/object:Gem::Version
|
145
145
|
version: '0'
|
146
146
|
type: :development
|
147
147
|
prerelease: false
|
148
148
|
version_requirements: !ruby/object:Gem::Requirement
|
149
149
|
requirements:
|
150
|
-
- -
|
150
|
+
- - ">="
|
151
151
|
- !ruby/object:Gem::Version
|
152
152
|
version: '0'
|
153
153
|
description: This 'acts_as' extension provides the capability for having a default
|
@@ -159,9 +159,9 @@ executables: []
|
|
159
159
|
extensions: []
|
160
160
|
extra_rdoc_files: []
|
161
161
|
files:
|
162
|
-
- .gitignore
|
163
|
-
- .rspec
|
164
|
-
- .travis.yml
|
162
|
+
- ".gitignore"
|
163
|
+
- ".rspec"
|
164
|
+
- ".travis.yml"
|
165
165
|
- Gemfile
|
166
166
|
- Guardfile
|
167
167
|
- README.md
|
@@ -178,11 +178,14 @@ files:
|
|
178
178
|
- spec/dummy/app/helpers/application_helper.rb
|
179
179
|
- spec/dummy/app/mailers/.gitkeep
|
180
180
|
- spec/dummy/app/models/.gitkeep
|
181
|
+
- spec/dummy/app/models/admin.rb
|
181
182
|
- spec/dummy/app/models/another.rb
|
183
|
+
- spec/dummy/app/models/blog_post.rb
|
182
184
|
- spec/dummy/app/models/boolean_default.rb
|
183
185
|
- spec/dummy/app/models/fail_one.rb
|
184
186
|
- spec/dummy/app/models/string_default.rb
|
185
187
|
- spec/dummy/app/models/test_default.rb
|
188
|
+
- spec/dummy/app/models/user.rb
|
186
189
|
- spec/dummy/app/views/layouts/application.html.erb
|
187
190
|
- spec/dummy/config.ru
|
188
191
|
- spec/dummy/config/application.rb
|
@@ -205,6 +208,9 @@ files:
|
|
205
208
|
- spec/dummy/db/migrate/20120104135210_create_boolean_defaults.rb
|
206
209
|
- spec/dummy/db/migrate/20120104140205_create_string_defaults.rb
|
207
210
|
- spec/dummy/db/migrate/20120104234100_create_test_defaults.rb
|
211
|
+
- spec/dummy/db/migrate/20150522153654_create_users.rb
|
212
|
+
- spec/dummy/db/migrate/20150522155643_create_blog_posts.rb
|
213
|
+
- spec/dummy/db/migrate/20150522160050_create_admins.rb
|
208
214
|
- spec/dummy/db/schema.rb
|
209
215
|
- spec/dummy/lib/assets/.gitkeep
|
210
216
|
- spec/dummy/log/.gitkeep
|
@@ -213,16 +219,21 @@ files:
|
|
213
219
|
- spec/dummy/public/500.html
|
214
220
|
- spec/dummy/public/favicon.ico
|
215
221
|
- spec/dummy/script/rails
|
222
|
+
- spec/factories/admin.rb
|
216
223
|
- spec/factories/another.rb
|
224
|
+
- spec/factories/blog_post.rb
|
217
225
|
- spec/factories/boolean_default.rb
|
218
226
|
- spec/factories/fail_one.rb
|
219
227
|
- spec/factories/string_default.rb
|
220
228
|
- spec/factories/test_default.rb
|
229
|
+
- spec/factories/user.rb
|
230
|
+
- spec/models/admin_spec.rb
|
221
231
|
- spec/models/another_spec.rb
|
222
232
|
- spec/models/boolean_default_spec.rb
|
223
233
|
- spec/models/fail_one_spec.rb
|
224
234
|
- spec/models/string_default_spec.rb
|
225
235
|
- spec/models/test_default_spec.rb
|
236
|
+
- spec/models/user_spec.rb
|
226
237
|
- spec/spec_helper.rb
|
227
238
|
homepage: https://github.com/chief/acts_as_defaultable
|
228
239
|
licenses: []
|
@@ -233,17 +244,17 @@ require_paths:
|
|
233
244
|
- lib
|
234
245
|
required_ruby_version: !ruby/object:Gem::Requirement
|
235
246
|
requirements:
|
236
|
-
- -
|
247
|
+
- - ">="
|
237
248
|
- !ruby/object:Gem::Version
|
238
249
|
version: '0'
|
239
250
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
240
251
|
requirements:
|
241
|
-
- -
|
252
|
+
- - ">="
|
242
253
|
- !ruby/object:Gem::Version
|
243
254
|
version: '0'
|
244
255
|
requirements: []
|
245
256
|
rubyforge_project:
|
246
|
-
rubygems_version: 2.
|
257
|
+
rubygems_version: 2.4.6
|
247
258
|
signing_key:
|
248
259
|
specification_version: 4
|
249
260
|
summary: A gem allowing an active_record model to be default(unique) based on a specified
|