thefox-ext 1.8.0 → 1.9.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/.github/workflows/ci.yml +0 -2
- data/CHANGELOG-v1.md +5 -0
- data/README.md +1 -1
- data/bin/dev +13 -0
- data/lib/thefox-ext/ext/array.rb +6 -6
- data/lib/thefox-ext/ext/string.rb +67 -0
- data/lib/thefox-ext/version.rb +1 -1
- metadata +2 -2
- data/bin/.gitignore +0 -1
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 569a588809c70468e59dc2d762bf261d94108cc4d9c535c664c518c99b820914
|
4
|
+
data.tar.gz: 9307e0cf0b76da29e09537bc93e7e77f70137dcb69621d94089ad24f08a080d2
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 4e8c14d434bd57584ae5f72d2c99923af6da39c0e88b1e2cee8afb5f03776d1997be3a994e54f97632c9b96e7f280a4e2249717cdb1d4ee1163f9be7c8c98e20
|
7
|
+
data.tar.gz: 5f4527fb0be38f6e1c4018a8896374475405565907484d894e5294bdb43f989050f1af2217b25c12095d454a64f162fd148355a0685218560d6ad1e085e6c735
|
data/.github/workflows/ci.yml
CHANGED
data/CHANGELOG-v1.md
CHANGED
data/README.md
CHANGED
data/bin/dev
ADDED
@@ -0,0 +1,13 @@
|
|
1
|
+
#!/usr/bin/env ruby
|
2
|
+
# coding: UTF-8
|
3
|
+
|
4
|
+
require 'thefox-ext'
|
5
|
+
require 'pp'
|
6
|
+
|
7
|
+
# pp '5{1,2}'.resolve_range()
|
8
|
+
# pp '1,2{1-3,5,6,7},4,5{1,2}'.resolve_range()
|
9
|
+
# pp [1, 2].resolve_range_str('3, 4')
|
10
|
+
# pp Array.resolve_range_str('3,4')
|
11
|
+
# pp '3, 4'.resolve_range()
|
12
|
+
# pp '3, 4'.resolve_range()
|
13
|
+
# pp '3, 4'.resolve_range2()
|
data/lib/thefox-ext/ext/array.rb
CHANGED
@@ -1,10 +1,10 @@
|
|
1
1
|
|
2
2
|
class Array
|
3
3
|
|
4
|
-
#
|
5
|
-
|
6
|
-
|
7
|
-
|
4
|
+
# DEPRECATED: will be removed in v1.10.0.
|
5
|
+
def self.resolve_range_str(original_str, prefix = '')
|
6
|
+
warn "[DEPRECATION] `Array.resolve_range_str` is deprecated. Please use `String.resolve_range` instead."
|
7
|
+
|
8
8
|
rv = Array.new
|
9
9
|
if !original_str.is_a?(String)
|
10
10
|
return rv
|
@@ -24,13 +24,13 @@ class Array
|
|
24
24
|
else
|
25
25
|
item_striped.to_i
|
26
26
|
end
|
27
|
-
}.each
|
27
|
+
}.each{ |range|
|
28
28
|
if range.is_a?(Range)
|
29
29
|
rv.push(*range.to_a)
|
30
30
|
else
|
31
31
|
rv << range
|
32
32
|
end
|
33
|
-
|
33
|
+
}
|
34
34
|
|
35
35
|
rv
|
36
36
|
end
|
@@ -63,4 +63,71 @@ class String
|
|
63
63
|
self.force_encoding('ISO-8859-1').encode('UTF-8')
|
64
64
|
end
|
65
65
|
end
|
66
|
+
|
67
|
+
# Resolve a range string to an array.
|
68
|
+
# A range string can be like '1, 3..5, 9-11, 12+, 14++, 17+++'.
|
69
|
+
# Which will be resolved to [1, 3, 4, 5, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20].
|
70
|
+
def resolve_range(prefix = '')
|
71
|
+
# puts '-> resolve_range: %s {%s}' % [self, prefix]
|
72
|
+
|
73
|
+
rv = Array.new
|
74
|
+
|
75
|
+
items1 = self.split(',')
|
76
|
+
# pp items1
|
77
|
+
|
78
|
+
items2 = []
|
79
|
+
is_sub_range = false
|
80
|
+
sub_item = []
|
81
|
+
items1.each do |item|
|
82
|
+
if item.count('{') > 0
|
83
|
+
is_sub_range = true
|
84
|
+
end
|
85
|
+
if is_sub_range
|
86
|
+
sub_item.push(item)
|
87
|
+
else
|
88
|
+
items2.push(item)
|
89
|
+
end
|
90
|
+
if item.count('}') > 0
|
91
|
+
is_sub_range = false
|
92
|
+
items2.push(sub_item.join(','))
|
93
|
+
sub_item = []
|
94
|
+
end
|
95
|
+
end
|
96
|
+
|
97
|
+
# pp items2
|
98
|
+
|
99
|
+
items2.map{ |item|
|
100
|
+
item_striped = item.strip
|
101
|
+
if range_match = item_striped.match(/(\d+)\{([\d\-\+,]+)\}/)
|
102
|
+
range_match[2].resolve_range(range_match[1])
|
103
|
+
elsif /\.\./.match(item_striped) # ( . )( . ) <--- BOOBS
|
104
|
+
Range.new(*item_striped.split('..', 2).map{ |range| range.to_i })
|
105
|
+
elsif /-/.match(item_striped)
|
106
|
+
Range.new(*item_striped.split('-', 2).map{ |range| range.to_i })
|
107
|
+
elsif /\+/.match(item_striped)
|
108
|
+
items = item_striped.split('+')
|
109
|
+
range_begin = items[0].to_i
|
110
|
+
range_end = range_begin + item_striped.count('+')
|
111
|
+
Range.new(range_begin, range_end)
|
112
|
+
else
|
113
|
+
item_striped.to_i
|
114
|
+
end
|
115
|
+
}.each{ |range|
|
116
|
+
if range.is_a?(Range)
|
117
|
+
rv.push(*range.to_a)
|
118
|
+
elsif range.is_a?(Array)
|
119
|
+
rv.push(*range)
|
120
|
+
else
|
121
|
+
rv << range
|
122
|
+
end
|
123
|
+
}
|
124
|
+
|
125
|
+
if !prefix.empty?
|
126
|
+
rv = rv.map { |i|
|
127
|
+
(prefix + i.to_s).to_i
|
128
|
+
}
|
129
|
+
end
|
130
|
+
|
131
|
+
rv
|
132
|
+
end
|
66
133
|
end
|
data/lib/thefox-ext/version.rb
CHANGED
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: thefox-ext
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.
|
4
|
+
version: 1.9.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Christian Mayer
|
@@ -67,7 +67,7 @@ files:
|
|
67
67
|
- Gemfile
|
68
68
|
- LICENSE
|
69
69
|
- README.md
|
70
|
-
- bin
|
70
|
+
- bin/dev
|
71
71
|
- bin/install.sh
|
72
72
|
- bin/release.sh
|
73
73
|
- bin/setup.sh
|
data/bin/.gitignore
DELETED
@@ -1 +0,0 @@
|
|
1
|
-
dev
|