nay-record_with_operator 0.0.2 → 0.0.3
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.
- data/Rakefile +1 -1
- data/lib/record_with_operator.rb +32 -1
- data/test/record_with_operator_belongs_to_association_test.rb +67 -0
- data/test/record_with_operator_has_one_association_test.rb +69 -0
- data/test/schema.rb +2 -1
- metadata +5 -1
- data/init.rb +0 -1
data/Rakefile
CHANGED
@@ -12,7 +12,7 @@ DESCRIPTION = "Rails plugin to set created_by, updated_by, deleted_by to ActiveR
|
|
12
12
|
GITHUB_PROJECT = "record_with_operator"
|
13
13
|
HOMEPAGE = "http://github.com/nay/#{GITHUB_PROJECT}/tree"
|
14
14
|
BIN_FILES = %w( )
|
15
|
-
VER = "0.0.
|
15
|
+
VER = "0.0.3"
|
16
16
|
CLEAN.include ['pkg']
|
17
17
|
|
18
18
|
desc 'Default: run unit tests.'
|
data/lib/record_with_operator.rb
CHANGED
@@ -55,6 +55,37 @@ module RecordWithOperator
|
|
55
55
|
end
|
56
56
|
|
57
57
|
alias_method_chain :validate_find_options, :for
|
58
|
+
|
59
|
+
private
|
60
|
+
# define_method association, association= ...
|
61
|
+
def association_accessor_methods_with_operator(reflection, association_proxy_class)
|
62
|
+
association_accessor_methods_without_operator(reflection, association_proxy_class)
|
63
|
+
define_method("#{reflection.name}_with_operator") do |*params|
|
64
|
+
r = send("#{reflection.name}_without_operator", *params)
|
65
|
+
r.operator ||= self.operator if r && r.respond_to?(:operator=)
|
66
|
+
r
|
67
|
+
end
|
68
|
+
alias_method_chain "#{reflection.name}".to_sym, :operator
|
69
|
+
|
70
|
+
define_method("#{reflection.name}_with_operator=") do |new_value|
|
71
|
+
new_value.operator ||= self.operator if new_value.respond_to?(:operator=)
|
72
|
+
send("#{reflection.name}_without_operator=", new_value)
|
73
|
+
end
|
74
|
+
alias_method_chain "#{reflection.name}=".to_sym, :operator
|
75
|
+
end
|
76
|
+
alias_method_chain :association_accessor_methods, :operator
|
77
|
+
|
78
|
+
# define_method build_association, create_association ...
|
79
|
+
def association_constructor_method_with_operator(constructor, reflection, association_proxy_class)
|
80
|
+
association_constructor_method_without_operator(constructor, reflection, association_proxy_class)
|
81
|
+
define_method("#{constructor}_#{reflection.name}_with_operator") do |*params|
|
82
|
+
options = { :operator => self.operator }
|
83
|
+
params.empty? ? params[0] = options : params.first.merge!(options)
|
84
|
+
self.send("#{constructor}_#{reflection.name}_without_operator", *params)
|
85
|
+
end
|
86
|
+
alias_method_chain "#{constructor}_#{reflection.name}".to_sym, :operator
|
87
|
+
end
|
88
|
+
alias_method_chain :association_constructor_method, :operator
|
58
89
|
end
|
59
90
|
|
60
91
|
base.before_create :set_created_by
|
@@ -113,4 +144,4 @@ module RecordWithOperator
|
|
113
144
|
self.updated_by = operator.id
|
114
145
|
end
|
115
146
|
|
116
|
-
end
|
147
|
+
end
|
@@ -0,0 +1,67 @@
|
|
1
|
+
require 'test_helper'
|
2
|
+
|
3
|
+
class User < ActiveRecord::Base
|
4
|
+
end
|
5
|
+
|
6
|
+
class NoteBelongsToMemo < ActiveRecord::Base
|
7
|
+
set_table_name "notes"
|
8
|
+
belongs_to :memo
|
9
|
+
end
|
10
|
+
|
11
|
+
class Memo < ActiveRecord::Base
|
12
|
+
set_table_name "memos"
|
13
|
+
end
|
14
|
+
|
15
|
+
class RecordWithOperatorBelongsTo < ActiveSupport::TestCase
|
16
|
+
def setup
|
17
|
+
RecordWithOperator.config[:user_class_name] = "User"
|
18
|
+
@user1 = User.create!(:name => "user1")
|
19
|
+
@user2 = User.create!(:name => "user2")
|
20
|
+
@note_created_by_user1 = NoteBelongsToMemo.create!(:body => "test", :operator => @user1)
|
21
|
+
end
|
22
|
+
|
23
|
+
# belongs_to Association Test
|
24
|
+
# build_association
|
25
|
+
def test_build_memo_should_have_operator
|
26
|
+
note = NoteBelongsToMemo.find(@note_created_by_user1.id, :for => @user2)
|
27
|
+
memo = note.build_memo(:body => "memo")
|
28
|
+
assert_equal @user2, memo.operator
|
29
|
+
end
|
30
|
+
|
31
|
+
# create_association
|
32
|
+
def test_create_memo_should_have_operator_and_created_by
|
33
|
+
note = NoteBelongsToMemo.find(@note_created_by_user1.id, :for => @user2)
|
34
|
+
memo = note.create_memo(:body => "memo")
|
35
|
+
assert_equal false, memo.new_record?
|
36
|
+
assert_equal @user2, memo.operator
|
37
|
+
assert_equal @user2.id, memo.created_by
|
38
|
+
end
|
39
|
+
|
40
|
+
# association=
|
41
|
+
def test_memo_eql_should_have_operator_and_created_by
|
42
|
+
note = NoteBelongsToMemo.find(@note_created_by_user1.id, :for => @user2)
|
43
|
+
memo = Memo.new(:body => "memo")
|
44
|
+
note.memo = memo # not save
|
45
|
+
assert_equal @user2, memo.operator
|
46
|
+
end
|
47
|
+
|
48
|
+
# association
|
49
|
+
def test_auto_found_memo_should_have_operator
|
50
|
+
note = NoteBelongsToMemo.find(@note_created_by_user1.id, :for => @user2)
|
51
|
+
note.create_memo(:body => "memo")
|
52
|
+
assert_equal @user2, note.memo(true).operator
|
53
|
+
end
|
54
|
+
|
55
|
+
# association.nil?
|
56
|
+
def test_memo_nil_should_be_false_if_note_belongs_to_memo
|
57
|
+
note = NoteBelongsToMemo.find(@note_created_by_user1.id)
|
58
|
+
note.create_memo(:body => "memo")
|
59
|
+
assert !note.memo.nil?
|
60
|
+
end
|
61
|
+
|
62
|
+
# association.nil?
|
63
|
+
def test_memo_nil_should_be_true_if_note_is_independent
|
64
|
+
note = NoteBelongsToMemo.find(@note_created_by_user1.id)
|
65
|
+
assert note.memo.nil?
|
66
|
+
end
|
67
|
+
end
|
@@ -0,0 +1,69 @@
|
|
1
|
+
require 'test_helper'
|
2
|
+
|
3
|
+
class User < ActiveRecord::Base
|
4
|
+
end
|
5
|
+
|
6
|
+
class NoteHasOneMemo < ActiveRecord::Base
|
7
|
+
set_table_name "notes"
|
8
|
+
has_one :memo, :class_name => "Memo", :foreign_key => "note_id"
|
9
|
+
end
|
10
|
+
|
11
|
+
class Memo < ActiveRecord::Base
|
12
|
+
set_table_name "memos"
|
13
|
+
end
|
14
|
+
|
15
|
+
class RecordWithOperatorHasOneAssociationTest < ActiveSupport::TestCase
|
16
|
+
def setup
|
17
|
+
RecordWithOperator.config[:user_class_name] = "User"
|
18
|
+
@user1 = User.create!(:name => "user1")
|
19
|
+
@user2 = User.create!(:name => "user2")
|
20
|
+
@note_created_by_user1 = NoteHasOneMemo.create!(:body => "test", :operator => @user1)
|
21
|
+
end
|
22
|
+
|
23
|
+
# has_one Association Test
|
24
|
+
# build_association
|
25
|
+
def test_build_memo_should_have_operator
|
26
|
+
note = NoteHasOneMemo.find(@note_created_by_user1.id, :for => @user2)
|
27
|
+
memo = note.build_memo(:body => "memo")
|
28
|
+
assert_equal @user2, memo.operator
|
29
|
+
end
|
30
|
+
|
31
|
+
# create_association
|
32
|
+
def test_create_memo_should_have_operator_and_created_by
|
33
|
+
note = NoteHasOneMemo.find(@note_created_by_user1.id, :for => @user2)
|
34
|
+
memo = note.create_memo(:body => "memo")
|
35
|
+
assert_equal false, memo.new_record?
|
36
|
+
assert_equal @user2, memo.operator
|
37
|
+
assert_equal @user2.id, memo.created_by
|
38
|
+
end
|
39
|
+
|
40
|
+
# association=
|
41
|
+
def test_memo_eql_should_have_operator_and_created_by
|
42
|
+
note = NoteHasOneMemo.find(@note_created_by_user1.id, :for => @user2)
|
43
|
+
memo = Memo.new(:body => "memo")
|
44
|
+
note.memo = memo
|
45
|
+
assert_equal false, memo.new_record?
|
46
|
+
assert_equal @user2, memo.operator
|
47
|
+
assert_equal @user2.id, memo.created_by
|
48
|
+
end
|
49
|
+
|
50
|
+
# association
|
51
|
+
def test_auto_found_memo_should_have_operator
|
52
|
+
note = NoteHasOneMemo.find(@note_created_by_user1.id, :for => @user2)
|
53
|
+
note.create_memo(:body => "memo")
|
54
|
+
assert_equal @user2, note.memo(true).operator
|
55
|
+
end
|
56
|
+
|
57
|
+
# association.nil?
|
58
|
+
def test_memo_nil_should_be_false_if_note_has_memo
|
59
|
+
note = NoteHasOneMemo.find(@note_created_by_user1.id)
|
60
|
+
note.create_memo(:body => "memo")
|
61
|
+
assert !note.memo.nil?
|
62
|
+
end
|
63
|
+
|
64
|
+
# association.nil?
|
65
|
+
def test_memo_nil_should_be_true_if_note_has_no_memo
|
66
|
+
note = NoteHasOneMemo.find(@note_created_by_user1.id)
|
67
|
+
assert note.memo.nil?
|
68
|
+
end
|
69
|
+
end
|
data/test/schema.rb
CHANGED
@@ -23,6 +23,7 @@ ActiveRecord::Schema.define(:version => 1) do
|
|
23
23
|
end
|
24
24
|
|
25
25
|
create_table :notes, :force => true do |t|
|
26
|
+
t.column :memo_id, :integer
|
26
27
|
t.column :body, :text
|
27
28
|
t.column :created_by, :integer
|
28
29
|
t.column :created_at, :datetime
|
@@ -46,4 +47,4 @@ ActiveRecord::Schema.define(:version => 1) do
|
|
46
47
|
create_table :users, :force => true do |t|
|
47
48
|
t.column :name, :string
|
48
49
|
end
|
49
|
-
end
|
50
|
+
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: nay-record_with_operator
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
4
|
+
version: 0.0.3
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Yasuko Ohba
|
@@ -42,6 +42,8 @@ files:
|
|
42
42
|
- lib/record_with_operator.rb
|
43
43
|
- tasks/record_with_operator_tasks.rake
|
44
44
|
- test/database.yml
|
45
|
+
- test/record_with_operator_belongs_to_association_test.rb
|
46
|
+
- test/record_with_operator_has_one_association_test.rb
|
45
47
|
- test/record_with_operator_test.rb
|
46
48
|
- test/record_with_operator_user_class_name_test.rb
|
47
49
|
- test/schema.rb
|
@@ -75,6 +77,8 @@ specification_version: 2
|
|
75
77
|
summary: Rails plugin to set created_by, updated_by, deleted_by to ActiveRecord objects. Supports associations.
|
76
78
|
test_files:
|
77
79
|
- test/database.yml
|
80
|
+
- test/record_with_operator_belongs_to_association_test.rb
|
81
|
+
- test/record_with_operator_has_one_association_test.rb
|
78
82
|
- test/record_with_operator_test.rb
|
79
83
|
- test/record_with_operator_user_class_name_test.rb
|
80
84
|
- test/schema.rb
|
data/init.rb
DELETED
@@ -1 +0,0 @@
|
|
1
|
-
ActiveRecord::Base.instance_eval{include RecordWithOperator} unless ActiveRecord::Base.include?(RecordWithOperator)
|