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

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: fe82bfca3c074a12655b24a87c75e7418b38962c86e035acc6035961f52381d1
4
- data.tar.gz: 83a7de4ec884aa2d7a244ee25e9a8d55e665e14fdf2469ab190a29792c199c57
3
+ metadata.gz: 2aaea645cf34677efc2185362e2073872096124d6026431188f0424098bffdda
4
+ data.tar.gz: ef43f25fb99bdeeca8fc84188f2fdd470576a485700681156e0a412e7e4c0fe7
5
5
  SHA512:
6
- metadata.gz: a884c7bb42c2f7f8de99f40f44079ed644d07c204c49fd2321b6b96aab6eb9b33eb197ff642a5e87b0d8718f55c3e622d9eebd1c4ec9bef206b45fa0445f0bf0
7
- data.tar.gz: 1abf14d71cab30e93f7ea0024514f1a62536109148e0107dc7007ea9502423374f2b037eaff7369f0bf2b3e88d1ffb0b1d57db81fc373cfcff255c2ce18375e5
6
+ metadata.gz: 22d9a834752150107d06667301eb3d1e02be0a8795cf32c12bb01083ffcf020f8bce7c6e245cd0bbf48dcf7f919b038ba5c4ae4e945a6908b73e3f1c3d6f4797
7
+ data.tar.gz: fe3338ce08dc5de0f18e982bc11eeb5db31fb5c8eb4cbb82a168e9952ba46752db6222796cd488295b0ac586bce1fe64f30c0a99d27d2cfd2e7d1e5f15f8fbc1
@@ -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
@@ -1,8 +1,8 @@
1
1
  # Release Notes for Extended Ruby Classes v2.x
2
2
 
3
- ## v2.0.0 [unreleased]
3
+ ## v2.0.0
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
@@ -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:
@@ -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