momomoto 0.1.3 → 0.1.4
Sign up to get free protection for your applications and to get access to all the features.
- data/lib/momomoto/base.rb +1 -1
- data/lib/momomoto/row.rb +14 -5
- data/lib/momomoto/table.rb +6 -5
- data/test/test_table.rb +20 -0
- metadata +4 -3
data/lib/momomoto/base.rb
CHANGED
data/lib/momomoto/row.rb
CHANGED
@@ -22,18 +22,27 @@ module Momomoto
|
|
22
22
|
@data == other.instance_variable_get( :@data )
|
23
23
|
end
|
24
24
|
|
25
|
-
def dirty
|
25
|
+
def dirty
|
26
26
|
@dirty
|
27
27
|
end
|
28
28
|
|
29
|
-
def dirty
|
30
|
-
@dirty
|
29
|
+
def dirty?
|
30
|
+
@dirty.length > 0
|
31
|
+
end
|
32
|
+
|
33
|
+
def mark_dirty( field )
|
34
|
+
field = field.to_sym
|
35
|
+
@dirty.push( field ) if not @dirty.member?( field )
|
36
|
+
end
|
37
|
+
|
38
|
+
def clean_dirty
|
39
|
+
@dirty = []
|
31
40
|
end
|
32
41
|
|
33
42
|
def initialize( data = [] )
|
34
43
|
@data = data
|
35
44
|
@new_record = false
|
36
|
-
|
45
|
+
clean_dirty
|
37
46
|
end
|
38
47
|
|
39
48
|
def new_record?
|
@@ -72,7 +81,7 @@ module Momomoto
|
|
72
81
|
value = table.columns[column.to_sym].filter_set( value )
|
73
82
|
index = table.column_order.index( column.to_sym )
|
74
83
|
if @data[index] != value
|
75
|
-
|
84
|
+
mark_dirty( column )
|
76
85
|
@data[index] = value
|
77
86
|
end
|
78
87
|
end
|
data/lib/momomoto/table.rb
CHANGED
@@ -21,7 +21,7 @@ module Momomoto
|
|
21
21
|
# set the columns of the table this class operates on
|
22
22
|
def columns=( columns )
|
23
23
|
# we store the order separate because it's quite important
|
24
|
-
# that it's constant otherwise
|
24
|
+
# that it's constant otherwise get_column and set_column
|
25
25
|
# on the row class might stop working
|
26
26
|
@column_order = columns.keys
|
27
27
|
@columns = columns
|
@@ -93,7 +93,7 @@ module Momomoto
|
|
93
93
|
def primary_keys( keys = nil )
|
94
94
|
return self.primary_keys=( keys ) if keys
|
95
95
|
if not instance_variable_defined?( :@primary_keys )
|
96
|
-
|
96
|
+
initialize_table
|
97
97
|
end
|
98
98
|
@primary_keys
|
99
99
|
end
|
@@ -243,7 +243,7 @@ module Momomoto
|
|
243
243
|
return false unless row.dirty?
|
244
244
|
update( row )
|
245
245
|
end
|
246
|
-
row.
|
246
|
+
row.clean_dirty
|
247
247
|
true
|
248
248
|
end
|
249
249
|
|
@@ -262,7 +262,7 @@ module Momomoto
|
|
262
262
|
end
|
263
263
|
next if row.send( field_name ).nil?
|
264
264
|
fields << field_name
|
265
|
-
values << datatype.escape( row.
|
265
|
+
values << datatype.escape( row.get_column( field_name ))
|
266
266
|
end
|
267
267
|
raise Error, "insert with all fields nil" if fields.empty?
|
268
268
|
sql = "INSERT INTO " + full_name + '(' + fields.join(',') + ') VALUES (' + values.join(',') + ');'
|
@@ -275,7 +275,8 @@ module Momomoto
|
|
275
275
|
raise CriticalError, 'Updating is only allowed for tables with primary keys' if primary_keys.empty?
|
276
276
|
setter, conditions = [], {}
|
277
277
|
columns.each do | field_name, data_type |
|
278
|
-
|
278
|
+
next if not row.dirty.member?( field_name )
|
279
|
+
setter << field_name.to_s + ' = ' + data_type.escape(row.get_column(field_name))
|
279
280
|
end
|
280
281
|
primary_keys.each do | field_name |
|
281
282
|
raise Error, "Primary key fields must not be empty!" if not row.send( field_name )
|
data/test/test_table.rb
CHANGED
@@ -216,6 +216,26 @@ class TestTable < Test::Unit::TestCase
|
|
216
216
|
p2.delete
|
217
217
|
end
|
218
218
|
|
219
|
+
def test_update
|
220
|
+
Person.select(:first_name=>'test_update').each do | p | p.delete end
|
221
|
+
|
222
|
+
assert_raise( Momomoto::Nothing_found ) do
|
223
|
+
Person.select_single(:first_name=>'test_update')
|
224
|
+
end
|
225
|
+
|
226
|
+
p1 = Person.new(:first_name=>'test_select_single')
|
227
|
+
p1.write
|
228
|
+
p1.first_name = 'Chunky'
|
229
|
+
p1.last_name = 'Bacon'
|
230
|
+
p1.write
|
231
|
+
p2 = Person.select_single(:person_id=>p1.person_id)
|
232
|
+
assert_equal( p1.person_id, p2.person_id)
|
233
|
+
assert_equal( p1.first_name, p2.first_name )
|
234
|
+
assert_equal( p1.last_name, p2.last_name)
|
235
|
+
|
236
|
+
p1.delete
|
237
|
+
end
|
238
|
+
|
219
239
|
def test_defaults
|
220
240
|
conf = Conference.select_or_new(:conference_id=>1)
|
221
241
|
conf.acronym = 'Pentabarf'
|
metadata
CHANGED
@@ -1,10 +1,10 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
|
-
rubygems_version: 0.
|
2
|
+
rubygems_version: 0.9.4
|
3
3
|
specification_version: 1
|
4
4
|
name: momomoto
|
5
5
|
version: !ruby/object:Gem::Version
|
6
|
-
version: 0.1.
|
7
|
-
date: 2007-
|
6
|
+
version: 0.1.4
|
7
|
+
date: 2007-09-01 00:00:00 +02:00
|
8
8
|
summary: Momomoto is an object relational mapper for PostgreSQL.
|
9
9
|
require_paths:
|
10
10
|
- lib
|
@@ -25,6 +25,7 @@ required_ruby_version: !ruby/object:Gem::Version::Requirement
|
|
25
25
|
platform: ruby
|
26
26
|
signing_key:
|
27
27
|
cert_chain:
|
28
|
+
post_install_message:
|
28
29
|
authors:
|
29
30
|
- Sven Klemm
|
30
31
|
files:
|