strings-parser 1.0.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 ADDED
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA256:
3
+ metadata.gz: cf0abe5c58191f03dac6865234464e4652f981ff3c5eceb7150018a63635cbc7
4
+ data.tar.gz: 75722c85cdd30c97509e54560ad135c87811a66615e03cddfba787c18aebe9ee
5
+ SHA512:
6
+ metadata.gz: e611e02580abf73cd18dc14282a46f4b08dbc73eb71df88be3542814e29d161cd870f2f300ad3befcf1e16fbbacbad22f6a60a13d09091591613ef4f51587832
7
+ data.tar.gz: c065b1702dba72e5cdbf1d7da9cf31a84b7bfc9514ed6daa1ebd208c53b360d8ad836b7197c08359d5e282c7c215d075c839f98812bcb3128866fae315afe1fc
@@ -0,0 +1,65 @@
1
+ require 'strscan'
2
+ require 'byebug'
3
+
4
+ module StringsParser
5
+ class Tokenizer
6
+ attr_reader :tokens
7
+
8
+ def initialize(content)
9
+ @buffer = StringScanner.new(content)
10
+ @tokens = []
11
+ tokenize
12
+ end
13
+
14
+ def tokenize
15
+ until @buffer.eos?
16
+ skip_whitespaces
17
+ tokenize_element
18
+ end
19
+ end
20
+
21
+ def last
22
+ @tokens.last
23
+ end
24
+
25
+ def skip_whitespaces
26
+ @buffer.skip(/\s+/)
27
+ end
28
+
29
+ def tokenize_element
30
+ case @buffer.peek(1)
31
+ when '"'
32
+ tokens << find_string
33
+ when '='
34
+ tokens << find_assign
35
+ when ';'
36
+ find_semicolon
37
+ else
38
+ return if @buffer.eos?
39
+ fail
40
+ end
41
+ end
42
+
43
+ def find_string
44
+ @buffer.getch
45
+ string = @buffer.scan_until(/[^\\]"/)
46
+
47
+ klass = if last.is_a?(Tokens::Assign)
48
+ Tokens::Value
49
+ else
50
+ Tokens::Key
51
+ end
52
+
53
+ klass.new(string.sub('"', ''))
54
+ end
55
+
56
+ def find_assign
57
+ @buffer.getch
58
+ Tokens::Assign.new
59
+ end
60
+
61
+ def find_semicolon
62
+ @buffer.getch
63
+ end
64
+ end
65
+ end
@@ -0,0 +1,9 @@
1
+ module StringsParser
2
+ module Tokens
3
+ class Assign
4
+ def ==(other)
5
+ other.is_a?(self.class)
6
+ end
7
+ end
8
+ end
9
+ end
@@ -0,0 +1,15 @@
1
+ module StringsParser
2
+ module Tokens
3
+ class Key
4
+ attr_reader :key
5
+
6
+ def initialize(key)
7
+ @key = key
8
+ end
9
+
10
+ def ==(other)
11
+ key = other.key
12
+ end
13
+ end
14
+ end
15
+ end
@@ -0,0 +1,15 @@
1
+ module StringsParser
2
+ module Tokens
3
+ class Value
4
+ attr_reader :value
5
+
6
+ def initialize(value)
7
+ @value = value
8
+ end
9
+
10
+ def ==(other)
11
+ value = other.value
12
+ end
13
+ end
14
+ end
15
+ end
@@ -0,0 +1,5 @@
1
+ # frozen_string_literal: true
2
+
3
+ module StringsParser
4
+ VERSION = '1.0.1'
5
+ end
@@ -0,0 +1,12 @@
1
+ # frozen_string_literal: true
2
+
3
+ require_relative 'strings-parser/version'
4
+ require_relative 'strings-parser/tokenizer'
5
+ require_relative 'strings-parser/tokens/assign'
6
+ require_relative 'strings-parser/tokens/key'
7
+ require_relative 'strings-parser/tokens/value'
8
+
9
+ module StringsParser
10
+ class Error < StandardError
11
+ end
12
+ end
metadata ADDED
@@ -0,0 +1,52 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: strings-parser
3
+ version: !ruby/object:Gem::Version
4
+ version: 1.0.1
5
+ platform: ruby
6
+ authors:
7
+ - Damian Rzeszot
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2023-11-19 00:00:00.000000000 Z
12
+ dependencies: []
13
+ description: ''
14
+ email:
15
+ - my.fucking.alias@icloud.com
16
+ executables: []
17
+ extensions: []
18
+ extra_rdoc_files: []
19
+ files:
20
+ - lib/strings-parser.rb
21
+ - lib/strings-parser/tokenizer.rb
22
+ - lib/strings-parser/tokens/assign.rb
23
+ - lib/strings-parser/tokens/key.rb
24
+ - lib/strings-parser/tokens/value.rb
25
+ - lib/strings-parser/version.rb
26
+ homepage: https://github.com/rzeszot/strings-parser-gem
27
+ licenses:
28
+ - MIT
29
+ metadata:
30
+ homepage_uri: https://github.com/rzeszot/strings-parser-gem
31
+ source_code_uri: https://github.com/rzeszot/strings-parser-gem
32
+ changelog_uri: https://github.com/rzeszot/strings-parser-gem/CHANGELOG.md
33
+ post_install_message:
34
+ rdoc_options: []
35
+ require_paths:
36
+ - lib
37
+ required_ruby_version: !ruby/object:Gem::Requirement
38
+ requirements:
39
+ - - ">="
40
+ - !ruby/object:Gem::Version
41
+ version: 2.6.0
42
+ required_rubygems_version: !ruby/object:Gem::Requirement
43
+ requirements:
44
+ - - ">="
45
+ - !ruby/object:Gem::Version
46
+ version: '0'
47
+ requirements: []
48
+ rubygems_version: 3.0.3.1
49
+ signing_key:
50
+ specification_version: 4
51
+ summary: ''
52
+ test_files: []