thefox-ext 1.3.0 → 1.4.0
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 +4 -4
- data/README.md +5 -1
- data/lib/thefox-ext.rb +1 -0
- data/lib/thefox-ext/ext/date.rb +38 -0
- data/lib/thefox-ext/ext/hash.rb +58 -0
- data/lib/thefox-ext/version.rb +2 -2
- data/tests/tc_date.rb +51 -0
- data/tests/tc_hash.rb +103 -0
- data/tests/ts_all.rb +1 -0
- metadata +4 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 0d9d3e3cc6b4f95af03f5bb904259185b8b1a7a9
|
4
|
+
data.tar.gz: 1fa4937f167095f4990acdd2cd3283f873d873ee
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: d2eb87e909fe0a35dcaf14210f8438882c9021cbf2f1784687a0b4019082a0df6bcdd3b10be785b22dcca8c8851de12c0e9d0f583115efbec18ddd79f3c06c0e
|
7
|
+
data.tar.gz: 647ba64e5aba70994768e5ca3842a98954c5e2ae518218b34f034934461b8d7a406dca91a67955c7ae41dd9bce7025f388ce7d6e1c5dbefea4ab81bb38169714
|
data/README.md
CHANGED
data/lib/thefox-ext.rb
CHANGED
data/lib/thefox-ext/ext/date.rb
CHANGED
@@ -5,4 +5,42 @@ class Date
|
|
5
5
|
def today?
|
6
6
|
self == Date.today
|
7
7
|
end
|
8
|
+
|
9
|
+
def week
|
10
|
+
cweek = self.cweek
|
11
|
+
year = self.year
|
12
|
+
month = self.month
|
13
|
+
|
14
|
+
next_year = year + 1
|
15
|
+
previous_year = year - 1
|
16
|
+
|
17
|
+
days = Date.new(year)
|
18
|
+
.step(Date.new(year, -1, -1))
|
19
|
+
.select{ |d| d.cweek == cweek }
|
20
|
+
|
21
|
+
if cweek == 1 && month == 12 ||
|
22
|
+
cweek == 1 && month == 1 ||
|
23
|
+
cweek >= 52 && month == 12 ||
|
24
|
+
cweek >= 52 && month == 1
|
25
|
+
|
26
|
+
days.keep_if{ |d| d.year == year && d.month == month }
|
27
|
+
end
|
28
|
+
|
29
|
+
if days.count < 7
|
30
|
+
rest = 7 - days.count
|
31
|
+
|
32
|
+
rest_days = nil
|
33
|
+
if month == 1
|
34
|
+
rest_days = Date.new(previous_year, 12, 31 - rest + 1).step(Date.new(previous_year, 12, 31))
|
35
|
+
elsif month == 12
|
36
|
+
rest_days = Date.new(next_year).step(Date.new(next_year, 1, rest))
|
37
|
+
end
|
38
|
+
|
39
|
+
if !rest_days.nil?
|
40
|
+
days += rest_days.to_a
|
41
|
+
end
|
42
|
+
end
|
43
|
+
|
44
|
+
days.sort[0, 7]
|
45
|
+
end
|
8
46
|
end
|
@@ -0,0 +1,58 @@
|
|
1
|
+
|
2
|
+
class Hash
|
3
|
+
|
4
|
+
def merge_recursive(h2, level = 0, clone = true)
|
5
|
+
has_subhashes = false
|
6
|
+
|
7
|
+
h1 = self
|
8
|
+
if clone
|
9
|
+
# We want to modify only the clone.
|
10
|
+
h1 = self.clone
|
11
|
+
end
|
12
|
+
|
13
|
+
# Iterate Hash 1
|
14
|
+
h1.each do |k, v|
|
15
|
+
if v.is_a?(Hash)
|
16
|
+
has_subhashes = true
|
17
|
+
|
18
|
+
if h2.has_key?(k) && h2[k].is_a?(Hash)
|
19
|
+
# Inception! Go one level deeper.
|
20
|
+
h1[k] = v.merge_recursive(h2[k], level + 1)
|
21
|
+
else
|
22
|
+
h1[k] = h2[k]
|
23
|
+
end
|
24
|
+
else
|
25
|
+
# Value of Hash 1 is no Subhash.
|
26
|
+
|
27
|
+
# Only overwrite Hash 1 Value with Hash 2 Value
|
28
|
+
# if a Hash 2 Key exist.
|
29
|
+
if h2.has_key?(k)
|
30
|
+
h1[k] = h2[k]
|
31
|
+
end
|
32
|
+
end
|
33
|
+
end
|
34
|
+
|
35
|
+
# Iterate Hash 2
|
36
|
+
# Because we also want Key from Hash 2
|
37
|
+
# which don't exist in Hash 1.
|
38
|
+
h2.each do |k, v|
|
39
|
+
if !h1.has_key?(k)
|
40
|
+
h1[k] = v
|
41
|
+
end
|
42
|
+
end
|
43
|
+
|
44
|
+
if !has_subhashes
|
45
|
+
# If there are no subhashes merge
|
46
|
+
# with existing merge function.
|
47
|
+
h1.merge!(h2)
|
48
|
+
end
|
49
|
+
|
50
|
+
# Return h1 modified clone.
|
51
|
+
return h1
|
52
|
+
end
|
53
|
+
|
54
|
+
def merge_recursive!(h2)
|
55
|
+
self.merge_recursive(h2, 0, false)
|
56
|
+
end
|
57
|
+
|
58
|
+
end
|
data/lib/thefox-ext/version.rb
CHANGED
data/tests/tc_date.rb
CHANGED
@@ -16,4 +16,55 @@ class TestDate < MiniTest::Test
|
|
16
16
|
|
17
17
|
assert_equal(true, Time.now.to_date.today?)
|
18
18
|
end
|
19
|
+
|
20
|
+
def test_week_mid
|
21
|
+
e = ['2014-02-17', '2014-02-18', '2014-02-19', '2014-02-20', '2014-02-21', '2014-02-22', '2014-02-23']
|
22
|
+
assert_equal(e, Date.new(2014, 2, 21).week.map{ |d| "#{d}" })
|
23
|
+
|
24
|
+
e = ['2014-03-31', '2014-04-01', '2014-04-02', '2014-04-03', '2014-04-04', '2014-04-05', '2014-04-06']
|
25
|
+
assert_equal(e, Date.new(2014, 4, 1).week.map{ |d| "#{d}" })
|
26
|
+
|
27
|
+
e = ['2015-02-16', '2015-02-17', '2015-02-18', '2015-02-19', '2015-02-20', '2015-02-21', '2015-02-22']
|
28
|
+
assert_equal(e, Date.new(2015, 2, 21).week.map{ |d| "#{d}" })
|
29
|
+
|
30
|
+
e = ['2016-02-15', '2016-02-16', '2016-02-17', '2016-02-18', '2016-02-19', '2016-02-20', '2016-02-21']
|
31
|
+
assert_equal(e, Date.new(2016, 2, 21).week.map{ |d| "#{d}" })
|
32
|
+
end
|
33
|
+
|
34
|
+
def test_week_jan
|
35
|
+
e = ['2013-12-30', '2013-12-31', '2014-01-01', '2014-01-02', '2014-01-03', '2014-01-04', '2014-01-05']
|
36
|
+
assert_equal(e, Date.new(2014, 1, 1).week.map{ |d| "#{d}" })
|
37
|
+
|
38
|
+
e = ['2014-12-29', '2014-12-30', '2014-12-31',
|
39
|
+
'2015-01-01', '2015-01-02', '2015-01-03', '2015-01-04']
|
40
|
+
assert_equal(e, Date.new(2015, 1, 1).week.map{ |d| "#{d}" })
|
41
|
+
|
42
|
+
e = ['2015-12-28', '2015-12-29', '2015-12-30', '2015-12-31',
|
43
|
+
'2016-01-01', '2016-01-02', '2016-01-03']
|
44
|
+
assert_equal(e, Date.new(2016, 1, 1).week.map{ |d| "#{d}" })
|
45
|
+
|
46
|
+
e = ['2016-12-26', '2016-12-27', '2016-12-28', '2016-12-29', '2016-12-30', '2016-12-31',
|
47
|
+
'2017-01-01']
|
48
|
+
assert_equal(e, Date.new(2017, 1, 1).week.map{ |d| "#{d}" })
|
49
|
+
|
50
|
+
e = ['2018-01-01', '2018-01-02', '2018-01-03', '2018-01-04', '2018-01-05', '2018-01-06', '2018-01-07']
|
51
|
+
assert_equal(e, Date.new(2018, 1, 1).week.map{ |d| "#{d}" })
|
52
|
+
end
|
53
|
+
|
54
|
+
def test_week_dec
|
55
|
+
e = ['2014-12-29', '2014-12-30', '2014-12-31',
|
56
|
+
'2015-01-01', '2015-01-02', '2015-01-03', '2015-01-04']
|
57
|
+
assert_equal(e, Date.new(2014, 12, 31).week.map{ |d| "#{d}" })
|
58
|
+
|
59
|
+
e = ['2015-12-28', '2015-12-29', '2015-12-30', '2015-12-31',
|
60
|
+
'2016-01-01', '2016-01-02', '2016-01-03']
|
61
|
+
assert_equal(e, Date.new(2015, 12, 31).week.map{ |d| "#{d}" })
|
62
|
+
|
63
|
+
e = ['2016-12-26', '2016-12-27', '2016-12-28', '2016-12-29', '2016-12-30', '2016-12-31',
|
64
|
+
'2017-01-01']
|
65
|
+
assert_equal(e, Date.new(2016, 12, 31).week.map{ |d| "#{d}" })
|
66
|
+
|
67
|
+
e = ['2017-12-25', '2017-12-26', '2017-12-27', '2017-12-28', '2017-12-29', '2017-12-30', '2017-12-31']
|
68
|
+
assert_equal(e, Date.new(2017, 12, 31).week.map{ |d| "#{d}" })
|
69
|
+
end
|
19
70
|
end
|
data/tests/tc_hash.rb
ADDED
@@ -0,0 +1,103 @@
|
|
1
|
+
#!/usr/bin/env ruby
|
2
|
+
|
3
|
+
require 'minitest/autorun'
|
4
|
+
require 'thefox-ext'
|
5
|
+
|
6
|
+
|
7
|
+
class TestHash < MiniTest::Test
|
8
|
+
def test_merge_recursive_clone1
|
9
|
+
h1 = {'k1' => 1, 'k2' => 1}
|
10
|
+
h2 = {'k1' => 2, 'k2' => 2}
|
11
|
+
|
12
|
+
assert_equal({'k1' => 2, 'k2' => 2}, h1.merge_recursive(h2))
|
13
|
+
end
|
14
|
+
|
15
|
+
def test_merge_recursive_clone2
|
16
|
+
h1 = {'k1' => 1, 'k2' => 1}
|
17
|
+
h2 = {'k1' => 2, 'k3' => 2}
|
18
|
+
|
19
|
+
assert_equal({'k1' => 2, 'k2' => 1, 'k3' => 2}, h1.merge_recursive(h2))
|
20
|
+
end
|
21
|
+
|
22
|
+
def test_merge_recursive_clone3
|
23
|
+
h1 = {'k1' => 1, 'k2' => {'sk1' => 1}}
|
24
|
+
h2 = {'k1' => 2, 'k2' => 2}
|
25
|
+
|
26
|
+
assert_equal({'k1' => 2, 'k2' => 2}, h1.merge_recursive(h2))
|
27
|
+
end
|
28
|
+
|
29
|
+
def test_merge_recursive_clone4
|
30
|
+
h1 = {'k1' => 1, 'k2' => 1}
|
31
|
+
h2 = {'k1' => 2, 'k2' => {'sk2' => 2}}
|
32
|
+
|
33
|
+
assert_equal({'k1' => 2, 'k2' => {'sk2' => 2}}, h1.merge_recursive(h2))
|
34
|
+
end
|
35
|
+
|
36
|
+
def test_merge_recursive_clone5
|
37
|
+
h1 = {'k1' => 1, 'k2' => {'sk1' => 1}}
|
38
|
+
h2 = {'k1' => 2, 'k2' => {'sk2' => 2}}
|
39
|
+
|
40
|
+
assert_equal({'k1' => 2, 'k2' => {'sk1' => 1, 'sk2' => 2}}, h1.merge_recursive(h2))
|
41
|
+
end
|
42
|
+
|
43
|
+
def test_merge_recursive_clone6
|
44
|
+
h1 = {'k1' => 1, 'k2' => 1, 'k4' => {'sk1' => 1}}
|
45
|
+
h2 = {'k1' => 2, 'k3' => 2, 'k4' => {'sk2' => 2}}
|
46
|
+
|
47
|
+
assert_equal({'k1' => 2, 'k2' => 1, 'k3' => 2, 'k4' => {'sk1' => 1, 'sk2' => 2}}, h1.merge_recursive(h2))
|
48
|
+
end
|
49
|
+
|
50
|
+
def test_merge_recursive_self1
|
51
|
+
h1 = {'k1' => 1, 'k2' => 1}
|
52
|
+
h2 = {'k1' => 2, 'k2' => 2}
|
53
|
+
|
54
|
+
h1.merge_recursive!(h2)
|
55
|
+
|
56
|
+
assert_equal({'k1' => 2, 'k2' => 2}, h1)
|
57
|
+
end
|
58
|
+
|
59
|
+
def test_merge_recursive_self2
|
60
|
+
h1 = {'k1' => 1, 'k2' => 1}
|
61
|
+
h2 = {'k1' => 2, 'k3' => 2}
|
62
|
+
|
63
|
+
h1.merge_recursive!(h2)
|
64
|
+
|
65
|
+
assert_equal({'k1' => 2, 'k2' => 1, 'k3' => 2}, h1)
|
66
|
+
end
|
67
|
+
|
68
|
+
def test_merge_recursive_self3
|
69
|
+
h1 = {'k1' => 1, 'k2' => {'sk1' => 1}}
|
70
|
+
h2 = {'k1' => 2, 'k2' => 2}
|
71
|
+
|
72
|
+
h1.merge_recursive!(h2)
|
73
|
+
|
74
|
+
assert_equal({'k1' => 2, 'k2' => 2}, h1)
|
75
|
+
end
|
76
|
+
|
77
|
+
def test_merge_recursive_self4
|
78
|
+
h1 = {'k1' => 1, 'k2' => 1}
|
79
|
+
h2 = {'k1' => 2, 'k2' => {'sk2' => 2}}
|
80
|
+
|
81
|
+
h1.merge_recursive!(h2)
|
82
|
+
|
83
|
+
assert_equal({'k1' => 2, 'k2' => {'sk2' => 2}}, h1)
|
84
|
+
end
|
85
|
+
|
86
|
+
def test_merge_recursive_self5
|
87
|
+
h1 = {'k1' => 1, 'k2' => {'sk1' => 1}}
|
88
|
+
h2 = {'k1' => 2, 'k2' => {'sk2' => 2}}
|
89
|
+
|
90
|
+
h1.merge_recursive!(h2)
|
91
|
+
|
92
|
+
assert_equal({'k1' => 2, 'k2' => {'sk1' => 1, 'sk2' => 2}}, h1)
|
93
|
+
end
|
94
|
+
|
95
|
+
def test_merge_recursive_self6
|
96
|
+
h1 = {'k1' => 1, 'k2' => 1, 'k4' => {'sk1' => 1}}
|
97
|
+
h2 = {'k1' => 2, 'k3' => 2, 'k4' => {'sk2' => 2}}
|
98
|
+
|
99
|
+
h1.merge_recursive!(h2)
|
100
|
+
|
101
|
+
assert_equal({'k1' => 2, 'k2' => 1, 'k3' => 2, 'k4' => {'sk1' => 1, 'sk2' => 2}}, h1)
|
102
|
+
end
|
103
|
+
end
|
data/tests/ts_all.rb
CHANGED
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: thefox-ext
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.
|
4
|
+
version: 1.4.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Christian Mayer
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2016-02-
|
11
|
+
date: 2016-02-13 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: minitest
|
@@ -40,6 +40,7 @@ files:
|
|
40
40
|
- lib/thefox-ext/console.rb
|
41
41
|
- lib/thefox-ext/ext/date.rb
|
42
42
|
- lib/thefox-ext/ext/false.rb
|
43
|
+
- lib/thefox-ext/ext/hash.rb
|
43
44
|
- lib/thefox-ext/ext/integer.rb
|
44
45
|
- lib/thefox-ext/ext/nil.rb
|
45
46
|
- lib/thefox-ext/ext/string.rb
|
@@ -47,6 +48,7 @@ files:
|
|
47
48
|
- lib/thefox-ext/version.rb
|
48
49
|
- tests/tc_date.rb
|
49
50
|
- tests/tc_false.rb
|
51
|
+
- tests/tc_hash.rb
|
50
52
|
- tests/tc_integer.rb
|
51
53
|
- tests/tc_nil.rb
|
52
54
|
- tests/tc_string.rb
|