stduritemplate 0.0.46 → 0.0.47

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.
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: 46e0541ea158bf0c98ef31cbbd123cd8959f68280744dff77be1608595cece76
4
+ data.tar.gz: 66adec2a3f6937e38ed279d02d94bcff1843708b81241a6088e6924ad56836da
5
5
  SHA512:
6
- metadata.gz: 1e50c58e37de7a7ef00dde80c88f3274a7c433203cabe1a4ed055f0d60394f759c64efb3e30eb7573472a8298ea53e7bfcf8da71560c47dcc1fd6749379c05d4
7
- data.tar.gz: 5d6d3f9928234d1a2c1dde7878b7c0da2546376a055c10588b420c2dce2b1c9328b48a2c49469db770af13381f8e54da1dcbae171d3472da8637af0048541a8d
6
+ metadata.gz: 593e6ed370954a3129559dbda02605ce3b3ee94a74f5b05dfb5a7db2ccb278457902c2b713066b188cb62f9293e5c5799d6af1d8a848bd2224d3190ab4f706b4
7
+ data.tar.gz: 7ae3267717100fd9548ff0ecf7390cfeeecdd7c1ae51deeb104d12db6f503ed35be2a1e4f71fec66bdd4548a9f609499b044614772336bdd405c931964cf53af
@@ -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.47
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-20 00:00:00.000000000 Z
12
12
  dependencies: []
13
13
  description: std-uritemplate implementation for Ruby
14
14
  email: andrea.peruffo1982@gmail.com