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 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