smstools 0.2.1 → 0.2.2
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 +4 -4
- data/CHANGELOG.md +4 -0
- data/README.md +7 -1
- data/lib/sms_tools.rb +1 -0
- data/lib/sms_tools/encoding_detection.rb +6 -2
- data/lib/sms_tools/unicode_encoding.rb +15 -0
- data/lib/sms_tools/version.rb +1 -1
- data/spec/sms_tools/encoding_detection_spec.rb +15 -2
- metadata +3 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: f2cecee4608c47f5abf1cf0a980b3a3a646e358d50a72e6b0f1931f554f86c5f
|
4
|
+
data.tar.gz: 46eae0938780419f4672581f4b1105a8d51cc4fe7f6150b2e44fdc3c00f16c6e
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 6f40d959431dc1185a989b179c91858363978b5200bba7504e499b214ba8b1493c859eebb3308b343ac8000ec747db89ccfbc664692721315bb68c41f96000a0
|
7
|
+
data.tar.gz: 7670ac023de1612cd5e4573ad4879526e5f45e38c871416cef3466e4bbee6d1740d0b2ae760b907d57811f913670862e2907b3ed3c8f268b876085195bed2a61
|
data/CHANGELOG.md
CHANGED
@@ -1,3 +1,7 @@
|
|
1
|
+
## 0.2.2 (20 Jan 2021)
|
2
|
+
|
3
|
+
* #9 Fix the way some complex Unicode characters (like composite emojis) are counted. Thanks to @bryanrite for the neat implementation. Note the fix could be **potentially backwards-incompatible** if you were relying on the incorrect behaviour previously. Technically it's still a bug fix.
|
4
|
+
|
1
5
|
## 0.2.1 (18 Aug 2020)
|
2
6
|
|
3
7
|
* #7 Introduce `SmsTools.use_ascii_encoding` option (defaults to `true` for backwards-compatibility) that allows disabling the `:ascii` workaround encoding. See #6 and #7 for details. Thanks @kingsley-wang.
|
data/README.md
CHANGED
@@ -159,7 +159,7 @@ Check out the source code of the class to find out more.
|
|
159
159
|
### Client-side code
|
160
160
|
|
161
161
|
If you're using the gem in Rails 3.1 or newer, you can gain access to the `SmsTools.Message` class.
|
162
|
-
|
162
|
+
Its interface is similar to the one of `SmsTools::EncodingDetection`. Here is an example in
|
163
163
|
CoffeeScript:
|
164
164
|
|
165
165
|
```coffeescript
|
@@ -194,3 +194,9 @@ assumed. It might be possible to use it in other setups as well, but you're on y
|
|
194
194
|
6. Push to the branch (`git push origin my-new-feature`)
|
195
195
|
7. Send a pull request.
|
196
196
|
|
197
|
+
## Publishing a new version
|
198
|
+
|
199
|
+
1. Pick a version number according to Semantic Versioning.
|
200
|
+
2. Update `CHANGELOG.md`, `version.rb` and potentially this readme.
|
201
|
+
3. Commit the changes, tag them with `vX.Y.Z` (e.g. `v0.2.1`) and push all with `git push --tags`.
|
202
|
+
4. Build and publish the new version of the gem with `gem build smstools.gemspec && gem push *.gem`.
|
data/lib/sms_tools.rb
CHANGED
@@ -68,8 +68,12 @@ module SmsTools
|
|
68
68
|
# message, taking into account any double-space symbols in the GSM 03.38
|
69
69
|
# encoding.
|
70
70
|
def length
|
71
|
-
|
72
|
-
|
71
|
+
if unicode?
|
72
|
+
length = text.chars.sum { |char| UnicodeEncoding.character_count(char) }
|
73
|
+
else
|
74
|
+
length = text.length
|
75
|
+
length += text.chars.count { |char| GsmEncoding.double_byte?(char) } if gsm?
|
76
|
+
end
|
73
77
|
|
74
78
|
length
|
75
79
|
end
|
@@ -0,0 +1,15 @@
|
|
1
|
+
module SmsTools
|
2
|
+
module UnicodeEncoding
|
3
|
+
extend self
|
4
|
+
|
5
|
+
BASIC_PLANE = 0x0000..0xFFFF
|
6
|
+
|
7
|
+
# UCS-2/UTF-16 is used for unicode text messaging. UCS-2/UTF-16 represents characters in minimum
|
8
|
+
# 2-bytes, any characters in the basic plane are represented with 2-bytes, so each codepoint
|
9
|
+
# within the Basic Plane counts as a single character. Any codepoint outside the Basic Plane is
|
10
|
+
# encoded using 4-bytes and therefore counts as 2 characters in a text message.
|
11
|
+
def character_count(char)
|
12
|
+
char.each_codepoint.sum { |codepoint| BASIC_PLANE.include?(codepoint) ? 1 : 2 }
|
13
|
+
end
|
14
|
+
end
|
15
|
+
end
|
data/lib/sms_tools/version.rb
CHANGED
@@ -118,6 +118,14 @@ describe SmsTools::EncodingDetection do
|
|
118
118
|
detection_for('Уникод: Σ: €').length.must_equal 12
|
119
119
|
end
|
120
120
|
|
121
|
+
it "counts ZWJ unicode characters correctly" do
|
122
|
+
detection_for('😴').length.must_equal 2
|
123
|
+
detection_for('🛌🏽').length.must_equal 4
|
124
|
+
detection_for('🤾🏽♀️').length.must_equal 7
|
125
|
+
detection_for('🇵🇵').length.must_equal 4
|
126
|
+
detection_for('👩❤️👩').length.must_equal 8
|
127
|
+
end
|
128
|
+
|
121
129
|
describe 'with SmsTools.use_gsm_encoding = false' do
|
122
130
|
before do
|
123
131
|
SmsTools.use_gsm_encoding = false
|
@@ -166,11 +174,16 @@ describe SmsTools::EncodingDetection do
|
|
166
174
|
concatenated_parts_for length: 135, encoding: :unicode, must_be: 3
|
167
175
|
end
|
168
176
|
|
169
|
-
it "counts parts for actual GSM-encoded
|
177
|
+
it "counts parts for actual GSM-encoded messages" do
|
170
178
|
detection_for('').concatenated_parts.must_equal 1
|
171
|
-
detection_for('Я').concatenated_parts.must_equal 1
|
172
179
|
detection_for('Σ' * 160).concatenated_parts.must_equal 1
|
173
180
|
detection_for('Σ' * 159 + '~').concatenated_parts.must_equal 2
|
181
|
+
end
|
182
|
+
|
183
|
+
it "counts parts for actual Unicode-encoded messages" do
|
184
|
+
detection_for('Я').concatenated_parts.must_equal 1
|
185
|
+
detection_for('Я' * 70).concatenated_parts.must_equal 1
|
186
|
+
detection_for('Я' * 71).concatenated_parts.must_equal 2
|
174
187
|
detection_for('Я' * 133 + '~').concatenated_parts.must_equal 2
|
175
188
|
end
|
176
189
|
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: smstools
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.2.
|
4
|
+
version: 0.2.2
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Dimitar Dimitrov
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2021-01-20 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bundler
|
@@ -86,6 +86,7 @@ files:
|
|
86
86
|
- lib/sms_tools/encoding_detection.rb
|
87
87
|
- lib/sms_tools/gsm_encoding.rb
|
88
88
|
- lib/sms_tools/rails/engine.rb
|
89
|
+
- lib/sms_tools/unicode_encoding.rb
|
89
90
|
- lib/sms_tools/version.rb
|
90
91
|
- lib/smstools.rb
|
91
92
|
- smstools.gemspec
|