momomoto 0.1.9 → 0.1.10
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/table.rb +2 -2
- data/lib/timeinterval.rb +28 -12
- data/test/test_timeinterval.rb +17 -1
- metadata +2 -2
data/lib/momomoto/table.rb
CHANGED
@@ -189,7 +189,7 @@ module Momomoto
|
|
189
189
|
new_row[ key ] = true
|
190
190
|
elsif value.default == "false"
|
191
191
|
new_row[ key ] = false
|
192
|
-
elsif m = value.default.match( /^'([^']+)'::(text|interval|
|
192
|
+
elsif m = value.default.match( /^'([^']+)'::(text|interval|time(stamp)? with(out)? time zone)$/ )
|
193
193
|
new_row[ key ] = m[1]
|
194
194
|
end
|
195
195
|
end
|
@@ -295,7 +295,7 @@ module Momomoto
|
|
295
295
|
raise Error, "Primary key fields must not be empty!" if not row.send( field_name )
|
296
296
|
conditions[field_name] = row.send( field_name )
|
297
297
|
end
|
298
|
-
sql = "DELETE FROM #{
|
298
|
+
sql = "DELETE FROM #{full_name} #{compile_where(conditions)};"
|
299
299
|
row.new_record = true
|
300
300
|
database.execute( sql )
|
301
301
|
end
|
data/lib/timeinterval.rb
CHANGED
@@ -3,23 +3,24 @@ require 'date'
|
|
3
3
|
|
4
4
|
class TimeInterval
|
5
5
|
|
6
|
+
include Comparable
|
7
|
+
|
8
|
+
class ParseError < StandardError; end
|
9
|
+
|
6
10
|
attr_reader :hour, :min, :sec
|
7
11
|
|
8
12
|
class << self
|
9
13
|
|
10
14
|
def parse( interval )
|
11
|
-
|
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 )
|
15
|
+
TimeInterval.new( interval )
|
19
16
|
end
|
20
17
|
|
21
18
|
end
|
22
19
|
|
20
|
+
def <=>( other )
|
21
|
+
self.to_i <=> other.to_i
|
22
|
+
end
|
23
|
+
|
23
24
|
def strftime( fmt = "%H:%M:%S" )
|
24
25
|
fmt.gsub( /%(.)/ ) do | match |
|
25
26
|
case match[1,1]
|
@@ -27,7 +28,7 @@ class TimeInterval
|
|
27
28
|
when 'M' then sprintf('%02d',@min)
|
28
29
|
when 'S' then sprintf('%02d',@sec)
|
29
30
|
when '%' then '%'
|
30
|
-
else
|
31
|
+
else match
|
31
32
|
end
|
32
33
|
end
|
33
34
|
end
|
@@ -43,9 +44,24 @@ class TimeInterval
|
|
43
44
|
end
|
44
45
|
|
45
46
|
def initialize( d = {} )
|
46
|
-
|
47
|
-
|
48
|
-
|
47
|
+
case d
|
48
|
+
when Hash then
|
49
|
+
@hour = d[:hour] || 0
|
50
|
+
@min = d[:min] || 0
|
51
|
+
@sec = d[:sec] || 0
|
52
|
+
when Integer then
|
53
|
+
@hour = d/3600
|
54
|
+
@min = (d/60)%60
|
55
|
+
@sec = d%60
|
56
|
+
when String then
|
57
|
+
parsed = Date._parse( d, false)
|
58
|
+
if ( parsed.empty? && d.length > 0 ) || !(parsed.keys - [:hour,:min,:sec]).empty?
|
59
|
+
raise ParseError, "Could not parse interval `#{d}`"
|
60
|
+
end
|
61
|
+
@hour = parsed[:hour] || 0
|
62
|
+
@min = parsed[:min] || 0
|
63
|
+
@sec = parsed[:sec] || 0
|
64
|
+
end
|
49
65
|
end
|
50
66
|
|
51
67
|
end
|
data/test/test_timeinterval.rb
CHANGED
@@ -1,12 +1,13 @@
|
|
1
1
|
|
2
2
|
class TestTimeInterval < Test::Unit::TestCase
|
3
3
|
|
4
|
-
|
5
4
|
def test_parse
|
6
5
|
["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
6
|
i = TimeInterval.parse( number )
|
8
7
|
assert_equal( i.to_s, number )
|
9
8
|
end
|
9
|
+
assert_raise( TimeInterval::ParseError ) do TimeInterval.parse("u") end
|
10
|
+
assert_raise( TimeInterval::ParseError ) do TimeInterval.parse("2023-05-05 23:05:00") end
|
10
11
|
end
|
11
12
|
|
12
13
|
def test_to_i
|
@@ -18,7 +19,22 @@ class TestTimeInterval < Test::Unit::TestCase
|
|
18
19
|
end
|
19
20
|
end
|
20
21
|
|
22
|
+
def test_strftime
|
23
|
+
i = TimeInterval.parse( "23:00:05" )
|
24
|
+
assert_equal( "23", i.strftime("%H"))
|
25
|
+
assert_equal( "00", i.strftime("%M"))
|
26
|
+
assert_equal( "05", i.strftime("%S"))
|
27
|
+
assert_equal( "%", i.strftime("%%"))
|
28
|
+
assert_equal( "%A", i.strftime("%A"))
|
29
|
+
end
|
21
30
|
|
31
|
+
def test_comparison
|
32
|
+
assert( TimeInterval.new( 0 ) < TimeInterval.new( 2 ) )
|
33
|
+
assert( TimeInterval.new( 42 ) > TimeInterval.new( 5 ) )
|
34
|
+
assert( TimeInterval.new( 23 ) == TimeInterval.new( 23 ) )
|
35
|
+
assert( TimeInterval.new( "0:00:00" ) == TimeInterval.new( 0 ) )
|
36
|
+
assert( TimeInterval.new( "01:00:00" ) == TimeInterval.new( "1:00:00" ) )
|
37
|
+
end
|
22
38
|
|
23
39
|
end
|
24
40
|
|
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-
|
6
|
+
version: 0.1.10
|
7
|
+
date: 2007-11-01 00:00:00 +01:00
|
8
8
|
summary: Momomoto is an object relational mapper for PostgreSQL.
|
9
9
|
require_paths:
|
10
10
|
- lib
|