mini_phone 1.0.5 → 1.1.3

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: e442f98e547a4059112a40d4a28d79b7438ded4ec9d697ed7a59e03447e073f3
4
- data.tar.gz: b7ff1d3b6c32564197471098acb0654f214a035df703382500a5c7c825b80d9f
3
+ metadata.gz: d2296363b27632d0846ce32acc99c60a16e12f1670fc1aa6e2e5f6430505701e
4
+ data.tar.gz: 2c251bbabbec98c9a87e003dad1464a8cb7310d312ca7902791236a1b963f58e
5
5
  SHA512:
6
- metadata.gz: 90e2db831e7edf8ccbe083f3daad5830d8d65d6945598441a4b7bc38c0b191d5aec85c7356b9549375add822e3e6b8d27d550ed647d1721d29fb4113e50e6fc3
7
- data.tar.gz: adc1643314e3f781e9c427ff6540ba406995c14e9429fa4c520b681375459a73711fa1cbf8072c51c7f2b79f781a44fd81d219e79c6388e0d6c25f3e56e0e781
6
+ metadata.gz: e9e80a337c5dc554d13e512f43f097de370c32f623d9d4ec6a4ccf0149352ab0ef726a5ac3e8155873f4bc67b9ebe054d0d935833dcc60a33c72171c7d2ed962
7
+ data.tar.gz: edbf05d8f841b3fcb144714958dc219134d35615f3d1eff5365affb9d94a6d7aa28e8419189179c4d10f84a57d201badb4147442f05070d42f7ed4779c82dbce
@@ -0,0 +1,9 @@
1
+ FROM ruby:2.7-alpine
2
+
3
+ WORKDiR /app
4
+
5
+ # RUN apt-get update -y && apt-get install -y valgrind libphonenumber
6
+ RUN apk add --no-cache libphonenumber-dev valgrind git make libffi-dev build-base
7
+ COPY Gemfile Gemfile.lock mini_phone.gemspec ./
8
+ COPY lib/mini_phone/version.rb ./lib/mini_phone/version.rb
9
+ RUN bundle install -j4
data/Gemfile CHANGED
@@ -7,6 +7,8 @@ gemspec
7
7
 
8
8
  gem 'rake', require: false
9
9
  # https://github.com/rake-compiler/rake-compiler/pull/166
10
+ gem 'get_process_mem', require: false
11
+ gem 'pry', require: false
10
12
  gem 'rake-compiler', github: 'larskanis/rake-compiler', branch: 'fix-native-version'
11
13
  gem 'rspec', '~> 3.0', require: false
12
14
  gem 'rspec-github', require: false
data/README.md CHANGED
@@ -98,7 +98,7 @@ Comparison:
98
98
  ```
99
99
 
100
100
  ```sh
101
- apt-get install -y libphonenumber # debian / ubuntu
101
+ apt-get install -y libphonenumber-dev # debian / ubuntu
102
102
  ```
103
103
 
104
104
  2. Add this line to your application's Gemfile:
data/Rakefile CHANGED
@@ -76,3 +76,21 @@ namespace :publish do
76
76
  push_to_github_registry(g)
77
77
  end
78
78
  end
79
+
80
+ desc 'Run valgrind test'
81
+
82
+ namespace :debug do
83
+ desc 'Plot memory'
84
+ task :memory do
85
+ sh 'debug/memory_plot/plot.sh'
86
+ end
87
+
88
+ task :valgrind do
89
+ sh 'docker build --tag mini_phone_dev -f Dockerfile.dev .'
90
+ args = '--tool=memcheck --num-callers=15 --partial-loads-ok=yes --undef-value-errors=no'
91
+ script = 'ruby debug/memory_plot/memory.rb --once'
92
+ cmd = "docker run -it --rm -v #{Dir.pwd}:/app -w /app mini_phone_dev valgrind #{args} #{script}"
93
+ puts cmd
94
+ system cmd
95
+ end
96
+ end
@@ -0,0 +1,33 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'bundler/setup'
4
+ require 'mini_phone'
5
+ require 'get_process_mem'
6
+
7
+ 10.times do
8
+ GC.start
9
+ GC.compact
10
+ end
11
+
12
+ $stdout.sync = true
13
+
14
+ loop do
15
+ 10_000.times do
16
+ pn = MiniPhone::PhoneNumber.new('+1 404 388 1299')
17
+ pn.e164
18
+ pn.valid?
19
+ pn.possible?
20
+ pn.raw_national
21
+ pn.international
22
+ pn.country_code
23
+ pn.area_code
24
+ end
25
+
26
+ 4.times { GC.start }
27
+
28
+ memory_mb = GetProcessMem.new.mb
29
+
30
+ $stdout.puts memory_mb
31
+
32
+ break if ARGV.first == '--once'
33
+ end
@@ -0,0 +1,6 @@
1
+ #!/bin/bash
2
+
3
+ set -euo pipefail
4
+
5
+ bundle exec rake compile
6
+ exec ruby "$(dirname "$0")/memory.rb" | ttyplot
@@ -20,7 +20,7 @@ unless have_library('phonenumber')
20
20
  | brew install libphonenumber |
21
21
  | |
22
22
  | On Debian / Ubuntu: |
23
- | apt-get install -y libphonenumber |
23
+ | apt-get install -y libphonenumber-dev |
24
24
  | |
25
25
  | 2. Retry installing the gem (i.e `bundle install`) |
26
26
  | |
@@ -14,10 +14,29 @@ static VALUE rb_cPhoneNumber;
14
14
  static RepeatedPtrField<NumberFormat> raw_national_format;
15
15
  static RepeatedPtrField<NumberFormat> dasherized_national_format;
16
16
 
17
- extern "C" struct PhoneNumberInfo {
18
- PhoneNumber phone_number;
19
- std::string raw_phone_number;
20
- std::string raw_country_code;
17
+ extern "C" struct PhoneNumberInfo { PhoneNumber *phone_number; };
18
+
19
+ extern "C" size_t phone_number_info_size(const void *data) { return sizeof(PhoneNumberInfo) + sizeof(PhoneNumber); }
20
+
21
+ extern "C" void phone_number_info_free(void *data) {
22
+ PhoneNumberInfo *phone_number_info = static_cast<PhoneNumberInfo *>(data);
23
+ phone_number_info->phone_number->~PhoneNumber();
24
+ xfree(phone_number_info->phone_number);
25
+ phone_number_info->~PhoneNumberInfo();
26
+ xfree(data);
27
+ }
28
+
29
+ extern "C" const rb_data_type_t phone_number_info_type = {
30
+ .wrap_struct_name = "MiniPhone/PhoneNumberInfo",
31
+ .function =
32
+ {
33
+ .dmark = NULL,
34
+ .dfree = phone_number_info_free,
35
+ .dsize = phone_number_info_size,
36
+ },
37
+ .parent = NULL,
38
+ .data = NULL,
39
+ .flags = RUBY_TYPED_FREE_IMMEDIATELY,
21
40
  };
22
41
 
23
42
  static inline VALUE is_phone_number_valid(VALUE self, VALUE str, VALUE cc) {
@@ -107,17 +126,18 @@ extern "C" VALUE rb_set_default_country(VALUE self, VALUE str_code) {
107
126
 
108
127
  extern "C" VALUE rb_get_default_country(VALUE self) { return rb_iv_get(self, "@default_country"); }
109
128
 
110
- extern "C" void rb_phone_number_dealloc(PhoneNumberInfo *phone_number_info) { delete phone_number_info; }
111
-
112
129
  extern "C" VALUE rb_phone_number_parse(int argc, VALUE *argv, VALUE self) {
113
130
  return rb_class_new_instance(argc, argv, rb_cPhoneNumber);
114
131
  }
115
132
 
116
133
  extern "C" VALUE rb_phone_number_alloc(VALUE self) {
117
- PhoneNumberInfo *phone_number_info = new PhoneNumberInfo();
134
+ void *phone_number_data = ALLOC(PhoneNumber);
135
+ void *data = ALLOC(PhoneNumberInfo);
136
+ PhoneNumberInfo *phone_number_info = new (data) PhoneNumberInfo();
137
+ PhoneNumber *phone_number = new (phone_number_data) PhoneNumber();
138
+ phone_number_info->phone_number = phone_number;
118
139
 
119
- /* wrap */
120
- return Data_Wrap_Struct(self, NULL, &rb_phone_number_dealloc, phone_number_info);
140
+ return TypedData_Wrap_Struct(self, &phone_number_info_type, phone_number_info);
121
141
  }
122
142
 
123
143
  static inline VALUE rb_phone_number_nullify_ivars(VALUE self) {
@@ -125,6 +145,8 @@ static inline VALUE rb_phone_number_nullify_ivars(VALUE self) {
125
145
  rb_iv_set(self, "@raw_national", Qnil);
126
146
  rb_iv_set(self, "@dasherized_national", Qnil);
127
147
  rb_iv_set(self, "@international", Qnil);
148
+ rb_iv_set(self, "@raw_international", Qnil);
149
+ rb_iv_set(self, "@dasherized_international", Qnil);
128
150
  rb_iv_set(self, "@e164", Qnil);
129
151
  rb_iv_set(self, "@country_code", Qnil);
130
152
  rb_iv_set(self, "@region_code", Qnil);
@@ -158,7 +180,7 @@ extern "C" VALUE rb_phone_number_initialize(int argc, VALUE *argv, VALUE self) {
158
180
  PhoneNumberInfo *phone_number_info;
159
181
  PhoneNumber parsed_number;
160
182
 
161
- Data_Get_Struct(self, PhoneNumberInfo, phone_number_info);
183
+ TypedData_Get_Struct(self, PhoneNumberInfo, &phone_number_info_type, phone_number_info);
162
184
 
163
185
  const PhoneNumberUtil &phone_util(*PhoneNumberUtil::GetInstance());
164
186
 
@@ -170,7 +192,7 @@ extern "C" VALUE rb_phone_number_initialize(int argc, VALUE *argv, VALUE self) {
170
192
  if (result != PhoneNumberUtil::NO_PARSING_ERROR) {
171
193
  rb_phone_number_nullify_ivars(self);
172
194
  } else {
173
- phone_number_info->phone_number = parsed_number;
195
+ phone_number_info->phone_number->Swap(&parsed_number);
174
196
  }
175
197
 
176
198
  return self;
@@ -179,11 +201,11 @@ extern "C" VALUE rb_phone_number_initialize(int argc, VALUE *argv, VALUE self) {
179
201
  static inline VALUE rb_phone_number_format(VALUE self, PhoneNumberUtil::PhoneNumberFormat fmt) {
180
202
  std::string formatted_number;
181
203
  PhoneNumberInfo *phone_number_info;
182
- Data_Get_Struct(self, PhoneNumberInfo, phone_number_info);
204
+ TypedData_Get_Struct(self, PhoneNumberInfo, &phone_number_info_type, phone_number_info);
183
205
 
184
206
  const PhoneNumberUtil &phone_util(*PhoneNumberUtil::GetInstance());
185
- PhoneNumber parsed_number = phone_number_info->phone_number;
186
- phone_util.Format(parsed_number, fmt, &formatted_number);
207
+ PhoneNumber *parsed_number = phone_number_info->phone_number;
208
+ phone_util.Format(*parsed_number, fmt, &formatted_number);
187
209
 
188
210
  return rb_str_new(formatted_number.c_str(), formatted_number.size());
189
211
  }
@@ -225,9 +247,9 @@ VALUE format_by_pattern_national(VALUE self, RepeatedPtrField<NumberFormat> form
225
247
  std::string formatted_number;
226
248
  PhoneNumberInfo *phone_number_info;
227
249
  const PhoneNumberUtil &phone_util(*PhoneNumberUtil::GetInstance());
228
- Data_Get_Struct(self, PhoneNumberInfo, phone_number_info);
250
+ TypedData_Get_Struct(self, PhoneNumberInfo, &phone_number_info_type, phone_number_info);
229
251
 
230
- phone_util.FormatByPattern(phone_number_info->phone_number, PhoneNumberUtil::NATIONAL, format, &formatted_number);
252
+ phone_util.FormatByPattern(*phone_number_info->phone_number, PhoneNumberUtil::NATIONAL, format, &formatted_number);
231
253
 
232
254
  return rb_str_new(formatted_number.c_str(), formatted_number.size());
233
255
  }
@@ -252,6 +274,47 @@ extern "C" VALUE rb_phone_number_dasherized_national(VALUE self) {
252
274
  return rb_iv_set(self, "@dasherized_national", result);
253
275
  }
254
276
 
277
+ extern "C" VALUE rb_phone_number_country_code(VALUE self) {
278
+ if (rb_ivar_defined(self, rb_intern("@country_code"))) {
279
+ return rb_iv_get(self, "@country_code");
280
+ }
281
+
282
+ PhoneNumberInfo *phone_number_info;
283
+ TypedData_Get_Struct(self, PhoneNumberInfo, &phone_number_info_type, phone_number_info);
284
+
285
+ int code = phone_number_info->phone_number->country_code();
286
+
287
+ VALUE result = INT2NUM(code);
288
+
289
+ return rb_iv_set(self, "@country_code", result);
290
+ }
291
+
292
+ extern "C" VALUE rb_phone_number_dasherized_international(VALUE self) {
293
+ if (rb_ivar_defined(self, rb_intern("@dasherized_international"))) {
294
+ return rb_iv_get(self, "@dasherized_international");
295
+ }
296
+
297
+ VALUE national = rb_phone_number_dasherized_national(self);
298
+ VALUE cc = rb_fix2str(rb_phone_number_country_code(self), 10);
299
+ VALUE dash = rb_str_new("-", 1);
300
+ VALUE prefix = rb_str_concat(cc, dash);
301
+ VALUE result = rb_str_concat(prefix, national);
302
+
303
+ return rb_iv_set(self, "@dasherized_international", result);
304
+ }
305
+
306
+ extern "C" VALUE rb_phone_number_raw_international(VALUE self) {
307
+ if (rb_ivar_defined(self, rb_intern("@raw_international"))) {
308
+ return rb_iv_get(self, "@raw_international");
309
+ }
310
+
311
+ VALUE national = rb_phone_number_raw_national(self);
312
+ VALUE cc = rb_fix2str(rb_phone_number_country_code(self), 10);
313
+ VALUE result = rb_str_concat(cc, national);
314
+
315
+ return rb_iv_set(self, "@raw_international", result);
316
+ }
317
+
255
318
  extern "C" VALUE rb_phone_number_valid_eh(VALUE self) {
256
319
  if (rb_ivar_defined(self, rb_intern("@valid"))) {
257
320
  return rb_iv_get(self, "@valid");
@@ -259,11 +322,11 @@ extern "C" VALUE rb_phone_number_valid_eh(VALUE self) {
259
322
 
260
323
  std::string formatted_number;
261
324
  PhoneNumberInfo *phone_number_info;
262
- Data_Get_Struct(self, PhoneNumberInfo, phone_number_info);
325
+ TypedData_Get_Struct(self, PhoneNumberInfo, &phone_number_info_type, phone_number_info);
263
326
 
264
327
  const PhoneNumberUtil &phone_util(*PhoneNumberUtil::GetInstance());
265
328
 
266
- if (phone_util.IsValidNumber(phone_number_info->phone_number)) {
329
+ if (phone_util.IsValidNumber(*phone_number_info->phone_number)) {
267
330
  return rb_iv_set(self, "@valid", Qtrue);
268
331
  } else {
269
332
  return rb_iv_set(self, "@valid", Qfalse);
@@ -281,11 +344,11 @@ extern "C" VALUE rb_phone_number_possible_eh(VALUE self) {
281
344
 
282
345
  std::string formatted_number;
283
346
  PhoneNumberInfo *phone_number_info;
284
- Data_Get_Struct(self, PhoneNumberInfo, phone_number_info);
347
+ TypedData_Get_Struct(self, PhoneNumberInfo, &phone_number_info_type, phone_number_info);
285
348
 
286
349
  const PhoneNumberUtil &phone_util(*PhoneNumberUtil::GetInstance());
287
350
 
288
- if (phone_util.IsPossibleNumber(phone_number_info->phone_number)) {
351
+ if (phone_util.IsPossibleNumber(*phone_number_info->phone_number)) {
289
352
  return rb_iv_set(self, "@possible", Qtrue);
290
353
  } else {
291
354
  return rb_iv_set(self, "@possible", Qfalse);
@@ -303,44 +366,38 @@ extern "C" VALUE rb_phone_number_region_code(VALUE self) {
303
366
 
304
367
  PhoneNumberInfo *phone_number_info;
305
368
  std::string code;
306
- Data_Get_Struct(self, PhoneNumberInfo, phone_number_info);
369
+ TypedData_Get_Struct(self, PhoneNumberInfo, &phone_number_info_type, phone_number_info);
307
370
  const PhoneNumberUtil &phone_util(*PhoneNumberUtil::GetInstance());
308
371
 
309
- phone_util.GetRegionCodeForCountryCode(phone_number_info->phone_number.country_code(), &code);
372
+ phone_util.GetRegionCodeForCountryCode(phone_number_info->phone_number->country_code(), &code);
310
373
 
311
374
  VALUE result = rb_str_new(code.c_str(), code.size());
312
375
 
313
376
  return rb_iv_set(self, "@region_code", result);
314
377
  }
315
378
 
316
- extern "C" VALUE rb_phone_number_country_code(VALUE self) {
317
- if (rb_ivar_defined(self, rb_intern("@country_code"))) {
318
- return rb_iv_get(self, "@country_code");
379
+ extern "C" VALUE rb_phone_number_match_eh(VALUE self, VALUE other) {
380
+ if (!rb_obj_is_kind_of(other, rb_cPhoneNumber)) {
381
+ return Qfalse;
319
382
  }
320
383
 
321
- PhoneNumberInfo *phone_number_info;
322
- Data_Get_Struct(self, PhoneNumberInfo, phone_number_info);
323
-
324
- int code = phone_number_info->phone_number.country_code();
384
+ VALUE self_input = rb_iv_get(self, "@input");
385
+ VALUE other_input = rb_iv_get(other, "@input");
325
386
 
326
- VALUE result = INT2NUM(code);
327
-
328
- return rb_iv_set(self, "@country_code", result);
329
- }
330
-
331
- extern "C" VALUE rb_phone_number_eql_eh(VALUE self, VALUE other) {
332
- if (!rb_obj_is_instance_of(other, rb_cPhoneNumber)) {
333
- return Qfalse;
387
+ // If inputs are the exact same, the result is as well
388
+ if (rb_eql(self_input, other_input)) {
389
+ return Qtrue;
334
390
  }
335
391
 
336
392
  const PhoneNumberUtil &phone_util(*PhoneNumberUtil::GetInstance());
337
393
 
338
- PhoneNumberInfo *self_phone_number_info;
339
- Data_Get_Struct(self, PhoneNumberInfo, self_phone_number_info);
394
+ PhoneNumberInfo *self_info;
395
+ TypedData_Get_Struct(self, PhoneNumberInfo, &phone_number_info_type, self_info);
340
396
 
341
- PhoneNumberInfo *other_phone_number_info;
342
- Data_Get_Struct(other, PhoneNumberInfo, other_phone_number_info);
343
- if (phone_util.IsNumberMatch(other_phone_number_info->phone_number, self_phone_number_info->phone_number)) {
397
+ PhoneNumberInfo *other_info;
398
+ TypedData_Get_Struct(other, PhoneNumberInfo, &phone_number_info_type, other_info);
399
+
400
+ if (phone_util.IsNumberMatch(*other_info->phone_number, *self_info->phone_number) == PhoneNumberUtil::EXACT_MATCH) {
344
401
  return Qtrue;
345
402
  } else {
346
403
  return Qfalse;
@@ -353,14 +410,14 @@ extern "C" VALUE rb_phone_number_type(VALUE self) {
353
410
  }
354
411
 
355
412
  PhoneNumberInfo *phone_number_info;
356
- Data_Get_Struct(self, PhoneNumberInfo, phone_number_info);
413
+ TypedData_Get_Struct(self, PhoneNumberInfo, &phone_number_info_type, phone_number_info);
357
414
  const PhoneNumberUtil &phone_util(*PhoneNumberUtil::GetInstance());
358
415
 
359
416
  VALUE result;
360
417
 
361
418
  // @see
362
419
  // https://github.com/google/libphonenumber/blob/4e9954edea7cf263532c5dd3861a801104c3f012/cpp/src/phonenumbers/phonenumberutil.h#L91
363
- switch (phone_util.GetNumberType(phone_number_info->phone_number)) {
420
+ switch (phone_util.GetNumberType(*phone_number_info->phone_number)) {
364
421
  case PhoneNumberUtil::PREMIUM_RATE:
365
422
  result = rb_intern("premium_rate");
366
423
  break;
@@ -409,15 +466,15 @@ extern "C" VALUE rb_phone_number_area_code(VALUE self) {
409
466
 
410
467
  const PhoneNumberUtil &phone_util(*PhoneNumberUtil::GetInstance());
411
468
  PhoneNumberInfo *phone_number_info;
412
- Data_Get_Struct(self, PhoneNumberInfo, phone_number_info);
469
+ TypedData_Get_Struct(self, PhoneNumberInfo, &phone_number_info_type, phone_number_info);
413
470
 
414
- PhoneNumber number = phone_number_info->phone_number;
471
+ PhoneNumber *number = phone_number_info->phone_number;
415
472
  string national_significant_number;
416
- phone_util.GetNationalSignificantNumber(number, &national_significant_number);
473
+ phone_util.GetNationalSignificantNumber(*number, &national_significant_number);
417
474
  string area_code;
418
475
  string subscriber_number;
419
476
 
420
- int area_code_length = phone_util.GetLengthOfGeographicalAreaCode(number);
477
+ int area_code_length = phone_util.GetLengthOfGeographicalAreaCode(*number);
421
478
  if (area_code_length > 0) {
422
479
  area_code = national_significant_number.substr(0, area_code_length);
423
480
  subscriber_number = national_significant_number.substr(area_code_length, string::npos);
@@ -431,6 +488,8 @@ extern "C" VALUE rb_phone_number_area_code(VALUE self) {
431
488
  return rb_iv_set(self, "@area_code", result);
432
489
  }
433
490
 
491
+ extern "C" VALUE rb_phone_number_to_s(VALUE self) { return rb_iv_get(self, "@input"); }
492
+
434
493
  static inline void setup_formats() {
435
494
  // Raw
436
495
  NumberFormat *raw_fmt = raw_national_format.Add();
@@ -481,6 +540,10 @@ extern "C" void Init_mini_phone(void) {
481
540
  rb_define_method(rb_cPhoneNumber, "national", reinterpret_cast<VALUE (*)(...)>(rb_phone_number_national), 0);
482
541
 
483
542
  rb_define_method(rb_cPhoneNumber, "raw_national", reinterpret_cast<VALUE (*)(...)>(rb_phone_number_raw_national), 0);
543
+ rb_define_method(rb_cPhoneNumber, "raw_international",
544
+ reinterpret_cast<VALUE (*)(...)>(rb_phone_number_raw_international), 0);
545
+ rb_define_method(rb_cPhoneNumber, "dasherized_international",
546
+ reinterpret_cast<VALUE (*)(...)>(rb_phone_number_dasherized_international), 0);
484
547
  rb_define_method(rb_cPhoneNumber, "dasherized_national",
485
548
  reinterpret_cast<VALUE (*)(...)>(rb_phone_number_dasherized_national), 0);
486
549
  rb_define_method(rb_cPhoneNumber, "international", reinterpret_cast<VALUE (*)(...)>(rb_phone_number_international),
@@ -491,5 +554,6 @@ extern "C" void Init_mini_phone(void) {
491
554
  rb_define_method(rb_cPhoneNumber, "country_code", reinterpret_cast<VALUE (*)(...)>(rb_phone_number_country_code), 0);
492
555
  rb_define_method(rb_cPhoneNumber, "type", reinterpret_cast<VALUE (*)(...)>(rb_phone_number_type), 0);
493
556
  rb_define_method(rb_cPhoneNumber, "area_code", reinterpret_cast<VALUE (*)(...)>(rb_phone_number_area_code), 0);
494
- rb_define_method(rb_cPhoneNumber, "eql?", reinterpret_cast<VALUE (*)(...)>(rb_phone_number_eql_eh), 1);
557
+ rb_define_method(rb_cPhoneNumber, "to_s", reinterpret_cast<VALUE (*)(...)>(rb_phone_number_to_s), 0);
558
+ rb_define_method(rb_cPhoneNumber, "==", reinterpret_cast<VALUE (*)(...)>(rb_phone_number_match_eh), 1);
495
559
  }
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module MiniPhone
4
- VERSION = '1.0.5'
4
+ VERSION = '1.1.3'
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.0.5
4
+ version: 1.1.3
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-11 00:00:00.000000000 Z
11
+ date: 2021-01-26 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.
@@ -22,10 +22,13 @@ extra_rdoc_files: []
22
22
  files:
23
23
  - CHANGELOG.md
24
24
  - CODE_OF_CONDUCT.md
25
+ - Dockerfile.dev
25
26
  - Gemfile
26
27
  - LICENSE.txt
27
28
  - README.md
28
29
  - Rakefile
30
+ - debug/memory_plot/memory.rb
31
+ - debug/memory_plot/plot.sh
29
32
  - ext/mini_phone/extconf.rb
30
33
  - ext/mini_phone/mini_phone.cc
31
34
  - ext/mini_phone/mini_phone.h