stduritemplate 0.0.45 → 0.0.47

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: 942e2d1873067b6e9902b5985d3bc620054756c7aa85e45cf1df30d053347793
4
- data.tar.gz: 80ed3b16ce1bbd34319e406f2a82a0310fb036a8bf6ba5d097c610bc767ce758
3
+ metadata.gz: 46e0541ea158bf0c98ef31cbbd123cd8959f68280744dff77be1608595cece76
4
+ data.tar.gz: 66adec2a3f6937e38ed279d02d94bcff1843708b81241a6088e6924ad56836da
5
5
  SHA512:
6
- metadata.gz: ff46b9f8cdfee9087db9f7cf8da6b1cead53159ac7829f319d244afbe984376ef656007bea674e8e7dc3d0ea4f712bc0d66362b88c31022633ff4aa4e151b60a
7
- data.tar.gz: fc2fba75f25f204cf094152796e4670bb5dd2160104c2b6d9bbf221f9f5004648bc3f1320817de2c230b6f2df7d016e12a48190a2658c5d61b95f80f32c575f2
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.45
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