thefox-ext 1.8.0 → 1.9.0
Sign up to get free protection for your applications and to get access to all the features.
- 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
|