dhall 0.1.0 → 0.5.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,19 @@
1
+ # frozen_string_literal: true
2
+
3
+ require "dhall/builtins"
4
+
5
+ module Dhall
6
+ module Types
7
+ def self.MAP_ENTRY(k: Builtins[:Text], v: Builtins[:Text])
8
+ RecordType.new(
9
+ record: {
10
+ "mapKey" => k, "mapValue" => v
11
+ }
12
+ )
13
+ end
14
+
15
+ def self.MAP(k: Builtins[:Text], v: Builtins[:Text])
16
+ Builtins[:List].call(MAP_ENTRY(k: k, v: v))
17
+ end
18
+ end
19
+ end
@@ -1,7 +1,27 @@
1
1
  # frozen_string_literal: true
2
2
 
3
+ require "promise"
4
+ require "timeout"
5
+
3
6
  module Dhall
4
7
  module Util
8
+ class LazyPromise < Promise
9
+ def initialize(&block)
10
+ super
11
+ @block = block
12
+ end
13
+
14
+ def subscribe(*args)
15
+ super
16
+
17
+ begin
18
+ fulfill(@block.call)
19
+ rescue => e
20
+ reject(e)
21
+ end
22
+ end
23
+ end
24
+
5
25
  class AllOf
6
26
  def initialize(*validators)
7
27
  @validators = validators
@@ -61,45 +81,43 @@ module Dhall
61
81
  end
62
82
  end
63
83
 
64
- module BuiltinName
65
- NAMES = [
66
- "Natural/build",
67
- "Natural/fold",
68
- "Natural/isZero",
69
- "Natural/even",
70
- "Natural/odd",
71
- "Natural/toInteger",
72
- "Natural/show",
73
- "Integer/toDouble",
74
- "Integer/show",
75
- "Double/show",
76
- "List/build",
77
- "List/fold",
78
- "List/length",
79
- "List/head",
80
- "List/last",
81
- "List/indexed",
82
- "List/reverse",
83
- "Optional/fold",
84
- "Optional/build",
85
- "Text/show",
86
- "Bool",
87
- "Optional",
88
- "Natural",
89
- "Integer",
90
- "Double",
91
- "Text",
92
- "List",
93
- "True",
94
- "False",
95
- "None",
96
- "Type",
97
- "Kind",
98
- "Sort"
99
- ].freeze
84
+ class Deadline
85
+ def self.for_timeout(timeout)
86
+ if timeout.nil? || timeout.to_f.infinite?
87
+ NoDeadline.new
88
+ else
89
+ new(Time.now + timeout)
90
+ end
91
+ end
100
92
 
101
- def self.===(other)
102
- NAMES.include?(other)
93
+ def initialize(deadline)
94
+ @deadline = deadline
95
+ end
96
+
97
+ def exceeded?
98
+ @deadline < Time.now
99
+ end
100
+
101
+ def timeout
102
+ [0.000000000000001, @deadline - Time.now].max
103
+ end
104
+
105
+ def timeout_block(&block)
106
+ Timeout.timeout(timeout, TimeoutException, &block)
107
+ end
108
+ end
109
+
110
+ class NoDeadline
111
+ def exceeded?
112
+ false
113
+ end
114
+
115
+ def timeout
116
+ nil
117
+ end
118
+
119
+ def timeout_block
120
+ yield
103
121
  end
104
122
  end
105
123
 
@@ -126,5 +144,91 @@ module Dhall
126
144
  end]
127
145
  end
128
146
  end
147
+
148
+ def self.psych_coder_for(tag, v)
149
+ c = Psych::Coder.new(tag)
150
+ case v
151
+ when Hash
152
+ c.map = v
153
+ when Array
154
+ c.seq = v
155
+ else
156
+ c.scalar = v
157
+ end
158
+ end
159
+
160
+ def self.psych_coder_from(tag, o)
161
+ coder = Psych::Coder.new(tag)
162
+
163
+ if o.respond_to?(:encode_with)
164
+ o.encode_with(coder)
165
+ else
166
+ o.instance_variables.each do |ivar|
167
+ coder[ivar.to_s[1..-1]] = o.instance_variable_get(ivar)
168
+ end
169
+ end
170
+
171
+ coder
172
+ end
173
+
174
+ def self.transform_keys(hash_or_not)
175
+ return hash_or_not unless hash_or_not.is_a?(Hash)
176
+
177
+ Hash[hash_or_not.map { |k, v| [(yield k), v] }]
178
+ end
179
+
180
+ def self.utf8_if_possible(str)
181
+ utf8 = str.dup.force_encoding(Encoding::UTF_8)
182
+ utf8.valid_encoding? ? utf8 : str
183
+ end
184
+
185
+ def self.text_or_binary(str)
186
+ unless str.valid_encoding?
187
+ raise ArgumentError, "invalid byte sequence in #{str.encoding}"
188
+ end
189
+
190
+ if str.encoding == Encoding::BINARY
191
+ return str if str =~ /(?!\s)[[:cntrl:]]/
192
+
193
+ utf8_if_possible(str)
194
+ else
195
+ str.encode(Encoding::UTF_8)
196
+ end
197
+ end
198
+
199
+ def self.longest_common_prefix(a, b)
200
+ a.zip(b).take_while { |(x, y)| x == y }.map(&:first)
201
+ end
202
+
203
+ def self.indent_size(str)
204
+ if str.end_with?("\n")
205
+ 0
206
+ else
207
+ str
208
+ .scan(/^[ \t]*(?=[^ \t\n]|\Z)/)
209
+ .map(&:chars)
210
+ .reduce(&method(:longest_common_prefix))&.length.to_i
211
+ end
212
+ end
213
+
214
+ def self.path_components_to_uri(*components)
215
+ URI("/#{components.map(&method(:uri_escape)).join("/")}")
216
+ end
217
+
218
+ def self.uri_escape(s)
219
+ ::URI.encode_www_form_component(s).gsub("+", "%20")
220
+ end
221
+
222
+ def self.net_http_req_with_timeout(uri, req, timeout:)
223
+ Net::HTTP.start(
224
+ uri.hostname,
225
+ uri.port,
226
+ use_ssl: uri.scheme == "https",
227
+ open_timeout: timeout,
228
+ ssl_timeout: timeout,
229
+ read_timeout: timeout,
230
+ write_timeout: timeout
231
+ ) { |http| http.request(req) }
232
+ end
129
233
  end
130
234
  end
metadata CHANGED
@@ -1,15 +1,29 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: dhall
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.0
4
+ version: 0.5.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Stephen Paul Weber
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2019-04-10 00:00:00.000000000 Z
11
+ date: 2020-05-26 00:00:00.000000000 Z
12
12
  dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: base32
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - "~>"
18
+ - !ruby/object:Gem::Version
19
+ version: 0.3.2
20
+ type: :runtime
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - "~>"
25
+ - !ruby/object:Gem::Version
26
+ version: 0.3.2
13
27
  - !ruby/object:Gem::Dependency
14
28
  name: cbor
15
29
  requirement: !ruby/object:Gem::Requirement
@@ -38,6 +52,34 @@ dependencies:
38
52
  - - "~>"
39
53
  - !ruby/object:Gem::Version
40
54
  version: '3.0'
55
+ - !ruby/object:Gem::Dependency
56
+ name: lazy_object
57
+ requirement: !ruby/object:Gem::Requirement
58
+ requirements:
59
+ - - "~>"
60
+ - !ruby/object:Gem::Version
61
+ version: 0.0.3
62
+ type: :runtime
63
+ prerelease: false
64
+ version_requirements: !ruby/object:Gem::Requirement
65
+ requirements:
66
+ - - "~>"
67
+ - !ruby/object:Gem::Version
68
+ version: 0.0.3
69
+ - !ruby/object:Gem::Dependency
70
+ name: multihashes
71
+ requirement: !ruby/object:Gem::Requirement
72
+ requirements:
73
+ - - "~>"
74
+ - !ruby/object:Gem::Version
75
+ version: 0.1.3
76
+ type: :runtime
77
+ prerelease: false
78
+ version_requirements: !ruby/object:Gem::Requirement
79
+ requirements:
80
+ - - "~>"
81
+ - !ruby/object:Gem::Version
82
+ version: 0.1.3
41
83
  - !ruby/object:Gem::Dependency
42
84
  name: promise.rb
43
85
  requirement: !ruby/object:Gem::Requirement
@@ -80,6 +122,20 @@ dependencies:
80
122
  - - "~>"
81
123
  - !ruby/object:Gem::Version
82
124
  version: 0.0.1
125
+ - !ruby/object:Gem::Dependency
126
+ name: minitest-fail-fast
127
+ requirement: !ruby/object:Gem::Requirement
128
+ requirements:
129
+ - - "~>"
130
+ - !ruby/object:Gem::Version
131
+ version: 0.1.0
132
+ type: :development
133
+ prerelease: false
134
+ version_requirements: !ruby/object:Gem::Requirement
135
+ requirements:
136
+ - - "~>"
137
+ - !ruby/object:Gem::Version
138
+ version: 0.1.0
83
139
  - !ruby/object:Gem::Dependency
84
140
  name: simplecov
85
141
  requirement: !ruby/object:Gem::Requirement
@@ -114,6 +170,7 @@ description: 'This is a Ruby implementation of the Dhall configuration language.
114
170
  email:
115
171
  - dev@singpolyma.net
116
172
  executables:
173
+ - dhall-compile
117
174
  - json-to-dhall
118
175
  - yaml-to-dhall
119
176
  extensions: []
@@ -121,6 +178,7 @@ extra_rdoc_files: []
121
178
  files:
122
179
  - COPYING
123
180
  - README.md
181
+ - bin/dhall-compile
124
182
  - bin/json-to-dhall
125
183
  - bin/yaml-to-dhall
126
184
  - dhall.gemspec
@@ -129,13 +187,14 @@ files:
129
187
  - lib/dhall/ast.rb
130
188
  - lib/dhall/binary.rb
131
189
  - lib/dhall/builtins.rb
190
+ - lib/dhall/coder.rb
132
191
  - lib/dhall/normalize.rb
133
192
  - lib/dhall/parser.citrus
134
193
  - lib/dhall/parser.rb
135
194
  - lib/dhall/resolve.rb
136
195
  - lib/dhall/typecheck.rb
196
+ - lib/dhall/types.rb
137
197
  - lib/dhall/util.rb
138
- - lib/dhall/visitor.rb
139
198
  homepage: https://git.sr.ht/~singpolyma/dhall-ruby
140
199
  licenses:
141
200
  - GPL-3.0
@@ -156,7 +215,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
156
215
  version: '0'
157
216
  requirements: []
158
217
  rubyforge_project:
159
- rubygems_version: 2.5.2.1
218
+ rubygems_version: 2.7.6.2
160
219
  signing_key:
161
220
  specification_version: 4
162
221
  summary: The non-repetitive alternative to YAML, in Ruby
@@ -1,23 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- module Dhall
4
- class Visitor
5
- def initialize(callbacks)
6
- @callbacks = callbacks
7
- end
8
-
9
- def visit(expr)
10
- expr.to_h.each_with_object({}) do |(attr, value), h|
11
- if (callback = callback_for(value))
12
- h[attr] = callback.call(value)
13
- end
14
- end
15
- end
16
-
17
- protected
18
-
19
- def callback_for(x)
20
- @callbacks.find { |k, _| k === x }&.last
21
- end
22
- end
23
- end