thefox-ext 1.10.0 → 3.0.0.pre.rc.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: 6b68b006a1bf2b6cdc73ca86ef2291c7fe8561e622cdf9f4b6434df6ced40a48
4
- data.tar.gz: 9e05dc8bedd4a625040d4899ed3f19315fa58c9a998e8cfc5749e929e15d7451
3
+ metadata.gz: a20be9c295afd672782bd04e2ab56b507fa81cf0f66e89c7557b1d88dc527687
4
+ data.tar.gz: b5bb8440e0df05a68571e9fa957f6e13e904a50697b34215383c1bd209eea5c8
5
5
  SHA512:
6
- metadata.gz: 91b5ff18299878084605508f46a5559b8339d52006e32b1908c5a44ee8c04bfa420cddd6fabdf8c7f0996b4d093dae9c916d9affd4efc0c22df3aca2d4ff181d
7
- data.tar.gz: d7629b1cff75db5e14ea30a5cd5d08f12227146e61491ca41368d696d7f5b3c5ee020161389fa6d7af113bbe8b7ac0fb9038ec95f32260fff4b552b6a48e7603
6
+ metadata.gz: 7aef25246b059342d994fbb7dd981f16a962abed342a474611d38acc8878d9487673286b4f802ed8a791eec92cfcc34189fa63fe2b9e5965ad16e2dbaf4022e6
7
+ data.tar.gz: 363c224dade536a709cc24f7eee8cdaf0a86d39a1ab676e80bd6b7f1cad2462f6f70e52f39c29f9e3904313bba93d24b4c54b3b7dfec749f06a26920d9a13601
@@ -10,6 +10,7 @@ on:
10
10
  push:
11
11
  branches:
12
12
  - master
13
+ - feature/*
13
14
 
14
15
  jobs:
15
16
  test:
@@ -17,8 +18,6 @@ jobs:
17
18
  strategy:
18
19
  matrix:
19
20
  ruby-version:
20
- - '2.3'
21
- - '2.4'
22
21
  - '2.5'
23
22
  - '2.6'
24
23
  - '2.7'
data/CHANGELOG-v2.md ADDED
@@ -0,0 +1,8 @@
1
+ # Release Notes for Extended Ruby Classes v2.x
2
+
3
+ ## v2.0.0
4
+
5
+ - Removed deprecated `Array.resolve_range_str`.
6
+ - Removed deprecated `String.resolve_range`.
7
+ - Dropped support for Ruby version 2.3.
8
+ - Added Range Resolver class.
data/CHANGELOG-v3.md ADDED
@@ -0,0 +1,6 @@
1
+ # Release Notes for Extended Ruby Classes v2.x
2
+
3
+ ## v3.0.0 [unreleased]
4
+
5
+ - Dropped support for Ruby version 2.4.
6
+ - Range Resolver v2
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.10'
24
+ gem 'thefox-ext', '~>2.0'
25
25
  ```
26
26
 
27
27
  Use it in your sources:
@@ -40,11 +40,16 @@ require 'thefox-ext'
40
40
  - Date
41
41
  - `today?`
42
42
  - Get week array for a specific date.
43
- - Array
44
- - Range String Resolver
45
43
  - Hash
46
44
  - Recursive Merge
45
+ - Range String Resolver
47
46
 
48
47
  ## Project Links
49
48
 
50
49
  - [Gem](https://rubygems.org/gems/thefox-ext)
50
+
51
+ ## Dev
52
+
53
+ ```bash
54
+ bundler exec ./bin/test.rb
55
+ ```
data/bin/dev CHANGED
@@ -1,6 +1,7 @@
1
1
  #!/usr/bin/env ruby
2
- # coding: UTF-8
3
2
 
4
3
  require 'thefox-ext'
5
4
  require 'pp'
6
5
 
6
+ rr = TheFox::Range::Resolver.new(ARGV.join(' '))
7
+ pp rr.to_a
data/bin/test.rb ADDED
@@ -0,0 +1,13 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ require 'pry'
4
+ require 'thefox-ext'
5
+ require 'pp'
6
+
7
+ include TheFox::Range::Lexer
8
+
9
+ n1 = Number.new('123')
10
+
11
+ binding.pry
12
+
13
+ puts '-> exit pry'
data/bin/test.sh CHANGED
@@ -10,4 +10,5 @@ which bundler &> /dev/null || { echo 'ERROR: bundler not found in PATH'; exit 1;
10
10
 
11
11
  cd "${SCRIPT_BASEDIR}/.."
12
12
 
13
+ echo 'run tests'
13
14
  bundler exec ./test/suite_all.rb $*
data/lib/thefox-ext.rb CHANGED
@@ -8,6 +8,21 @@ require 'thefox-ext/ext/integer'
8
8
  require 'thefox-ext/ext/nil'
9
9
  require 'thefox-ext/ext/string'
10
10
  require 'thefox-ext/ext/true'
11
- require 'thefox-ext/ext/array'
12
11
 
13
12
  require 'thefox-ext/console'
13
+
14
+ # Resolver
15
+ require 'thefox-ext/range/resolver'
16
+ require 'thefox-ext/range/lexer/lexer'
17
+ require 'thefox-ext/range/lexer/collection'
18
+ require 'thefox-ext/range/lexer/base'
19
+ require 'thefox-ext/range/lexer/block_level'
20
+ require 'thefox-ext/range/lexer/block'
21
+ require 'thefox-ext/range/lexer/block_down'
22
+ require 'thefox-ext/range/lexer/block_up'
23
+ require 'thefox-ext/range/lexer/operator'
24
+ require 'thefox-ext/range/lexer/scope'
25
+ require 'thefox-ext/range/lexer/number'
26
+ require 'thefox-ext/range/lexer/separator'
27
+ require 'thefox-ext/range/lexer/range'
28
+ require 'thefox-ext/range/lexer/interval'
@@ -63,64 +63,4 @@ class String
63
63
  self.force_encoding('ISO-8859-1').encode('UTF-8')
64
64
  end
65
65
  end
66
-
67
- # DEPRECATED: will be removed in v2.0.0.
68
- def resolve_range(prefix = '')
69
- # puts '-> resolve_range: %s {%s}' % [self, prefix]
70
- warn "[DEPRECATION] `String.resolve_range` is deprecated. Please use `TheFox::Range::Resolver` instead."
71
-
72
- rv = Array.new
73
-
74
- items = []
75
- is_sub_range = false
76
- sub_item = []
77
- self.split(',').each do |item|
78
- if item.count('{') > 0
79
- is_sub_range = true
80
- end
81
- if is_sub_range
82
- sub_item.push(item)
83
- else
84
- items.push(item)
85
- end
86
- if item.count('}') > 0
87
- is_sub_range = false
88
- items.push(sub_item.join(','))
89
- sub_item = []
90
- end
91
- end
92
-
93
- items.map{ |item|
94
- item_striped = item.strip
95
- if range_match = item_striped.match(/(\d+)\{([\d\-\+,]+)\}/)
96
- range_match[2].resolve_range(range_match[1])
97
- elsif /\.\./.match(item_striped) # ( . )( . ) <--- BOOBS
98
- Range.new(*item_striped.split('..', 2).map{ |range| range.to_i })
99
- elsif /-/.match(item_striped)
100
- Range.new(*item_striped.split('-', 2).map{ |range| range.to_i })
101
- elsif /\+/.match(item_striped)
102
- range_begin = item_striped.split('+').first.to_i
103
- range_end = range_begin + item_striped.count('+')
104
- Range.new(range_begin, range_end)
105
- else
106
- item_striped.to_i
107
- end
108
- }.each{ |range|
109
- if range.is_a?(Range)
110
- rv.push(*range.to_a)
111
- elsif range.is_a?(Array)
112
- rv.push(*range)
113
- else
114
- rv << range
115
- end
116
- }
117
-
118
- if !prefix.empty?
119
- rv = rv.map { |i|
120
- (prefix + i.to_s).to_i
121
- }
122
- end
123
-
124
- rv
125
- end
126
66
  end
@@ -0,0 +1,124 @@
1
+
2
+ module TheFox
3
+ module Range
4
+ module Lexer
5
+ class Base
6
+ @@instance_id = 0
7
+
8
+ def initialize(symbole = nil)
9
+ # puts '-> Base.initialize'
10
+
11
+ @@instance_id += 1
12
+ @instance_id = @@instance_id
13
+ @nonce = Base.generate_nonce()
14
+ @symbole = symbole
15
+ @prev_item = nil
16
+ @org_prev_item = nil
17
+ @next_item = nil
18
+
19
+ @parent_item = nil
20
+ #@parent_scope = nil
21
+ @children = []
22
+ end
23
+
24
+ # :nocov:
25
+ def inspect()
26
+ 'Base'
27
+ end
28
+ # :nocov:
29
+
30
+ def instance_id()
31
+ @instance_id
32
+ end
33
+ def instance_id=(instance_id)
34
+ @instance_id = instance_id
35
+ end
36
+
37
+ def nonce()
38
+ @nonce
39
+ end
40
+ def nonce=(nonce)
41
+ @nonce = nonce
42
+ end
43
+
44
+ def chain(prev_item)
45
+ # puts '%s(%s).chain' % [self.inspect, opts.inspect]
46
+ self.prev_item = prev_item
47
+ if !prev_item.nil?
48
+ prev_item.next_item = self
49
+ end
50
+ end
51
+
52
+ def symbole()
53
+ @symbole
54
+ end
55
+
56
+ def org_prev_item()
57
+ @org_prev_item
58
+ end
59
+ def org_prev_item=(org_prev_item)
60
+ @org_prev_item = org_prev_item
61
+ end
62
+
63
+ def prev_item()
64
+ @prev_item
65
+ end
66
+ def prev_item=(prev_item)
67
+ @prev_item = prev_item
68
+ end
69
+
70
+ def next_item()
71
+ @next_item
72
+ end
73
+ def next_item=(next_item)
74
+ @next_item = next_item
75
+ end
76
+
77
+ def parent_item()
78
+ @parent_item
79
+ end
80
+ def parent_item=(parent_item)
81
+ @parent_item = parent_item
82
+ end
83
+ def has_parent_item()
84
+ !@parent_item.nil?
85
+ end
86
+
87
+ def children()
88
+ @children
89
+ end
90
+ def add_child(child)
91
+ @children.push(child)
92
+ end
93
+ def has_children()
94
+ @children.length > 0
95
+ end
96
+
97
+ def dup()
98
+ # puts '-> Base.dup'
99
+ o = super()
100
+ o.nonce = Base.generate_nonce()
101
+ o.prev_item = nil
102
+ o.next_item = nil
103
+ o
104
+ end
105
+
106
+ def resolve()
107
+ puts '-> Base.resolve'
108
+ end
109
+
110
+ class << self
111
+ def generate_nonce()
112
+ rand(10 ** 3).to_s.rjust(3, '0')
113
+ end
114
+ def keep_nonce_on_dup()
115
+ false
116
+ end
117
+ def keep_instance_id_on_dup()
118
+ false
119
+ end
120
+ end
121
+ end # Base
122
+ end # Lexer
123
+ end # Range
124
+ end # TheFox
@@ -0,0 +1,19 @@
1
+
2
+ module TheFox
3
+ module Range
4
+ module Lexer
5
+ # { }
6
+ class Block < Base
7
+ def initialize(level)
8
+ super()
9
+ # puts '-> Block.initialize(%s)' % [level.inspect]
10
+ @level = level.dup
11
+ end
12
+
13
+ def level()
14
+ @level
15
+ end
16
+ end # Block
17
+ end # Lexer
18
+ end # Range
19
+ end # TheFox
@@ -0,0 +1,25 @@
1
+
2
+ module TheFox
3
+ module Range
4
+ module Lexer
5
+ # {
6
+ class BlockDown < Block
7
+ def initialize(level)
8
+ level.inc
9
+ super(level)
10
+ # puts '-> BlockDown.initialize(%s)' % [level.inspect]
11
+ end
12
+
13
+ # :nocov:
14
+ def inspect()
15
+ 'BlockDown(%s)' % [@level.level]
16
+ # if @prev_item.nil?
17
+ # else
18
+ # 'BlockDown(%s <%s)' % [@level.inspect, @prev_item.inspect]
19
+ # end
20
+ end
21
+ # :nocov:
22
+ end # BlockDown
23
+ end # Lexer
24
+ end # Range
25
+ end # TheFox
@@ -0,0 +1,37 @@
1
+
2
+ module TheFox
3
+ module Range
4
+ module Lexer
5
+ class BlockLevel
6
+ def initialize()
7
+ # puts '-> BlockLevel.initialize()'
8
+ @level = 0
9
+ end
10
+
11
+ # :nocov:
12
+ def inspect()
13
+ 'BlockLevel(%d)' % [@level]
14
+ end
15
+ # :nocov:
16
+
17
+ def inc()
18
+ @level += 1
19
+ end
20
+
21
+ def dec()
22
+ @level -= 1
23
+ end
24
+
25
+ def level()
26
+ @level
27
+ end
28
+
29
+ def ==(other)
30
+ if other.is_a?(BlockLevel)
31
+ @level == other.level
32
+ end
33
+ end
34
+ end # BlockLevel
35
+ end # Lexer
36
+ end # Range
37
+ end # TheFox
@@ -0,0 +1,23 @@
1
+
2
+ module TheFox
3
+ module Range
4
+ module Lexer
5
+ # }
6
+ class BlockUp < Block
7
+ def initialize(level)
8
+ super(level)
9
+ level.dec
10
+ # puts '-> BlockUp.initialize(%s)' % [level.inspect]
11
+ # puts '-> BlockUp.initialize()'
12
+ end
13
+
14
+ # :nocov:
15
+ def inspect()
16
+ 'BlockUp(%s)' % [@level.level]
17
+ # 'BlockUp()'
18
+ end
19
+ # :nocov:
20
+ end # BlockUp
21
+ end # Lexer
22
+ end # Range
23
+ end # TheFox
@@ -0,0 +1,73 @@
1
+
2
+ module TheFox
3
+ module Range
4
+ module Lexer
5
+ class Collection
6
+ def initialize(items = nil)
7
+ # puts '-> Collection.initialize()'
8
+ @items = items.to_a
9
+ @block_level = 0
10
+ end
11
+
12
+ # :nocov:
13
+ def inspect()
14
+ 'Collection(L=%d %s)' % [
15
+ @items.length,
16
+ @items.map{ |i| i.inspect }
17
+ ]
18
+ end
19
+ # :nocov:
20
+
21
+ def items()
22
+ @items
23
+ end
24
+
25
+ def curr()
26
+ @items.last
27
+ end
28
+
29
+ def prev()
30
+ @items[-2]
31
+ end
32
+
33
+ def is_empty()
34
+ @items.length == 0
35
+ end
36
+
37
+ def length()
38
+ @items.length
39
+ end
40
+
41
+ def push(item)
42
+ # puts '-> %s.push(%s)' % [self.inspect, item.inspect]
43
+ if item.nil?
44
+ return
45
+ end
46
+
47
+ # Prev
48
+ org_prev_item = item.prev_item
49
+ prev_item = @items.last
50
+
51
+ # Dup
52
+ curr_item = item.dup
53
+ @items.push(curr_item)
54
+
55
+ # Chain
56
+ curr_item.chain(prev_item)
57
+ curr_item.org_prev_item = org_prev_item
58
+
59
+ if curr_item.class.keep_nonce_on_dup
60
+ curr_item.nonce = item.nonce
61
+ end
62
+ if curr_item.class.keep_instance_id_on_dup
63
+ curr_item.instance_id = item.instance_id
64
+ end
65
+ end
66
+
67
+ def pop()
68
+ @items.pop
69
+ end
70
+ end # Collection
71
+ end # Lexer
72
+ end # Range
73
+ end # TheFox