zoneless_time 0.2
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/README +13 -0
- data/lib/active_record/zoneless_time_support.rb +22 -0
- data/lib/zoneless_time.rb +10 -0
- data/lib/zoneless_time/equality_with_zoneless_time.rb +11 -0
- data/lib/zoneless_time/railtie.rb +11 -0
- data/lib/zoneless_time/time_without_zone.rb +81 -0
- data/lib/zoneless_time/warning.rb +1 -0
- metadata +70 -0
data/README
ADDED
@@ -0,0 +1,22 @@
|
|
1
|
+
module ActiveRecord
|
2
|
+
module ZonelessTimeSupport
|
3
|
+
def zoneless_time(sym)
|
4
|
+
instance_eval do
|
5
|
+
self.composed_of sym, :class_name => 'ZonelessTime::TimeWithoutZone',
|
6
|
+
:mapping => [[sym, 'time']], :constructor => :at
|
7
|
+
self.skip_time_zone_conversion_for_attributes << sym
|
8
|
+
define_method "#{sym}=" do |val|
|
9
|
+
if val.is_a? ZonelessTime::TimeWithoutZone
|
10
|
+
super val
|
11
|
+
else
|
12
|
+
super ZonelessTime::TimeWithoutZone.at(val)
|
13
|
+
end
|
14
|
+
end
|
15
|
+
end
|
16
|
+
|
17
|
+
if time_zone_aware_attributes
|
18
|
+
require 'zoneless_time/warning'
|
19
|
+
end
|
20
|
+
end
|
21
|
+
end
|
22
|
+
end
|
@@ -0,0 +1,10 @@
|
|
1
|
+
module ZonelessTime
|
2
|
+
end
|
3
|
+
|
4
|
+
require 'active_record/zoneless_time_support'
|
5
|
+
require 'zoneless_time/time_without_zone'
|
6
|
+
require 'zoneless_time/equality_with_zoneless_time'
|
7
|
+
|
8
|
+
Time.send :include, ZonelessTime::EqualityWithZonelessTime
|
9
|
+
|
10
|
+
require 'zoneless_time/railtie' if defined? Rails
|
@@ -0,0 +1,11 @@
|
|
1
|
+
require 'zoneless_time'
|
2
|
+
require 'rails'
|
3
|
+
|
4
|
+
module ZonelessTime
|
5
|
+
class Railtie < Rails::Railtie
|
6
|
+
initializer 'zoneless_time.configure_rails_initialization' do
|
7
|
+
ActiveSupport::TimeWithZone.send :include, EqualityWithZonelessTime
|
8
|
+
ActiveRecord::Base.send :extend, ActiveRecord::ZonelessTimeSupport
|
9
|
+
end
|
10
|
+
end
|
11
|
+
end
|
@@ -0,0 +1,81 @@
|
|
1
|
+
module ZonelessTime
|
2
|
+
class TimeWithoutZone
|
3
|
+
attr_accessor :date, :hour, :min, :sec, :usec
|
4
|
+
|
5
|
+
RFC2822_DAY_NAME = Time::RFC2822_DAY_NAME
|
6
|
+
RFC2822_MONTH_NAME = Time::RFC2822_MONTH_NAME
|
7
|
+
|
8
|
+
def initialize(year,month,day,hour,min,sec,usec=0)
|
9
|
+
@date = Date.new(year,month,day)
|
10
|
+
@hour = hour
|
11
|
+
@min = min
|
12
|
+
@sec = sec
|
13
|
+
@usec = usec
|
14
|
+
end
|
15
|
+
|
16
|
+
def year
|
17
|
+
date.year
|
18
|
+
end
|
19
|
+
def month
|
20
|
+
date.month
|
21
|
+
end
|
22
|
+
def day
|
23
|
+
date.day
|
24
|
+
end
|
25
|
+
def wday
|
26
|
+
date.wday
|
27
|
+
end
|
28
|
+
|
29
|
+
def to_s(type=nil)
|
30
|
+
if type == :db
|
31
|
+
"#{year}-#{two_char month}-#{two_char day} #{two_char hour}:#{two_char min}:#{two_char sec}"
|
32
|
+
else
|
33
|
+
"#{RFC2822_DAY_NAME[wday]} #{RFC2822_MONTH_NAME[month-1]} #{day} #{two_char hour}:#{two_char min}:#{two_char sec} #{year}"
|
34
|
+
end
|
35
|
+
end
|
36
|
+
|
37
|
+
def inspect
|
38
|
+
to_s
|
39
|
+
end
|
40
|
+
|
41
|
+
def matches?(other)
|
42
|
+
[:year, :month, :day, :hour, :min, :sec].all? { |sym| other.send(sym) == self.send(sym) }
|
43
|
+
end
|
44
|
+
|
45
|
+
def time
|
46
|
+
Time.local(year, month, day, hour, min, sec, usec)
|
47
|
+
end
|
48
|
+
|
49
|
+
def ==(other)
|
50
|
+
matches? other
|
51
|
+
end
|
52
|
+
|
53
|
+
def acts_like?(sym)
|
54
|
+
[:date, :time].include? sym
|
55
|
+
end
|
56
|
+
|
57
|
+
private
|
58
|
+
def two_char(s)
|
59
|
+
"00#{s}"[-2..-1]
|
60
|
+
end
|
61
|
+
|
62
|
+
class <<self
|
63
|
+
def at(time)
|
64
|
+
if time.is_a? self
|
65
|
+
time
|
66
|
+
elsif time.acts_like? :time
|
67
|
+
from_time time
|
68
|
+
else
|
69
|
+
from_time Time.at(time)
|
70
|
+
end
|
71
|
+
end
|
72
|
+
|
73
|
+
private
|
74
|
+
def from_time(time)
|
75
|
+
args = [time.year, time.month, time.day, time.hour, time.min, time.sec]
|
76
|
+
args << time.usec if time.respond_to? :usec
|
77
|
+
new *args
|
78
|
+
end
|
79
|
+
end
|
80
|
+
end
|
81
|
+
end
|
@@ -0,0 +1 @@
|
|
1
|
+
puts "WARNING: zoneless_time will not behave completely as expected with ActiveRecord::Base#time_zone_aware_attributes enabled."
|
metadata
ADDED
@@ -0,0 +1,70 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: zoneless_time
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
hash: 15
|
5
|
+
prerelease:
|
6
|
+
segments:
|
7
|
+
- 0
|
8
|
+
- 2
|
9
|
+
version: "0.2"
|
10
|
+
platform: ruby
|
11
|
+
authors:
|
12
|
+
- Shaun Mangelsdorf
|
13
|
+
autorequire:
|
14
|
+
bindir: bin
|
15
|
+
cert_chain: []
|
16
|
+
|
17
|
+
date: 2011-07-22 00:00:00 Z
|
18
|
+
dependencies: []
|
19
|
+
|
20
|
+
description:
|
21
|
+
email:
|
22
|
+
executables: []
|
23
|
+
|
24
|
+
extensions: []
|
25
|
+
|
26
|
+
extra_rdoc_files:
|
27
|
+
- README
|
28
|
+
files:
|
29
|
+
- lib/active_record/zoneless_time_support.rb
|
30
|
+
- lib/zoneless_time.rb
|
31
|
+
- lib/zoneless_time/equality_with_zoneless_time.rb
|
32
|
+
- lib/zoneless_time/railtie.rb
|
33
|
+
- lib/zoneless_time/time_without_zone.rb
|
34
|
+
- lib/zoneless_time/warning.rb
|
35
|
+
- README
|
36
|
+
homepage:
|
37
|
+
licenses: []
|
38
|
+
|
39
|
+
post_install_message:
|
40
|
+
rdoc_options: []
|
41
|
+
|
42
|
+
require_paths:
|
43
|
+
- lib
|
44
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
45
|
+
none: false
|
46
|
+
requirements:
|
47
|
+
- - ">="
|
48
|
+
- !ruby/object:Gem::Version
|
49
|
+
hash: 3
|
50
|
+
segments:
|
51
|
+
- 0
|
52
|
+
version: "0"
|
53
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
54
|
+
none: false
|
55
|
+
requirements:
|
56
|
+
- - ">="
|
57
|
+
- !ruby/object:Gem::Version
|
58
|
+
hash: 3
|
59
|
+
segments:
|
60
|
+
- 0
|
61
|
+
version: "0"
|
62
|
+
requirements: []
|
63
|
+
|
64
|
+
rubyforge_project:
|
65
|
+
rubygems_version: 1.8.5
|
66
|
+
signing_key:
|
67
|
+
specification_version: 3
|
68
|
+
summary: TimeWithoutZone support for ActiveRecord
|
69
|
+
test_files: []
|
70
|
+
|