stduritemplate 0.0.46 → 0.0.48

Sign up to get free protection for your applications and to get access to all the features.
Files changed (3) hide show
  1. checksums.yaml +4 -4
  2. data/lib/stduritemplate.rb +46 -20
  3. metadata +2 -2
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: f082840f5c6424fa31cb6539cee04e9867ce509b7ca4d0f672124b1633670774
4
- data.tar.gz: 374aee1d53b49fd2361b4e1df3eb0c43685cc6d65226ed62293121d4d3b84f16
3
+ metadata.gz: 749d3b348d1e3335381ee2a94754735c8b697e53b3133b010b46c9d88ca193d7
4
+ data.tar.gz: 21980aaad6dc84d0dcebd041b172a6a68c7c13f4ca30b2127a677383605ba567
5
5
  SHA512:
6
- metadata.gz: 1e50c58e37de7a7ef00dde80c88f3274a7c433203cabe1a4ed055f0d60394f759c64efb3e30eb7573472a8298ea53e7bfcf8da71560c47dcc1fd6749379c05d4
7
- data.tar.gz: 5d6d3f9928234d1a2c1dde7878b7c0da2546376a055c10588b420c2dce2b1c9328b48a2c49469db770af13381f8e54da1dcbae171d3472da8637af0048541a8d
6
+ metadata.gz: 99c5a70f5fce1330ebf1413a74fcdeedbd8a277ac1c3eaf2e05d16ec3bfef248cc6e28392f88eee40d1639adb283a59ee385ac3c4a6f427d349fa6d4f7bee010
7
+ data.tar.gz: e5296cfd2e7e4ffe0cb601d1396184e50c194d6a7cb7df97b4386e2a56354d7ba43c0d8239704c595650878b6433c433e9a69682e4345851156378e35abd0fbe
@@ -167,34 +167,38 @@ module StdUriTemplate
167
167
  def self.add_value(op, token, value, result, max_char)
168
168
  case op
169
169
  when Operator::PLUS, Operator::HASH
170
- add_expanded_value(value, result, max_char, false)
170
+ add_expanded_value(nil, value, result, max_char, false)
171
171
  when Operator::QUESTION_MARK, Operator::AMP
172
172
  result << token + '='
173
- add_expanded_value(value, result, max_char, true)
173
+ add_expanded_value(nil, value, result, max_char, true)
174
174
  when Operator::SEMICOLON
175
175
  result << token
176
- result << '=' unless value.empty?
177
- add_expanded_value(value, result, max_char, true)
176
+ add_expanded_value('=', value, result, max_char, true)
178
177
  when Operator::DOT, Operator::SLASH, Operator::NO_OP
179
- add_expanded_value(value, result, max_char, true)
178
+ add_expanded_value(nil, value, result, max_char, true)
180
179
  end
181
180
  end
182
181
 
183
182
  def self.add_value_element(op, token, value, result, max_char)
184
183
  case op
185
184
  when Operator::PLUS, Operator::HASH
186
- add_expanded_value(value, result, max_char, false)
185
+ add_expanded_value(nil, value, result, max_char, false)
187
186
  when Operator::QUESTION_MARK, Operator::AMP, Operator::SEMICOLON, Operator::DOT, Operator::SLASH, Operator::NO_OP
188
- add_expanded_value(value, result, max_char, true)
187
+ add_expanded_value(nil, value, result, max_char, true)
189
188
  end
190
189
  end
191
190
 
192
- def self.add_expanded_value(value, result, max_char, replace_reserved)
193
- max = (max_char != -1) ? [max_char, value.length].min : value.length
191
+ def self.add_expanded_value(prefix, value, result, max_char, replace_reserved)
192
+ string_value = convert_native_types(value)
193
+ max = (max_char != -1) ? [max_char, string_value.length].min : string_value.length
194
194
  reserved_buffer = nil
195
195
 
196
+ if (max > 0 && !prefix.nil?)
197
+ result << prefix
198
+ end
199
+
196
200
  max.times do |i|
197
- character = value[i]
201
+ character = string_value[i]
198
202
 
199
203
  if character == '%' && !replace_reserved
200
204
  reserved_buffer = ''
@@ -254,13 +258,16 @@ module StdUriTemplate
254
258
  end
255
259
 
256
260
  module SubstitutionType
261
+ EMPTY = :empty
257
262
  STRING = :string
258
263
  LIST = :list
259
264
  MAP = :map
260
265
  end
261
266
 
262
267
  def self.get_substitution_type(value, col)
263
- if (value.nil? || value.kind_of?(String))
268
+ if value.nil?
269
+ SubstitutionType::EMPTY
270
+ elsif is_native_type(value)
264
271
  SubstitutionType::STRING
265
272
  elsif map?(value)
266
273
  SubstitutionType::MAP
@@ -284,15 +291,34 @@ module StdUriTemplate
284
291
  end
285
292
  end
286
293
 
294
+ def self.is_native_type(value)
295
+ if (
296
+ ([Integer, Float, String].any? { |type| value.is_a?(type) }) || ([true, false].include? value) ||
297
+ ([DateTime].any? { |type| value.is_a?(type) }))
298
+ true
299
+ else
300
+ false
301
+ end
302
+ end
303
+
304
+ def self.convert_native_types(value)
305
+ if ([Integer, Float, String].any? { |type| value.is_a?(type) }) || ([true, false].include? value)
306
+ value.to_s
307
+ elsif ([DateTime].any? { |type| value.is_a?(type) })
308
+ value.strftime("%Y-%m-%dT%H:%M:%SZ")
309
+ else
310
+ raise ArgumentError, "Illegal class passed as substitution, found #{value.class}"
311
+ end
312
+ end
313
+
287
314
  def self.expand_token(operator, token, composite, max_char, first_token, substitutions, result, col)
288
315
  raise ArgumentError, "Found an empty token at col:#{col}" if token.empty?
289
316
 
290
317
  value = substitutions[token]
291
- value = value.to_s if ([Integer, Float].any? { |type| value.is_a?(type) }) || ([true, false].include? value)
292
- value = value.strftime("%Y-%m-%dT%H:%M:%SZ") if ([DateTime].any? { |type| value.is_a?(type) })
293
-
294
318
  subst_type = get_substitution_type(value, col)
295
- return false if empty?(subst_type, value)
319
+ if (subst_type == SubstitutionType::EMPTY || empty?(subst_type, value))
320
+ return false
321
+ end
296
322
 
297
323
  if first_token
298
324
  add_prefix(operator, result)
@@ -302,7 +328,7 @@ module StdUriTemplate
302
328
 
303
329
  case subst_type
304
330
  when SubstitutionType::STRING
305
- add_string_value(operator, token, value.to_s, result, max_char)
331
+ add_string_value(operator, token, value, result, max_char)
306
332
  when SubstitutionType::LIST
307
333
  add_list_value(operator, token, value, result, max_char, composite)
308
334
  when SubstitutionType::MAP
@@ -320,15 +346,15 @@ module StdUriTemplate
320
346
  first = true
321
347
  value.each do |v|
322
348
  if first
323
- add_value(operator, token, v.to_s, result, max_char)
349
+ add_value(operator, token, v, result, max_char)
324
350
  first = false
325
351
  else
326
352
  if composite
327
353
  add_separator(operator, result)
328
- add_value(operator, token, v.to_s, result, max_char)
354
+ add_value(operator, token, v, result, max_char)
329
355
  else
330
356
  result << ','
331
- add_value_element(operator, token, v.to_s, result, max_char)
357
+ add_value_element(operator, token, v, result, max_char)
332
358
  end
333
359
  end
334
360
  end
@@ -353,7 +379,7 @@ module StdUriTemplate
353
379
  end
354
380
  result << ','
355
381
  end
356
- add_value_element(operator, token, val.to_s, result, max_char)
382
+ add_value_element(operator, token, val, result, max_char)
357
383
  first = false
358
384
  end
359
385
  !first
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: stduritemplate
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.46
4
+ version: 0.0.48
5
5
  platform: ruby
6
6
  authors:
7
7
  - Andrea Peruffo
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2023-10-19 00:00:00.000000000 Z
11
+ date: 2023-11-29 00:00:00.000000000 Z
12
12
  dependencies: []
13
13
  description: std-uritemplate implementation for Ruby
14
14
  email: andrea.peruffo1982@gmail.com