momomoto 0.1.3 → 0.1.4
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/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:
|