mini_phone 1.1.3 → 1.1.4

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: d2296363b27632d0846ce32acc99c60a16e12f1670fc1aa6e2e5f6430505701e
4
- data.tar.gz: 2c251bbabbec98c9a87e003dad1464a8cb7310d312ca7902791236a1b963f58e
3
+ metadata.gz: 8267c89cf237c4baf3e8dfe8718e0c0fe453b4919f6e38d00dc70cc557ed8cf0
4
+ data.tar.gz: 2b537745421bbb9fe70000c3707c6f20c052f0770fd156ac4d915bb92e33c736
5
5
  SHA512:
6
- metadata.gz: e9e80a337c5dc554d13e512f43f097de370c32f623d9d4ec6a4ccf0149352ab0ef726a5ac3e8155873f4bc67b9ebe054d0d935833dcc60a33c72171c7d2ed962
7
- data.tar.gz: edbf05d8f841b3fcb144714958dc219134d35615f3d1eff5365affb9d94a6d7aa28e8419189179c4d10f84a57d201badb4147442f05070d42f7ed4779c82dbce
6
+ metadata.gz: 0db1af779c2b9564dedc09eee290359b5d3bb53bfb8e53180b1d56225cd054d1bddc37b87ff7da794cc2686c04ccbfcaed0285cebea170e4f5b5f594ee841091
7
+ data.tar.gz: 9e94872e27a229014cc754fe349e5d9f536baef87e26aee5b6bd9205604c553fcd392fa8ec4c658f9e5fedb0f958217e3b839337559200cded15b36442f2ab45
data/README.md CHANGED
@@ -3,7 +3,7 @@
3
3
  A Ruby gem which plugs directly into Google's native C++
4
4
  [libphonenumber](https://github.com/google/libphonenumber) for extremely
5
5
  _fast_ and _robust_ phone number parsing, validation, and formatting. On
6
- average, most methods are 40x to 50x faster than other Ruby phone number
6
+ average, most methods are 70x to 80x faster than other Ruby phone number
7
7
  libraries.
8
8
 
9
9
  ## Usage
@@ -78,15 +78,15 @@ On average, most methods are 40x to 50x faster than other libraries. To run
78
78
  the benchmarks locally, execute: `bundle exec rake bench`
79
79
 
80
80
  ```
81
+ # Results from my Linux (5.10.6-arch1-10)
82
+
81
83
  Comparison:
82
- MiniPhone: valid?: 23111.4 i/s
83
- Phonelib: valid?: 482.3 i/s - 47.92x (± 0.00) slower
84
- ```
84
+ Phonelib: valid?: 426.0 i/s
85
+ MiniPhone: valid?: 34707.9 i/s - 81.47x faster
85
86
 
86
- ```
87
87
  Comparison:
88
- MiniPhone: e164: 31567.0 i/s
89
- Phonelib: e164: 652.3 i/s - 48.39x (± 0.00) slower
88
+ Phonelib: e164: 580.3 i/s
89
+ MiniPhone: e164: 43385.9 i/s - 74.76x faster
90
90
  ```
91
91
 
92
92
  ## Installation
@@ -52,7 +52,13 @@ static inline VALUE is_phone_number_valid(VALUE self, VALUE str, VALUE cc) {
52
52
 
53
53
  auto result = phone_util.ParseAndKeepRawInput(phone_number, country_code, &parsed_number);
54
54
 
55
- if (result == PhoneNumberUtil::NO_PARSING_ERROR && phone_util.IsValidNumber(parsed_number)) {
55
+ if (result != PhoneNumberUtil::NO_PARSING_ERROR) {
56
+ return Qfalse;
57
+ }
58
+
59
+ if (country_code == "ZZ" && phone_util.IsValidNumber(parsed_number)) {
60
+ return Qtrue;
61
+ } else if (phone_util.IsValidNumberForRegion(parsed_number, country_code)) {
56
62
  return Qtrue;
57
63
  } else {
58
64
  return Qfalse;
@@ -159,45 +165,6 @@ static inline VALUE rb_phone_number_nullify_ivars(VALUE self) {
159
165
  return Qtrue;
160
166
  }
161
167
 
162
- extern "C" VALUE rb_phone_number_initialize(int argc, VALUE *argv, VALUE self) {
163
- VALUE str;
164
- VALUE def_cc;
165
-
166
- rb_scan_args(argc, argv, "11", &str, &def_cc);
167
-
168
- if (NIL_P(def_cc)) {
169
- def_cc = rb_iv_get(rb_mMiniPhone, "@default_country");
170
- }
171
-
172
- rb_iv_set(self, "@input", str);
173
-
174
- if (FIXNUM_P(str)) {
175
- str = rb_fix2str(str, 10);
176
- } else if (!RB_TYPE_P(str, T_STRING)) {
177
- return rb_phone_number_nullify_ivars(self);
178
- }
179
-
180
- PhoneNumberInfo *phone_number_info;
181
- PhoneNumber parsed_number;
182
-
183
- TypedData_Get_Struct(self, PhoneNumberInfo, &phone_number_info_type, phone_number_info);
184
-
185
- const PhoneNumberUtil &phone_util(*PhoneNumberUtil::GetInstance());
186
-
187
- std::string phone_number(RSTRING_PTR(str), RSTRING_LEN(str));
188
- std::string country_code(RSTRING_PTR(def_cc), RSTRING_LEN(def_cc));
189
-
190
- auto result = phone_util.Parse(phone_number, country_code, &parsed_number);
191
-
192
- if (result != PhoneNumberUtil::NO_PARSING_ERROR) {
193
- rb_phone_number_nullify_ivars(self);
194
- } else {
195
- phone_number_info->phone_number->Swap(&parsed_number);
196
- }
197
-
198
- return self;
199
- }
200
-
201
168
  static inline VALUE rb_phone_number_format(VALUE self, PhoneNumberUtil::PhoneNumberFormat fmt) {
202
169
  std::string formatted_number;
203
170
  PhoneNumberInfo *phone_number_info;
@@ -502,6 +469,49 @@ static inline void setup_formats() {
502
469
  dsh_fmt->set_format("$1-$2-$3");
503
470
  }
504
471
 
472
+ extern "C" VALUE rb_phone_number_initialize(int argc, VALUE *argv, VALUE self) {
473
+ VALUE str;
474
+ VALUE def_cc;
475
+
476
+ rb_scan_args(argc, argv, "11", &str, &def_cc);
477
+
478
+ if (NIL_P(def_cc)) {
479
+ def_cc = rb_iv_get(rb_mMiniPhone, "@default_country");
480
+ }
481
+
482
+ rb_iv_set(self, "@input", str);
483
+
484
+ if (FIXNUM_P(str)) {
485
+ str = rb_fix2str(str, 10);
486
+ } else if (!RB_TYPE_P(str, T_STRING)) {
487
+ return rb_phone_number_nullify_ivars(self);
488
+ }
489
+
490
+ PhoneNumberInfo *phone_number_info;
491
+ PhoneNumber parsed_number;
492
+
493
+ TypedData_Get_Struct(self, PhoneNumberInfo, &phone_number_info_type, phone_number_info);
494
+
495
+ const PhoneNumberUtil &phone_util(*PhoneNumberUtil::GetInstance());
496
+
497
+ std::string phone_number(RSTRING_PTR(str), RSTRING_LEN(str));
498
+ std::string country_code(RSTRING_PTR(def_cc), RSTRING_LEN(def_cc));
499
+
500
+ auto result = phone_util.Parse(phone_number, country_code, &parsed_number);
501
+
502
+ if (result != PhoneNumberUtil::NO_PARSING_ERROR) {
503
+ rb_phone_number_nullify_ivars(self);
504
+ } else {
505
+ phone_number_info->phone_number->Swap(&parsed_number);
506
+ }
507
+
508
+ if (country_code != "ZZ" && !rb_str_equal(rb_phone_number_region_code(self), def_cc)) {
509
+ rb_phone_number_nullify_ivars(self);
510
+ }
511
+
512
+ return self;
513
+ }
514
+
505
515
  extern "C" void Init_mini_phone(void) {
506
516
  setup_formats();
507
517
 
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module MiniPhone
4
- VERSION = '1.1.3'
4
+ VERSION = '1.1.4'
5
5
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: mini_phone
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.1.3
4
+ version: 1.1.4
5
5
  platform: ruby
6
6
  authors:
7
7
  - Ian Ker-Seymer
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2021-01-26 00:00:00.000000000 Z
11
+ date: 2021-02-11 00:00:00.000000000 Z
12
12
  dependencies: []
13
13
  description: Plugs directly in the the Google's native C++ [libphonenumber](https://github.com/google/libphonenumber)
14
14
  for extemely _fast_ and _robust_ phone number parsing, validation, and formatting.