nay-record_with_operator 0.0.7 → 0.0.8
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 +46 -34
- data/test/record_with_operator_reflection_test.rb +39 -0
- data/test/record_with_operator_test.rb +1 -4
- metadata +4 -2
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.8"
|
16
16
|
CLEAN.include ['pkg']
|
17
17
|
|
18
18
|
desc 'Default: run unit tests.'
|
data/lib/record_with_operator.rb
CHANGED
@@ -8,6 +8,24 @@ module RecordWithOperator
|
|
8
8
|
|
9
9
|
def self.included(base)
|
10
10
|
class << base
|
11
|
+
def reflections_with_operator
|
12
|
+
create_operator_associations
|
13
|
+
reflections_without_operator
|
14
|
+
end
|
15
|
+
alias_method_chain :reflections, :operator
|
16
|
+
|
17
|
+
def operator_associations_created?
|
18
|
+
@operator_associations_created
|
19
|
+
end
|
20
|
+
|
21
|
+
def create_operator_associations
|
22
|
+
return if operator_associations_created?
|
23
|
+
belongs_to :creator, :foreign_key => "created_by", :class_name => RecordWithOperator.config[:user_class_name] if column_names.include?('created_by')
|
24
|
+
belongs_to :updater, :foreign_key => "updated_by", :class_name => RecordWithOperator.config[:user_class_name] if column_names.include?('updated_by')
|
25
|
+
belongs_to :deleter, :foreign_key => "deleted_by", :class_name => RecordWithOperator.config[:user_class_name] if column_names.include?('deleted_by')
|
26
|
+
@operator_associations_created = true
|
27
|
+
end
|
28
|
+
|
11
29
|
def has_many_with_operator(*args, &extension)
|
12
30
|
options = args.extract_options!
|
13
31
|
# add AssociationWithOprator to :extend
|
@@ -57,35 +75,35 @@ module RecordWithOperator
|
|
57
75
|
alias_method_chain :validate_find_options, :for
|
58
76
|
|
59
77
|
private
|
60
|
-
|
61
|
-
|
62
|
-
|
63
|
-
|
64
|
-
|
65
|
-
|
66
|
-
|
67
|
-
|
68
|
-
|
78
|
+
# define_method association, association= ...
|
79
|
+
def association_accessor_methods_with_operator(reflection, association_proxy_class)
|
80
|
+
association_accessor_methods_without_operator(reflection, association_proxy_class)
|
81
|
+
define_method("#{reflection.name}_with_operator") do |*params|
|
82
|
+
r = send("#{reflection.name}_without_operator", *params)
|
83
|
+
r.operator ||= self.operator if r && r.respond_to?(:operator=)
|
84
|
+
r
|
85
|
+
end
|
86
|
+
alias_method_chain "#{reflection.name}".to_sym, :operator
|
69
87
|
|
70
|
-
|
71
|
-
|
72
|
-
|
73
|
-
end
|
74
|
-
alias_method_chain "#{reflection.name}=".to_sym, :operator
|
88
|
+
define_method("#{reflection.name}_with_operator=") do |new_value|
|
89
|
+
new_value.operator ||= self.operator if new_value.respond_to?(:operator=)
|
90
|
+
send("#{reflection.name}_without_operator=", new_value)
|
75
91
|
end
|
76
|
-
alias_method_chain
|
77
|
-
|
78
|
-
|
79
|
-
|
80
|
-
|
81
|
-
|
82
|
-
|
83
|
-
|
84
|
-
|
85
|
-
|
86
|
-
|
92
|
+
alias_method_chain "#{reflection.name}=".to_sym, :operator
|
93
|
+
end
|
94
|
+
alias_method_chain :association_accessor_methods, :operator
|
95
|
+
|
96
|
+
# define_method build_association, create_association ...
|
97
|
+
def association_constructor_method_with_operator(constructor, reflection, association_proxy_class)
|
98
|
+
association_constructor_method_without_operator(constructor, reflection, association_proxy_class)
|
99
|
+
define_method("#{constructor}_#{reflection.name}_with_operator") do |*params|
|
100
|
+
options = { :operator => self.operator }
|
101
|
+
params.empty? ? params[0] = options : params.first.merge!(options)
|
102
|
+
self.send("#{constructor}_#{reflection.name}_without_operator", *params)
|
87
103
|
end
|
88
|
-
alias_method_chain
|
104
|
+
alias_method_chain "#{constructor}_#{reflection.name}".to_sym, :operator
|
105
|
+
end
|
106
|
+
alias_method_chain :association_constructor_method, :operator
|
89
107
|
end
|
90
108
|
|
91
109
|
base.before_create :set_created_by
|
@@ -115,14 +133,8 @@ module RecordWithOperator
|
|
115
133
|
def method_missing(method, *args)
|
116
134
|
return super unless respond_to?(method)
|
117
135
|
case method.to_sym
|
118
|
-
when :creator
|
119
|
-
self.class.
|
120
|
-
send(method, *args)
|
121
|
-
when :updater
|
122
|
-
self.class.belongs_to :updater, :foreign_key => "updated_by", :class_name => RecordWithOperator.config[:user_class_name]
|
123
|
-
send(method, *args)
|
124
|
-
when :deleter
|
125
|
-
self.class.belongs_to :deletor, :foreign_key => "deleted_by", :class_name => RecordWithOperator.config[:user_class_name]
|
136
|
+
when :creator, :updater, :deleter
|
137
|
+
self.class.create_operator_associations
|
126
138
|
send(method, *args)
|
127
139
|
else
|
128
140
|
super
|
@@ -0,0 +1,39 @@
|
|
1
|
+
require 'test_helper'
|
2
|
+
|
3
|
+
class User < ActiveRecord::Base
|
4
|
+
end
|
5
|
+
|
6
|
+
class NoteForReflectionTest < ActiveRecord::Base
|
7
|
+
set_table_name "notes"
|
8
|
+
end
|
9
|
+
|
10
|
+
class CreatorNoteForReflectionTest < ActiveRecord::Base
|
11
|
+
set_table_name "creator_notes"
|
12
|
+
end
|
13
|
+
|
14
|
+
class RecordWithOperatorReflectionTest < ActiveSupport::TestCase
|
15
|
+
def setup
|
16
|
+
RecordWithOperator.config[:user_class_name] = "User"
|
17
|
+
@user1 = User.create!(:name => "user1")
|
18
|
+
raise "@user1.id is nil" unless @user1.id
|
19
|
+
@note = NoteForReflectionTest.create!(:body => "test", :operator => @user1)
|
20
|
+
|
21
|
+
@creator_note = CreatorNoteForReflectionTest.create!(:body => "test", :operator => @user1)
|
22
|
+
end
|
23
|
+
|
24
|
+
def test_include
|
25
|
+
assert NoteForReflectionTest.find(:all, :include => [:creator, :updater])
|
26
|
+
end
|
27
|
+
|
28
|
+
def test_joins
|
29
|
+
assert NoteForReflectionTest.find(:all, :joins => [:creator, :updater])
|
30
|
+
end
|
31
|
+
|
32
|
+
def test_include_missing_association
|
33
|
+
assert_raise(ActiveRecord::ConfigurationError) { CreatorNoteForReflectionTest.find(:all, :include => [:updater]) }
|
34
|
+
end
|
35
|
+
|
36
|
+
def test_joins_missing_association
|
37
|
+
assert_raise(ActiveRecord::ConfigurationError) { CreatorNoteForReflectionTest.find(:all, :joins => [:updater]) }
|
38
|
+
end
|
39
|
+
end
|
@@ -62,7 +62,6 @@ class RecordWithOperatorTest < ActiveSupport::TestCase
|
|
62
62
|
end
|
63
63
|
|
64
64
|
# creator/updater/deleter association operation
|
65
|
-
|
66
65
|
def test_note_should_be_respond_to_creator
|
67
66
|
assert NoteWithUser.new.respond_to? :creator
|
68
67
|
end
|
@@ -219,6 +218,4 @@ class RecordWithOperatorTest < ActiveSupport::TestCase
|
|
219
218
|
note.memos.create!(:body => "memo")
|
220
219
|
assert_equal @user2, note.memos.new_arrivals.find_by_body("memo").operator
|
221
220
|
end
|
222
|
-
|
223
|
-
|
224
|
-
end
|
221
|
+
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.8
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Yasuko Ohba
|
@@ -9,7 +9,7 @@ autorequire:
|
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
11
|
|
12
|
-
date: 2009-
|
12
|
+
date: 2009-03-11 00:00:00 -07:00
|
13
13
|
default_executable:
|
14
14
|
dependencies:
|
15
15
|
- !ruby/object:Gem::Dependency
|
@@ -44,6 +44,7 @@ files:
|
|
44
44
|
- rails/init.rb
|
45
45
|
- test/record_with_operator_belongs_to_association_test.rb
|
46
46
|
- test/record_with_operator_has_one_association_test.rb
|
47
|
+
- test/record_with_operator_reflection_test.rb
|
47
48
|
- test/record_with_operator_test.rb
|
48
49
|
- test/record_with_operator_user_class_name_test.rb
|
49
50
|
- test/schema.rb
|
@@ -79,6 +80,7 @@ summary: Rails plugin to set created_by, updated_by, deleted_by to ActiveRecord
|
|
79
80
|
test_files:
|
80
81
|
- test/record_with_operator_belongs_to_association_test.rb
|
81
82
|
- test/record_with_operator_has_one_association_test.rb
|
83
|
+
- test/record_with_operator_reflection_test.rb
|
82
84
|
- test/record_with_operator_test.rb
|
83
85
|
- test/record_with_operator_user_class_name_test.rb
|
84
86
|
- test/schema.rb
|