thefox-ext 2.0.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.
@@ -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.
@@ -21,18 +19,14 @@ module Range
21
19
  class Resolver
22
20
  def initialize(original = nil)
23
21
  # puts '-> TheFox::Range::Resolver.initialize'
24
- @original = original
22
+ @original = original.to_s
25
23
  end
26
24
 
27
25
  def to_a
28
26
  # puts '-> TheFox::Range::Resolver.to_a'
29
27
 
30
- if @original.is_a?(String)
31
- lexer = Lexer::Lexer.new(@original.split(''))
32
- lexer.resolve
33
- else
34
- []
35
- end
28
+ lexer = Lexer::Lexer.new(@original.to_s.split(''))
29
+ lexer.resolve.flatten
36
30
  end
37
31
  end # Resolver
38
32
  end # Range
@@ -1,8 +1,8 @@
1
1
 
2
2
  module TheFox
3
3
  module Ext
4
- VERSION = '2.0.0'
5
- DATE = '2021-04-19'
4
+ VERSION = '3.0.0-rc.0'
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
4
+ version: 3.0.0.pre.rc.0
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,12 +142,12 @@ 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
+ - - ">"
118
149
  - !ruby/object:Gem::Version
119
- version: '0'
150
+ version: 1.3.1
120
151
  requirements: []
121
152
  rubygems_version: 3.2.15
122
153
  signing_key:
@@ -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