tcepsni 0.3.0 → 0.3.1
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 +4 -4
- data/CHANGELOG.md +5 -0
- data/README.md +2 -2
- data/lib/tcepsni/parser.rb +28 -24
- data/lib/tcepsni/vendor/rails/paths/root.rb +5 -5
- data/lib/tcepsni/vendor/string_scanner.rb +1 -1
- data/lib/tcepsni/version.rb +1 -1
- data/lib/tcepsni.rb +2 -2
- data/tcepsni.gemspec +13 -1
- metadata +9 -3
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 40d96c10a7e7729b0c37648bedd7b693dff04602d9bc3ef9794e695d48986864
|
4
|
+
data.tar.gz: f6316e6ceba71e2a7cee7d99140357a08e52c598e31324016159d301ffb791e5
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: e3235426ddaeed30dd132dfc2f904259abe5da867aa4e17aa683d43d42112d8ded52575e4cb3e218c39fcc0f4f1a84175594279f5e07e221da08a5d03afe79f7
|
7
|
+
data.tar.gz: 3e79b0c3e3f29d5044cdc7051e980db49d1a49fd54a7fa8299386056f38864887fe04238319177d5fa9f0bbe4bd07c773a9c4fe279b2875b80fdf7e9f5bcbac8
|
data/CHANGELOG.md
CHANGED
data/README.md
CHANGED
@@ -15,7 +15,7 @@ Tcepsni has a parsing method `Tcepsni.parse(str)`, which returns a parsed Ruby o
|
|
15
15
|
## Development
|
16
16
|
|
17
17
|
After checking out the repo, run `bin/setup` to install dependencies.
|
18
|
-
Then, run `rake test
|
18
|
+
Then, run `rake test` to run the tests.
|
19
19
|
You can also run `bin/console` for an interactive prompt that will allow you to experiment.
|
20
20
|
|
21
21
|
To install this gem onto your local machine, run `bundle exec rake install`.
|
@@ -27,7 +27,7 @@ Bug reports and pull requests are welcome.
|
|
27
27
|
|
28
28
|
## License
|
29
29
|
|
30
|
-
Copyright 2023 gemmaro.
|
30
|
+
Copyright 2023, 2024 gemmaro.
|
31
31
|
|
32
32
|
Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License.
|
33
33
|
You may obtain a copy of the License at [Apache Software Foundation - Apache License, Version 2.0][asl].
|
data/lib/tcepsni/parser.rb
CHANGED
@@ -27,31 +27,27 @@ module Tcepsni
|
|
27
27
|
elsif @scanner.skip('#<')
|
28
28
|
pos = @scanner.pos
|
29
29
|
@vendors.select { |vendor| vendor.object? }.each do |vendor|
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
|
34
|
-
next
|
35
|
-
end
|
30
|
+
@scanner.pos = pos
|
31
|
+
return vendor.parse(self)
|
32
|
+
rescue Error
|
33
|
+
next
|
36
34
|
end
|
37
35
|
@scanner.pos = pos
|
38
36
|
parse_object
|
39
|
-
|
40
|
-
|
41
|
-
|
42
|
-
|
43
|
-
|
44
|
-
|
45
|
-
|
46
|
-
|
47
|
-
|
48
|
-
@scanner[:zone])
|
49
|
-
else
|
50
|
-
int
|
51
|
-
end
|
37
|
+
elsif (digits = @scanner.scan(/\d+/))
|
38
|
+
int = Integer(digits)
|
39
|
+
if @scanner.skip('.')
|
40
|
+
int2 = parse_integer
|
41
|
+
Float("#{int}.#{int2}")
|
42
|
+
elsif digits.size == 4 && @scanner.skip(/-(?<month>[01]\d)-(?<day>\d\d) (?<hour>[012]\d):(?<minute>[0-5]\d):(?<second>[0-5]\d) (?<zone>[+-]\d\d\d\d)/)
|
43
|
+
Time.new(Integer(int), @scanner[:month], @scanner[:day],
|
44
|
+
@scanner[:hour], @scanner[:minute], @scanner[:second],
|
45
|
+
@scanner[:zone])
|
52
46
|
else
|
53
|
-
|
47
|
+
int
|
54
48
|
end
|
49
|
+
else
|
50
|
+
parse_class
|
55
51
|
end
|
56
52
|
end
|
57
53
|
|
@@ -84,7 +80,11 @@ module Tcepsni
|
|
84
80
|
def parse_array
|
85
81
|
result = []
|
86
82
|
until @scanner.eos?
|
87
|
-
|
83
|
+
begin
|
84
|
+
result << parse_expression
|
85
|
+
rescue StandardError
|
86
|
+
break
|
87
|
+
end
|
88
88
|
@scanner.skip(', ') or break
|
89
89
|
end
|
90
90
|
@scanner.skip(']') or raise Error, "no array closer: #{@scanner.inspect}"
|
@@ -94,7 +94,11 @@ module Tcepsni
|
|
94
94
|
def parse_hash
|
95
95
|
result = {}
|
96
96
|
until @scanner.eos?
|
97
|
-
key =
|
97
|
+
key = begin
|
98
|
+
parse_expression
|
99
|
+
rescue StandardError
|
100
|
+
break
|
101
|
+
end
|
98
102
|
@scanner.skip('=>') or raise Error, 'no hash arrow'
|
99
103
|
value = parse_expression
|
100
104
|
result[key] = value
|
@@ -112,7 +116,7 @@ module Tcepsni
|
|
112
116
|
namespaces << parse_capitalized_identifier
|
113
117
|
end
|
114
118
|
*namespaces, name = namespaces
|
115
|
-
Tcepsni::Class.new(name
|
119
|
+
Tcepsni::Class.new(name:, namespaces:)
|
116
120
|
end
|
117
121
|
|
118
122
|
def parse_capitalized_identifier
|
@@ -129,7 +133,7 @@ module Tcepsni
|
|
129
133
|
else
|
130
134
|
memory_reference = parse_memory_reference
|
131
135
|
attributes = parse_attributes
|
132
|
-
Tcepsni::Object.new(klass
|
136
|
+
Tcepsni::Object.new(klass:, memory_reference:, attributes:)
|
133
137
|
end
|
134
138
|
end
|
135
139
|
|
@@ -15,11 +15,11 @@ module Tcepsni
|
|
15
15
|
def self.parse(parser)
|
16
16
|
parser.skip('Rails::Paths::Root') or raise Error, 'this is not Rails::Paths::Root'
|
17
17
|
memory_reference = parser.parse_memory_reference
|
18
|
-
if parser.skip(' ...>')
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
18
|
+
attributes = if parser.skip(' ...>')
|
19
|
+
{}
|
20
|
+
else
|
21
|
+
parser.parse_attributes
|
22
|
+
end
|
23
23
|
Tcepsni::Vendor::Rails::Paths::Root.new(memory_reference, attributes)
|
24
24
|
end
|
25
25
|
|
@@ -20,7 +20,7 @@ module Tcepsni
|
|
20
20
|
parser.skip(' @ "') or raise Error, "no string scanner mark in string: #{parser.scanner.inspect}"
|
21
21
|
rest = parser.parse_string
|
22
22
|
parser.skip('>') or raise Error, 'no string scanner closer'
|
23
|
-
Tcepsni::Vendor::StringScanner.new(pos
|
23
|
+
Tcepsni::Vendor::StringScanner.new(pos:, total:, scanned:, rest:)
|
24
24
|
end
|
25
25
|
|
26
26
|
def self.dependencies
|
data/lib/tcepsni/version.rb
CHANGED
data/lib/tcepsni.rb
CHANGED
@@ -2,10 +2,10 @@ require_relative 'tcepsni/version'
|
|
2
2
|
require_relative 'tcepsni/parser'
|
3
3
|
|
4
4
|
module Tcepsni
|
5
|
-
|
5
|
+
Error = Class.new(StandardError)
|
6
6
|
|
7
7
|
def self.parse(str, vendors: [])
|
8
|
-
Parser.new(str, vendors:
|
8
|
+
Parser.new(str, vendors:).parse
|
9
9
|
end
|
10
10
|
|
11
11
|
class Class
|
data/tcepsni.gemspec
CHANGED
@@ -9,10 +9,22 @@ Gem::Specification.new do |spec|
|
|
9
9
|
spec.summary = 'inspected Ruby objects parser'
|
10
10
|
spec.description = 'Tcepsni gem is a parser library for inspected strings of Ruby objects.'
|
11
11
|
spec.license = 'Apache-2.0'
|
12
|
+
|
13
|
+
spec.homepage = 'https://codeberg.org/gemmaro/tcepsni'
|
14
|
+
|
12
15
|
spec.required_ruby_version = '>= 3.1.0'
|
13
16
|
|
14
17
|
spec.files = Dir['lib/**/*.rb'] + Dir['sig/**/*.rbs'] +
|
15
18
|
['CHANGELOG.md', 'tcepsni.gemspec', 'README.md', 'LICENSE.txt']
|
16
19
|
spec.require_paths = ['lib']
|
17
|
-
|
20
|
+
|
21
|
+
spec.metadata = {
|
22
|
+
'rubygems_mfa_required' => 'true',
|
23
|
+
'bug_tracker_uri' => 'https://codeberg.org/gemmaro/tcepsni/issues',
|
24
|
+
'changelog_uri' => 'https://codeberg.org/gemmaro/tcepsni/src/branch/main/CHANGELOG.md',
|
25
|
+
'documentation_uri' => 'https://www.rubydoc.info/gems/tcepsni',
|
26
|
+
'homepage_uri' => spec.homepage,
|
27
|
+
'source_code_uri' => spec.homepage,
|
28
|
+
'wiki_uri' => 'https://codeberg.org/gemmaro/tcepsni/wiki'
|
29
|
+
}
|
18
30
|
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: tcepsni
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.3.
|
4
|
+
version: 0.3.1
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- gemmaro
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2024-07-21 00:00:00.000000000 Z
|
12
12
|
dependencies: []
|
13
13
|
description: Tcepsni gem is a parser library for inspected strings of Ruby objects.
|
14
14
|
email:
|
@@ -31,11 +31,17 @@ files:
|
|
31
31
|
- sig/tcepsni.gen.rbs
|
32
32
|
- sig/tcepsni.rbs
|
33
33
|
- tcepsni.gemspec
|
34
|
-
homepage:
|
34
|
+
homepage: https://codeberg.org/gemmaro/tcepsni
|
35
35
|
licenses:
|
36
36
|
- Apache-2.0
|
37
37
|
metadata:
|
38
38
|
rubygems_mfa_required: 'true'
|
39
|
+
bug_tracker_uri: https://codeberg.org/gemmaro/tcepsni/issues
|
40
|
+
changelog_uri: https://codeberg.org/gemmaro/tcepsni/src/branch/main/CHANGELOG.md
|
41
|
+
documentation_uri: https://www.rubydoc.info/gems/tcepsni
|
42
|
+
homepage_uri: https://codeberg.org/gemmaro/tcepsni
|
43
|
+
source_code_uri: https://codeberg.org/gemmaro/tcepsni
|
44
|
+
wiki_uri: https://codeberg.org/gemmaro/tcepsni/wiki
|
39
45
|
post_install_message:
|
40
46
|
rdoc_options: []
|
41
47
|
require_paths:
|