wiser_date 0.1.3 → 0.1.8
Sign up to get free protection for your applications and to get access to all the features.
- 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
|