m4dbi 0.8.6 → 0.8.7
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/lib/m4dbi/model.rb +13 -2
- data/lib/m4dbi/statement.rb +1 -1
- data/lib/m4dbi/version.rb +1 -1
- data/spec/model.rb +34 -4
- metadata +3 -3
data/lib/m4dbi/model.rb
CHANGED
@@ -416,6 +416,7 @@ module M4DBI
|
|
416
416
|
def set( hash )
|
417
417
|
set_clause, set_params = hash.to_set_clause
|
418
418
|
set_params << pk
|
419
|
+
state_before = self.to_h
|
419
420
|
st = prepare("UPDATE #{table} SET #{set_clause} WHERE #{pk_clause}")
|
420
421
|
num_updated = st.execute( *set_params ).affected_count
|
421
422
|
if num_updated > 0
|
@@ -425,7 +426,7 @@ module M4DBI
|
|
425
426
|
if self.class.hooks[:active]
|
426
427
|
self.class.hooks[:after_update].each do |block|
|
427
428
|
self.class.hooks[:active] = false
|
428
|
-
block.yield self
|
429
|
+
block.yield state_before, self
|
429
430
|
self.class.hooks[:active] = true
|
430
431
|
end
|
431
432
|
end
|
@@ -466,6 +467,15 @@ module M4DBI
|
|
466
467
|
def save!
|
467
468
|
nil
|
468
469
|
end
|
470
|
+
|
471
|
+
def to_h
|
472
|
+
h = Hash.new
|
473
|
+
self.class.columns.each do |col|
|
474
|
+
col_name = col['name'].to_s
|
475
|
+
h[col_name] = @row[col_name]
|
476
|
+
end
|
477
|
+
h
|
478
|
+
end
|
469
479
|
end
|
470
480
|
|
471
481
|
# Define a new M4DBI::Model like this:
|
@@ -546,6 +556,7 @@ module M4DBI
|
|
546
556
|
# Column writers
|
547
557
|
|
548
558
|
class_def( "#{method}=".to_sym ) do |new_value|
|
559
|
+
state_before = self.to_h
|
549
560
|
stm = prepare("UPDATE #{table} SET #{colname} = ? WHERE #{pk_clause}")
|
550
561
|
num_changed = stm.execute(
|
551
562
|
new_value,
|
@@ -557,7 +568,7 @@ module M4DBI
|
|
557
568
|
if self.class.hooks[:active]
|
558
569
|
self.class.hooks[:after_update].each do |block|
|
559
570
|
self.class.hooks[:active] = false
|
560
|
-
block.yield self
|
571
|
+
block.yield state_before, self
|
561
572
|
self.class.hooks[:active] = true
|
562
573
|
end
|
563
574
|
end
|
data/lib/m4dbi/statement.rb
CHANGED
data/lib/m4dbi/version.rb
CHANGED
data/spec/model.rb
CHANGED
@@ -854,7 +854,7 @@ describe 'A created M4DBI::Model subclass instance' do
|
|
854
854
|
|
855
855
|
it 'after setting data, executes code provided in an after_update hook' do
|
856
856
|
class Author < M4DBI::Model( :authors )
|
857
|
-
after_update do |author|
|
857
|
+
after_update do |author_before, author|
|
858
858
|
$test = 3
|
859
859
|
author.name = 'different name'
|
860
860
|
end
|
@@ -875,9 +875,25 @@ describe 'A created M4DBI::Model subclass instance' do
|
|
875
875
|
a.name.should.equal 'different name'
|
876
876
|
end
|
877
877
|
|
878
|
+
it 'after setting data, passes a Hash representing the previous state to after_update blocks' do
|
879
|
+
class Author < M4DBI::Model( :authors )
|
880
|
+
after_update do |author_before, author|
|
881
|
+
$test = author_before['name']
|
882
|
+
author.name = 'different name'
|
883
|
+
end
|
884
|
+
end
|
885
|
+
|
886
|
+
$test.should.not.equal 'theauthor'
|
887
|
+
a = Author.create(name: 'theauthor')
|
888
|
+
$test.should.not.equal 'theauthor'
|
889
|
+
a.name = 'foobar'
|
890
|
+
$test.should.equal 'theauthor'
|
891
|
+
a.name.should.equal 'different name'
|
892
|
+
end
|
893
|
+
|
878
894
|
it 'provides a means to remove all after_update hooks' do
|
879
895
|
class Author < M4DBI::Model( :authors )
|
880
|
-
after_update do |
|
896
|
+
after_update do |_, _|
|
881
897
|
$test = 'remove after_update'
|
882
898
|
end
|
883
899
|
end
|
@@ -908,7 +924,7 @@ describe 'A created M4DBI::Model subclass instance' do
|
|
908
924
|
it 'provides a means to remove all after_delete hooks' do
|
909
925
|
class Author < M4DBI::Model( :authors )
|
910
926
|
after_delete do |author|
|
911
|
-
$test = 'remove
|
927
|
+
$test = 'remove after_delete'
|
912
928
|
end
|
913
929
|
end
|
914
930
|
class Author < M4DBI::Model( :authors )
|
@@ -1047,12 +1063,13 @@ describe 'A found M4DBI::Model subclass instance' do
|
|
1047
1063
|
end
|
1048
1064
|
|
1049
1065
|
it 'before deletion, executes code provided in an before_delete hook' do
|
1066
|
+
$test = 'something'
|
1050
1067
|
class Author < M4DBI::Model( :authors )
|
1051
1068
|
before_delete do |author|
|
1052
1069
|
$test = author.name
|
1053
1070
|
end
|
1054
1071
|
end
|
1055
|
-
$test.should.
|
1072
|
+
$test.should.equal 'something'
|
1056
1073
|
a = Author.create(name: 'theauthor')
|
1057
1074
|
$test.should.not.equal 'theauthor'
|
1058
1075
|
a.delete
|
@@ -1085,6 +1102,19 @@ describe 'A found M4DBI::Model subclass instance' do
|
|
1085
1102
|
p.save!
|
1086
1103
|
end
|
1087
1104
|
end
|
1105
|
+
|
1106
|
+
it 'provides a Hash representation' do
|
1107
|
+
record = @m_mc.create( id: 12, c1: 50, c2: 44 )
|
1108
|
+
record.to_h.should.equal( {
|
1109
|
+
'id' => 12,
|
1110
|
+
'c1' => 50,
|
1111
|
+
'c2' => 44,
|
1112
|
+
'c3' => nil,
|
1113
|
+
'c4' => nil,
|
1114
|
+
'c5' => nil,
|
1115
|
+
'ts' => nil,
|
1116
|
+
} )
|
1117
|
+
end
|
1088
1118
|
end
|
1089
1119
|
|
1090
1120
|
describe 'M4DBI::Model (relationships)' 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.7
|
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:
|
12
|
+
date: 2013-02-01 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: metaid
|
@@ -92,7 +92,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
92
92
|
requirements:
|
93
93
|
- bacon (optional)
|
94
94
|
rubyforge_project:
|
95
|
-
rubygems_version: 1.8.
|
95
|
+
rubygems_version: 1.8.25
|
96
96
|
signing_key:
|
97
97
|
specification_version: 3
|
98
98
|
summary: Models (and More) for RDBI
|