phony_rails 0.14.11 → 0.14.12
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 +5 -5
- data/.gitignore +1 -0
- data/.travis.yml +2 -1
- data/CHANGELOG.md +11 -0
- data/Gemfile +0 -3
- data/README.md +16 -0
- data/lib/data/country_codes.yaml +2 -0
- data/lib/phony_rails.rb +32 -6
- data/lib/phony_rails/string_extensions.rb +5 -0
- data/lib/phony_rails/version.rb +1 -1
- data/lib/validators/phony_validator.rb +3 -0
- data/phony_rails.gemspec +4 -2
- data/spec/lib/phony_rails_spec.rb +8 -0
- data/spec/lib/validators/phony_validator_spec.rb +27 -0
- metadata +20 -6
- data/Gemfile.lock +0 -143
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
|
-
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
2
|
+
SHA1:
|
3
|
+
metadata.gz: f5bc5fd8efabff8b0607fe060f2d27b11ddbd948
|
4
|
+
data.tar.gz: 68add4fb0fc07c768ecafdd390e1ce471940eb07
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: d61d5e02e7e61a8b15088a09d1ae8cc5db8ce5eb38c388ff2845e27a508a2fde4e12e6780042cec5832992610d54908456423a639671c0a6eb128cb45f24a1ce
|
7
|
+
data.tar.gz: 3e61051454973a4ca74a0e863a500f53dfd49bebf26d7e19d311332d8fc701a20dfe55a2ef035cb1184811fcd14809225629023b15e525dce61167a18637456c
|
data/.gitignore
CHANGED
data/.travis.yml
CHANGED
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
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.
|
data/lib/data/country_codes.yaml
CHANGED
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
|
-
|
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
|
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
|
data/lib/phony_rails/version.rb
CHANGED
@@ -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 =
|
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.
|
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:
|
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:
|
116
|
-
|
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.
|
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
|