phony_rails 0.14.11 → 0.14.12

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
- SHA256:
3
- metadata.gz: bb21cdef27d6696f003b5d1b60a5c6df7365845366eb36769ee17b11d809e277
4
- data.tar.gz: 35e3206fe90042f14332eac06e3e27060ed8cd6fda339863009d55c0f7962291
2
+ SHA1:
3
+ metadata.gz: f5bc5fd8efabff8b0607fe060f2d27b11ddbd948
4
+ data.tar.gz: 68add4fb0fc07c768ecafdd390e1ce471940eb07
5
5
  SHA512:
6
- metadata.gz: 23cee7e1e1d089117a4519c45fd52c456786d92a783f85acc45be269917008b9b50985767fcc630fba544e1a806622e3a37297fad2ed3499a2ab08d5495a36cc
7
- data.tar.gz: 6badf776d61071abf152dfe03ff90a585bbc1c13ae83c2cabf6d2c93ea76ee7773455ffe0a03c8615a9865b23cff001b3b56018d8a50c6f95d59ce7ab0423fc0
6
+ metadata.gz: d61d5e02e7e61a8b15088a09d1ae8cc5db8ce5eb38c388ff2845e27a508a2fde4e12e6780042cec5832992610d54908456423a639671c0a6eb128cb45f24a1ce
7
+ data.tar.gz: 3e61051454973a4ca74a0e863a500f53dfd49bebf26d7e19d311332d8fc701a20dfe55a2ef035cb1184811fcd14809225629023b15e525dce61167a18637456c
data/.gitignore CHANGED
@@ -6,3 +6,4 @@
6
6
  coverage/*
7
7
  /.bundle
8
8
  /vendor
9
+ Gemfile.lock
data/.travis.yml CHANGED
@@ -2,7 +2,8 @@ language: ruby
2
2
  rvm:
3
3
  - 2.3.7
4
4
  - 2.4.4
5
- - 2.5.1
5
+ - 2.5.5
6
+ - 2.6.2
6
7
  script:
7
8
  - bundle exec rspec spec
8
9
  - bundle exec rubocop
data/CHANGELOG.md CHANGED
@@ -1,5 +1,16 @@
1
1
  # Change Log
2
2
 
3
+ ## [v0.14.11](https://github.com/joost/phony_rails/tree/v0.14.11) (2018-10-11)
4
+ [Full Changelog](https://github.com/joost/phony_rails/compare/v0.14.10...v0.14.11)
5
+
6
+ **Closed issues:**
7
+
8
+ - Problem with normalizing Estonian number [\#187](https://github.com/joost/phony_rails/issues/187)
9
+
10
+ **Merged pull requests:**
11
+
12
+ - Add Korean translation\(including spec\) [\#186](https://github.com/joost/phony_rails/pull/186) ([freelyageha](https://github.com/freelyageha))
13
+
3
14
  ## [v0.14.10](https://github.com/joost/phony_rails/tree/v0.14.10) (2018-10-11)
4
15
  [Full Changelog](https://github.com/joost/phony_rails/compare/v0.14.9...v0.14.10)
5
16
 
data/Gemfile CHANGED
@@ -11,6 +11,3 @@ gem 'guard-rspec' # , '~> 4.2.0'
11
11
  gem 'rake'
12
12
  gem 'rspec' # , '~> 2.14.0'
13
13
  gem 'rubocop'
14
-
15
- # For testing
16
- gem 'sqlite3'
data/README.md CHANGED
@@ -156,6 +156,22 @@ validates_plausible_phone :phone_number_normalized, presence: true, if: :phone_n
156
156
 
157
157
  Validation supports phone numbers with extension, such as `+18181231234 x1234` or `'+1 (818)151-5483 #4312'` out-of-the-box.
158
158
 
159
+ Return original value after validation:
160
+
161
+ The flag normalize_when_valid (disabled by default), allows to return the original phone_number when is the object is not valid. When phone validation fails, normalization is not triggered at all. It could prevent a situation where user fills in the phone number and after validation, he gets back different, already normalized phone number value, even if phone number was wrong.
162
+
163
+ Example usage:
164
+
165
+ ```ruby
166
+ validates_plausible_phone :phone_number
167
+ phony_normalize :phone_number, country_code: :country_code, normalize_when_valid: true
168
+ ```
169
+
170
+ Filling in the number will result with following:
171
+
172
+ When the number is incorrect (e.g. phone_number: `+44 888 888 888` for country_code 'PL'), the original validation behavior is preserved, but if the number is still invalid, the original value is returned.
173
+ When number is valid, it will save the normalized number (e.g. `+48 888 888 888` will be saved as `+48888888888`).
174
+
159
175
  #### Allowing records country codes to not match phone number country codes
160
176
 
161
177
  You may have a record specifying one country (via a `country_code` attribute) but using a phone number from another country. For example, your record may be from Japan but have a phone number from the Philippines. By default, `phony_rails` will consider your record's `country_code` as part of the validation. If that country doesn't match the country code in the phone number, validation will fail.
@@ -463,6 +463,8 @@ UA:
463
463
  country_code: '380'
464
464
  UG:
465
465
  country_code: '256'
466
+ UK:
467
+ country_code: '44'
466
468
  UM:
467
469
  country_code: ''
468
470
  US:
data/lib/phony_rails.rb CHANGED
@@ -46,18 +46,18 @@ module PhonyRails
46
46
  # http://www.redguava.com.au/2011/06/rails-convert-phone-numbers-to-international-format-for-sms/
47
47
  def self.normalize_number(number, options = {}, current_instance = nil)
48
48
  return if number.nil?
49
+
49
50
  original_number = number
50
51
  number = number.dup # Just to be sure, we don't want to change the original.
51
52
  number, ext = extract_extension(number)
52
53
  number.gsub!(/[^\(\)\d\+]/, '') # Strips weird stuff from the number
53
54
  return if number.blank?
55
+
54
56
  if _country_number = options[:country_number] || country_number_for(options[:country_code])
55
57
  options[:add_plus] = true if options[:add_plus].nil?
56
58
  # (Force) add country_number if missing
57
59
  # NOTE: do we need to force adding country code? Otherwise we can share logic with next block
58
- if !Phony.plausible?(number) || _country_number != country_code_from_number(number)
59
- number = "#{_country_number}#{number}"
60
- end
60
+ number = "#{_country_number}#{number}" if !Phony.plausible?(number) || _country_number != country_code_from_number(number)
61
61
  elsif _default_country_number = extract_default_country_number(options, current_instance)
62
62
  options[:add_plus] = true if options[:add_plus].nil?
63
63
  number = normalize_number_default_country(number, _default_country_number)
@@ -101,12 +101,14 @@ module PhonyRails
101
101
  # Should probably be named 'country_number_from_number'.
102
102
  def self.country_code_from_number(number)
103
103
  return nil unless Phony.plausible?(number)
104
+
104
105
  Phony.split(Phony.normalize(number)).first
105
106
  end
106
107
 
107
108
  # Returns the country (eg. 'NL') for a number (eg. +31612341234).
108
109
  def self.country_from_number(number)
109
110
  return nil unless Phony.plausible?(number)
111
+
110
112
  country_codes_hash.select { |_country, hash| hash['country_code'] == country_code_from_number(number) }.keys[0]
111
113
  end
112
114
 
@@ -115,6 +117,7 @@ module PhonyRails
115
117
  # It uses the 'cc' option for Phony. This was a required param before?
116
118
  def self.plausible_number?(number, options = {})
117
119
  return false if number.blank?
120
+
118
121
  number = extract_extension(number).first
119
122
  number = normalize_number(number, options)
120
123
  country_number = options[:country_number] || country_number_for(options[:country_code]) ||
@@ -126,10 +129,11 @@ module PhonyRails
126
129
  false
127
130
  end
128
131
 
129
- COMMON_EXTENSIONS = /[ ]*(ext|ex|x|xt|#|:)+[^0-9]*\(?([-0-9]{1,})\)?#?$/i
132
+ COMMON_EXTENSIONS = /[ ]*(ext|ex|x|xt|#|:)+[^0-9]*\(?([-0-9]{1,})\)?#?$/i.freeze
130
133
 
131
134
  def self.extract_extension(number_and_ext)
132
135
  return [nil, nil] if number_and_ext.nil?
136
+
133
137
  subbed = number_and_ext.sub(COMMON_EXTENSIONS, '')
134
138
  [subbed, Regexp.last_match(2)]
135
139
  end
@@ -156,8 +160,10 @@ module PhonyRails
156
160
  attributes.each do |attribute|
157
161
  attribute_name = options[:as] || attribute
158
162
  raise("No attribute #{attribute_name} found on #{self.class.name} (PhonyRails)") unless self.class.attribute_method?(attribute_name)
163
+
164
+ cache_original_attribute(current_instance, attribute) if options[:normalize_when_valid]
159
165
  new_value = PhonyRails.normalize_number(send(attribute), options, current_instance)
160
- send("#{attribute_name}=", new_value) if new_value || attribute_name != attribute
166
+ current_instance.public_send("#{attribute_name}=", new_value) if new_value || attribute_name != attribute
161
167
  end
162
168
  end
163
169
 
@@ -169,7 +175,25 @@ module PhonyRails
169
175
  end
170
176
  end
171
177
 
178
+ def cache_original_attribute(current_instance, attribute)
179
+ current_instance.define_singleton_method("#{attribute}_original=") { |value| @original = value }
180
+ current_instance.define_singleton_method("#{attribute}_original") { @original }
181
+ current_instance.public_send("#{attribute}_original=", current_instance.public_send(attribute.to_s))
182
+ end
183
+
172
184
  module ClassMethods
185
+ PHONY_RAILS_COLLECTION_VALID_KEYS = %i[
186
+ add_plus
187
+ as
188
+ country_code
189
+ country_number
190
+ default_country_code
191
+ default_country_number
192
+ enforce_record_country
193
+ if
194
+ normalize_when_valid
195
+ unless
196
+ ].freeze
173
197
  # Use this method on the class level like:
174
198
  # phony_normalize :phone_number, :fax_number, :default_country_code => 'NL'
175
199
  #
@@ -177,7 +201,7 @@ module PhonyRails
177
201
  # you've geocoded before calling this method!
178
202
  def phony_normalize(*attributes)
179
203
  options = attributes.last.is_a?(Hash) ? attributes.pop : {}
180
- options.assert_valid_keys :country_number, :default_country_number, :country_code, :default_country_code, :add_plus, :as, :enforce_record_country, :if, :unless
204
+ options.assert_valid_keys(*PHONY_RAILS_COLLECTION_VALID_KEYS)
181
205
  if options[:as].present?
182
206
  raise ArgumentError, ':as option can not be used on phony_normalize with multiple attribute names! (PhonyRails)' if attributes.size > 1
183
207
  end
@@ -200,10 +224,12 @@ module PhonyRails
200
224
  main_options.assert_valid_keys :country_code, :default_country_code
201
225
  attributes.each do |attribute|
202
226
  raise(StandardError, "Instance method normalized_#{attribute} already exists on #{name} (PhonyRails)") if method_defined?(:"normalized_#{attribute}")
227
+
203
228
  define_method :"normalized_#{attribute}" do |*args|
204
229
  options = main_options.merge(args.first || {})
205
230
  assign_values_for_phony_symbol_options(options)
206
231
  raise(ArgumentError, "No attribute/method #{attribute} found on #{self.class.name} (PhonyRails)") unless respond_to?(attribute)
232
+
207
233
  options[:country_code] ||= country_code if respond_to?(:country_code)
208
234
  PhonyRails.normalize_number(send(attribute), options)
209
235
  end
@@ -7,6 +7,7 @@ class String
7
7
  # "(0)30 1234 123".phony_normalized(country_code: 'NL') # => '301234123'
8
8
  def phony_normalized(options = {})
9
9
  raise ArgumentError, "Expected options to be a Hash, got #{options.inspect}" unless options.is_a?(Hash)
10
+
10
11
  options = options.dup
11
12
  PhonyRails.normalize_number(self, options)
12
13
  end
@@ -24,21 +25,25 @@ class String
24
25
  # "somestring".phone_formatted(raise: true)
25
26
  def phony_formatted(options = {})
26
27
  raise ArgumentError, "Expected options to be a Hash, got #{options.inspect}" unless options.is_a?(Hash)
28
+
27
29
  options = options.dup
28
30
  normalize_country_code = options.delete(:normalize)
29
31
  s, ext = PhonyRails.extract_extension(self)
30
32
  s = (normalize_country_code ? PhonyRails.normalize_number(s, default_country_code: normalize_country_code.to_s, add_plus: false) : s.gsub(/\D/, ''))
31
33
  return if s.blank?
32
34
  return if options[:strict] && !Phony.plausible?(s)
35
+
33
36
  PhonyRails.format_extension(Phony.format(s, options.reverse_merge(format: :national)), ext)
34
37
  rescue StandardError
35
38
  raise if options[:raise]
39
+
36
40
  s
37
41
  end
38
42
 
39
43
  # The bang method
40
44
  def phony_formatted!(options = {})
41
45
  raise ArgumentError, 'The :strict options is only supported in the phony_formatted (non bang) method.' if options[:strict]
46
+
42
47
  replace(phony_formatted(options))
43
48
  end
44
49
  end
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module PhonyRails
4
- VERSION = '0.14.11'
4
+ VERSION = '0.14.12'
5
5
  end
@@ -4,6 +4,7 @@
4
4
  # Usage:
5
5
  # validate :phone_number, :phony_plausible => true
6
6
  require 'active_model'
7
+
7
8
  class PhonyPlausibleValidator < ActiveModel::EachValidator
8
9
  # Validates a String using Phony.plausible? method.
9
10
  def validate_each(record, attribute, value)
@@ -13,6 +14,8 @@ class PhonyPlausibleValidator < ActiveModel::EachValidator
13
14
  value = PhonyRails.normalize_number(value.dup, default_country_code: normalized_country_code) if normalized_country_code
14
15
  value = PhonyRails.extract_extension(value).first
15
16
  @record.errors.add(attribute, error_message) unless Phony.plausible?(value, cc: country_number)
17
+ @record.public_send("#{attribute}=", @record.public_send("#{attribute}_original")) if @record.respond_to?("#{attribute}_original") &&
18
+ !Phony.plausible?(value, cc: country_number)
16
19
  end
17
20
 
18
21
  private
data/phony_rails.gemspec CHANGED
@@ -17,11 +17,13 @@ Gem::Specification.new do |gem|
17
17
  gem.require_paths = ['lib']
18
18
  gem.version = PhonyRails::VERSION
19
19
 
20
- gem.post_install_message = 'PhonyRails v0.10.0 changes the way numbers are stored!'
21
- gem.post_install_message = "It now adds a '+' to the normalized number when it starts with a country number!"
20
+ gem.post_install_message = "PhonyRails v0.10.0 changes the way numbers are stored!\nIt now adds a ' + ' to the normalized number when it starts with a country number!"
22
21
 
23
22
  gem.add_runtime_dependency 'activesupport', '>= 3.0'
24
23
  gem.add_runtime_dependency 'phony', '> 2.15'
25
24
  gem.add_development_dependency 'activerecord', '>= 3.0'
26
25
  gem.add_development_dependency 'mongoid', '>= 3.0'
26
+
27
+ # For testing
28
+ gem.add_development_dependency 'sqlite3', '~> 1.3.6'
27
29
  end
@@ -246,6 +246,14 @@ describe PhonyRails do
246
246
  phone2 = PhonyRails.normalize_number(phone2, default_country_code: 'EE')
247
247
  expect(phone2).to eq('+37275016183')
248
248
  end
249
+
250
+ it 'should pass Github issue #180' do
251
+ phone = '5555555555'
252
+ phone = PhonyRails.normalize_number(phone, default_country_code: 'AU')
253
+ expect(phone).to eq('+615555555555')
254
+ phone = PhonyRails.normalize_number(phone, default_country_code: 'AU')
255
+ expect(phone).to eq('+615555555555')
256
+ end
249
257
  end
250
258
 
251
259
  it 'should not change original String' do
@@ -60,6 +60,10 @@ ActiveRecord::Schema.define do
60
60
  table.column :phone_number, :string
61
61
  table.column :phone_number_country_code, :string
62
62
  end
63
+
64
+ create_table :normalizabled_phone_homes do |table|
65
+ table.column :phone_number, :string
66
+ end
63
67
  end
64
68
 
65
69
  #--------------------
@@ -166,6 +170,13 @@ class MessageOptionSameAsModelMethod < HelpfulHome
166
170
  'user@example.com'
167
171
  end
168
172
  end
173
+ #--------------------
174
+ class NormalizabledPhoneHome < ActiveRecord::Base
175
+ attr_accessor :phone_number, :country_code
176
+ validates_plausible_phone :phone_number
177
+ phony_normalize :phone_number, country_code: 'PL', normalize_when_valid: true
178
+ end
179
+
169
180
  #-----------------------------------------------------------------------------------------------------------------------
170
181
  # Tests
171
182
  #-----------------------------------------------------------------------------------------------------------------------
@@ -641,5 +652,21 @@ describe ActiveModel::Validations::HelperMethods do
641
652
  @home.save
642
653
  end
643
654
  end
655
+
656
+ context 'when a number has already code_number' do
657
+ it 'does not normalize code after validation' do
658
+ @home = NormalizabledPhoneHome.new
659
+ @home.phone_number = '+44 799 449 595'
660
+ @home.country_code = 'PL'
661
+
662
+ expect(@home).to_not be_valid
663
+ expect(@home.phone_number).to eql('+44 799 449 595')
664
+
665
+ @home.phone_number = '+48 799 449 595'
666
+
667
+ expect(@home).to be_valid
668
+ expect(@home.phone_number).to eql('+48799449595')
669
+ end
670
+ end
644
671
  end
645
672
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: phony_rails
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.14.11
4
+ version: 0.14.12
5
5
  platform: ruby
6
6
  authors:
7
7
  - Joost Hietbrink
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2018-10-11 00:00:00.000000000 Z
11
+ date: 2019-06-21 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: activesupport
@@ -66,6 +66,20 @@ dependencies:
66
66
  - - ">="
67
67
  - !ruby/object:Gem::Version
68
68
  version: '3.0'
69
+ - !ruby/object:Gem::Dependency
70
+ name: sqlite3
71
+ requirement: !ruby/object:Gem::Requirement
72
+ requirements:
73
+ - - "~>"
74
+ - !ruby/object:Gem::Version
75
+ version: 1.3.6
76
+ type: :development
77
+ prerelease: false
78
+ version_requirements: !ruby/object:Gem::Requirement
79
+ requirements:
80
+ - - "~>"
81
+ - !ruby/object:Gem::Version
82
+ version: 1.3.6
69
83
  description: This Gem adds useful methods to your Rails app to validate, display and
70
84
  save phone numbers.
71
85
  email:
@@ -81,7 +95,6 @@ files:
81
95
  - ".travis.yml"
82
96
  - CHANGELOG.md
83
97
  - Gemfile
84
- - Gemfile.lock
85
98
  - Guardfile
86
99
  - LICENSE
87
100
  - README.md
@@ -112,8 +125,9 @@ homepage: https://github.com/joost/phony_rails
112
125
  licenses:
113
126
  - MIT
114
127
  metadata: {}
115
- post_install_message: It now adds a '+' to the normalized number when it starts with
116
- a country number!
128
+ post_install_message: |-
129
+ PhonyRails v0.10.0 changes the way numbers are stored!
130
+ It now adds a ' + ' to the normalized number when it starts with a country number!
117
131
  rdoc_options: []
118
132
  require_paths:
119
133
  - lib
@@ -129,7 +143,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
129
143
  version: '0'
130
144
  requirements: []
131
145
  rubyforge_project:
132
- rubygems_version: 2.7.7
146
+ rubygems_version: 2.5.1
133
147
  signing_key:
134
148
  specification_version: 4
135
149
  summary: This Gem adds useful methods to your Rails app to validate, display and save
data/Gemfile.lock DELETED
@@ -1,143 +0,0 @@
1
- PATH
2
- remote: .
3
- specs:
4
- phony_rails (0.14.11)
5
- activesupport (>= 3.0)
6
- phony (> 2.15)
7
-
8
- GEM
9
- remote: https://rubygems.org/
10
- specs:
11
- activemodel (5.1.4)
12
- activesupport (= 5.1.4)
13
- activerecord (5.1.4)
14
- activemodel (= 5.1.4)
15
- activesupport (= 5.1.4)
16
- arel (~> 8.0)
17
- activesupport (5.1.4)
18
- concurrent-ruby (~> 1.0, >= 1.0.2)
19
- i18n (~> 0.7)
20
- minitest (~> 5.1)
21
- tzinfo (~> 1.1)
22
- arel (8.0.0)
23
- ast (2.3.0)
24
- bson (4.2.2)
25
- coderay (1.1.2)
26
- concurrent-ruby (1.0.5)
27
- coveralls (0.8.21)
28
- json (>= 1.8, < 3)
29
- simplecov (~> 0.14.1)
30
- term-ansicolor (~> 1.3)
31
- thor (~> 0.19.4)
32
- tins (~> 1.6)
33
- diff-lcs (1.3)
34
- docile (1.1.5)
35
- ffi (1.9.25)
36
- formatador (0.2.5)
37
- guard (2.14.1)
38
- formatador (>= 0.2.4)
39
- listen (>= 2.7, < 4.0)
40
- lumberjack (~> 1.0)
41
- nenv (~> 0.1)
42
- notiffany (~> 0.0)
43
- pry (>= 0.9.12)
44
- shellany (~> 0.0)
45
- thor (>= 0.18.1)
46
- guard-bundler (2.1.0)
47
- bundler (~> 1.0)
48
- guard (~> 2.2)
49
- guard-compat (~> 1.1)
50
- guard-compat (1.2.1)
51
- guard-rspec (4.7.3)
52
- guard (~> 2.1)
53
- guard-compat (~> 1.1)
54
- rspec (>= 2.99.0, < 4.0)
55
- i18n (0.9.1)
56
- concurrent-ruby (~> 1.0)
57
- json (2.1.0)
58
- listen (3.1.5)
59
- rb-fsevent (~> 0.9, >= 0.9.4)
60
- rb-inotify (~> 0.9, >= 0.9.7)
61
- ruby_dep (~> 1.2)
62
- lumberjack (1.0.12)
63
- method_source (0.9.0)
64
- minitest (5.10.3)
65
- mongo (2.4.3)
66
- bson (>= 4.2.1, < 5.0.0)
67
- mongoid (6.2.1)
68
- activemodel (~> 5.1)
69
- mongo (>= 2.4.1, < 3.0.0)
70
- nenv (0.3.0)
71
- notiffany (0.1.1)
72
- nenv (~> 0.1)
73
- shellany (~> 0.0)
74
- parallel (1.12.0)
75
- parser (2.4.0.2)
76
- ast (~> 2.3)
77
- phony (2.16.5)
78
- powerpack (0.1.1)
79
- pry (0.11.3)
80
- coderay (~> 1.1.0)
81
- method_source (~> 0.9.0)
82
- rainbow (2.2.2)
83
- rake
84
- rake (12.3.0)
85
- rb-fsevent (0.10.2)
86
- rb-inotify (0.9.10)
87
- ffi (>= 0.5.0, < 2)
88
- rspec (3.7.0)
89
- rspec-core (~> 3.7.0)
90
- rspec-expectations (~> 3.7.0)
91
- rspec-mocks (~> 3.7.0)
92
- rspec-core (3.7.0)
93
- rspec-support (~> 3.7.0)
94
- rspec-expectations (3.7.0)
95
- diff-lcs (>= 1.2.0, < 2.0)
96
- rspec-support (~> 3.7.0)
97
- rspec-mocks (3.7.0)
98
- diff-lcs (>= 1.2.0, < 2.0)
99
- rspec-support (~> 3.7.0)
100
- rspec-support (3.7.0)
101
- rubocop (0.51.0)
102
- parallel (~> 1.10)
103
- parser (>= 2.3.3.1, < 3.0)
104
- powerpack (~> 0.1)
105
- rainbow (>= 2.2.2, < 3.0)
106
- ruby-progressbar (~> 1.7)
107
- unicode-display_width (~> 1.0, >= 1.0.1)
108
- ruby-progressbar (1.9.0)
109
- ruby_dep (1.5.0)
110
- shellany (0.0.1)
111
- simplecov (0.14.1)
112
- docile (~> 1.1.0)
113
- json (>= 1.8, < 3)
114
- simplecov-html (~> 0.10.0)
115
- simplecov-html (0.10.2)
116
- sqlite3 (1.3.13)
117
- term-ansicolor (1.6.0)
118
- tins (~> 1.0)
119
- thor (0.19.4)
120
- thread_safe (0.3.6)
121
- tins (1.15.1)
122
- tzinfo (1.2.4)
123
- thread_safe (~> 0.1)
124
- unicode-display_width (1.3.0)
125
-
126
- PLATFORMS
127
- ruby
128
-
129
- DEPENDENCIES
130
- activerecord (>= 3.0)
131
- coveralls
132
- guard
133
- guard-bundler
134
- guard-rspec
135
- mongoid (>= 3.0)
136
- phony_rails!
137
- rake
138
- rspec
139
- rubocop
140
- sqlite3
141
-
142
- BUNDLED WITH
143
- 1.16.4