thefox-ext 2.0.0.pre.rc.2 → 3.0.0.pre.rc.2

Sign up to get free protection for your applications and to get access to all the features.
@@ -3,6 +3,263 @@ module TheFox
3
3
  module Range
4
4
  module Lexer
5
5
  class Scope < Base
6
+ def initialize(items = nil, parent_scope = nil, level = 0)
7
+ super()
8
+
9
+ @item_collection = Collection.new(items)
10
+ @parent_scope = parent_scope
11
+ @level = level
12
+ @ref_item = nil
13
+
14
+ # puts '%s-> Scope(#%s).initialize(p=%s lev=%d)'.colorize(:red) % [' ' * (@level * 2), @instance_id, @parent_scope.inspect, @level]
15
+ end
16
+
17
+ # :nocov:
18
+ def name()
19
+ 'Scope(#%s)' % [@instance_id]
20
+ end
21
+ def inspect()
22
+ 'Scope(#%s len=%d)' % [@instance_id, @item_collection.length]
23
+ end
24
+ # :nocov:
25
+
26
+ def push(item)
27
+ # puts '%s-> %s.push(%s) -> PS=%s PRI=%s'.colorize(:green) % [' ' * (@level * 2),
28
+ # inspect,
29
+ # item.inspect,
30
+ # @parent_scope.inspect,
31
+ # @parent_scope.ref_item.inspect,
32
+ # ]
33
+ @item_collection.push(item)
34
+ end
35
+
36
+ def items()
37
+ @item_collection.items
38
+ end
39
+
40
+ def curr()
41
+ @item_collection.curr
42
+ end
43
+
44
+ def prev()
45
+ @item_collection.prev
46
+ end
47
+
48
+ def parent_scope()
49
+ @parent_scope
50
+ end
51
+ def parent_scope=(parent_scope)
52
+ @parent_scope = parent_scope
53
+ end
54
+
55
+ def ref_item()
56
+ @ref_item
57
+ end
58
+ def ref_item=(ref_item)
59
+ # puts '%s--> Set Ref Item: %s'.colorize(:green) % [' ' * (@level * 2), inspect]
60
+ ref_item.is_ref_item = true
61
+ @ref_item = ref_item
62
+ end
63
+
64
+ def resolve()
65
+ # puts '-> %s.resolve(%d)' % [self.inspect, @level]
66
+
67
+ # puts '%s-> SL1: %s P=%s' % [' ' * (@level * 2), inspect, @parent_item.inspect]
68
+
69
+ scopes = Collection.new([Scope.new(nil, self, @level + 1)])
70
+ block_stack = Collection.new()
71
+ parent_item = nil
72
+ @item_collection.items.each do |item|
73
+ # puts '%s-> SL1 Item: %s' % [' ' * (@level * 2), item.inspect]
74
+
75
+ push_to_scope = false
76
+
77
+ case item
78
+ when Separator
79
+ if block_stack.length == 0
80
+ scopes.push(Scope.new(nil, self, @level + 1))
81
+ else
82
+ push_to_scope = true
83
+ end
84
+ when BlockDown
85
+ if block_stack.length == 0
86
+ # puts '%s--> BlockDown: Curr=%s'.colorize(:green) % [' ' * (@level * 2),
87
+ # scopes.curr.curr.inspect,
88
+ # ]
89
+
90
+ prev_item = scopes.curr.curr
91
+
92
+ scopes.push(Scope.new(nil, self, @level + 1))
93
+ # scopes.curr.ref_item = item.prev_item
94
+ scopes.curr.ref_item = prev_item
95
+
96
+ # puts '%s--> BlockDown: PrevItem=%s'.colorize(:green) % [' ' * (@level * 2),
97
+ # scopes.curr.ref_item.inspect,
98
+ # ]
99
+ else
100
+ push_to_scope = true
101
+ end
102
+
103
+ # Block Stack
104
+ block_stack.push(item)
105
+ when BlockUp
106
+ block_stack.pop
107
+
108
+ prev_ref_item = scopes.curr.ref_item
109
+ # puts '-> BlockUp: %s' % [prev_ref_item.inspect]
110
+
111
+ # TODO: THIS!!!!
112
+ scopes.push(Scope.new(nil, self, @level + 1))
113
+ scopes.curr.ref_item = prev_ref_item
114
+ else
115
+ push_to_scope = true
116
+ end # case item
117
+
118
+ if push_to_scope
119
+ # puts '%s--> Push Item: %s PS=%s PI=%s RI=%s,%s' % [' ' * (@level * 2),
120
+ # item.inspect,
121
+ # scopes.curr.parent_scope.inspect,
122
+ # scopes.curr.parent_item.inspect,
123
+ # @ref_item.inspect,
124
+ # scopes.curr.ref_item.inspect,
125
+ # ]
126
+ scopes.curr.push(item)
127
+ scopes.curr.curr.parent_item = self
128
+ # puts '%s--> Pushed Item: %s' % [' ' * (@level * 2), item.inspect]
129
+ end
130
+ end # @item_collection.items
131
+
132
+ # puts
133
+ # puts '%s-> Scopes: %s'.colorize(:blue) % [' ' * (@level * 2), scopes.inspect]
134
+ # scopes.items.each do |scope|
135
+ # puts scope.inspect.colorize(:blue)
136
+ # puts scope.items.map{ |i| i.inspect }.to_s.colorize(:blue)
137
+ # end
138
+
139
+ if scopes.length > 1
140
+ resolved = []
141
+ scopes.items.each do |scope|
142
+ resolved.push(scope.resolve)
143
+ end
144
+ resolved
145
+ else
146
+ # puts
147
+ # puts '%s-> SL1 Items' % [' ' * (@level * 2)]
148
+ # pp scopes.curr.items.map{ |item| item.inspect }
149
+
150
+ # puts '%s-> SL2 ' % [' ' * (@level * 2)]
151
+ item_collection1 = Collection.new
152
+ scopes.curr.items.each do |item|
153
+ # puts '%s-> SL2 Item: %s (P=%s)' % [
154
+ # ' ' * (@level * 2),
155
+ # item.inspect,
156
+ # item.parent_item.inspect,
157
+ # ]
158
+
159
+ case item
160
+ when Number
161
+ # puts '--> Its %s' % [item.inspect]
162
+ if item.next_item.is_a?(Range) || item.prev_item.is_a?(Range)
163
+ # Skip Range
164
+ # puts '--> Skip Range'
165
+ elsif item.prev_item.is_a?(Interval)
166
+ # Skip Interval
167
+ # puts '%s--> Skip Interval' % [' ' * (@level * 2)]
168
+ # item.prev_item.next_item = nil
169
+ # item.parent_item = item.prev_item
170
+ # item.prev_item = nil
171
+ # item.next_item = nil
172
+ elsif item.next_item.is_a?(Operator)
173
+ # Skip Operator
174
+ # puts '--> Skip Operator'
175
+ elsif item.has_children
176
+ # Skip
177
+ # puts '--> Skip Has Children'
178
+ elsif item.is_ref_item
179
+ # puts '--> Skip Ref Item'
180
+ else
181
+ # puts '--> Push'
182
+ # puts '--> Push: %s' % [item.inspect]
183
+ item_collection1.push(item)
184
+ end
185
+ when Range
186
+ if item.prev_item.is_a?(Number) && item.next_item.is_a?(Number)
187
+ # puts '--> Range normal'
188
+ item_collection1.push(item)
189
+ item_collection1.curr.left_item = item.prev_item
190
+ item_collection1.curr.right_item = item.next_item
191
+
192
+ # 1-10/3
193
+ # item.prev_item Number
194
+ # item Range
195
+ # item.next_item Number
196
+ # item.next_item.next_item Interval
197
+ # item.next_item.next_item.next_item Number
198
+
199
+ interval_item = item.next_item.next_item
200
+ if interval_item.is_a?(Interval)
201
+ item_collection1.curr.interval = interval_item
202
+ item_collection1.curr.interval.number = item.next_item.next_item.next_item
203
+ item_collection1.curr.interval.number.parent_item = item_collection1.curr.interval
204
+ end
205
+ else
206
+ raise 'Invalid Range: %s %s' % [
207
+ item.prev_item.inspect,
208
+ item.next_item.inspect,
209
+ ]
210
+ end
211
+ when Interval
212
+ # Skip
213
+ when Operator
214
+ if item_collection1.curr.is_a?(Range)
215
+ # puts '%s-> Operator, Curr Range'.colorize(:cyan) % [' ' * (@level * 2)]
216
+
217
+ if item_collection1.curr.right_item.is_a?(Number)
218
+ item_collection1.curr.right_item.inc
219
+ end
220
+ elsif item.prev_item.is_a?(Number)
221
+ # puts '%s-> Operator, Number'.colorize(:cyan) % [' ' * (@level * 2)]
222
+
223
+ item_collection1.push(Range.new(item.symbole))
224
+ item_collection1.curr.left_item = item.prev_item
225
+ item_collection1.curr.right_item = item.prev_item
226
+ item_collection1.curr.right_item.inc
227
+ elsif item.prev_item.is_a?(Operator)
228
+ # puts '%s-> Operator, Prev Operator'.colorize(:cyan) % [' ' * (@level * 2)]
229
+
230
+ if item_collection1.curr.is_a?(Range)
231
+ if item_collection1.curr.right_item.is_a?(Number)
232
+ item_collection1.curr.right_item.inc
233
+ end
234
+ end
235
+ # else
236
+ # puts '%s-> Operator ELSE: %s' % [' ' * (@level * 2), item.prev_item.inspect]
237
+ end
238
+ else
239
+ item_collection1.push(item)
240
+ end # case item
241
+ end # scopes.curr.items.each
242
+
243
+ # puts '%s-> L3 Items' % [' ' * (@level * 2)]
244
+ # pp item_collection1.items.map{ |item| item.inspect }
245
+
246
+ # puts '%s-> L4 [convert to int]'.colorize(:blue) % [' ' * (@level * 2)]
247
+ items2 = []
248
+ item_collection1.items.each do |item|
249
+ items2.push(item.resolve)
250
+ end
251
+ items2
252
+ end
253
+ end
254
+
255
+ class << self
256
+ def keep_nonce_on_dup()
257
+ true
258
+ end
259
+ def keep_instance_id_on_dup()
260
+ true
261
+ end
262
+ end
6
263
  end # Scope
7
264
  end # Lexer
8
265
  end # Range
@@ -2,7 +2,7 @@
2
2
  module TheFox
3
3
  module Range
4
4
  module Lexer
5
- class Separator < Scope
5
+ class Separator < Base
6
6
  def initialize()
7
7
  super()
8
8
  # puts '-> Separator.initialize()'
@@ -1,6 +1,4 @@
1
1
 
2
- require 'pp'
3
-
4
2
  module TheFox
5
3
  module Range
6
4
  # Resolve a range string to an array.
@@ -15,21 +13,20 @@ module Range
15
13
  # '1{5-7}' -> [15, 16, 17]
16
14
  # '1{1,02}' -> [11, 102]
17
15
  # '2{3{4,5},6}' -> [234, 235, 26]
16
+ # '1-3/1' -> [1, 2, 3]
17
+ # '1-10/2' -> [1, 3, 5, 7, 9]
18
+ # '2{10-20/2}' -> [210, 212, 214, 216, 218, 220]
18
19
  class Resolver
19
20
  def initialize(original = nil)
20
21
  # puts '-> TheFox::Range::Resolver.initialize'
21
- @original = original
22
+ @original = original.to_s
22
23
  end
23
24
 
24
25
  def to_a
25
26
  # puts '-> TheFox::Range::Resolver.to_a'
26
27
 
27
- if @original.is_a?(String)
28
- lexer = Lexer::Lexer.new(@original.split(''))
29
- lexer.resolve
30
- else
31
- []
32
- end
28
+ lexer = Lexer::Lexer.new(@original.to_s.split(''))
29
+ lexer.resolve.flatten
33
30
  end
34
31
  end # Resolver
35
32
  end # Range
@@ -1,8 +1,8 @@
1
1
 
2
2
  module TheFox
3
3
  module Ext
4
- VERSION = '2.0.0-rc.2'
5
- DATE = '2021-04-19'
4
+ VERSION = '3.0.0-rc.2'
5
+ DATE = '2021-04-25'
6
6
  HOMEPAGE = 'https://github.com/TheFox/ext.rb'
7
7
  end
8
8
  end
data/thefox-ext.gemspec CHANGED
@@ -19,9 +19,11 @@ Gem::Specification.new do |spec|
19
19
 
20
20
  spec.files = `git ls-files -z`.split("\x0").reject{ |f| f.match(%r{^(test|spec|features)/}) }
21
21
  spec.require_paths = ['lib']
22
- spec.required_ruby_version = ['>=2.4.0']
22
+ spec.required_ruby_version = ['>=2.5.0']
23
23
 
24
24
  spec.add_development_dependency 'minitest', '~>5.8'
25
25
  spec.add_development_dependency 'simplecov', '~>0.18'
26
26
  spec.add_development_dependency 'simplecov-phpunit', '~>1.0'
27
+ spec.add_development_dependency 'colorize', '~>0.8'
28
+ spec.add_development_dependency 'pry', '~>0.14'
27
29
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: thefox-ext
3
3
  version: !ruby/object:Gem::Version
4
- version: 2.0.0.pre.rc.2
4
+ version: 3.0.0.pre.rc.2
5
5
  platform: ruby
6
6
  authors:
7
7
  - Christian Mayer
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2021-04-19 00:00:00.000000000 Z
11
+ date: 2021-04-25 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: minitest
@@ -52,6 +52,34 @@ dependencies:
52
52
  - - "~>"
53
53
  - !ruby/object:Gem::Version
54
54
  version: '1.0'
55
+ - !ruby/object:Gem::Dependency
56
+ name: colorize
57
+ requirement: !ruby/object:Gem::Requirement
58
+ requirements:
59
+ - - "~>"
60
+ - !ruby/object:Gem::Version
61
+ version: '0.8'
62
+ type: :development
63
+ prerelease: false
64
+ version_requirements: !ruby/object:Gem::Requirement
65
+ requirements:
66
+ - - "~>"
67
+ - !ruby/object:Gem::Version
68
+ version: '0.8'
69
+ - !ruby/object:Gem::Dependency
70
+ name: pry
71
+ requirement: !ruby/object:Gem::Requirement
72
+ requirements:
73
+ - - "~>"
74
+ - !ruby/object:Gem::Version
75
+ version: '0.14'
76
+ type: :development
77
+ prerelease: false
78
+ version_requirements: !ruby/object:Gem::Requirement
79
+ requirements:
80
+ - - "~>"
81
+ - !ruby/object:Gem::Version
82
+ version: '0.14'
55
83
  description: This gem extents some of the basic Ruby classes by missing functionalities.
56
84
  email: christian@fox21.at
57
85
  executables: []
@@ -65,6 +93,7 @@ files:
65
93
  - ".gitignore"
66
94
  - CHANGELOG-v1.md
67
95
  - CHANGELOG-v2.md
96
+ - CHANGELOG-v3.md
68
97
  - Gemfile
69
98
  - LICENSE
70
99
  - README.md
@@ -72,6 +101,7 @@ files:
72
101
  - bin/install.sh
73
102
  - bin/release.sh
74
103
  - bin/setup.sh
104
+ - bin/test.rb
75
105
  - bin/test.sh
76
106
  - bin/uninstall.sh
77
107
  - lib/thefox-ext.rb
@@ -86,8 +116,9 @@ files:
86
116
  - lib/thefox-ext/range/lexer/base.rb
87
117
  - lib/thefox-ext/range/lexer/block.rb
88
118
  - lib/thefox-ext/range/lexer/block_down.rb
89
- - lib/thefox-ext/range/lexer/block_stack.rb
119
+ - lib/thefox-ext/range/lexer/block_level.rb
90
120
  - lib/thefox-ext/range/lexer/block_up.rb
121
+ - lib/thefox-ext/range/lexer/collection.rb
91
122
  - lib/thefox-ext/range/lexer/interval.rb
92
123
  - lib/thefox-ext/range/lexer/lexer.rb
93
124
  - lib/thefox-ext/range/lexer/number.rb
@@ -111,7 +142,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
111
142
  requirements:
112
143
  - - ">="
113
144
  - !ruby/object:Gem::Version
114
- version: 2.4.0
145
+ version: 2.5.0
115
146
  required_rubygems_version: !ruby/object:Gem::Requirement
116
147
  requirements:
117
148
  - - ">"
@@ -1,44 +0,0 @@
1
-
2
- require 'pp'
3
-
4
- module TheFox
5
- module Range
6
- module Lexer
7
- # 0123456789
8
- class BlockStack
9
- def initialize()
10
- # puts '-> BlockStack.initialize()'
11
- @stack = []
12
- end
13
-
14
- # :nocov:
15
- def inspect()
16
- 'BlockStack(%d)' % [@stack.length]
17
- end
18
- # :nocov:
19
-
20
- def push(item)
21
- @stack.push(item)
22
- end
23
-
24
- def pop()
25
- @stack.pop
26
- end
27
-
28
- def curr()
29
- @stack.last
30
- end
31
-
32
- def length()
33
- @stack.length
34
- end
35
-
36
- def add_child(item)
37
- if !@stack.last.nil? && !item.nil?
38
- @stack.last.add_child(item)
39
- end
40
- end
41
- end # BlockStack
42
- end # Lexer
43
- end # Range
44
- end # TheFox