time_jawn 1.2.2 → 2.0.0
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.
- checksums.yaml +4 -4
- data/lib/time_jawn/time_jawn.rb +59 -42
- data/lib/time_jawn/time_jawn_private_class_methods.rb +24 -41
- data/spec/time_jawn_spec.rb +22 -55
- metadata +20 -20
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 43cab13ed141d58f7c5c1548f44add5d884b78ec
|
4
|
+
data.tar.gz: f77795556c4518bf255f72c2a5a7b722f73e0b12
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 0ceff171264974bf5b9a05f861bd15c79b32fe5b51d8b41d16283eccf5c70992e649e8ef53f29558bece9a64bc04ca780747eb264b48f3f299e36e44873329e2
|
7
|
+
data.tar.gz: a7f703ff5859bb5f580b14e4b6695dca293e5149c8f4969ca2bfccb9cc009b8cafd407da64f11575e885cf846ca26ca4339b2408e3eeaf7006f6bc45ef091894
|
data/lib/time_jawn/time_jawn.rb
CHANGED
@@ -1,5 +1,6 @@
|
|
1
|
-
# The base module of the TimeJawn gem. Everything in here assumes that your
|
2
|
-
# in a attribute name time_zone or has been
|
1
|
+
# The base module of the TimeJawn gem. Everything in here assumes that your
|
2
|
+
# model has a valid time zone in a attribute name time_zone or has been
|
3
|
+
# delegating one to somewhere else.
|
3
4
|
module TimeJawn
|
4
5
|
require 'time_jawn/time_jawn_private_class_methods'
|
5
6
|
|
@@ -15,26 +16,31 @@ module TimeJawn
|
|
15
16
|
include TimeJawnPrivateClassMethods
|
16
17
|
attr_reader :time_zone_attribute_name
|
17
18
|
# When called it loads the methods located in InstanceMethods.
|
18
|
-
# It is typically included in a model's rb file so that instances of that
|
19
|
+
# It is typically included in a model's rb file so that instances of that
|
20
|
+
# class gain the InstanceMethods at each instantiation.
|
19
21
|
# class Event<ActiveRecord::Base
|
20
22
|
# has_time_zone
|
21
23
|
# end
|
22
|
-
# Optionally you may pass the name of your time zone attribute in as a
|
24
|
+
# Optionally you may pass the name of your time zone attribute in as a
|
25
|
+
# symbol.
|
23
26
|
# class Event<ActiveRecord::Base
|
24
|
-
# has_time_zone
|
25
|
-
|
26
|
-
|
27
|
-
|
27
|
+
# has_time_zone named: :this_is_my_time_zone
|
28
|
+
# end
|
29
|
+
def has_time_zone(options_hash={})
|
30
|
+
set_instance_variables(options_hash)
|
31
|
+
send(:include, InstanceMethods)
|
28
32
|
end
|
29
33
|
end
|
30
34
|
|
31
|
-
#Defines methods that will be added to instances of classes that have
|
35
|
+
#Defines methods that will be added to instances of classes that have
|
36
|
+
# previously called has_time_zone.
|
32
37
|
module InstanceMethods
|
33
|
-
# This method generates a series of methods on instances by calling the
|
34
|
-
#
|
35
|
-
#
|
36
|
-
#
|
37
|
-
#
|
38
|
+
# This method generates a series of methods on instances by calling the
|
39
|
+
# enerate_to_local and generate_to_local_with_assignment that are private on
|
40
|
+
# the parent class. The methods that are created are called
|
41
|
+
# local_#{attribue} and local_#{attribute}= the attribute portion their
|
42
|
+
# names are completed by enumerating the datetime_attributes of the class.
|
43
|
+
# Twice as many methods as there are DateTime attributes will be created.
|
38
44
|
#
|
39
45
|
# :created_at, and :updated_at
|
40
46
|
#
|
@@ -43,54 +49,65 @@ module TimeJawn
|
|
43
49
|
# local_created_at=
|
44
50
|
# local_updated_at=
|
45
51
|
#
|
46
|
-
# The local_#{attribue} methods will take the value stored in the attribute
|
47
|
-
# and apply a time zone conversion to it. This
|
52
|
+
# The local_#{attribue} methods will take the value stored in the attribute
|
53
|
+
# indicated by the methods name and apply a time zone conversion to it. This
|
54
|
+
# is useful for displaying the local time (according to the object).
|
48
55
|
#
|
49
|
-
# local_#{attribute}= methods are assignment shortcuts. They behave a little
|
50
|
-
# They do not take a local time and
|
51
|
-
#
|
52
|
-
#
|
53
|
-
#
|
54
|
-
#
|
56
|
+
# local_#{attribute}= methods are assignment shortcuts. They behave a little
|
57
|
+
# differently than you would expect. They do not take a local time and
|
58
|
+
# convert it into utc (or whatever, ActiveSupport will handle that for us),
|
59
|
+
# what these assigment methods do is take any sort of string that looks like
|
60
|
+
# a time, or any sort of time or datetime object lop off whatever timezone
|
61
|
+
# is being fed in and glue the instances local timezone on the end before
|
62
|
+
# applying it to the appropriate attribute. This is convenient for some one
|
63
|
+
# in one time zone setting a value for an instance that represents a
|
64
|
+
# different time zone. For example:
|
55
65
|
#
|
56
|
-
# I am in Philadelphia (EST), my application is set to UTC, and I want
|
57
|
-
#
|
58
|
-
#
|
59
|
-
#
|
60
|
-
#
|
66
|
+
# I am in Philadelphia (EST), my application is set to UTC, and I want
|
67
|
+
# to set the time on an Alarm instance that goes off in San Francisco
|
68
|
+
# (PST). I want that time to be 6PM. In Philadlephia I choose 6PM
|
69
|
+
# (local), the applications assumes I meant 6PM UTC (2PM EST and 11AM
|
70
|
+
# PST). That is not what I intended, I intended on 6PM PST, and now my
|
71
|
+
# Alarm is all wrong. The assignment methods turn 6PM (set in EST, and
|
72
|
+
# processed in UTC) into 6PM PST (or 9PM EST, 1AM UTC) the expected
|
73
|
+
# time. The Alarm goes off as expected!*
|
61
74
|
#
|
62
75
|
# *Times in this example may be wrong since I put them in myself.
|
63
76
|
#
|
64
77
|
# You can see examples of how these methods work in the specs folder.
|
65
78
|
def self.included(base)
|
66
|
-
date_time_attributes = base.send(:
|
79
|
+
date_time_attributes = base.send(:class_date_attributes_or_arguments)
|
67
80
|
date_time_attributes.each do |attribute|
|
68
|
-
base.send(:
|
69
|
-
base.send(:
|
81
|
+
base.send(:generate_to_local, attribute)
|
82
|
+
base.send(:generate_to_local_with_assignment, attribute)
|
70
83
|
end
|
71
84
|
end
|
85
|
+
|
72
86
|
# Returns the current time according to the instance.
|
73
87
|
def current_time
|
74
|
-
|
88
|
+
to_local(DateTime.current)
|
75
89
|
end
|
76
|
-
|
77
|
-
|
78
|
-
|
90
|
+
|
91
|
+
private
|
92
|
+
|
93
|
+
# converts a time object into it's local counter part (they will have the
|
94
|
+
# same value but differnt presentation.)
|
95
|
+
def to_local(time)
|
79
96
|
time.in_time_zone(self.send(self.class.time_zone_attribute_name))
|
80
97
|
end
|
81
98
|
|
82
|
-
# Given a string that looks like a time. It will convert that string into a
|
83
|
-
# the instances time zone
|
84
|
-
|
85
|
-
|
99
|
+
# Given a string that looks like a time. It will convert that string into a
|
100
|
+
# time object that matches the time but with the instances time zone
|
101
|
+
# appended.
|
102
|
+
def add_zone(time_string)
|
86
103
|
Time.zone = self.send(self.class.time_zone_attribute_name)
|
87
104
|
Time.zone.parse(Time.parse(time_string).strftime(DATE_FORMAT))
|
88
105
|
end
|
89
106
|
|
90
|
-
# Returns a string representation of a time object suitable for consumption
|
91
|
-
|
92
|
-
|
93
|
-
|
107
|
+
# Returns a string representation of a time object suitable for consumption
|
108
|
+
# by add_zone.
|
109
|
+
def change_zone(time)
|
110
|
+
add_zone(time.strftime(DATE_FORMAT))
|
94
111
|
end
|
95
112
|
end
|
96
113
|
end
|
@@ -1,61 +1,44 @@
|
|
1
1
|
# Defines private methods necessary for TimeJawn to work.
|
2
2
|
module TimeJawnPrivateClassMethods
|
3
|
-
# Locates all of an ActiveRecord class' DateTime Attributes and returns them as an array of symbols.
|
4
|
-
def _datetime_attributes
|
5
|
-
ActiveSupport::Deprecation.warn "_datetime_attributes will be made private in a future version."
|
6
|
-
klass = name.constantize
|
7
|
-
|
8
|
-
datetime_attributes = []
|
9
|
-
klass.columns.each do |column|
|
10
|
-
datetime_attributes << column.name.to_sym if column.type == :datetime
|
11
|
-
end
|
12
|
-
datetime_attributes
|
13
|
-
end
|
14
3
|
|
15
4
|
private
|
16
|
-
|
17
|
-
def _set_instance_variables(time_zone_attribute_name, options_hash)
|
18
|
-
@time_zone_attribute_name = _evaluate_time_zone_attribute_name(time_zone_attribute_name)
|
19
|
-
@time_jawn_date_time_attributes = _evaluate_time_jawn_date_time_attributes(time_zone_attribute_name, options_hash)
|
20
|
-
end
|
21
5
|
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
6
|
+
# Locates all of an ActiveRecord class' DateTime Attributes and returns them
|
7
|
+
# as an array of symbols.
|
8
|
+
def datetime_attributes
|
9
|
+
name.constantize.columns.map do |column|
|
10
|
+
next unless column.type == :datetime
|
11
|
+
column.name.to_sym
|
12
|
+
end.compact
|
28
13
|
end
|
29
14
|
|
30
|
-
def
|
31
|
-
|
32
|
-
|
33
|
-
elsif time_zone_attribute_name.kind_of?(Hash)
|
34
|
-
@time_jawn_date_time_attributes = time_zone_attribute_name.fetch(:time_attributes, nil)
|
35
|
-
else
|
36
|
-
@time_jawn_date_time_attributes = nil
|
37
|
-
end
|
15
|
+
def set_instance_variables(options_hash)
|
16
|
+
@time_zone_attribute_name = options_hash.fetch(:named, :time_zone)
|
17
|
+
@time_jawn_date_time_attributes = options_hash.fetch(:time_attributes, nil)
|
38
18
|
end
|
39
19
|
|
40
|
-
# generates an instance method called "local_#{attribute}" that calls the
|
41
|
-
|
42
|
-
|
20
|
+
# generates an instance method called "local_#{attribute}" that calls the
|
21
|
+
# to_local instance method.
|
22
|
+
def generate_to_local(attribute)
|
23
|
+
define_method(:"local_#{attribute}") { to_local(send(attribute)) }
|
43
24
|
end
|
44
25
|
|
45
|
-
# generates an instance method called "local_#{attribute}=" that calls either
|
46
|
-
# instance methods depending on
|
47
|
-
|
26
|
+
# generates an instance method called "local_#{attribute}=" that calls either
|
27
|
+
# the add_zone or _change_zone instance methods depending on the class of the
|
28
|
+
# input.
|
29
|
+
def generate_to_local_with_assignment(attribute)
|
48
30
|
define_method(:"local_#{attribute}=") do |time_or_string_value|
|
49
31
|
if time_or_string_value.is_a? String
|
50
|
-
write_attribute(attribute,
|
32
|
+
write_attribute(attribute, add_zone(time_or_string_value))
|
51
33
|
else
|
52
|
-
write_attribute(attribute,
|
34
|
+
write_attribute(attribute, change_zone(time_or_string_value))
|
53
35
|
end
|
54
36
|
end
|
55
37
|
end
|
56
38
|
|
57
|
-
# returns all of the date_time attributes for a class unless it is specified
|
58
|
-
|
59
|
-
|
39
|
+
# returns all of the date_time attributes for a class unless it is specified
|
40
|
+
# in the class.
|
41
|
+
def class_date_attributes_or_arguments
|
42
|
+
@time_jawn_date_time_attributes || datetime_attributes
|
60
43
|
end
|
61
44
|
end
|
data/spec/time_jawn_spec.rb
CHANGED
@@ -2,16 +2,27 @@ require 'spec_helper'
|
|
2
2
|
|
3
3
|
describe Happening do
|
4
4
|
before(:each){
|
5
|
-
|
6
|
-
|
7
|
-
|
5
|
+
@happening1 =
|
6
|
+
Happening.new(
|
7
|
+
start_time: DateTime.new+6725.years+3.months+1.minute,
|
8
|
+
time_zone: 'Eastern Time (US & Canada)',
|
9
|
+
name:'Eastern Time (US & Canada)',
|
10
|
+
updated_at: DateTime.new+6725.years+1.minute,
|
11
|
+
created_at: DateTime.new+6725.years+1.minute
|
12
|
+
)
|
13
|
+
|
14
|
+
@happening2 =
|
15
|
+
Happening.new(
|
16
|
+
start_time: DateTime.new+6725.years+3.months,
|
17
|
+
time_zone: 'Pacific/Honolulu', name:'Pacific/Honolulu',
|
18
|
+
updated_at: DateTime.new+6725.years,
|
19
|
+
created_at: DateTime.new+6725.years
|
20
|
+
)
|
21
|
+
|
22
|
+
Time.zone = 'UTC'
|
8
23
|
}
|
24
|
+
|
9
25
|
context 'class method' do
|
10
|
-
describe "datetime_attributes" do
|
11
|
-
it "returns an array of all datetime objects for the class" do
|
12
|
-
expect(Happening._datetime_attributes).to eq [:start_time, :created_at, :updated_at]
|
13
|
-
end
|
14
|
-
end
|
15
26
|
describe "has_time_zone" do
|
16
27
|
it "does not have instance methods until called" do
|
17
28
|
expect(Happening.instance_methods.include? :local_start_time).to eq false
|
@@ -34,12 +45,8 @@ describe Happening do
|
|
34
45
|
end
|
35
46
|
end
|
36
47
|
end
|
37
|
-
context 'static instance methods' do
|
38
|
-
|
39
|
-
describe "self.included(base)" do
|
40
|
-
pending "How do you test this? I suppose if the dynamic tests exist this worked. Seems shoddy."
|
41
|
-
end
|
42
48
|
|
49
|
+
context 'static instance methods' do
|
43
50
|
describe "current_time" do
|
44
51
|
it "returns a time with zone object reflecting the current local time of the instance" do
|
45
52
|
Timecop.freeze
|
@@ -47,39 +54,8 @@ describe Happening do
|
|
47
54
|
Timecop.return
|
48
55
|
end
|
49
56
|
end
|
50
|
-
|
51
|
-
describe "_to_local(time)" do
|
52
|
-
it "returns a time with zone that has been coverted to reflect the local time" do
|
53
|
-
expect(@happening1.start_time).to eq 'Mon, 01 Apr 2013 00:01:00 UTC +00:00'
|
54
|
-
expect(@happening1._to_local(@happening1.start_time)).to eq 'Sun, 31 Mar 2013 20:01:00 EDT -04:00'
|
55
|
-
expect(@happening1._to_local(@happening1.start_time).to_s).to eq "2013-03-31 20:01:00 -0400"
|
56
|
-
end
|
57
|
-
end
|
58
|
-
|
59
|
-
describe "_add_zone(time_string)" do
|
60
|
-
it "returns a time with zone object that reflects the time value passed in time_string with time zone information of instance appended" do
|
61
|
-
expect(@happening1._add_zone("2013-08-19 12:34:56")).to eq 'Mon, 19 Aug 2013 12:34:56 EDT -04:00'
|
62
|
-
expect(@happening2._add_zone("2013-08-19 12:34:56")).to eq 'Mon, 19 Aug 2013 12:34:56 HST -10:00'
|
63
|
-
expect(@happening1._add_zone("2013-11-11 12:34:56")).to eq 'Mon, 11 Nov 2013 12:34:56 EST -05:00'
|
64
|
-
expect(@happening2._add_zone("2013-11-11 12:34:56")).to eq 'Mon, 11 Nov 2013 12:34:56 HST -10:00'
|
65
|
-
end
|
66
|
-
end
|
67
|
-
|
68
|
-
describe "_change_zone(time)" do
|
69
|
-
it "returns a time with zone object that has had only it's time zone switched to local time of instance" do
|
70
|
-
Time.zone = 'Rangoon'
|
71
|
-
time = Time.zone.parse("Wed, 28 Aug 2015 15:16:16")
|
72
|
-
expect(time.to_s.split(' ')[2]).to eq ('+0630')
|
73
|
-
expect(time.to_s.split(' ')[2]).to_not eq ('-0400')
|
74
|
-
expect(@happening1._change_zone(time)).to_not eq time
|
75
|
-
expect(@happening1._change_zone(time).to_s.split(' ')[0]).to eq time.to_s.split(' ')[0]
|
76
|
-
expect(@happening1._change_zone(time).to_s.split(' ')[1]).to eq time.to_s.split(' ')[1]
|
77
|
-
expect(@happening1._change_zone(time).to_s.split(' ')[2]).to_not eq time.to_s.split(' ')[2]
|
78
|
-
expect(@happening1._change_zone(time).to_s.split(' ')[2]).to_not eq ('+0630')
|
79
|
-
expect(@happening1._change_zone(time).to_s.split(' ')[2]).to eq ('-0400')
|
80
|
-
end
|
81
|
-
end
|
82
57
|
end
|
58
|
+
|
83
59
|
context 'dynamic instance methods' do
|
84
60
|
describe "local_start_time" do
|
85
61
|
it "returns a time with zone object that reflects the value of start_time altered to the instance's time zone" do
|
@@ -185,7 +161,6 @@ describe Happening do
|
|
185
161
|
|
186
162
|
@happening1.local_created_at = "2013-11-11 12:34:56"
|
187
163
|
expect(@happening1.created_at).to eq Time.parse("2013-11-11 12:34:56 -0500")
|
188
|
-
|
189
164
|
end
|
190
165
|
end
|
191
166
|
end
|
@@ -195,6 +170,7 @@ describe Event do
|
|
195
170
|
before do
|
196
171
|
@event1 = Event.find_by_name('Eastern Time (US & Canada)')
|
197
172
|
end
|
173
|
+
|
198
174
|
context "Event should have time_jawn methods even though it has a non_conventional attribute" do
|
199
175
|
subject { @event1 }
|
200
176
|
|
@@ -205,9 +181,6 @@ describe Event do
|
|
205
181
|
it { should respond_to :local_created_at= }
|
206
182
|
it { should respond_to :local_updated_at= }
|
207
183
|
it { should respond_to :current_time }
|
208
|
-
it { should respond_to :_to_local }
|
209
|
-
it { should respond_to :_add_zone }
|
210
|
-
it { should respond_to :_change_zone }
|
211
184
|
end
|
212
185
|
end
|
213
186
|
|
@@ -234,9 +207,6 @@ describe Occurrence do
|
|
234
207
|
it { should respond_to :local_created_at= }
|
235
208
|
it { should_not respond_to :local_updated_at= }
|
236
209
|
it { should respond_to :current_time }
|
237
|
-
it { should respond_to :_to_local }
|
238
|
-
it { should respond_to :_add_zone }
|
239
|
-
it { should respond_to :_change_zone }
|
240
210
|
end
|
241
211
|
end
|
242
212
|
|
@@ -263,8 +233,5 @@ describe Occasion do
|
|
263
233
|
it { should_not respond_to :local_created_at= }
|
264
234
|
it { should_not respond_to :local_updated_at= }
|
265
235
|
it { should respond_to :current_time }
|
266
|
-
it { should respond_to :_to_local }
|
267
|
-
it { should respond_to :_add_zone }
|
268
|
-
it { should respond_to :_change_zone }
|
269
236
|
end
|
270
237
|
end
|
metadata
CHANGED
@@ -1,83 +1,83 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: time_jawn
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version:
|
4
|
+
version: 2.0.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Mark Platt
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2015-01-07 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: activerecord
|
15
15
|
requirement: !ruby/object:Gem::Requirement
|
16
16
|
requirements:
|
17
|
-
- -
|
17
|
+
- - '='
|
18
18
|
- !ruby/object:Gem::Version
|
19
|
-
version: '
|
19
|
+
version: '4.1'
|
20
20
|
type: :runtime
|
21
21
|
prerelease: false
|
22
22
|
version_requirements: !ruby/object:Gem::Requirement
|
23
23
|
requirements:
|
24
|
-
- -
|
24
|
+
- - '='
|
25
25
|
- !ruby/object:Gem::Version
|
26
|
-
version: '
|
26
|
+
version: '4.1'
|
27
27
|
- !ruby/object:Gem::Dependency
|
28
28
|
name: activesupport
|
29
29
|
requirement: !ruby/object:Gem::Requirement
|
30
30
|
requirements:
|
31
|
-
- -
|
31
|
+
- - '='
|
32
32
|
- !ruby/object:Gem::Version
|
33
|
-
version: '
|
33
|
+
version: '4.1'
|
34
34
|
type: :runtime
|
35
35
|
prerelease: false
|
36
36
|
version_requirements: !ruby/object:Gem::Requirement
|
37
37
|
requirements:
|
38
|
-
- -
|
38
|
+
- - '='
|
39
39
|
- !ruby/object:Gem::Version
|
40
|
-
version: '
|
40
|
+
version: '4.1'
|
41
41
|
- !ruby/object:Gem::Dependency
|
42
42
|
name: rspec-rails
|
43
43
|
requirement: !ruby/object:Gem::Requirement
|
44
44
|
requirements:
|
45
|
-
- -
|
45
|
+
- - '>='
|
46
46
|
- !ruby/object:Gem::Version
|
47
47
|
version: '0'
|
48
48
|
type: :development
|
49
49
|
prerelease: false
|
50
50
|
version_requirements: !ruby/object:Gem::Requirement
|
51
51
|
requirements:
|
52
|
-
- -
|
52
|
+
- - '>='
|
53
53
|
- !ruby/object:Gem::Version
|
54
54
|
version: '0'
|
55
55
|
- !ruby/object:Gem::Dependency
|
56
56
|
name: sqlite3-ruby
|
57
57
|
requirement: !ruby/object:Gem::Requirement
|
58
58
|
requirements:
|
59
|
-
- -
|
59
|
+
- - '>='
|
60
60
|
- !ruby/object:Gem::Version
|
61
61
|
version: '0'
|
62
62
|
type: :development
|
63
63
|
prerelease: false
|
64
64
|
version_requirements: !ruby/object:Gem::Requirement
|
65
65
|
requirements:
|
66
|
-
- -
|
66
|
+
- - '>='
|
67
67
|
- !ruby/object:Gem::Version
|
68
68
|
version: '0'
|
69
69
|
- !ruby/object:Gem::Dependency
|
70
70
|
name: timecop
|
71
71
|
requirement: !ruby/object:Gem::Requirement
|
72
72
|
requirements:
|
73
|
-
- -
|
73
|
+
- - '>='
|
74
74
|
- !ruby/object:Gem::Version
|
75
75
|
version: '0'
|
76
76
|
type: :development
|
77
77
|
prerelease: false
|
78
78
|
version_requirements: !ruby/object:Gem::Requirement
|
79
79
|
requirements:
|
80
|
-
- -
|
80
|
+
- - '>='
|
81
81
|
- !ruby/object:Gem::Version
|
82
82
|
version: '0'
|
83
83
|
description: TimeJawn makes class instances time zone aware. It doesn't care one iota
|
@@ -102,17 +102,17 @@ require_paths:
|
|
102
102
|
- lib
|
103
103
|
required_ruby_version: !ruby/object:Gem::Requirement
|
104
104
|
requirements:
|
105
|
-
- -
|
105
|
+
- - '>='
|
106
106
|
- !ruby/object:Gem::Version
|
107
|
-
version: 1
|
107
|
+
version: '2.1'
|
108
108
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
109
109
|
requirements:
|
110
|
-
- -
|
110
|
+
- - '>='
|
111
111
|
- !ruby/object:Gem::Version
|
112
112
|
version: '0'
|
113
113
|
requirements: []
|
114
114
|
rubyforge_project:
|
115
|
-
rubygems_version: 2.
|
115
|
+
rubygems_version: 2.0.14
|
116
116
|
signing_key:
|
117
117
|
specification_version: 4
|
118
118
|
summary: TimeJawn makes time zone aware class instances.
|