time_jawn 1.2.1 → 1.2.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.
- checksums.yaml +6 -14
- data/lib/time_jawn/time_jawn.rb +19 -17
- data/lib/time_jawn/time_jawn_private_class_methods.rb +3 -7
- data/spec/time_jawn_spec.rb +7 -7
- metadata +16 -16
checksums.yaml
CHANGED
@@ -1,15 +1,7 @@
|
|
1
1
|
---
|
2
|
-
|
3
|
-
metadata.gz:
|
4
|
-
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
metadata.gz: !binary |-
|
9
|
-
NWY2MjhkMTc0N2Y4ODFkMDY5YTMyYTRiYTViYjE3YmViMWQ4YmQyYTdhZTg3
|
10
|
-
ZmU3OTA4ZTNjNjk4ZGM4MTVmZmZjOGM0MDBiMmFhZTU1NWUwYzU1MDBkMjFk
|
11
|
-
MDM3NzhiYTJiOTg0OWU2MTAyMTBiNDgyNWNkYTc2YmY2Y2JhYjY=
|
12
|
-
data.tar.gz: !binary |-
|
13
|
-
ZTc3OWUxOGQzZDQ0ODAzMjgyMWE5MTM3NzYwZTk3YzU4Zjc3ZGYyYjBkNmUy
|
14
|
-
MjJmOTYyZWQwOGI4ODk4ODkzN2YxZGM2YzRjMjgwYzhmODk3YTZkMTkzNmVh
|
15
|
-
NTZiNjg1NjM1ZTIyMWQ5ZjdiMjc2N2I4YTc5OWYwMTM5MGYwNmM=
|
2
|
+
SHA1:
|
3
|
+
metadata.gz: a6a4e6f180be9199ca277acb30b77eb1c669e5d2
|
4
|
+
data.tar.gz: 7d4358869e51cdc0c2beabca8d190b88b0d413e3
|
5
|
+
SHA512:
|
6
|
+
metadata.gz: 267b4c81102f5f0802a19fd994588328e9dd58c5ea7f01f3b070cc36c33a0e885d3da624c6bad842a816dc47d64a2af0627ad2e404cd15faeddd6dd0425fb53e
|
7
|
+
data.tar.gz: cad1e579ac4eacce73346c287be8d4d95bd3dfec0ec173b5852311ac46ec71038eaecb423f5d5e8183a64fd6b0de4e7d97c5a415e630c04e4328af9482070f22
|
data/lib/time_jawn/time_jawn.rb
CHANGED
@@ -2,11 +2,14 @@
|
|
2
2
|
# in a attribute name time_zone or has been delegating one to somewhere else.
|
3
3
|
module TimeJawn
|
4
4
|
require 'time_jawn/time_jawn_private_class_methods'
|
5
|
+
|
6
|
+
DATE_FORMAT = '%a, %d %b %Y %H:%M:%S'
|
7
|
+
|
5
8
|
# Automatically runs and adds ClassMethods to ActiveRecord::Base
|
6
9
|
def self.included(base)
|
7
10
|
base.send :extend, ClassMethods
|
8
11
|
end
|
9
|
-
|
12
|
+
|
10
13
|
# Defines methods that will attached to all ActiveRecord classes.
|
11
14
|
module ClassMethods
|
12
15
|
include TimeJawnPrivateClassMethods
|
@@ -15,11 +18,10 @@ module TimeJawn
|
|
15
18
|
# It is typically included in a model's rb file so that instances of that class gain the InstanceMethods at each instantiation.
|
16
19
|
# class Event<ActiveRecord::Base
|
17
20
|
# has_time_zone
|
18
|
-
# end
|
21
|
+
# end
|
19
22
|
# Optionally you may pass the name of your time zone attribute in as a symbol.
|
20
23
|
# class Event<ActiveRecord::Base
|
21
24
|
# has_time_zone :this_is_my_time_zone
|
22
|
-
# end
|
23
25
|
def has_time_zone(time_zone_attribute_name=:time_zone, options_hash={})
|
24
26
|
_set_instance_variables(time_zone_attribute_name, options_hash)
|
25
27
|
send :include, InstanceMethods
|
@@ -31,28 +33,28 @@ module TimeJawn
|
|
31
33
|
# This method generates a series of methods on instances by calling the _generate_to_local and
|
32
34
|
# _generate_to_local_with_assignment that are private on teh parent class. The methods that are created are called
|
33
35
|
# local_#{attribue} and local_#{attribute}= the attribute portion their names are completed by enumerating
|
34
|
-
# the datetime_attributes of the class. Twice as many methods as there are DateTime attributes will
|
36
|
+
# the datetime_attributes of the class. Twice as many methods as there are DateTime attributes will
|
35
37
|
# be created.
|
36
|
-
#
|
38
|
+
#
|
37
39
|
# :created_at, and :updated_at
|
38
|
-
#
|
40
|
+
#
|
39
41
|
# local_created_at
|
40
42
|
# local_updated_at
|
41
43
|
# local_created_at=
|
42
44
|
# local_updated_at=
|
43
|
-
#
|
45
|
+
#
|
44
46
|
# The local_#{attribue} methods will take the value stored in the attribute indicated by the methods name
|
45
47
|
# and apply a time zone conversion to it. This is useful for displaying the local time (according to the object).
|
46
|
-
#
|
48
|
+
#
|
47
49
|
# local_#{attribute}= methods are assignment shortcuts. They behave a little differently than you would expect.
|
48
|
-
# They do not take a local time and convert it into utc (or whatever, ActiveSupport will handle that for us),
|
49
|
-
# what these assigment methods do is take any sort of string that looks like a time, or any sort of time or datetime
|
50
|
-
# object lop off whatever timezone is being fed in and glue the instances local timezone on the end before applying
|
51
|
-
# it to the appropriate attribute. This is convenient for some one in one time zone setting a value for an instance
|
50
|
+
# They do not take a local time and convert it into utc (or whatever, ActiveSupport will handle that for us),
|
51
|
+
# what these assigment methods do is take any sort of string that looks like a time, or any sort of time or datetime
|
52
|
+
# object lop off whatever timezone is being fed in and glue the instances local timezone on the end before applying
|
53
|
+
# it to the appropriate attribute. This is convenient for some one in one time zone setting a value for an instance
|
52
54
|
# that represents a different time zone. For example:
|
53
55
|
#
|
54
|
-
# I am in Philadelphia (EST), my application is set to UTC, and I want to set the time on an Alarm instance that
|
55
|
-
# goes off in San Francisco (PST). I want that time to be 6PM. In Philadlephia I choose 6PM (local), the applications assumes I
|
56
|
+
# I am in Philadelphia (EST), my application is set to UTC, and I want to set the time on an Alarm instance that
|
57
|
+
# goes off in San Francisco (PST). I want that time to be 6PM. In Philadlephia I choose 6PM (local), the applications assumes I
|
56
58
|
# meant 6PM UTC (2PM EST and 11AM PST). That is not what I intended, I intended on 6PM PST, and now my Alarm is all wrong.
|
57
59
|
# The assignment methods turn 6PM (set in EST, and processed in UTC) into 6PM PST (or 9PM EST, 1AM UTC) the expected time. The
|
58
60
|
# Alarm goes off as expected!*
|
@@ -76,19 +78,19 @@ module TimeJawn
|
|
76
78
|
ActiveSupport::Deprecation.warn "_to_local will be made private in a future version."
|
77
79
|
time.in_time_zone(self.send(self.class.time_zone_attribute_name))
|
78
80
|
end
|
79
|
-
|
81
|
+
|
80
82
|
# Given a string that looks like a time. It will convert that string into a time object that matches the time but with
|
81
83
|
# the instances time zone appended.
|
82
84
|
def _add_zone(time_string)
|
83
85
|
ActiveSupport::Deprecation.warn "_add_zone will be made private in a future version."
|
84
86
|
Time.zone = self.send(self.class.time_zone_attribute_name)
|
85
|
-
Time.zone.parse(Time.parse(time_string).strftime(
|
87
|
+
Time.zone.parse(Time.parse(time_string).strftime(DATE_FORMAT))
|
86
88
|
end
|
87
89
|
|
88
90
|
# Returns a string representation of a time object suitable for consumption by add_zone.
|
89
91
|
def _change_zone(time)
|
90
92
|
ActiveSupport::Deprecation.warn "_change_zone will be made private in a future version."
|
91
|
-
_add_zone(time.strftime(
|
93
|
+
_add_zone(time.strftime(DATE_FORMAT))
|
92
94
|
end
|
93
95
|
end
|
94
96
|
end
|
@@ -1,4 +1,4 @@
|
|
1
|
-
# Defines private methods necessary for TimeJawn to work.
|
1
|
+
# Defines private methods necessary for TimeJawn to work.
|
2
2
|
module TimeJawnPrivateClassMethods
|
3
3
|
# Locates all of an ActiveRecord class' DateTime Attributes and returns them as an array of symbols.
|
4
4
|
def _datetime_attributes
|
@@ -9,7 +9,7 @@ module TimeJawnPrivateClassMethods
|
|
9
9
|
klass.columns.each do |column|
|
10
10
|
datetime_attributes << column.name.to_sym if column.type == :datetime
|
11
11
|
end
|
12
|
-
|
12
|
+
datetime_attributes
|
13
13
|
end
|
14
14
|
|
15
15
|
private
|
@@ -56,10 +56,6 @@ module TimeJawnPrivateClassMethods
|
|
56
56
|
|
57
57
|
# returns all of the date_time attributes for a class unless it is specified in the class.
|
58
58
|
def _class_date_attributes_or_arguments
|
59
|
-
|
60
|
-
@time_jawn_date_time_attributes
|
61
|
-
else
|
62
|
-
_datetime_attributes
|
63
|
-
end
|
59
|
+
@time_jawn_date_time_attributes || _datetime_attributes
|
64
60
|
end
|
65
61
|
end
|
data/spec/time_jawn_spec.rb
CHANGED
@@ -9,7 +9,7 @@ describe Happening do
|
|
9
9
|
context 'class method' do
|
10
10
|
describe "datetime_attributes" do
|
11
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]
|
12
|
+
expect(Happening._datetime_attributes).to eq [:start_time, :created_at, :updated_at]
|
13
13
|
end
|
14
14
|
end
|
15
15
|
describe "has_time_zone" do
|
@@ -22,9 +22,9 @@ describe Happening do
|
|
22
22
|
expect(Happening.instance_methods.include? :local_updated_at=).to eq false
|
23
23
|
end
|
24
24
|
it "has instance methods once called " do
|
25
|
-
|
25
|
+
|
26
26
|
Happening.has_time_zone
|
27
|
-
|
27
|
+
|
28
28
|
expect(Happening.instance_methods.include? :local_start_time).to eq true
|
29
29
|
expect(Happening.instance_methods.include? :local_created_at).to eq true
|
30
30
|
expect(Happening.instance_methods.include? :local_updated_at).to eq true
|
@@ -126,7 +126,7 @@ describe Happening do
|
|
126
126
|
describe "local_start_time=(time_or_string)" do
|
127
127
|
it "sets start_time on the instance to a time_with_zone object only modifying the time zone" do
|
128
128
|
expect(@happening1.start_time).to eq 'Mon, 01 Apr 2013 00:01:00 UTC +00:00'
|
129
|
-
|
129
|
+
|
130
130
|
@happening1.local_start_time = Time.parse("Thu, 29 Aug 2013 02:40:12 HST -10:00")
|
131
131
|
expect(@happening1.start_time).to eq Time.parse("2013-08-29 02:40:12 -0400")
|
132
132
|
|
@@ -148,7 +148,7 @@ describe Happening do
|
|
148
148
|
describe "local_updated_at=(time_or_string)" do
|
149
149
|
it "sets updated_at on the instance to a time_with_zone object only modifying the time zone" do
|
150
150
|
expect(@happening1.updated_at).to eq 'Tue, 01 Jan 2013 00:01:00 +0000'
|
151
|
-
|
151
|
+
|
152
152
|
@happening1.local_updated_at = Time.parse("Thu, 29 Aug 2013 02:40:12 HST -10:00")
|
153
153
|
expect(@happening1.updated_at).to eq Time.parse("2013-08-29 02:40:12 -0400")
|
154
154
|
|
@@ -170,7 +170,7 @@ describe Happening do
|
|
170
170
|
describe "local_created_at=(time_or_string)" do
|
171
171
|
it "sets created_at on the instance to a time_with_zone object only modifying the time zone" do
|
172
172
|
expect(@happening1.created_at).to eq ' Tue, 01 Jan 2013 00:01:00 +0000'
|
173
|
-
|
173
|
+
|
174
174
|
@happening1.local_created_at = Time.parse("Thu, 29 Aug 2013 02:40:12 HST -10:00")
|
175
175
|
expect(@happening1.created_at).to eq Time.parse("2013-08-29 02:40:12 -0400")
|
176
176
|
|
@@ -215,7 +215,7 @@ describe Occurrence do
|
|
215
215
|
before do
|
216
216
|
@occurrence1 = Occurrence.find_by_name('Eastern Time (US & Canada)')
|
217
217
|
end
|
218
|
-
|
218
|
+
|
219
219
|
context "Ocurrence instance attribute accessor" do
|
220
220
|
describe "time_zone_attribute_name" do
|
221
221
|
it 'should respond with the time_zone attribute name as defined in the class.' do
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: time_jawn
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.2.
|
4
|
+
version: 1.2.2
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Mark Platt
|
@@ -14,76 +14,76 @@ dependencies:
|
|
14
14
|
name: activerecord
|
15
15
|
requirement: !ruby/object:Gem::Requirement
|
16
16
|
requirements:
|
17
|
-
- -
|
17
|
+
- - ">="
|
18
18
|
- !ruby/object:Gem::Version
|
19
19
|
version: '3.2'
|
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
26
|
version: '3.2'
|
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
33
|
version: '3.2'
|
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
40
|
version: '3.2'
|
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
|
84
84
|
about system, application or database time as far as I can tell. It has some expectations
|
85
85
|
and adds some useful methods.
|
86
|
-
email:
|
86
|
+
email: mark@mrkplt.com
|
87
87
|
executables: []
|
88
88
|
extensions: []
|
89
89
|
extra_rdoc_files: []
|
@@ -92,7 +92,7 @@ files:
|
|
92
92
|
- lib/time_jawn/time_jawn.rb
|
93
93
|
- lib/time_jawn/time_jawn_private_class_methods.rb
|
94
94
|
- spec/time_jawn_spec.rb
|
95
|
-
homepage:
|
95
|
+
homepage: https://github.com/mrkplt/time_jawn
|
96
96
|
licenses:
|
97
97
|
- MIT
|
98
98
|
metadata: {}
|
@@ -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
107
|
version: 1.9.3
|
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.2.2
|
116
116
|
signing_key:
|
117
117
|
specification_version: 4
|
118
118
|
summary: TimeJawn makes time zone aware class instances.
|