m4dbi 0.8.4 → 0.8.5
Sign up to get free protection for your applications and to get access to all the features.
- data/lib/m4dbi/model.rb +9 -14
- data/lib/m4dbi/version.rb +1 -1
- data/spec/model.rb +10 -0
- metadata +2 -2
data/lib/m4dbi/model.rb
CHANGED
@@ -122,6 +122,7 @@ module M4DBI
|
|
122
122
|
values = keys.map { |key| hash[ key ] }
|
123
123
|
value_placeholders = values.map { |v| '?' }.join( ',' )
|
124
124
|
rec = nil
|
125
|
+
num_inserted = 0
|
125
126
|
|
126
127
|
dbh.transaction do |dbh_|
|
127
128
|
if keys.empty? && defined?( RDBI::Driver::PostgreSQL ) && RDBI::Driver::PostgreSQL === dbh.driver
|
@@ -142,23 +143,9 @@ module M4DBI
|
|
142
143
|
end
|
143
144
|
if ! pk_hash.empty?
|
144
145
|
rec = self.one_where( pk_hash )
|
145
|
-
if hooks[:active]
|
146
|
-
hooks[:after_create].each do |block|
|
147
|
-
hooks[:active] = false
|
148
|
-
block.yield rec
|
149
|
-
hooks[:active] = true
|
150
|
-
end
|
151
|
-
end
|
152
146
|
else
|
153
147
|
begin
|
154
148
|
rec = last_record( dbh_ )
|
155
|
-
if hooks[:active]
|
156
|
-
hooks[:after_create].each do |block|
|
157
|
-
hooks[:active] = false
|
158
|
-
block.yield rec
|
159
|
-
hooks[:active] = true
|
160
|
-
end
|
161
|
-
end
|
162
149
|
rescue NoMethodError => e
|
163
150
|
# ignore
|
164
151
|
#puts "not implemented: #{e.message}"
|
@@ -167,6 +154,14 @@ module M4DBI
|
|
167
154
|
end
|
168
155
|
end
|
169
156
|
|
157
|
+
if hooks[:active] && num_inserted > 0
|
158
|
+
hooks[:after_create].each do |block|
|
159
|
+
hooks[:active] = false
|
160
|
+
block.yield rec
|
161
|
+
hooks[:active] = true
|
162
|
+
end
|
163
|
+
end
|
164
|
+
|
170
165
|
rec
|
171
166
|
end
|
172
167
|
|
data/lib/m4dbi/version.rb
CHANGED
data/spec/model.rb
CHANGED
@@ -686,6 +686,16 @@ describe 'A M4DBI::Model subclass' do
|
|
686
686
|
a = Author.create(name: 'theauthor')
|
687
687
|
$test.should.equal 2
|
688
688
|
a.name.should.equal 'different name'
|
689
|
+
|
690
|
+
class Post < M4DBI::Model( :posts ); end
|
691
|
+
class Author < M4DBI::Model( :authors )
|
692
|
+
after_create do |author|
|
693
|
+
Post.create(author_id: author.id, text: 'foobar')
|
694
|
+
end
|
695
|
+
end
|
696
|
+
n = Post.count
|
697
|
+
a = Author.create(name: 'theauthor')
|
698
|
+
Post.count.should == n+1
|
689
699
|
end
|
690
700
|
|
691
701
|
it 'provides a means to remove all after_create hooks' do
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: m4dbi
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.8.
|
4
|
+
version: 0.8.5
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -9,7 +9,7 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2012-07-
|
12
|
+
date: 2012-07-17 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: metaid
|