wiser_date 0.1.3 → 0.1.8
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 +8 -8
- data/README.rdoc +9 -2
- data/lib/wiser_date/railtie.rb +3 -1
- data/lib/wiser_date/view_helpers.rb +51 -22
- data/vendor/assets/javascripts/jquery.wiser_date.js +215 -0
- metadata +18 -3
checksums.yaml
CHANGED
@@ -1,15 +1,15 @@
|
|
1
1
|
---
|
2
2
|
!binary "U0hBMQ==":
|
3
3
|
metadata.gz: !binary |-
|
4
|
-
|
4
|
+
MDY2OWUyNzY1OTRlYTYxNWU1ZGE1MjMxN2ZkOGJiODNmOWU0ZjA4OQ==
|
5
5
|
data.tar.gz: !binary |-
|
6
|
-
|
6
|
+
M2U1ZGVjMjU2MmMzMDY4YmFjZWRkOWZlNWVhZWEwODc0YTg3NWIxNg==
|
7
7
|
!binary "U0hBNTEy":
|
8
8
|
metadata.gz: !binary |-
|
9
|
-
|
10
|
-
|
11
|
-
|
9
|
+
MGNkNjY1ZmVlMGY3ZWYyMGVlNWMwNjcwOWY3YmI5N2M2M2Y0M2FmODQ0MThh
|
10
|
+
MGQ5Yjc5YjQ2NzUzNjMyOGVhMzk0NmQ2ODhkZDNkMGRiY2I3NzI4MjIxNWNj
|
11
|
+
NGM4NzJlNmJlOWRkN2VkYTdhMDNiNDhlYmQ5ZTM5NDJkZTZiNTk=
|
12
12
|
data.tar.gz: !binary |-
|
13
|
-
|
14
|
-
|
15
|
-
|
13
|
+
ODYxNDNlMDAzNmViMmRiOTZiY2IwZWJiNTYyMDg5ZDMyMjdlOWEwZjJjZDdk
|
14
|
+
MGExZjNlZjQ0YzNmZGUyNWRlYTMzMDE1ZDBhYjI2ZDUzZTY0OTk0MzJjMzI4
|
15
|
+
ZGQ3YmIzYzBlYWYxMjEyOGE3ODU3MmI1YjgxODlkYzg4YWE4NmY=
|
data/README.rdoc
CHANGED
@@ -7,11 +7,10 @@ WiserDate is a date formatting plugin written by Kenneth John Balgos (https://gi
|
|
7
7
|
|
8
8
|
gem "wiser_date"
|
9
9
|
|
10
|
-
|
11
10
|
|
12
11
|
== Dependency
|
13
12
|
|
14
|
-
|
13
|
+
Rails >=3.1 and jQuery >=1.7 to make the real-time feature work.
|
15
14
|
|
16
15
|
|
17
16
|
== Using the javascripts - Not Yet Available
|
@@ -95,6 +94,14 @@ You can customize the behavior of the date display by using the following option
|
|
95
94
|
# Sample display after the day: Yesterday 12:21pm
|
96
95
|
# Sample display after 2 days: Sept 10, 12:21pm
|
97
96
|
|
97
|
+
* *custom_class* - adds custom classes to the containter span of the date [default: nil]
|
98
|
+
|
99
|
+
<%= wiser_date @user.last_login_at, :custom_class => "date_tooltip" %>
|
100
|
+
|
101
|
+
* *time_now* - accepts complete timestamp as the basis of time distances [default: nil]
|
102
|
+
|
103
|
+
<%= wiser_date @user.last_login_at, :time_now => "2012-09-10 12:21:16 +0000" %>
|
104
|
+
|
98
105
|
|
99
106
|
== Thanks
|
100
107
|
Thanks to me for writing an awesome real-time date display plugin :p
|
data/lib/wiser_date/railtie.rb
CHANGED
@@ -2,7 +2,6 @@ require 'date'
|
|
2
2
|
|
3
3
|
module WiserDate
|
4
4
|
module ViewHelpers
|
5
|
-
|
6
5
|
include ActionView::Helpers::JavaScriptHelper
|
7
6
|
include ActionView::Helpers::TagHelper
|
8
7
|
include ActionView::Helpers::DateHelper
|
@@ -10,7 +9,7 @@ module WiserDate
|
|
10
9
|
|
11
10
|
def wiser_date(timestamp, options = {})
|
12
11
|
# Options
|
13
|
-
date_format = options.has_key?(:date_format) ? options[:date_format] : "%
|
12
|
+
date_format = options.has_key?(:date_format) ? options[:date_format] : "%B %d, %Y"
|
14
13
|
time_format = options.has_key?(:time_format) ? options[:time_format] : "%l:%M%P"
|
15
14
|
humanize = options.has_key?(:humanize) ? options[:humanize] : true
|
16
15
|
time_first = options.has_key?(:time_first) ? options[:time_first] : false
|
@@ -18,6 +17,8 @@ module WiserDate
|
|
18
17
|
capitalize = options.has_key?(:capitalize) ? options[:capitalize] : true
|
19
18
|
custom_class = options.has_key?(:custom_class) ? options[:custom_class] : nil
|
20
19
|
time_now = options.has_key?(:time_now) ? options[:time_now].to_datetime : Time.now
|
20
|
+
real_time = options.has_key?(:real_time) ? options[:real_time] : true
|
21
|
+
interval = options.has_key?(:interval) ? options[:interval] : 20
|
21
22
|
|
22
23
|
# Formats
|
23
24
|
flat_format = "%Y%m%d%H%M%S"
|
@@ -31,47 +32,75 @@ module WiserDate
|
|
31
32
|
# Humanize Display
|
32
33
|
if humanize
|
33
34
|
time_diff_in_seconds = (time_now - timestamp.to_time).ceil
|
35
|
+
time_diff_in_hours = (time_diff_in_seconds / (60*60))
|
34
36
|
time_diff_in_days = (time_diff_in_seconds / (60*60*24))
|
35
|
-
if time_diff_in_seconds
|
37
|
+
if time_diff_in_seconds < 60 && time_diff_in_seconds >= 0
|
36
38
|
custom_timestamp = "just now"
|
37
39
|
elsif time_now.to_date - 1.day == timestamp.to_date
|
38
40
|
date_value = "yesterday"
|
39
41
|
time_value = timestamp.strftime(time_format)
|
40
|
-
custom_timestamp = time_first ? "#{time_value} #{date_value}" : "#{date_value} #{time_value}"
|
41
|
-
elsif time_diff_in_days
|
42
|
-
|
43
|
-
|
44
|
-
|
42
|
+
custom_timestamp = time_first ? "#{time_value} #{date_value}" : "#{date_value} at #{time_value}"
|
43
|
+
elsif time_diff_in_days < 0
|
44
|
+
if time_diff_in_days > -2
|
45
|
+
date_value = "tomorrow"
|
46
|
+
time_value = timestamp.strftime(time_format)
|
47
|
+
custom_timestamp = time_first ? "#{time_value} #{date_value}" : "#{date_value} at #{time_value}"
|
48
|
+
elsif time_diff_in_days > -7
|
49
|
+
date_value = "on " + timestamp.strftime('%A')
|
50
|
+
time_value = timestamp.strftime(time_format)
|
51
|
+
custom_timestamp = time_first ? "#{time_value} #{date_value}" : "#{date_value} at #{time_value}"
|
52
|
+
end
|
53
|
+
elsif time_diff_in_days < 1
|
54
|
+
if time_now.to_date == timestamp.to_date && time_diff_in_hours >= 8
|
55
|
+
date_value = "today"
|
56
|
+
time_value = timestamp.strftime(time_format)
|
57
|
+
custom_timestamp = time_first ? "#{time_value} #{date_value}" : "#{date_value} at #{time_value}"
|
58
|
+
else
|
59
|
+
custom_timestamp = "#{distance_of_time_in_words(Time.now, timestamp.to_time)} ago"
|
60
|
+
end
|
61
|
+
elsif time_diff_in_days < 7
|
62
|
+
date_value = "last " + timestamp.strftime('%A')
|
63
|
+
time_value = timestamp.strftime(time_format)
|
64
|
+
custom_timestamp = time_first ? "#{time_value} #{date_value}" : "#{date_value} at #{time_value}"
|
45
65
|
end
|
46
66
|
end
|
47
|
-
|
67
|
+
|
68
|
+
# Hide Same Year
|
69
|
+
if hide_same_year && time_now.year == timestamp.year
|
70
|
+
custom_timestamp = custom_timestamp.gsub(", #{time_now.year.to_s} ", ' at')
|
71
|
+
end
|
48
72
|
# Capitalize
|
49
73
|
if capitalize
|
50
|
-
custom_timestamp = custom_timestamp.
|
74
|
+
custom_timestamp[0] = custom_timestamp[0].upcase
|
51
75
|
end
|
52
76
|
|
77
|
+
classes = ["wiser_date"]
|
78
|
+
classes << custom_class if custom_class.present?
|
79
|
+
classes << "time_first" if time_first
|
80
|
+
classes << "hide_same_year" if hide_same_year
|
81
|
+
classes << "humanize" if humanize
|
82
|
+
classes << "capitalize" if capitalize
|
83
|
+
classes << "real_time" if real_time
|
84
|
+
classes = classes.join(' ')
|
53
85
|
|
54
86
|
uniq_id = Digest::SHA1.hexdigest([Time.now, rand].join)
|
55
87
|
html = content_tag(:span, custom_timestamp,
|
56
88
|
"id" => uniq_id,
|
57
|
-
"class" =>
|
89
|
+
"class" => classes,
|
58
90
|
"data-plain-timestamp" => plain_timestamp,
|
59
|
-
"data-
|
60
|
-
"data-
|
91
|
+
"data-date-format" => date_format,
|
92
|
+
"data-time-format" => time_format
|
61
93
|
)
|
62
|
-
|
94
|
+
|
63
95
|
meta_vars = []
|
64
96
|
meta_vars << "data-value=\"#"+uniq_id+"\""
|
65
97
|
meta_vars << "data-custom-format=\""+custom_format+"\""
|
66
|
-
meta_vars << "data-
|
67
|
-
meta_vars << "data-
|
68
|
-
meta_vars << "data-
|
69
|
-
meta_vars << "data-hide-same-year=\""+hide_same_year.to_s+"\""
|
70
|
-
meta_vars << "data-time-first=\""+time_first.to_s+"\""
|
71
|
-
meta_vars << "data-capitalize=\""+capitalize.to_s+"\""
|
98
|
+
meta_vars << "data-server-datetime=\""+time_now.strftime(plain_format)+"\""
|
99
|
+
meta_vars << "data-server-datetime=\""+time_now.strftime(plain_format)+"\""
|
100
|
+
meta_vars << "data-interval=\""+interval.to_s+"\""
|
72
101
|
meta_vars << "id=\"wiser_date\""
|
73
|
-
|
74
|
-
html += javascript_tag("jQuery(document).ready(function(){if(jQuery('body meta#wiser_date').size() == 0){$('body').prepend('<meta "+meta_vars.join(' ')+" />')}else{$('meta#wiser_date').attr('data-value',$('meta#wiser_date').attr('data-value')+', #"+uniq_id+"')}});")
|
102
|
+
|
103
|
+
html += javascript_tag("jQuery(document).ready(function(){if(jQuery('body meta#wiser_date').size() == 0){$('body').prepend('<meta "+meta_vars.join(' ')+" />')}else{$('meta#wiser_date').attr('data-value',$('meta#wiser_date').attr('data-value')+', #"+uniq_id+"')}; updateWiserDate(\""+uniq_id+"\");});")
|
75
104
|
html.html_safe
|
76
105
|
end
|
77
106
|
end
|
@@ -0,0 +1,215 @@
|
|
1
|
+
function updateWiserDate(id) {
|
2
|
+
if($('meta#wiser_date').attr('data-real-time-started') != "true"){
|
3
|
+
update_interval = parseInt($('meta#wiser_date').attr('data-interval')) * 1000;
|
4
|
+
setInterval(function() {
|
5
|
+
update_timer(update_interval)
|
6
|
+
span_ids = $('meta#wiser_date').attr('data-value');
|
7
|
+
$(span_ids).each(function(){
|
8
|
+
if($(this).hasClass('real_time'))
|
9
|
+
updateDate($(this));
|
10
|
+
})
|
11
|
+
},update_interval);
|
12
|
+
}
|
13
|
+
$('meta#wiser_date').attr('data-real-time-started','true');
|
14
|
+
}
|
15
|
+
|
16
|
+
function updateDate(el){
|
17
|
+
el.text(prettyDate(el));
|
18
|
+
}
|
19
|
+
|
20
|
+
function prettyDate(element){
|
21
|
+
datetime = element.attr('data-plain-timestamp')
|
22
|
+
date_format = element.attr('data-date-format')
|
23
|
+
time_format = element.attr('data-time-format')
|
24
|
+
|
25
|
+
hide_same_year = element.hasClass('hide_same_year')
|
26
|
+
capitalize = element.hasClass('capitalize')
|
27
|
+
humanize = element.hasClass('humanize')
|
28
|
+
time_first = element.hasClass('time_first')
|
29
|
+
|
30
|
+
server_datetime = $('meta#wiser_date').attr('data-server-datetime')
|
31
|
+
var time_now = new Date((server_datetime || "").replace(/-/g,"/").replace(/[TZ]/g," "));
|
32
|
+
var timestamp = new Date((datetime || "").replace(/-/g,"/").replace(/[TZ]/g," "));
|
33
|
+
var time_diff_in_seconds = ((time_now.getTime() - timestamp.getTime()) / 1000);
|
34
|
+
var time_diff_in_hours = Math.floor(time_diff_in_seconds / 3600);
|
35
|
+
var time_diff_in_days = Math.floor(time_diff_in_seconds / 86400);
|
36
|
+
|
37
|
+
date_yesterday = time_now;
|
38
|
+
date_yesterday.setDate(time_now.getDate() - 1);
|
39
|
+
|
40
|
+
flat_format = "%Y%m%d%H%M%S"
|
41
|
+
plain_date_format = "%Y-%m-%d"
|
42
|
+
plain_format = "%Y-%m-%d %H:%M:%S"
|
43
|
+
|
44
|
+
if(time_first){
|
45
|
+
regular_date_display = custom_format(timestamp, time_format + " " + date_format);
|
46
|
+
}else{
|
47
|
+
regular_date_display = custom_format(timestamp, date_format + " " + time_format);
|
48
|
+
}
|
49
|
+
|
50
|
+
if(isNaN(time_diff_in_days)){
|
51
|
+
custom_timestamp = datetime;
|
52
|
+
}else if(humanize){
|
53
|
+
if(time_diff_in_seconds < 60 && time_diff_in_seconds >= 0){
|
54
|
+
custom_timestamp = "just now"
|
55
|
+
}else if(custom_format(date_yesterday, plain_date_format) == custom_format(timestamp, plain_date_format)){
|
56
|
+
date_value = "yesterday"
|
57
|
+
time_value = custom_format(timestamp, time_format)
|
58
|
+
if(time_first){
|
59
|
+
custom_timestamp = time_value + " " + date_value;
|
60
|
+
}else{
|
61
|
+
custom_timestamp = date_value + " at " + time_value;
|
62
|
+
}
|
63
|
+
}else if(time_diff_in_days < 0){
|
64
|
+
if(time_diff_in_days > -2){
|
65
|
+
date_value = "tomorrow"
|
66
|
+
time_value = custom_format(timestamp, time_format)
|
67
|
+
if(time_first){
|
68
|
+
custom_timestamp = time_value + " " + date_value;
|
69
|
+
}else{
|
70
|
+
custom_timestamp = date_value + " at " + time_value;
|
71
|
+
}
|
72
|
+
}else if(time_diff_in_days > -7){
|
73
|
+
date_value = "on " + custom_format(timestamp, "%A")
|
74
|
+
time_value = custom_format(timestamp, time_format)
|
75
|
+
if(time_first){
|
76
|
+
custom_timestamp = time_value + " " + date_value;
|
77
|
+
}else{
|
78
|
+
custom_timestamp = date_value + " at " + time_value;
|
79
|
+
}
|
80
|
+
}else{
|
81
|
+
custom_timestamp = regular_date_display
|
82
|
+
}
|
83
|
+
}else if(time_diff_in_days < 1){
|
84
|
+
if(time_diff_in_hours >= 8){
|
85
|
+
date_value = "today"
|
86
|
+
time_value = custom_format(timestamp, time_format)
|
87
|
+
if(time_first){
|
88
|
+
custom_timestamp = time_value + " " + date_value;
|
89
|
+
}else{
|
90
|
+
custom_timestamp = date_value + " at " + time_value;
|
91
|
+
}
|
92
|
+
}else{
|
93
|
+
custom_timestamp = humanize_format(time_diff_in_seconds, time_diff_in_days);
|
94
|
+
}
|
95
|
+
}else if(time_diff_in_days < 7){
|
96
|
+
date_value = "last " + custom_format(timestamp, "%A")
|
97
|
+
time_value = custom_format(timestamp, time_format)
|
98
|
+
if(time_first){
|
99
|
+
custom_timestamp = time_value + " " + date_value;
|
100
|
+
}else{
|
101
|
+
custom_timestamp = date_value + " at " + time_value;
|
102
|
+
}
|
103
|
+
}else{
|
104
|
+
element.removeClass('real_time')
|
105
|
+
custom_timestamp = regular_date_display
|
106
|
+
}
|
107
|
+
}else{
|
108
|
+
custom_timestamp = regular_date_display
|
109
|
+
}
|
110
|
+
|
111
|
+
if(hide_same_year){
|
112
|
+
custom_timestamp = custom_timestamp.replace(", "+time_now.getFullYear(), ' at')
|
113
|
+
}
|
114
|
+
if(capitalize){
|
115
|
+
custom_timestamp = custom_timestamp[0].toUpperCase() + custom_timestamp.slice(1);
|
116
|
+
}
|
117
|
+
|
118
|
+
return custom_timestamp; // + " - ["+time_diff_in_seconds.toString()+":"+time_diff_in_days+"]";
|
119
|
+
}
|
120
|
+
|
121
|
+
function update_timer(interval){
|
122
|
+
if(!interval){interval = 1000;}
|
123
|
+
current_datetime = $('meta#wiser_date').attr('data-server-datetime');
|
124
|
+
current_datetime = new Date((current_datetime || "").replace(/-/g,"/").replace(/[TZ]/g," "));
|
125
|
+
current_datetime.setTime(current_datetime.getTime() + interval);
|
126
|
+
current_datetime = custom_format(current_datetime, "%Y-%m-%d %H:%M:%S");
|
127
|
+
$('meta#wiser_date').attr('data-server-datetime', current_datetime);
|
128
|
+
$('#real_time').text('The actual server time is ' + current_datetime);
|
129
|
+
}
|
130
|
+
|
131
|
+
function humanize_format(sec_diff, day_diff){
|
132
|
+
return day_diff == 0 && (
|
133
|
+
sec_diff < 60 && "just now" ||
|
134
|
+
sec_diff < 120 && "1 minute ago" ||
|
135
|
+
sec_diff < 3600 && Math.floor( sec_diff / 60 ) + " minutes ago" ||
|
136
|
+
sec_diff < 7200 && "about 1 hour ago" ||
|
137
|
+
sec_diff < 86400 && "about " + Math.floor( sec_diff / 3600 ) + " hours ago") ||
|
138
|
+
day_diff == 1 && "Yesterday" ||
|
139
|
+
day_diff < 7 && day_diff + " days ago" ||
|
140
|
+
day_diff < 31 && Math.ceil( day_diff / 7 ) + " week ago";
|
141
|
+
}
|
142
|
+
|
143
|
+
function custom_format(timestamp, format){
|
144
|
+
func = new DateFmt();
|
145
|
+
datetime = format;
|
146
|
+
datetime = datetime.replace("%Y", func.format(timestamp,"%Y"));
|
147
|
+
datetime = datetime.replace("%m", func.format(timestamp,"%m"));
|
148
|
+
datetime = datetime.replace("%d", func.format(timestamp,"%d"));
|
149
|
+
datetime = datetime.replace("%b", func.format(timestamp,"%b"));
|
150
|
+
datetime = datetime.replace("%B", func.format(timestamp,"%B"));
|
151
|
+
datetime = datetime.replace("%H", func.format(timestamp,"%H"));
|
152
|
+
datetime = datetime.replace("%M", func.format(timestamp,"%M"));
|
153
|
+
datetime = datetime.replace("%S", func.format(timestamp,"%S"));
|
154
|
+
datetime = datetime.replace("%A", func.format(timestamp,"%A"));
|
155
|
+
datetime = datetime.replace("%a", func.format(timestamp,"%a"));
|
156
|
+
if(timestamp.getHours() > 12){
|
157
|
+
datetime = datetime.replace("%l", lead_zero(timestamp.getHours() - 12, " "));
|
158
|
+
datetime = datetime.replace("%P", "pm");
|
159
|
+
datetime = datetime.replace("%p", "PM");
|
160
|
+
}else{
|
161
|
+
datetime = datetime.replace("%l", lead_zero(timestamp.getHours(), " "));
|
162
|
+
datetime = datetime.replace("%P", "am");
|
163
|
+
datetime = datetime.replace("%p", "AM");
|
164
|
+
}
|
165
|
+
return datetime;
|
166
|
+
}
|
167
|
+
|
168
|
+
function lead_zero(val, extra){
|
169
|
+
str_val = parseInt(val);
|
170
|
+
if(!extra){extra = "0";}
|
171
|
+
if(str_val < 10){
|
172
|
+
return extra + str_val;
|
173
|
+
}else{
|
174
|
+
return str_val;
|
175
|
+
}
|
176
|
+
}
|
177
|
+
|
178
|
+
function DateFmt() {
|
179
|
+
this.dateMarkers = {
|
180
|
+
d:['getDate',function(v) { return ("0"+v).substr(-2,2)}],
|
181
|
+
m:['getMonth',function(v) { return ("0"+(v+1)).substr(-2,2)}],
|
182
|
+
b:['getMonth',function(v) {
|
183
|
+
var mthNames = ["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"];
|
184
|
+
return mthNames[v];
|
185
|
+
}],
|
186
|
+
B:['getMonth',function(v) {
|
187
|
+
var mthNames = ["January","February","March","April","May","June","July","August","September","October","Novovember","December"];
|
188
|
+
return mthNames[v];
|
189
|
+
}],
|
190
|
+
a:['getDay',function(v) {
|
191
|
+
var dayNames = ["Sun","Mon","Tue","Wed","Thu","Fri","Sat"];
|
192
|
+
return dayNames[v];
|
193
|
+
}],
|
194
|
+
A:['getDay',function(v) {
|
195
|
+
var dayNames = ["Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"];
|
196
|
+
return dayNames[v];
|
197
|
+
}],
|
198
|
+
Y:['getFullYear'],
|
199
|
+
H:['getHours',function(v) { return ("0"+v).substr(-2,2)}],
|
200
|
+
M:['getMinutes',function(v) { return ("0"+v).substr(-2,2)}],
|
201
|
+
S:['getSeconds',function(v) { return ("0"+v).substr(-2,2)}],
|
202
|
+
i:['toISOString',null]
|
203
|
+
};
|
204
|
+
|
205
|
+
this.format = function(date, fmt) {
|
206
|
+
var dateMarkers = this.dateMarkers
|
207
|
+
var dateTxt = fmt.replace(/%(.)/g, function(m, p){
|
208
|
+
var rv = date[(dateMarkers[p])[0]]()
|
209
|
+
if ( dateMarkers[p][1] != null ) rv = dateMarkers[p][1](rv)
|
210
|
+
return rv
|
211
|
+
});
|
212
|
+
|
213
|
+
return dateTxt
|
214
|
+
}
|
215
|
+
}
|
metadata
CHANGED
@@ -1,21 +1,36 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: wiser_date
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.1.
|
4
|
+
version: 0.1.8
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Kenneth John Balgos
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2012-05-
|
12
|
-
dependencies:
|
11
|
+
date: 2012-05-27 00:00:00.000000000 Z
|
12
|
+
dependencies:
|
13
|
+
- !ruby/object:Gem::Dependency
|
14
|
+
name: rails
|
15
|
+
requirement: !ruby/object:Gem::Requirement
|
16
|
+
requirements:
|
17
|
+
- - ! '>='
|
18
|
+
- !ruby/object:Gem::Version
|
19
|
+
version: '3.1'
|
20
|
+
type: :runtime
|
21
|
+
prerelease: false
|
22
|
+
version_requirements: !ruby/object:Gem::Requirement
|
23
|
+
requirements:
|
24
|
+
- - ! '>='
|
25
|
+
- !ruby/object:Gem::Version
|
26
|
+
version: '3.1'
|
13
27
|
description: Display dates in the coolest format.
|
14
28
|
email: kennethjohnbalgos@gmail.com
|
15
29
|
executables: []
|
16
30
|
extensions: []
|
17
31
|
extra_rdoc_files: []
|
18
32
|
files:
|
33
|
+
- vendor/assets/javascripts/jquery.wiser_date.js
|
19
34
|
- lib/wiser_date/view_helpers.rb
|
20
35
|
- lib/wiser_date/railtie.rb
|
21
36
|
- lib/wiser_date.rb
|