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 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.2"
15
+ VER = "0.0.3"
16
16
  CLEAN.include ['pkg']
17
17
 
18
18
  desc 'Default: run unit tests.'
@@ -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
@@ -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.2
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)