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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: e617d131ab8b09d7056239e1cc53c62e5732522f560d9dafe1d0f00621818d0c
4
- data.tar.gz: 878374b414a23b7a3b25b21f0a051e351c073e5dec8b65189f24eaf7e9de298d
3
+ metadata.gz: 569a588809c70468e59dc2d762bf261d94108cc4d9c535c664c518c99b820914
4
+ data.tar.gz: 9307e0cf0b76da29e09537bc93e7e77f70137dcb69621d94089ad24f08a080d2
5
5
  SHA512:
6
- metadata.gz: 2985d78918b8f35dc3be1a8abd7b56ba88d92785bbf0f4df4b7aae233f2f601810204469251ecb2dd53386224792c66b3e0fd7b12a1100561274bed2eb219663
7
- data.tar.gz: 40e5fc8277d7c072a24ce43249c43559274b4d204fe57b6b81a6e15a82c31bbcc62946e4b0419057d4b0a42263d6170af8efbfd04fd749cb0ffd6d27aacd6beb
6
+ metadata.gz: 4e8c14d434bd57584ae5f72d2c99923af6da39c0e88b1e2cee8afb5f03776d1997be3a994e54f97632c9b96e7f280a4e2249717cdb1d4ee1163f9be7c8c98e20
7
+ data.tar.gz: 5f4527fb0be38f6e1c4018a8896374475405565907484d894e5294bdb43f989050f1af2217b25c12095d454a64f162fd148355a0685218560d6ad1e085e6c735
@@ -10,8 +10,6 @@ on:
10
10
  push:
11
11
  branches:
12
12
  - master
13
- tags:
14
- - v*
15
13
 
16
14
  jobs:
17
15
  test:
data/CHANGELOG-v1.md CHANGED
@@ -1,5 +1,10 @@
1
1
  # Release Notes for Extended Ruby Classes v1.x
2
2
 
3
+ ## v1.9.0
4
+
5
+ - Tests
6
+ - Array Ranges
7
+
3
8
  ## v1.8.0
4
9
 
5
10
  - Ruby v3 Support
data/README.md CHANGED
@@ -21,7 +21,7 @@ gem install thefox-ext
21
21
  or via `Gemfile`:
22
22
 
23
23
  ```ruby
24
- gem 'thefox-ext', '~>1.5'
24
+ gem 'thefox-ext', '~>1.9'
25
25
  ```
26
26
 
27
27
  Use it in your sources:
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()
@@ -1,10 +1,10 @@
1
1
 
2
2
  class Array
3
3
 
4
- # Resolve a range string to an array.
5
- # A range string can be like '1, 3..5, 9-11, 12+, 14++, 17+++'.
6
- # Which will be resolved to [1, 3, 4, 5, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20].
7
- def self.resolve_range_str(original_str)
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 do |range|
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
- end
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
@@ -1,7 +1,7 @@
1
1
 
2
2
  module TheFox
3
3
  module Ext
4
- VERSION = '1.8.0'
4
+ VERSION = '1.9.0'
5
5
  DATE = '2021-04-05'
6
6
  HOMEPAGE = 'https://github.com/TheFox/ext.rb'
7
7
  end
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.8.0
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/.gitignore
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