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 CHANGED
@@ -170,7 +170,7 @@ module Momomoto
170
170
  store = instance_variable_get(:@data)
171
171
  value = data_type.filter_set( value )
172
172
  if store[index] != value
173
- instance_variable_set(:@dirty, true)
173
+ mark_dirty( field_name )
174
174
  store[index] = value
175
175
  end
176
176
  end
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=( value )
30
- @dirty = !!value
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
- @dirty = false
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
- @dirty = true
84
+ mark_dirty( column )
76
85
  @data[index] = value
77
86
  end
78
87
  end
@@ -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 get_colum and set_column
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
- self.primary_keys=( database.fetch_primary_keys( table_name(), schema_name()) )
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.dirty = false
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.send( field_name ))
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
- setter << field_name.to_s + ' = ' + data_type.escape(row.send(field_name))
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.8.11
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.3
7
- date: 2007-08-17 00:00:00 +02:00
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: