momomoto 0.1.8 → 0.1.9
Sign up to get free protection for your applications and to get access to all the features.
- data/lib/momomoto/datatype/interval.rb +3 -3
- data/lib/momomoto/datatype/text.rb +1 -1
- data/lib/momomoto/momomoto.rb +1 -0
- data/lib/momomoto/row.rb +2 -0
- data/lib/momomoto/table.rb +0 -3
- data/lib/timeinterval.rb +52 -0
- data/test/test_interval.rb +4 -4
- data/test/test_timeinterval.rb +24 -0
- metadata +4 -2
@@ -13,12 +13,12 @@ module Momomoto
|
|
13
13
|
def filter_get( value )
|
14
14
|
case value
|
15
15
|
when nil, '' then nil
|
16
|
-
when ::
|
17
|
-
when String then ::
|
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,
|
21
|
+
raise ConversionError, "Error while parsing interval (#{e.message})"
|
22
22
|
end
|
23
23
|
|
24
24
|
def filter_set( value )
|
data/lib/momomoto/momomoto.rb
CHANGED
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 )
|
data/lib/momomoto/table.rb
CHANGED
@@ -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
|
|
data/lib/timeinterval.rb
ADDED
@@ -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
|
+
|
data/test/test_interval.rb
CHANGED
@@ -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
|
-
[
|
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.
|
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.
|
7
|
-
date: 2007-10-
|
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
|