kdl 0.1.2 → 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 +4 -4
- data/.github/workflows/ruby.yml +4 -3
- data/.gitignore +1 -0
- data/.gitmodules +3 -0
- data/README.md +16 -2
- data/Rakefile +11 -6
- data/bin/console +2 -0
- data/bin/kdl +8 -0
- data/bin/racc +29 -0
- data/bin/rake +29 -0
- data/bin/setup +1 -0
- data/kdl.gemspec +5 -5
- data/lib/kdl/document.rb +1 -2
- data/lib/kdl/kdl.tab.rb +254 -167
- data/lib/kdl/kdl.yy +44 -27
- data/lib/kdl/node.rb +30 -7
- data/lib/kdl/string_dumper.rb +45 -0
- data/lib/kdl/tokenizer.rb +52 -30
- data/lib/kdl/types/base64.rb +15 -0
- data/lib/kdl/types/country/iso3166_countries.rb +512 -0
- data/lib/kdl/types/country/iso3166_subdivisions.rb +3927 -0
- data/lib/kdl/types/country.rb +69 -0
- data/lib/kdl/types/currency/iso4217_currencies.rb +189 -0
- data/lib/kdl/types/currency.rb +26 -0
- data/lib/kdl/types/date_time.rb +41 -0
- data/lib/kdl/types/decimal.rb +13 -0
- data/lib/kdl/types/duration/iso8601_parser.rb +147 -0
- data/lib/kdl/types/duration.rb +28 -0
- data/lib/kdl/types/email/parser.rb +151 -0
- data/lib/kdl/types/email.rb +43 -0
- data/lib/kdl/types/hostname/validator.rb +51 -0
- data/lib/kdl/types/hostname.rb +32 -0
- data/lib/kdl/types/ip.rb +32 -0
- data/lib/kdl/types/irl/parser.rb +123 -0
- data/lib/kdl/types/irl.rb +46 -0
- data/lib/kdl/types/regex.rb +13 -0
- data/lib/kdl/types/url.rb +30 -0
- data/lib/kdl/types/url_template.rb +328 -0
- data/lib/kdl/types/uuid.rb +17 -0
- data/lib/kdl/types.rb +22 -0
- data/lib/kdl/value.rb +42 -10
- data/lib/kdl/version.rb +1 -1
- data/lib/kdl.rb +4 -2
- metadata +48 -7
@@ -0,0 +1,17 @@
|
|
1
|
+
module KDL
|
2
|
+
module Types
|
3
|
+
class UUID < Value
|
4
|
+
RGX = /^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$/
|
5
|
+
|
6
|
+
def self.call(value, type = 'uuid')
|
7
|
+
return nil unless value.is_a? ::KDL::Value::String
|
8
|
+
|
9
|
+
uuid = value.value.downcase
|
10
|
+
raise ArgumentError, "`#{value.value}' is not a valid uuid" unless uuid =~ RGX
|
11
|
+
|
12
|
+
new(uuid, type: type)
|
13
|
+
end
|
14
|
+
end
|
15
|
+
MAPPING['uuid'] = UUID
|
16
|
+
end
|
17
|
+
end
|
data/lib/kdl/types.rb
ADDED
@@ -0,0 +1,22 @@
|
|
1
|
+
module KDL
|
2
|
+
module Types
|
3
|
+
MAPPING = {}
|
4
|
+
end
|
5
|
+
end
|
6
|
+
|
7
|
+
require 'kdl/types/date_time'
|
8
|
+
require 'kdl/types/duration'
|
9
|
+
require 'kdl/types/currency'
|
10
|
+
require 'kdl/types/country'
|
11
|
+
require 'kdl/types/ip'
|
12
|
+
require 'kdl/types/url'
|
13
|
+
require 'kdl/types/uuid'
|
14
|
+
require 'kdl/types/regex'
|
15
|
+
require 'kdl/types/base64'
|
16
|
+
require 'kdl/types/decimal'
|
17
|
+
require 'kdl/types/hostname'
|
18
|
+
require 'kdl/types/email'
|
19
|
+
require 'kdl/types/irl'
|
20
|
+
require 'kdl/types/url_template'
|
21
|
+
|
22
|
+
KDL::Types::MAPPING.freeze
|
data/lib/kdl/value.rb
CHANGED
@@ -1,15 +1,39 @@
|
|
1
1
|
module KDL
|
2
2
|
class Value
|
3
|
-
attr_reader :value
|
3
|
+
attr_reader :value, :format, :type
|
4
4
|
|
5
|
-
def initialize(value)
|
5
|
+
def initialize(value, format: nil, type: nil)
|
6
6
|
@value = value
|
7
|
+
@format = format
|
8
|
+
@type = type
|
9
|
+
end
|
10
|
+
|
11
|
+
def as_type(type, parser = nil)
|
12
|
+
if parser.nil?
|
13
|
+
self.class.new(value, format: format, type: type)
|
14
|
+
else
|
15
|
+
result = parser.call(self, type)
|
16
|
+
return self.as_type(type) if result.nil?
|
17
|
+
|
18
|
+
unless result.is_a?(::KDL::Value)
|
19
|
+
raise ArgumentError, "expected parser to return an instance of ::KDL::Value, got `#{result.class}'"
|
20
|
+
end
|
21
|
+
|
22
|
+
result
|
23
|
+
end
|
7
24
|
end
|
8
25
|
|
9
26
|
def to_s
|
27
|
+
return stringify_value unless type
|
28
|
+
|
29
|
+
"(#{StringDumper.stringify_identifier type})#{stringify_value}"
|
30
|
+
end
|
31
|
+
|
32
|
+
def stringify_value
|
33
|
+
return format % value if format
|
34
|
+
|
10
35
|
value.to_s
|
11
36
|
end
|
12
|
-
alias inspect to_s
|
13
37
|
|
14
38
|
class Int < Value
|
15
39
|
def ==(other)
|
@@ -21,6 +45,16 @@ module KDL
|
|
21
45
|
def ==(other)
|
22
46
|
other.is_a?(Float) && value == other.value
|
23
47
|
end
|
48
|
+
|
49
|
+
def stringify_value
|
50
|
+
return super.upcase unless value.is_a?(BigDecimal)
|
51
|
+
|
52
|
+
sign, digits, _, exponent = value.split
|
53
|
+
s = sign.negative? ? '-' : ''
|
54
|
+
s += "#{digits[0]}.#{digits[1..-1]}"
|
55
|
+
s += "E#{exponent.negative? ? '' : '+'}#{exponent - 1}"
|
56
|
+
s
|
57
|
+
end
|
24
58
|
end
|
25
59
|
|
26
60
|
class Boolean < Value
|
@@ -30,10 +64,9 @@ module KDL
|
|
30
64
|
end
|
31
65
|
|
32
66
|
class String < Value
|
33
|
-
def
|
34
|
-
value
|
67
|
+
def stringify_value
|
68
|
+
StringDumper.call(value)
|
35
69
|
end
|
36
|
-
alias inspect to_s
|
37
70
|
|
38
71
|
def ==(other)
|
39
72
|
other.is_a?(String) && value == other.value
|
@@ -41,14 +74,13 @@ module KDL
|
|
41
74
|
end
|
42
75
|
|
43
76
|
class NullImpl < Value
|
44
|
-
def initialize
|
45
|
-
super(nil)
|
77
|
+
def initialize(_=nil, format: nil, type: nil)
|
78
|
+
super(nil, type: type)
|
46
79
|
end
|
47
80
|
|
48
|
-
def
|
81
|
+
def stringify_value
|
49
82
|
"null"
|
50
83
|
end
|
51
|
-
alias inspect to_s
|
52
84
|
|
53
85
|
def ==(other)
|
54
86
|
other.is_a?(NullImpl)
|
data/lib/kdl/version.rb
CHANGED
data/lib/kdl.rb
CHANGED
@@ -3,10 +3,12 @@ require "kdl/tokenizer"
|
|
3
3
|
require "kdl/document"
|
4
4
|
require "kdl/value"
|
5
5
|
require "kdl/node"
|
6
|
+
require "kdl/string_dumper"
|
7
|
+
require "kdl/types"
|
6
8
|
require "kdl/kdl.tab"
|
7
9
|
|
8
10
|
module KDL
|
9
|
-
def self.parse_document(input)
|
10
|
-
Parser.new.parse(input)
|
11
|
+
def self.parse_document(input, options = {})
|
12
|
+
Parser.new.parse(input, options)
|
11
13
|
end
|
12
14
|
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: kdl
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.1
|
4
|
+
version: 1.0.1
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
|
-
-
|
7
|
+
- Danielle Smith
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date: 2021-
|
11
|
+
date: 2021-12-13 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: racc
|
@@ -24,6 +24,20 @@ dependencies:
|
|
24
24
|
- - "~>"
|
25
25
|
- !ruby/object:Gem::Version
|
26
26
|
version: '1.5'
|
27
|
+
- !ruby/object:Gem::Dependency
|
28
|
+
name: simpleidn
|
29
|
+
requirement: !ruby/object:Gem::Requirement
|
30
|
+
requirements:
|
31
|
+
- - "~>"
|
32
|
+
- !ruby/object:Gem::Version
|
33
|
+
version: 0.2.1
|
34
|
+
type: :runtime
|
35
|
+
prerelease: false
|
36
|
+
version_requirements: !ruby/object:Gem::Requirement
|
37
|
+
requirements:
|
38
|
+
- - "~>"
|
39
|
+
- !ruby/object:Gem::Version
|
40
|
+
version: 0.2.1
|
27
41
|
description: Ruby implementation of the KDL Document Language Spec
|
28
42
|
email:
|
29
43
|
- danini@hey.com
|
@@ -33,12 +47,16 @@ extra_rdoc_files: []
|
|
33
47
|
files:
|
34
48
|
- ".github/workflows/ruby.yml"
|
35
49
|
- ".gitignore"
|
50
|
+
- ".gitmodules"
|
36
51
|
- CODE_OF_CONDUCT.md
|
37
52
|
- Gemfile
|
38
53
|
- LICENSE.txt
|
39
54
|
- README.md
|
40
55
|
- Rakefile
|
41
56
|
- bin/console
|
57
|
+
- bin/kdl
|
58
|
+
- bin/racc
|
59
|
+
- bin/rake
|
42
60
|
- bin/setup
|
43
61
|
- kdl.gemspec
|
44
62
|
- lib/kdl.rb
|
@@ -46,7 +64,30 @@ files:
|
|
46
64
|
- lib/kdl/kdl.tab.rb
|
47
65
|
- lib/kdl/kdl.yy
|
48
66
|
- lib/kdl/node.rb
|
67
|
+
- lib/kdl/string_dumper.rb
|
49
68
|
- lib/kdl/tokenizer.rb
|
69
|
+
- lib/kdl/types.rb
|
70
|
+
- lib/kdl/types/base64.rb
|
71
|
+
- lib/kdl/types/country.rb
|
72
|
+
- lib/kdl/types/country/iso3166_countries.rb
|
73
|
+
- lib/kdl/types/country/iso3166_subdivisions.rb
|
74
|
+
- lib/kdl/types/currency.rb
|
75
|
+
- lib/kdl/types/currency/iso4217_currencies.rb
|
76
|
+
- lib/kdl/types/date_time.rb
|
77
|
+
- lib/kdl/types/decimal.rb
|
78
|
+
- lib/kdl/types/duration.rb
|
79
|
+
- lib/kdl/types/duration/iso8601_parser.rb
|
80
|
+
- lib/kdl/types/email.rb
|
81
|
+
- lib/kdl/types/email/parser.rb
|
82
|
+
- lib/kdl/types/hostname.rb
|
83
|
+
- lib/kdl/types/hostname/validator.rb
|
84
|
+
- lib/kdl/types/ip.rb
|
85
|
+
- lib/kdl/types/irl.rb
|
86
|
+
- lib/kdl/types/irl/parser.rb
|
87
|
+
- lib/kdl/types/regex.rb
|
88
|
+
- lib/kdl/types/url.rb
|
89
|
+
- lib/kdl/types/url_template.rb
|
90
|
+
- lib/kdl/types/uuid.rb
|
50
91
|
- lib/kdl/value.rb
|
51
92
|
- lib/kdl/version.rb
|
52
93
|
homepage: https://kdl.dev
|
@@ -54,8 +95,8 @@ licenses:
|
|
54
95
|
- MIT
|
55
96
|
metadata:
|
56
97
|
homepage_uri: https://kdl.dev
|
57
|
-
source_code_uri: https://github.com/
|
58
|
-
changelog_uri: https://github.com/
|
98
|
+
source_code_uri: https://github.com/danini-the-panini/kdl-rb
|
99
|
+
changelog_uri: https://github.com/danini-the-panini/kdl-rb/releases
|
59
100
|
post_install_message:
|
60
101
|
rdoc_options: []
|
61
102
|
require_paths:
|
@@ -64,14 +105,14 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
64
105
|
requirements:
|
65
106
|
- - ">="
|
66
107
|
- !ruby/object:Gem::Version
|
67
|
-
version: 2.
|
108
|
+
version: 2.4.0
|
68
109
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
69
110
|
requirements:
|
70
111
|
- - ">="
|
71
112
|
- !ruby/object:Gem::Version
|
72
113
|
version: '0'
|
73
114
|
requirements: []
|
74
|
-
rubygems_version: 3.
|
115
|
+
rubygems_version: 3.2.32
|
75
116
|
signing_key:
|
76
117
|
specification_version: 4
|
77
118
|
summary: KDL Document Language
|