time_jawn 1.0.0 → 1.0.1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (3) hide show
  1. checksums.yaml +8 -8
  2. data/lib/time_jawn/time_jawn.rb +48 -20
  3. metadata +1 -1
checksums.yaml CHANGED
@@ -1,15 +1,15 @@
1
1
  ---
2
2
  !binary "U0hBMQ==":
3
3
  metadata.gz: !binary |-
4
- Njg1YjFmZmFjMTA0M2E2Y2JjZjAwN2NiZGVhOGMwNDRjMzAzZmFjNg==
4
+ YmI2YzM1ZmYwNzAwZTY5ZWY2ZDYyNzRkNGI1M2NjNmI2ZWEwMzk0YQ==
5
5
  data.tar.gz: !binary |-
6
- MzgyMjcxMzY3NGM0YTg3ZGQ5ZWZlODUwNzRhMWQ1NzYzOWI4NjA3ZQ==
6
+ MWVmNzIwNjY0MDc2MGJkZDUxMzE4OTNhZDgzYTEzYzNmYTU2NDFhNw==
7
7
  !binary "U0hBNTEy":
8
8
  metadata.gz: !binary |-
9
- YTIxNGVjZmJlOTA4NTJhOTYxOTRmYzA0OTA3ODBkYWEzMjQ3MTdiMzdlODNi
10
- ODY1MDI5MjBkNjdkMTBkMjc5ZWM0OGFkOWIyZDU0MjBhYjNmYzQ5NTBjYjEz
11
- MDk1ZjM3ZGNkYzhmNDVhYzljNTFjMGQzN2E5ODZiOWNiYTA2MGY=
9
+ NjgyMGIyYTRiYzY5NTQ4YzExMTgzYWYxZDQ5Y2E0NDc4NjhhMDQwNjQ0NDhm
10
+ MTZkYTc5OTVhMTdiYzA4NjUzZDMyYTZiMzhmYjllZjAwMTdhNzYzOWQ3MWEw
11
+ NDgxM2MxNDFjOTcxNTcyZTA4NzFjMTJjMDFmOTUwMzhiNjRiM2E=
12
12
  data.tar.gz: !binary |-
13
- NjAxMDc4ZTM0ZGJmZDUyNTJkNTE5MjM1M2Q2OGRhYjU1Mzg4OGQ0NjllNzY5
14
- Yzk1ZTc0YTQ5MDRkMWY1YTRhYjEwOGE3YWY1NzczNzQ5ZGU5ZTAwZmEzZGJh
15
- ZjRiYzc5NmRkYmIwMTU2ODcwZDJhOTM4ODNjYWUzODAwMjg3YjA=
13
+ NTg2OWRhZDE0Y2FmODI5MmQ1M2M2MDVkMDIzZmU0YzM0NzQ3YTk4MTJmOTRk
14
+ MTFmOThlMWQzNWIwOTQ0ZGJhNmFmOWNkNTYwMjBkNzg3YzkwYTRhZWFiMjA0
15
+ ODI2YzRlMmEyNjgxOWNiMmQ3YjM3OTIxN2E3OTU0ODg4MjZhNTU=
@@ -5,8 +5,45 @@ module TimeJawn
5
5
  def self.included(base)
6
6
  base.send :extend, ClassMethods
7
7
  end
8
+
9
+
10
+ # Defines private methods necessary for TimeJawn to work.
11
+ module TimeJawnPrivateClassMethods
12
+ # Locates all of an ActiveRecord class' DateTime Attributes and returns them as an array of symbols.
13
+ def _datetime_attributes
14
+ ActiveSupport::Deprecation.warn "_datetime_attributes will be made private in a future version."
15
+ klass = name.constantize
16
+
17
+ datetime_attributes = []
18
+ klass.columns.each do |column|
19
+ datetime_attributes << column.name.to_sym if column.type == :datetime
20
+ end
21
+ return datetime_attributes
22
+ end
23
+
24
+ private
25
+
26
+ # generates an instance method called "local_#{attribute}" that calls the _to_local instance method.
27
+ def _generate_to_local(attribute)
28
+ define_method(:"local_#{attribute}") { _to_local(send(attribute)) }
29
+ end
30
+
31
+ # generates an instance method called "local_#{attribute}=" that calls either the _add_zone or _change_zone
32
+ # instance methods depending on teh class of the input.
33
+ def _generate_to_local_with_assignment(attribute)
34
+ define_method(:"local_#{attribute}=") do |time_or_string_value|
35
+ if time_or_string_value.is_a? String
36
+ write_attribute(attribute, _add_zone(time_or_string_value))
37
+ else
38
+ write_attribute(attribute, _change_zone(time_or_string_value))
39
+ end
40
+ end
41
+ end
42
+ end
43
+
8
44
  # Defines methods that will attached to all ActiveRecord classes.
9
45
  module ClassMethods
46
+ include TimeJawnPrivateClassMethods
10
47
  # When called it loads the methods located in InstanceMethods.
11
48
  # It is typically included in a model's rb file so that instances of that class gain the InstanceMethods at each instantiation.
12
49
  # class Event<ActiveRecord::Base
@@ -15,20 +52,14 @@ module TimeJawn
15
52
  def has_time_zone
16
53
  send :include, InstanceMethods
17
54
  end
18
- # Locates all of an ActiveRecord class' DateTime Attributes and returns them as an array of symbols.
19
- def _datetime_attributes
20
- klass = self.name.constantize
21
-
22
- datetime_attributes = []
23
- klass.columns.each do |column|
24
- datetime_attributes << column.name.to_sym if column.type == :datetime
25
- end
26
- return datetime_attributes
27
- end
28
55
  end
56
+
57
+
58
+
29
59
  #Defines methods that will be added to instances of classes that have previously called has_time_zone.
30
60
  module InstanceMethods
31
- # This method generates a series of methods on instances. The methods that are created are called
61
+ # This method generates a series of methods on instances by calling the _generate_to_local and
62
+ # _generate_to_local_with_assignment that are private on teh parent class. The methods that are created are called
32
63
  # local_#{attribue} and local_#{attribute}= the attribute portion their names are completed by enumerating
33
64
  # the datetime_attributes of the class. Twice as many methods as there are DateTime attributes will
34
65
  # be created.
@@ -60,15 +91,9 @@ module TimeJawn
60
91
  #
61
92
  # You can see examples of how these methods work in the specs folder.
62
93
  def self.included(base)
63
- base._datetime_attributes.each do |attribute|
64
- define_method(:"local_#{attribute}") { _to_local(send(attribute)) }
65
- define_method(:"local_#{attribute}=") do |time_or_string_value|
66
- if time_or_string_value.is_a? String
67
- write_attribute(attribute, _add_zone(time_or_string_value))
68
- else
69
- write_attribute(attribute, _change_zone(time_or_string_value))
70
- end
71
- end
94
+ (base.send :_datetime_attributes).each do |attribute|
95
+ base.send(:_generate_to_local, attribute)
96
+ base.send(:_generate_to_local_with_assignment, attribute)
72
97
  end
73
98
  end
74
99
  # Returns the current time according to the instance.
@@ -77,18 +102,21 @@ module TimeJawn
77
102
  end
78
103
  # converts a time object into it's local counter part (they will have the same value but differnt presentation.)
79
104
  def _to_local(time)
105
+ ActiveSupport::Deprecation.warn "_to_local will be made private in a future version."
80
106
  time.in_time_zone(self.time_zone)
81
107
  end
82
108
 
83
109
  # Given a string that looks like a time. It will convert that string into a time object that matches the time but with
84
110
  # the instances time zone appended.
85
111
  def _add_zone(time_string)
112
+ ActiveSupport::Deprecation.warn "_add_zone will be made private in a future version."
86
113
  Time.zone = self.time_zone
87
114
  Time.zone.parse(time_string)
88
115
  end
89
116
 
90
117
  # Returns a string representation of a time object suitable for consumption by add_zone.
91
118
  def _change_zone(time)
119
+ ActiveSupport::Deprecation.warn "_change_zone will be made private in a future version."
92
120
  _add_zone(time.strftime('%a, %d %b %Y %H:%M:%S'))
93
121
  end
94
122
  end
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.0.0
4
+ version: 1.0.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Mark Platt