smstools 0.2.1 → 0.2.2
Sign up to get free protection for your applications and to get access to all the features.
- 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
|