momomoto 0.1.8 → 0.1.9

Sign up to get free protection for your applications and to get access to all the features.
@@ -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