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