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.
@@ -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 to_s
34
- value.inspect
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 to_s
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
@@ -1,3 +1,3 @@
1
1
  module KDL
2
- VERSION = "0.1.2"
2
+ VERSION = "1.0.1"
3
3
  end
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.2
4
+ version: 1.0.1
5
5
  platform: ruby
6
6
  authors:
7
- - Daniel Smith
7
+ - Danielle Smith
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2021-01-02 00:00:00.000000000 Z
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/jellymann/kdl-rb
58
- changelog_uri: https://github.com/jellymann/kdl-rb/releases
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.3.0
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.1.4
115
+ rubygems_version: 3.2.32
75
116
  signing_key:
76
117
  specification_version: 4
77
118
  summary: KDL Document Language