lazier 1.0.7 → 2.0.0
Sign up to get free protection for your applications and to get access to all the features.
- data/.travis.yml +1 -1
- data/README.md +5 -2
- data/doc/Lazier.html +472 -174
- data/doc/Lazier/Boolean.html +9 -11
- data/doc/Lazier/DateTime.html +59 -113
- data/doc/Lazier/DateTime/ClassMethods.html +87 -121
- data/doc/Lazier/Exceptions.html +3 -3
- data/doc/Lazier/Exceptions/Dump.html +3 -3
- data/doc/Lazier/Hash.html +17 -19
- data/doc/Lazier/Math.html +3 -3
- data/doc/Lazier/Math/ClassMethods.html +14 -48
- data/doc/Lazier/Object.html +127 -139
- data/doc/Lazier/Pathname.html +11 -12
- data/doc/Lazier/Settings.html +189 -169
- data/doc/Lazier/String.html +23 -27
- data/doc/Lazier/TimeZone.html +202 -249
- data/doc/Lazier/TimeZone/ClassMethods.html +110 -137
- data/doc/Lazier/Version.html +7 -11
- data/doc/_index.html +4 -4
- data/doc/file.README.html +12 -9
- data/doc/frames.html +1 -1
- data/doc/index.html +12 -9
- data/doc/method_list.html +72 -24
- data/doc/top-level-namespace.html +3 -3
- data/lazier.gemspec +8 -8
- data/lib/lazier.rb +55 -59
- data/lib/lazier/datetime.rb +74 -88
- data/lib/lazier/math.rb +2 -18
- data/lib/lazier/object.rb +14 -13
- data/lib/lazier/settings.rb +8 -25
- data/lib/lazier/version.rb +2 -2
- data/spec/lazier/datetime_spec.rb +12 -20
- data/spec/lazier/hash_spec.rb +1 -1
- data/spec/lazier/object_spec.rb +3 -3
- data/spec/lazier/settings_spec.rb +3 -3
- data/spec/lazier_spec.rb +1 -19
- metadata +145 -160
data/doc/frames.html
CHANGED
@@ -4,7 +4,7 @@
|
|
4
4
|
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
|
5
5
|
<head>
|
6
6
|
<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
|
7
|
-
<title>Documentation by YARD 0.8.
|
7
|
+
<title>Documentation by YARD 0.8.3</title>
|
8
8
|
</head>
|
9
9
|
<script type="text/javascript" charset="utf-8">
|
10
10
|
window.onload = function() {
|
data/doc/index.html
CHANGED
@@ -2,11 +2,11 @@
|
|
2
2
|
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
|
3
3
|
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
|
4
4
|
<head>
|
5
|
-
<meta http-equiv="Content-Type" content="text/html; charset=
|
5
|
+
<meta http-equiv="Content-Type" content="text/html; charset=US-ASCII" />
|
6
6
|
<title>
|
7
7
|
File: README
|
8
8
|
|
9
|
-
— Documentation by YARD 0.8.
|
9
|
+
— Documentation by YARD 0.8.3
|
10
10
|
|
11
11
|
</title>
|
12
12
|
|
@@ -69,12 +69,14 @@
|
|
69
69
|
|
70
70
|
<p>Several Ruby object enhancements.</p>
|
71
71
|
|
72
|
-
<p><a href="http://
|
72
|
+
<p><a href="http://sw.cow.tc/lazier">http://sw.cow.tc/lazier</a></p>
|
73
|
+
|
74
|
+
<p><a href="http://rdoc.info/gems/lazier">http://rdoc.info/gems/lazier</a></p>
|
73
75
|
|
74
76
|
<h2>Usage</h2>
|
75
77
|
|
76
|
-
<pre class="code ruby"><code><span class='
|
77
|
-
<span class='
|
78
|
+
<pre class="code ruby"><code><span class='id identifier rubyid_require'>require</span> <span class='tstring'><span class='tstring_beg'>"</span><span class='tstring_content'>lazier</span><span class='tstring_end'>"</span></span>
|
79
|
+
<span class='const'>Lazier</span><span class='period'>.</span><span class='id identifier rubyid_load!'>load!</span>
|
78
80
|
</code></pre>
|
79
81
|
|
80
82
|
<p>That's all!
|
@@ -94,14 +96,15 @@ See documentation for more informations.</p>
|
|
94
96
|
|
95
97
|
<h2>Copyright</h2>
|
96
98
|
|
97
|
-
<p>Copyright (C) 2013 and above Shogun <shogun_panda@me.com
|
98
|
-
|
99
|
+
<p>Copyright (C) 2013 and above Shogun (<a href="mailto:shogun_panda@me.com">shogun_panda@me.com</a>).</p>
|
100
|
+
|
101
|
+
<p>Licensed under the MIT license, which can be found at <a href="http://www.opensource.org/licenses/mit-license.php">http://www.opensource.org/licenses/mit-license.php</a>.</p>
|
99
102
|
</div></div>
|
100
103
|
|
101
104
|
<div id="footer">
|
102
|
-
Generated on
|
105
|
+
Generated on Mon Jan 28 20:23:45 2013 by
|
103
106
|
<a href="http://yardoc.org" title="Yay! A Ruby Documentation Tool" target="_parent">yard</a>
|
104
|
-
0.8.
|
107
|
+
0.8.3 (ruby-1.9.3).
|
105
108
|
</div>
|
106
109
|
|
107
110
|
</body>
|
data/doc/method_list.html
CHANGED
@@ -215,17 +215,17 @@
|
|
215
215
|
|
216
216
|
|
217
217
|
<li class="r2 ">
|
218
|
-
<span class='object_link'><a href="Lazier/
|
218
|
+
<span class='object_link'><a href="Lazier/Object.html#format_number-instance_method" title="Lazier::Object#format_number (method)">#format_number</a></span>
|
219
219
|
|
220
|
-
<small>Lazier::
|
220
|
+
<small>Lazier::Object</small>
|
221
221
|
|
222
222
|
</li>
|
223
223
|
|
224
224
|
|
225
225
|
<li class="r1 ">
|
226
|
-
<span class='object_link'><a href="Lazier/
|
226
|
+
<span class='object_link'><a href="Lazier/Settings.html#format_number-instance_method" title="Lazier::Settings#format_number (method)">#format_number</a></span>
|
227
227
|
|
228
|
-
<small>Lazier::
|
228
|
+
<small>Lazier::Settings</small>
|
229
229
|
|
230
230
|
</li>
|
231
231
|
|
@@ -295,39 +295,87 @@
|
|
295
295
|
|
296
296
|
|
297
297
|
<li class="r2 ">
|
298
|
-
<span class='object_link'><a href="Lazier.html#
|
298
|
+
<span class='object_link'><a href="Lazier/DateTime/ClassMethods.html#is_valid%3F-instance_method" title="Lazier::DateTime::ClassMethods#is_valid? (method)">#is_valid?</a></span>
|
299
299
|
|
300
|
-
<small>Lazier</small>
|
300
|
+
<small>Lazier::DateTime::ClassMethods</small>
|
301
301
|
|
302
302
|
</li>
|
303
303
|
|
304
304
|
|
305
305
|
<li class="r1 ">
|
306
|
-
<span class='object_link'><a href="Lazier/
|
306
|
+
<span class='object_link'><a href="Lazier/TimeZone/ClassMethods.html#list_all-instance_method" title="Lazier::TimeZone::ClassMethods#list_all (method)">#list_all</a></span>
|
307
|
+
|
308
|
+
<small>Lazier::TimeZone::ClassMethods</small>
|
309
|
+
|
310
|
+
</li>
|
311
|
+
|
312
|
+
|
313
|
+
<li class="r2 ">
|
314
|
+
<span class='object_link'><a href="Lazier/DateTime/ClassMethods.html#list_timezones-instance_method" title="Lazier::DateTime::ClassMethods#list_timezones (method)">#list_timezones</a></span>
|
307
315
|
|
308
316
|
<small>Lazier::DateTime::ClassMethods</small>
|
309
317
|
|
310
318
|
</li>
|
311
319
|
|
312
320
|
|
321
|
+
<li class="r1 ">
|
322
|
+
<span class='object_link'><a href="Lazier.html#load%21-class_method" title="Lazier.load! (method)">load!</a></span>
|
323
|
+
|
324
|
+
<small>Lazier</small>
|
325
|
+
|
326
|
+
</li>
|
327
|
+
|
328
|
+
|
313
329
|
<li class="r2 ">
|
314
|
-
<span class='object_link'><a href="Lazier
|
330
|
+
<span class='object_link'><a href="Lazier.html#load_boolean-class_method" title="Lazier.load_boolean (method)">load_boolean</a></span>
|
315
331
|
|
316
|
-
<small>Lazier
|
332
|
+
<small>Lazier</small>
|
317
333
|
|
318
334
|
</li>
|
319
335
|
|
320
336
|
|
321
337
|
<li class="r1 ">
|
322
|
-
<span class='object_link'><a href="Lazier
|
338
|
+
<span class='object_link'><a href="Lazier.html#load_datetime-class_method" title="Lazier.load_datetime (method)">load_datetime</a></span>
|
323
339
|
|
324
|
-
<small>Lazier
|
340
|
+
<small>Lazier</small>
|
325
341
|
|
326
342
|
</li>
|
327
343
|
|
328
344
|
|
329
345
|
<li class="r2 ">
|
330
|
-
<span class='object_link'><a href="Lazier.html#
|
346
|
+
<span class='object_link'><a href="Lazier.html#load_hash-class_method" title="Lazier.load_hash (method)">load_hash</a></span>
|
347
|
+
|
348
|
+
<small>Lazier</small>
|
349
|
+
|
350
|
+
</li>
|
351
|
+
|
352
|
+
|
353
|
+
<li class="r1 ">
|
354
|
+
<span class='object_link'><a href="Lazier.html#load_math-class_method" title="Lazier.load_math (method)">load_math</a></span>
|
355
|
+
|
356
|
+
<small>Lazier</small>
|
357
|
+
|
358
|
+
</li>
|
359
|
+
|
360
|
+
|
361
|
+
<li class="r2 ">
|
362
|
+
<span class='object_link'><a href="Lazier.html#load_object-class_method" title="Lazier.load_object (method)">load_object</a></span>
|
363
|
+
|
364
|
+
<small>Lazier</small>
|
365
|
+
|
366
|
+
</li>
|
367
|
+
|
368
|
+
|
369
|
+
<li class="r1 ">
|
370
|
+
<span class='object_link'><a href="Lazier.html#load_pathname-class_method" title="Lazier.load_pathname (method)">load_pathname</a></span>
|
371
|
+
|
372
|
+
<small>Lazier</small>
|
373
|
+
|
374
|
+
</li>
|
375
|
+
|
376
|
+
|
377
|
+
<li class="r2 ">
|
378
|
+
<span class='object_link'><a href="Lazier.html#load_string-class_method" title="Lazier.load_string (method)">load_string</a></span>
|
331
379
|
|
332
380
|
<small>Lazier</small>
|
333
381
|
|
@@ -415,17 +463,17 @@
|
|
415
463
|
|
416
464
|
|
417
465
|
<li class="r1 ">
|
418
|
-
<span class='object_link'><a href="Lazier/
|
466
|
+
<span class='object_link'><a href="Lazier/DateTime/ClassMethods.html#parameterize_zone-instance_method" title="Lazier::DateTime::ClassMethods#parameterize_zone (method)">#parameterize_zone</a></span>
|
419
467
|
|
420
|
-
<small>Lazier::
|
468
|
+
<small>Lazier::DateTime::ClassMethods</small>
|
421
469
|
|
422
470
|
</li>
|
423
471
|
|
424
472
|
|
425
473
|
<li class="r2 ">
|
426
|
-
<span class='object_link'><a href="Lazier/
|
474
|
+
<span class='object_link'><a href="Lazier/TimeZone/ClassMethods.html#parameterize_zone-instance_method" title="Lazier::TimeZone::ClassMethods#parameterize_zone (method)">#parameterize_zone</a></span>
|
427
475
|
|
428
|
-
<small>Lazier::
|
476
|
+
<small>Lazier::TimeZone::ClassMethods</small>
|
429
477
|
|
430
478
|
</li>
|
431
479
|
|
@@ -591,17 +639,17 @@
|
|
591
639
|
|
592
640
|
|
593
641
|
<li class="r1 ">
|
594
|
-
<span class='object_link'><a href="Lazier/
|
642
|
+
<span class='object_link'><a href="Lazier/TimeZone/ClassMethods.html#unparameterize_zone-instance_method" title="Lazier::TimeZone::ClassMethods#unparameterize_zone (method)">#unparameterize_zone</a></span>
|
595
643
|
|
596
|
-
<small>Lazier::
|
644
|
+
<small>Lazier::TimeZone::ClassMethods</small>
|
597
645
|
|
598
646
|
</li>
|
599
647
|
|
600
648
|
|
601
649
|
<li class="r2 ">
|
602
|
-
<span class='object_link'><a href="Lazier/
|
650
|
+
<span class='object_link'><a href="Lazier/DateTime/ClassMethods.html#unparameterize_zone-instance_method" title="Lazier::DateTime::ClassMethods#unparameterize_zone (method)">#unparameterize_zone</a></span>
|
603
651
|
|
604
|
-
<small>Lazier::
|
652
|
+
<small>Lazier::DateTime::ClassMethods</small>
|
605
653
|
|
606
654
|
</li>
|
607
655
|
|
@@ -631,17 +679,17 @@
|
|
631
679
|
|
632
680
|
|
633
681
|
<li class="r2 ">
|
634
|
-
<span class='object_link'><a href="Lazier/
|
682
|
+
<span class='object_link'><a href="Lazier/Boolean.html#value-instance_method" title="Lazier::Boolean#value (method)">#value</a></span>
|
635
683
|
|
636
|
-
<small>Lazier::
|
684
|
+
<small>Lazier::Boolean</small>
|
637
685
|
|
638
686
|
</li>
|
639
687
|
|
640
688
|
|
641
689
|
<li class="r1 ">
|
642
|
-
<span class='object_link'><a href="Lazier/
|
690
|
+
<span class='object_link'><a href="Lazier/String.html#value-instance_method" title="Lazier::String#value (method)">#value</a></span>
|
643
691
|
|
644
|
-
<small>Lazier::
|
692
|
+
<small>Lazier::String</small>
|
645
693
|
|
646
694
|
</li>
|
647
695
|
|
@@ -6,7 +6,7 @@
|
|
6
6
|
<title>
|
7
7
|
Top Level Namespace
|
8
8
|
|
9
|
-
— Documentation by YARD 0.8.
|
9
|
+
— Documentation by YARD 0.8.3
|
10
10
|
|
11
11
|
</title>
|
12
12
|
|
@@ -103,9 +103,9 @@
|
|
103
103
|
</div>
|
104
104
|
|
105
105
|
<div id="footer">
|
106
|
-
Generated on
|
106
|
+
Generated on Mon Jan 28 20:23:45 2013 by
|
107
107
|
<a href="http://yardoc.org" title="Yay! A Ruby Documentation Tool" target="_parent">yard</a>
|
108
|
-
0.8.
|
108
|
+
0.8.3 (ruby-1.9.3).
|
109
109
|
</div>
|
110
110
|
|
111
111
|
</body>
|
data/lazier.gemspec
CHANGED
@@ -22,15 +22,15 @@ Gem::Specification.new do |gem|
|
|
22
22
|
gem.test_files = gem.files.grep(%r{^(test|spec|features)/})
|
23
23
|
gem.require_paths = ["lib"]
|
24
24
|
|
25
|
-
gem.add_dependency("json", "~> 1.7.
|
26
|
-
gem.add_dependency("actionpack", "
|
27
|
-
gem.add_dependency("tzinfo", "~> 0.3.
|
25
|
+
gem.add_dependency("json", "~> 1.7.6")
|
26
|
+
gem.add_dependency("actionpack", ">= 3.2.11") # We don't use ~> to enable use with 4.0
|
27
|
+
gem.add_dependency("tzinfo", "~> 0.3.35")
|
28
28
|
|
29
|
-
gem.add_development_dependency("rspec", "~> 2.
|
30
|
-
gem.add_development_dependency("rake", "~> 0.
|
31
|
-
gem.add_development_dependency("simplecov", "~> 0.7.
|
29
|
+
gem.add_development_dependency("rspec", "~> 2.12.0")
|
30
|
+
gem.add_development_dependency("rake", "~> 10.0.3")
|
31
|
+
gem.add_development_dependency("simplecov", "~> 0.7.1")
|
32
32
|
gem.add_development_dependency("pry", ">= 0")
|
33
|
-
gem.add_development_dependency("yard", "~> 0.8.
|
33
|
+
gem.add_development_dependency("yard", "~> 0.8.3")
|
34
34
|
gem.add_development_dependency("redcarpet", "~> 2.2.2")
|
35
|
-
gem.add_development_dependency("github-markup", "~> 0.7.
|
35
|
+
gem.add_development_dependency("github-markup", "~> 0.7.5")
|
36
36
|
end
|
data/lib/lazier.rb
CHANGED
@@ -4,8 +4,6 @@
|
|
4
4
|
# Licensed under the MIT license, which can be found at http://www.opensource.org/licenses/mit-license.php.
|
5
5
|
#
|
6
6
|
|
7
|
-
$KCODE='UTF8' if RUBY_VERSION < '1.9'
|
8
|
-
|
9
7
|
require "json"
|
10
8
|
require "tzinfo"
|
11
9
|
require "active_support/all"
|
@@ -24,13 +22,6 @@ require "lazier/pathname"
|
|
24
22
|
|
25
23
|
# Several Ruby object enhancements.
|
26
24
|
module Lazier
|
27
|
-
# Checks if we are running under Ruby 1.8
|
28
|
-
#
|
29
|
-
# @return [Boolean] `true` for Ruby 1.8, `false` otherwise.
|
30
|
-
def self.is_ruby_18?
|
31
|
-
RUBY_VERSION =~ /^1\.8/
|
32
|
-
end
|
33
|
-
|
34
25
|
# Returns the settings for the extensions
|
35
26
|
#
|
36
27
|
# @return [Settings] The settings for the extensions.
|
@@ -51,77 +42,82 @@ module Lazier
|
|
51
42
|
# @return [Settings] The settings for the extensions.
|
52
43
|
def self.load!(*what)
|
53
44
|
what = ["object", "boolean", "string", "hash", "datetime", "math", "pathname"] if what.count == 0
|
54
|
-
what.collect! { |w| w
|
45
|
+
what.collect! { |w| Lazier.send("load_#{w}") }
|
55
46
|
|
56
|
-
|
57
|
-
|
58
|
-
|
59
|
-
what.compact.uniq!
|
47
|
+
yield if block_given?
|
48
|
+
::Lazier::Settings.instance
|
49
|
+
end
|
60
50
|
|
61
|
-
|
62
|
-
|
63
|
-
|
64
|
-
|
51
|
+
# Loads Object extensions.
|
52
|
+
def self.load_object
|
53
|
+
::Object.class_eval do
|
54
|
+
include ::Lazier::Object
|
65
55
|
end
|
56
|
+
end
|
66
57
|
|
67
|
-
|
68
|
-
|
69
|
-
|
70
|
-
|
71
|
-
|
58
|
+
# Loads Boolean extensions.
|
59
|
+
def self.load_boolean
|
60
|
+
::TrueClass.class_eval do
|
61
|
+
include ::Lazier::Object
|
62
|
+
include ::Lazier::Boolean
|
63
|
+
end
|
72
64
|
|
73
|
-
|
74
|
-
|
75
|
-
|
76
|
-
end
|
65
|
+
::FalseClass.class_eval do
|
66
|
+
include ::Lazier::Object
|
67
|
+
include ::Lazier::Boolean
|
77
68
|
end
|
69
|
+
end
|
78
70
|
|
79
|
-
|
80
|
-
|
81
|
-
|
82
|
-
|
71
|
+
# Loads String extensions.
|
72
|
+
def self.load_string
|
73
|
+
::String.class_eval do
|
74
|
+
include ::Lazier::String
|
83
75
|
end
|
76
|
+
end
|
84
77
|
|
85
|
-
|
86
|
-
|
87
|
-
|
88
|
-
|
78
|
+
# Loads Hash extensions.
|
79
|
+
def self.load_hash
|
80
|
+
::Hash.class_eval do
|
81
|
+
include ::Lazier::Hash
|
89
82
|
end
|
83
|
+
end
|
90
84
|
|
91
|
-
|
92
|
-
|
93
|
-
|
94
|
-
end
|
85
|
+
# Loads DateTime extensions.
|
86
|
+
def self.load_datetime
|
87
|
+
Lazier.load_object
|
95
88
|
|
96
|
-
|
97
|
-
|
98
|
-
|
89
|
+
::Time.class_eval do
|
90
|
+
include ::Lazier::DateTime
|
91
|
+
end
|
99
92
|
|
100
|
-
|
101
|
-
|
102
|
-
|
93
|
+
::Date.class_eval do
|
94
|
+
include ::Lazier::DateTime
|
95
|
+
end
|
103
96
|
|
104
|
-
|
105
|
-
|
106
|
-
end
|
97
|
+
::DateTime.class_eval do
|
98
|
+
include ::Lazier::DateTime
|
107
99
|
end
|
108
100
|
|
109
|
-
|
110
|
-
::
|
111
|
-
include ::Lazier::Math
|
112
|
-
end
|
101
|
+
::ActiveSupport::TimeZone.class_eval do
|
102
|
+
include ::Lazier::TimeZone
|
113
103
|
end
|
104
|
+
end
|
114
105
|
|
115
|
-
|
116
|
-
|
106
|
+
# Loads Math extensions.
|
107
|
+
def self.load_math
|
108
|
+
Lazier.load_object
|
117
109
|
|
118
|
-
|
119
|
-
|
120
|
-
end
|
110
|
+
::Math.class_eval do
|
111
|
+
include ::Lazier::Math
|
121
112
|
end
|
113
|
+
end
|
122
114
|
|
123
|
-
|
115
|
+
# Loads Pathname extensions.
|
116
|
+
def self.load_pathname
|
117
|
+
require "pathname"
|
124
118
|
|
125
|
-
::
|
119
|
+
::Pathname.class_eval do
|
120
|
+
include ::Lazier::Pathname
|
121
|
+
end
|
126
122
|
end
|
127
123
|
end
|
data/lib/lazier/datetime.rb
CHANGED
@@ -19,7 +19,7 @@ module Lazier
|
|
19
19
|
def days(short = true)
|
20
20
|
days = ::Lazier.settings.date_names[short ? :short_days : :long_days]
|
21
21
|
(1..7).to_a.collect { |i|
|
22
|
-
{:
|
22
|
+
{value: i.to_s, label: days[i - 1]}
|
23
23
|
}
|
24
24
|
|
25
25
|
end
|
@@ -32,7 +32,7 @@ module Lazier
|
|
32
32
|
def months(short = true)
|
33
33
|
months = ::Lazier.settings.date_names[short ? :short_months : :long_months]
|
34
34
|
(1..12).collect { |i|
|
35
|
-
{:
|
35
|
+
{value: i.to_s.rjust(2, "0"), label: months.at(i - 1)}
|
36
36
|
}
|
37
37
|
end
|
38
38
|
|
@@ -56,7 +56,7 @@ module Lazier
|
|
56
56
|
# @return [Array] A range of years. Every entry is
|
57
57
|
def years(offset = 10, also_future = true, reference = nil, as_objects = false)
|
58
58
|
y = reference || ::Date.today.year
|
59
|
-
(y - offset..(also_future ? y + offset : y)).collect { |year| as_objects ? {:
|
59
|
+
(y - offset..(also_future ? y + offset : y)).collect { |year| as_objects ? {value: year, label: year} : year }
|
60
60
|
end
|
61
61
|
|
62
62
|
# Returns all the availabe timezones.
|
@@ -125,21 +125,10 @@ module Lazier
|
|
125
125
|
year = ::Date.today.year if !year.is_integer?
|
126
126
|
|
127
127
|
# Compute using Anonymouse Gregorian Algorithm: http://en.wikipedia.org/wiki/Computus#Anonymous_Gregorian_algorithm
|
128
|
-
a = year
|
129
|
-
|
130
|
-
|
131
|
-
|
132
|
-
e = b % 4
|
133
|
-
f = ((b + 8) / 25.0).floor
|
134
|
-
g = ((b - f + 1) / 3.0).floor
|
135
|
-
h = ((19 * a) + b - d - g + 15) % 30
|
136
|
-
i = (c / 4.0).floor
|
137
|
-
k = c % 4
|
138
|
-
l = (32 + (2 * e) + (2 * i) - h - k) % 7
|
139
|
-
m = ((a + (11 * h) + (22 * l)) / 451.0).floor
|
140
|
-
|
141
|
-
day = ((h + l - (7 * m) + 114) % 31) + 1
|
142
|
-
month = ((h + l - (7 * m) + 114) / 31.0).floor
|
128
|
+
a, b, c = easter_independent(year)
|
129
|
+
x, e, i, k = easter_dependent(b, c)
|
130
|
+
day, month = easter_summarize(easter_finalize(a, x, e, i, k))
|
131
|
+
|
143
132
|
::Date.civil(year, month, day)
|
144
133
|
end
|
145
134
|
|
@@ -171,6 +160,53 @@ module Lazier
|
|
171
160
|
|
172
161
|
rv
|
173
162
|
end
|
163
|
+
|
164
|
+
private
|
165
|
+
# Part one of Easter calculation.
|
166
|
+
#
|
167
|
+
# @param year [Fixnum] The year to compute the date for.
|
168
|
+
# @return [Array] Partial variables for calculus.
|
169
|
+
def easter_independent(year)
|
170
|
+
[year % 19, (year / 100.0).floor, year % 100]
|
171
|
+
end
|
172
|
+
|
173
|
+
# Part two of Easter calculation.
|
174
|
+
#
|
175
|
+
# @param b [Fixnum] Variable from #easter_independent.
|
176
|
+
# @param c [Fixnum] Variable from #easter_independent.
|
177
|
+
# @return [Array] Partial variables for calculus.
|
178
|
+
def easter_dependent(b, c)
|
179
|
+
[
|
180
|
+
b - (b / 4.0).floor - ((b - ((b + 8) / 25.0).floor + 1) / 3.0).floor,
|
181
|
+
b % 4,
|
182
|
+
(c / 4.0).floor,
|
183
|
+
c % 4
|
184
|
+
]
|
185
|
+
end
|
186
|
+
|
187
|
+
# Part three of Easter calculation.
|
188
|
+
#
|
189
|
+
# @param a [Fixnum] Variable from #easter_independent.
|
190
|
+
# @param x [Fixnum] Variable from #easter_independent.
|
191
|
+
# @param e [Fixnum] Variable from #easter_dependent.
|
192
|
+
# @param i [Fixnum] Variable from #easter_dependent.
|
193
|
+
# @param k [Fixnum] Variable from #easter_dependent.
|
194
|
+
# @return [Array] Partial variables for calculus.
|
195
|
+
def easter_finalize(a, x, e, i, k)
|
196
|
+
h = ((19 * a) + x + 15) % 30
|
197
|
+
l = (32 + (2 * e) + (2 * i) - h - k) % 7
|
198
|
+
|
199
|
+
[h, l, ((a + (11 * h) + (22 * l)) / 451.0).floor]
|
200
|
+
end
|
201
|
+
|
202
|
+
# Final part of Easter calculation.
|
203
|
+
#
|
204
|
+
# @param prev [Fixnum] Variable from #easter_finalize.
|
205
|
+
# @return [Array] Day and month of Easter daye.
|
206
|
+
def easter_summarize(prev)
|
207
|
+
h, l, m = prev
|
208
|
+
[((h + l - (7 * m) + 114) % 31) + 1, ((h + l - (7 * m) + 114) / 31.0).floor]
|
209
|
+
end
|
174
210
|
end
|
175
211
|
|
176
212
|
# Returns the UTC::Time representation of the current datetime.
|
@@ -210,32 +246,8 @@ module Lazier
|
|
210
246
|
def lstrftime(format = nil)
|
211
247
|
rv = nil
|
212
248
|
names = ::Lazier.settings.date_names
|
213
|
-
|
214
|
-
|
215
|
-
mrv = match
|
216
|
-
|
217
|
-
# Handling of %z is to fix ruby 1.8 bug in OSX: http://bugs.ruby-lang.org/issues/2396
|
218
|
-
if match !~ /^%%/ then
|
219
|
-
case match
|
220
|
-
when "%a"
|
221
|
-
mrv = names[:short_days][self.wday]
|
222
|
-
when "%A"
|
223
|
-
mrv = names[:long_days][self.wday]
|
224
|
-
when "%b"
|
225
|
-
mrv = names[:short_months][self.month - 1]
|
226
|
-
when "%B"
|
227
|
-
mrv = names[:long_months][self.month - 1]
|
228
|
-
when "%z"
|
229
|
-
mrv = ::Lazier.is_ruby_18? ? self.formatted_offset(false) : nil
|
230
|
-
when "%:z"
|
231
|
-
mrv = ::Lazier.is_ruby_18? ? self.formatted_offset(true) : nil
|
232
|
-
end
|
233
|
-
end
|
234
|
-
|
235
|
-
mrv ? mrv.sub("%", "%%") : match
|
236
|
-
end
|
237
|
-
|
238
|
-
self.strftime(final_format)
|
249
|
+
substitutions = {"%a" => names[:short_days][self.wday], "%A" => names[:long_days][self.wday], "%b" => names[:short_months][self.month - 1], "%B" => names[:long_months][self.month - 1]}
|
250
|
+
self.strftime(::DateTime.custom_format(format).ensure_string.gsub(/(?<!%)(%[ab])/i) {|mo| substitutions[mo] })
|
239
251
|
end
|
240
252
|
|
241
253
|
# Formats a datetime in the current timezone.
|
@@ -305,23 +317,13 @@ module Lazier
|
|
305
317
|
# @return [Array] A list of names of timezones.
|
306
318
|
def list_all(with_dst = true, dst_label = nil)
|
307
319
|
dst_label ||= "(DST)"
|
308
|
-
dst_key = "DST-#{dst_label}"
|
309
|
-
@zones_names ||= { "STANDARD" => ::ActiveSupport::TimeZone.all.collect(&:to_s) }
|
310
|
-
|
311
|
-
if with_dst && @zones_names[dst_key].blank? then
|
312
|
-
@zones_names[dst_key] = []
|
313
|
-
|
314
|
-
::ActiveSupport::TimeZone.all.each do |zone|
|
315
|
-
zone.aliases.each do |zone_alias|
|
316
|
-
@zones_names[dst_key] << zone.to_str(zone_alias)
|
317
|
-
@zones_names[dst_key] << zone.to_str_with_dst(dst_label, nil, zone_alias) if zone.uses_dst? && zone_alias !~ /(#{Regexp.quote(dst_label)})$/
|
318
|
-
end
|
319
|
-
end
|
320
320
|
|
321
|
-
|
322
|
-
|
321
|
+
@zones_names ||= { "STANDARD" => ::ActiveSupport::TimeZone.all.collect(&:to_s) }
|
322
|
+
@zones_names["DST[#{dst_label}]-STANDARD"] ||= ::ActiveSupport::TimeZone.all.collect { |zone|
|
323
|
+
zone.aliases.collect { |zone_alias| [zone.to_str(zone_alias), (zone.uses_dst? && zone_alias !~ /(#{Regexp.quote(dst_label)})$/) ? zone.to_str_with_dst(dst_label, nil, zone_alias) : nil] }
|
324
|
+
}.flatten.compact.uniq.sort { |a,b| ::ActiveSupport::TimeZone.compare(a, b) } # Sort by name
|
323
325
|
|
324
|
-
@zones_names[with_dst ?
|
326
|
+
@zones_names["#{with_dst ? "DST[#{dst_label}]-" : ""}STANDARD"]
|
325
327
|
end
|
326
328
|
|
327
329
|
# Returns a string representation of a timezone.
|
@@ -382,32 +384,17 @@ module Lazier
|
|
382
384
|
end
|
383
385
|
|
384
386
|
# Returns a list of valid aliases (city names) for this timezone (basing on offset).
|
385
|
-
#
|
386
|
-
# @param dst_label [String] Label for the DST indication. Defaults to `(DST)`.
|
387
387
|
# @return [Array] A list of aliases for this timezone
|
388
|
-
def aliases
|
389
|
-
reference = self.name
|
390
|
-
reference = self.class::MAPPING[self.name] if self.class::MAPPING.has_key?(self.name) # We are an alias
|
391
|
-
reference = reference.gsub("_", " ")
|
392
|
-
|
393
|
-
if @aliases.blank? then
|
394
|
-
# First we search for aliases by name
|
395
|
-
@aliases = [reference]
|
396
|
-
|
397
|
-
self.class::MAPPING.each do |name, zone|
|
398
|
-
if zone.gsub("_", " ") == reference then
|
399
|
-
if name == "International Date Line West" || name == "UTC" || name.include?("(US & Canada)")
|
400
|
-
@aliases << name
|
401
|
-
else
|
402
|
-
@aliases << reference.gsub(/\/.*/, "/" + name)
|
403
|
-
end
|
404
|
-
end
|
405
|
-
end
|
388
|
+
def aliases
|
389
|
+
reference = self.class::MAPPING.fetch(self.name, self.name).gsub("_", " ")
|
406
390
|
|
407
|
-
|
408
|
-
|
409
|
-
|
410
|
-
|
391
|
+
@aliases ||= ([reference] + self.class::MAPPING.collect { |name, zone|
|
392
|
+
if zone.gsub("_", " ") == reference then
|
393
|
+
(["International Date Line West", "UTC"].include?(name) || name.include?("(US & Canada)")) ? name : reference.gsub(/\/.*/, "/#{name}")
|
394
|
+
else
|
395
|
+
nil
|
396
|
+
end
|
397
|
+
}).uniq.compact.sort
|
411
398
|
end
|
412
399
|
|
413
400
|
# Returns the current offset for this timezone, taking care of Daylight Saving Time (DST).
|
@@ -479,19 +466,18 @@ module Lazier
|
|
479
466
|
# @param year [Fixnum] The year to which refer to. Defaults to the current year.
|
480
467
|
# @return [Fixnum|Rational] The correction for dst.
|
481
468
|
def dst_correction(rational = false, year = nil)
|
482
|
-
|
483
|
-
rv = period ? period.std_offset : 0
|
484
|
-
rational ? self.class.rationalize_offset(rv) : rv
|
469
|
+
self.dst_offset(rational, year, :std_offset)
|
485
470
|
end
|
486
471
|
|
487
472
|
# Returns the standard offset for this timezone timezone when the Daylight Saving Time (DST) is active.
|
488
473
|
#
|
489
474
|
# @param rational [Boolean] If to return the offset as a Rational.
|
490
475
|
# @param year [Fixnum] The year to which refer to. Defaults to the current year.
|
476
|
+
# @param method [Symbol] The method to use for getting the offset. Default is total offset from UTC.
|
491
477
|
# @return [Fixnum|Rational] The DST offset for this timezone or `0`, if the timezone doesn't use DST for that year.
|
492
|
-
def dst_offset(rational = false, year = nil)
|
478
|
+
def dst_offset(rational = false, year = nil, method = :utc_total_offset)
|
493
479
|
period = self.dst_period(year)
|
494
|
-
rv = period ? period.
|
480
|
+
rv = period ? period.send(method) : 0
|
495
481
|
rational ? self.class.rationalize_offset(rv) : rv
|
496
482
|
end
|
497
483
|
|