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 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: