shugoi 0.1.4 → 0.1.5

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.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 0dd0f592001816585bb74bfe63b24b8b5317cb3212eab1540f4f38caa8ee4f20
4
- data.tar.gz: c34347c34a4c815daf65bdefbe17c48d5c2dfab822c6d5506af40619baea3455
3
+ metadata.gz: a754fa875696c8b5f66cf149e6aedb67d126050b8d4d885224c427bb121bb45c
4
+ data.tar.gz: d7346a0090f639eae93f3fbad9b68acf3c326b52711af0bc584f3a5243f5da36
5
5
  SHA512:
6
- metadata.gz: 7fa6b025d726bd51c9ec1c9919e2bd8d629c26bc413d2cf99c7f6ad4231ec5905a7b298a4fbe2ee074f7d143d2bf8dba96af2a10d984ab8c82bff9103ee0730e
7
- data.tar.gz: 4d1a4be28f6bdc7978270ce6c569aa943e0862ffea866d4fb860a113f55d71e268c3b51b2d00ac565e0d0a1eb0e9c4b5101fcdd86ffb5b66729c9f3fb922d1c7
6
+ metadata.gz: aef0465692373d316b99c1f899a92e1c4d97cdf353f9caab6e3a8edfcad9c152d1e344260d9a54f040693ddb007eeca148e41d218d454a4920c5068ac6aef0f2
7
+ data.tar.gz: 9a01d058a1a0d8cc0842c1f982cf512ce1facb45e35337954c91e77e95a647533af281cec2ffdccfdef80ad8bae40e51bbe8d049a2ed3b6e8aefe49dcb8caf06
@@ -70,7 +70,8 @@ module Shugoi
70
70
  res = Net::HTTP.start(uri.host, uri.port, use_ssl: uri.scheme == "https", open_timeout: TIMEOUT, read_timeout: TIMEOUT) do |http|
71
71
  http.get(uri.request_uri, "User-Agent" => "shugoi-ruby/#{VERSION}")
72
72
  end
73
- res.body.to_s
73
+ # Décodage UTF-8 avec remplacement (parité fetch().text() du module Node).
74
+ res.body.to_s.force_encoding(Encoding::UTF_8).scrub("\uFFFD")
74
75
  end
75
76
 
76
77
  def post_json(path, payload)
data/lib/shugoi/utils.rb CHANGED
@@ -62,9 +62,20 @@ module Shugoi
62
62
  Time.now.to_i
63
63
  end
64
64
 
65
- # Encodage unicode (parité Node : chaque caractère décalé de +917504).
65
+ # Encodage unicode (parité Node). Le module Node encode avec `charCodeAt(i)` qui donne
66
+ # le CODE UNIT UTF-16 (0-65535) — pour les caractères non-BMP (émojis…), charCodeAt
67
+ # produit DEUX unités (surrogate pair). Ruby `each_codepoint` donnerait le code point
68
+ # complet (> 65535) → désynchronisation avec le décodage navigateur `codePointAt(0)`.
69
+ # On encode donc par code unit UTF-16, exactement comme JS charCodeAt.
70
+ # Le guard-detect (raw=1) peut être en ASCII-8BIT (bytes obfusqués > 0x7F) : on force
71
+ # une conversion UTF-8 avec remplacement, comme le fetch().text() du module Node.
66
72
  def unicode_encode(code)
67
- code.each_codepoint.map { |cp| (917504 + cp).chr(Encoding::UTF_8) }.join
73
+ str = code.dup.force_encoding(Encoding::UTF_8)
74
+ str = str.encode(Encoding::UTF_16LE, invalid: :replace, undef: :replace, replace: "\uFFFD")
75
+ str.bytes.each_slice(2).map do |lo, hi|
76
+ unit = lo | (hi << 8)
77
+ (917504 + unit).chr(Encoding::UTF_8)
78
+ end.join
68
79
  end
69
80
 
70
81
  def escape_json_string(s)
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module Shugoi
4
- VERSION = "0.1.4"
4
+ VERSION = "0.1.5"
5
5
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: shugoi
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.4
4
+ version: 0.1.5
5
5
  platform: ruby
6
6
  authors:
7
7
  - Shugoi