momomoto 0.1.8 → 0.1.9

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.
@@ -13,12 +13,12 @@ module Momomoto
13
13
  def filter_get( value )
14
14
  case value
15
15
  when nil, '' then nil
16
- when ::Time then value
17
- when String then ::Time.parse( value )
16
+ when ::TimeInterval then value
17
+ when String then ::TimeInterval.parse( value )
18
18
  else raise Error
19
19
  end
20
20
  rescue => e
21
- raise ConversionError, 'Error while parsing time'
21
+ raise ConversionError, "Error while parsing interval (#{e.message})"
22
22
  end
23
23
 
24
24
  def filter_set( value )
@@ -7,7 +7,7 @@ module Momomoto
7
7
  end
8
8
 
9
9
  def escape( input )
10
- if input.nil? || input.empty?
10
+ if input.nil? || input.to_s.empty?
11
11
  "NULL"
12
12
  else
13
13
  "E'" + Database.escape_string( input.to_s ) + "'"
@@ -4,6 +4,7 @@ require 'momomoto/table'
4
4
  require 'momomoto/procedure'
5
5
  require 'momomoto/order'
6
6
  require 'momomoto/row'
7
+ require 'timeinterval'
7
8
  require 'momomoto/datatype'
8
9
  require 'momomoto/database'
9
10
 
data/lib/momomoto/row.rb CHANGED
@@ -82,6 +82,7 @@ module Momomoto
82
82
 
83
83
  # generic setter for column values
84
84
  def set_column( column, value )
85
+ raise "Unknown column #{column}" if not self.class.column_order.member?( column.to_sym )
85
86
  table = self.class.table
86
87
  if not new_record? and table.primary_keys.member?( column.to_sym )
87
88
  raise Error, "Setting primary keys(#{column}) is only allowed for new records"
@@ -96,6 +97,7 @@ module Momomoto
96
97
 
97
98
  # generic getter for column values
98
99
  def get_column( column )
100
+ raise "Unknown column #{column}" if not self.class.column_order.member?( column.to_sym )
99
101
  table = self.class.table
100
102
  index = self.class.column_order.index( column.to_sym )
101
103
  if table.columns[column.to_sym].respond_to?( :filter_get )
@@ -20,9 +20,6 @@ module Momomoto
20
20
 
21
21
  # set the columns of the table this class operates on
22
22
  def columns=( columns )
23
- # we store the order separate because it's quite important
24
- # that it's constant otherwise get_column and set_column
25
- # on the row class might stop working
26
23
  @columns = columns
27
24
  end
28
25
 
@@ -0,0 +1,52 @@
1
+
2
+ require 'date'
3
+
4
+ class TimeInterval
5
+
6
+ attr_reader :hour, :min, :sec
7
+
8
+ class << self
9
+
10
+ def parse( interval )
11
+ d = Date._parse( interval, false)
12
+ if d.empty? && interval.length > 0
13
+ raise "Could not parse interval `#{interval}`"
14
+ end
15
+ if !(d.keys - [:hour,:min,:sec]).empty?
16
+ raise "Could not parse interval `#{interval}`"
17
+ end
18
+ TimeInterval.new( d )
19
+ end
20
+
21
+ end
22
+
23
+ def strftime( fmt = "%H:%M:%S" )
24
+ fmt.gsub( /%(.)/ ) do | match |
25
+ case match[1,1]
26
+ when 'H' then sprintf('%02d',@hour)
27
+ when 'M' then sprintf('%02d',@min)
28
+ when 'S' then sprintf('%02d',@sec)
29
+ when '%' then '%'
30
+ else '%' + match
31
+ end
32
+ end
33
+ end
34
+
35
+ def to_i
36
+ @hour * 3600 + @min * 60 + @sec
37
+ end
38
+
39
+ alias_method :to_int, :to_i
40
+
41
+ def to_s
42
+ strftime
43
+ end
44
+
45
+ def initialize( d = {} )
46
+ @hour = d[:hour] || 0
47
+ @min = d[:min] || 0
48
+ @sec = d[:sec] || 0
49
+ end
50
+
51
+ end
52
+
@@ -25,12 +25,12 @@ class TestInterval < Test::Unit::TestCase
25
25
  def test_samples
26
26
  c = Class.new( Momomoto::Table )
27
27
  c.table_name = 'test_interval'
28
- [Time.parse("00:00:00"), Time.parse("01:00:00"), Time.parse("23:00:00")].each do | number |
28
+ ["00:00:00","00:05:00","00:00:23","00:05:23","05:00:00","42:00:00","42:05:23"].each do | number |
29
29
  r = c.new( :data => number )
30
- assert_equal( number, r.data )
30
+ assert_equal( number, r.data.to_s )
31
31
  r.write
32
- r2 = c.select(:id=>r.id).first
33
- assert_equal( number, r2.data )
32
+ r2 = c.select_single(:id=>r.id)
33
+ assert_equal( number, r2.data.to_s )
34
34
  end
35
35
  end
36
36
 
@@ -0,0 +1,24 @@
1
+
2
+ class TestTimeInterval < Test::Unit::TestCase
3
+
4
+
5
+ def test_parse
6
+ ["00:00:00","00:05:00","00:00:23","00:05:23","05:00:00","42:00:00","42:05:23"].each do | number |
7
+ i = TimeInterval.parse( number )
8
+ assert_equal( i.to_s, number )
9
+ end
10
+ end
11
+
12
+ def test_to_i
13
+ examples = { "00:00:00" => 0, "0:00:00" => 0, "000:00:00" => 0, "01:00:00" => 3600, "00:00:01" => 1, "00:01:00" => 60, "01:01:00" => 3660, "02:00:00" => 7200, "40:00:00" => 144000 }
14
+ examples.each do | string, number |
15
+ i = TimeInterval.parse( string )
16
+ assert_equal( i.to_i, number )
17
+ assert_equal( i.to_int, number )
18
+ end
19
+ end
20
+
21
+
22
+
23
+ end
24
+
metadata CHANGED
@@ -3,8 +3,8 @@ 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.8
7
- date: 2007-10-15 00:00:00 +02:00
6
+ version: 0.1.9
7
+ date: 2007-10-25 00:00:00 +02:00
8
8
  summary: Momomoto is an object relational mapper for PostgreSQL.
9
9
  require_paths:
10
10
  - lib
@@ -29,6 +29,7 @@ post_install_message:
29
29
  authors:
30
30
  - Sven Klemm
31
31
  files:
32
+ - lib/timeinterval.rb
32
33
  - lib/momomoto.rb
33
34
  - lib/momomoto/database.rb
34
35
  - lib/momomoto/momomoto.rb
@@ -82,6 +83,7 @@ files:
82
83
  - test/test_row.rb
83
84
  - test/test_timestamp_without_time_zone.rb
84
85
  - test/test_time_with_time_zone.rb
86
+ - test/test_timeinterval.rb
85
87
  - test/test_database.rb
86
88
  - test/test_bytea.rb
87
89
  - test/test_information_schema.rb