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.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: da29c60568cd97ae87c97b6d299215f77c4ab55ad711bbae6793d762b441fcce
4
- data.tar.gz: 1a31f430986f74719a80e3900152acfb7b714f553a1b26204dc6b615f2f7455e
3
+ metadata.gz: a20be9c295afd672782bd04e2ab56b507fa81cf0f66e89c7557b1d88dc527687
4
+ data.tar.gz: b5bb8440e0df05a68571e9fa957f6e13e904a50697b34215383c1bd209eea5c8
5
5
  SHA512:
6
- metadata.gz: 7f014e0cfd460e98cec083744b72a40bdd73d4b2558ce921c7ac003b0aad7eadd9f73deafc1a8bff5392206eabb51b9f8442b8f034c512227b4afc7ad94622bc
7
- data.tar.gz: f559019dcc8cb52656b785b71db0fd91cfc786b7246b22c4b533a7b5584317ac9114f0b32c0de38c1a2ce277fe7ff8ec231fdbebb1e436b3c602d7775644957d
6
+ metadata.gz: 7aef25246b059342d994fbb7dd981f16a962abed342a474611d38acc8878d9487673286b4f802ed8a791eec92cfcc34189fa63fe2b9e5965ad16e2dbaf4022e6
7
+ data.tar.gz: 363c224dade536a709cc24f7eee8cdaf0a86d39a1ab676e80bd6b7f1cad2462f6f70e52f39c29f9e3904313bba93d24b4c54b3b7dfec749f06a26920d9a13601
@@ -18,7 +18,6 @@ jobs:
18
18
  strategy:
19
19
  matrix:
20
20
  ruby-version:
21
- - '2.4'
22
21
  - '2.5'
23
22
  - '2.6'
24
23
  - '2.7'
data/CHANGELOG-v2.md CHANGED
@@ -4,5 +4,5 @@
4
4
 
5
5
  - Removed deprecated `Array.resolve_range_str`.
6
6
  - Removed deprecated `String.resolve_range`.
7
- - Drop Ruby version 2.3 support.
7
+ - Dropped support for Ruby version 2.3.
8
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
@@ -47,3 +47,9 @@ require 'thefox-ext'
47
47
  ## Project Links
48
48
 
49
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,10 +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
 
7
- s = '99-110/4'
8
- s = '99-110/*'
9
- rr = TheFox::Range::Resolver.new(s)
6
+ rr = TheFox::Range::Resolver.new(ARGV.join(' '))
10
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/lib/thefox-ext.rb CHANGED
@@ -10,16 +10,19 @@ require 'thefox-ext/ext/string'
10
10
  require 'thefox-ext/ext/true'
11
11
 
12
12
  require 'thefox-ext/console'
13
+
14
+ # Resolver
13
15
  require 'thefox-ext/range/resolver'
14
16
  require 'thefox-ext/range/lexer/lexer'
17
+ require 'thefox-ext/range/lexer/collection'
15
18
  require 'thefox-ext/range/lexer/base'
16
- require 'thefox-ext/range/lexer/scope'
17
- require 'thefox-ext/range/lexer/separator'
18
- require 'thefox-ext/range/lexer/operator'
19
+ require 'thefox-ext/range/lexer/block_level'
19
20
  require 'thefox-ext/range/lexer/block'
20
21
  require 'thefox-ext/range/lexer/block_down'
21
22
  require 'thefox-ext/range/lexer/block_up'
22
- require 'thefox-ext/range/lexer/block_stack'
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'
23
27
  require 'thefox-ext/range/lexer/range'
24
28
  require 'thefox-ext/range/lexer/interval'
25
- require 'thefox-ext/range/lexer/number'
@@ -3,25 +3,63 @@ module TheFox
3
3
  module Range
4
4
  module Lexer
5
5
  class Base
6
+ @@instance_id = 0
7
+
6
8
  def initialize(symbole = nil)
7
9
  # puts '-> Base.initialize'
10
+
11
+ @@instance_id += 1
12
+ @instance_id = @@instance_id
13
+ @nonce = Base.generate_nonce()
8
14
  @symbole = symbole
9
15
  @prev_item = nil
16
+ @org_prev_item = nil
10
17
  @next_item = nil
11
18
 
12
19
  @parent_item = nil
20
+ #@parent_scope = nil
13
21
  @children = []
14
22
  end
15
23
 
16
- def chain(item)
17
- self.next_item = item
18
- item.prev_item = self
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
19
50
  end
20
51
 
21
52
  def symbole()
22
53
  @symbole
23
54
  end
24
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
+
25
63
  def prev_item()
26
64
  @prev_item
27
65
  end
@@ -53,16 +91,33 @@ module Lexer
53
91
  @children.push(child)
54
92
  end
55
93
  def has_children()
56
- @children.length > 1
94
+ @children.length > 0
57
95
  end
58
96
 
59
97
  def dup()
60
98
  # puts '-> Base.dup'
61
99
  o = super()
100
+ o.nonce = Base.generate_nonce()
62
101
  o.prev_item = nil
63
102
  o.next_item = nil
64
103
  o
65
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
66
121
  end # Base
67
122
  end # Lexer
68
123
  end # Range
@@ -3,7 +3,16 @@ module TheFox
3
3
  module Range
4
4
  module Lexer
5
5
  # { }
6
- class Block < Scope
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
7
16
  end # Block
8
17
  end # Lexer
9
18
  end # Range
@@ -5,14 +5,18 @@ module Lexer
5
5
  # {
6
6
  class BlockDown < Block
7
7
  def initialize(level)
8
- super()
9
- # puts '-> BlockDown.initialize(%d)' % [level]
10
- @level = level
8
+ level.inc
9
+ super(level)
10
+ # puts '-> BlockDown.initialize(%s)' % [level.inspect]
11
11
  end
12
12
 
13
13
  # :nocov:
14
14
  def inspect()
15
- 'BlockDown(%d)' % [@level]
15
+ 'BlockDown(%s)' % [@level.level]
16
+ # if @prev_item.nil?
17
+ # else
18
+ # 'BlockDown(%s <%s)' % [@level.inspect, @prev_item.inspect]
19
+ # end
16
20
  end
17
21
  # :nocov:
18
22
  end # BlockDown
@@ -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
@@ -5,14 +5,16 @@ module Lexer
5
5
  # }
6
6
  class BlockUp < Block
7
7
  def initialize(level)
8
- super()
9
- # puts '-> BlockUp.initialize(%d)' % [level]
10
- @level = level
8
+ super(level)
9
+ level.dec
10
+ # puts '-> BlockUp.initialize(%s)' % [level.inspect]
11
+ # puts '-> BlockUp.initialize()'
11
12
  end
12
13
 
13
14
  # :nocov:
14
15
  def inspect()
15
- 'BlockUp(%d)' % [@level]
16
+ 'BlockUp(%s)' % [@level.level]
17
+ # 'BlockUp()'
16
18
  end
17
19
  # :nocov:
18
20
  end # BlockUp
@@ -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
@@ -1,32 +1,41 @@
1
1
 
2
2
  module TheFox
3
- module Range
4
- module Lexer
5
- # /n
6
- class Interval < Base
7
- def initialize()
8
- super()
9
- # puts '-> Interval.initialize()'
10
- @number = nil
11
- end
3
+ module Range
4
+ module Lexer
5
+ # x-y/n
6
+ class Interval < Base
7
+ def initialize()
8
+ super()
9
+ # puts '-> Interval.initialize()'
10
+ @number = nil
11
+ end
12
12
 
13
- # :nocov:
14
- def inspect()
15
- if @number.nil?
16
- 'Interval()'
17
- else
18
- 'Interval(%s)' % [@number.inspect]
19
- end
13
+ # :nocov:
14
+ def inspect()
15
+ if @number.nil?
16
+ 'Interval()'
17
+ else
18
+ 'Interval(%s)' % [@number.char]
20
19
  end
21
- # :nocov:
20
+ end
21
+ # :nocov:
22
22
 
23
- def number=(number)
24
- @number = number
25
- end
26
- def number()
27
- @number
23
+ def number()
24
+ @number
25
+ end
26
+ def number=(number)
27
+ @number = number.dup
28
+ end
29
+
30
+ def resolve()
31
+ # puts '-> %s.resolve' % [inspect]
32
+ if @number.nil?
33
+ 1
34
+ else
35
+ @number.resolve
28
36
  end
29
- end # Interval
30
- end # Lexer
31
- end # Range
32
- end # TheFox
37
+ end
38
+ end # Interval
39
+ end # Lexer
40
+ end # Range
41
+ end # TheFox