has_secure_attribute 0.4.0 → 1.0.0

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
  SHA1:
3
- metadata.gz: e61ec31351c820eaab8299f6114e7b714e5f7620
4
- data.tar.gz: 65bf16cba90c646c29aeb7d5d75dcf80e1d4715c
3
+ metadata.gz: 25c15b3f643163f6c2fb3c464a2ec2b6742d08f0
4
+ data.tar.gz: 167c75e4c3749f77884640e9b4540093c0b115bd
5
5
  SHA512:
6
- metadata.gz: 723227ddf282925dfa763c6f0efcd40d5422fef98b1532c0995815249eb4012a74879967cad67738079aa631ab751eaba1f8c7d7c36618ea23b6320ed211ab24
7
- data.tar.gz: 89a734102051452f9226178e6779c7107cc41c5121ee2ba976b766ca0a2b6ee33f34a2a0e911d2152bfacf7e20c6d85dfbddbd1dc6aa73730d103e81d400c5e8
6
+ metadata.gz: fe0c64a7b25fdb7b7d64a680214c576bfd50054d2878c62cef4af43520c4f74d4fdc0c87387ea4e288b5265193ad1c5762a98156934411f879ac0d5b0dbe0f0b
7
+ data.tar.gz: 6c8d535bdf3f7c12531cd94fee7a0e96c14d3cb27eb48da655dfc5f10c8879c89a827221a17211bb011d36158cf5c546ea758e2858452b85d8db4c5fbfc8e0b5
data/README.md CHANGED
@@ -34,9 +34,9 @@ or
34
34
 
35
35
  In the above example:
36
36
 
37
- * Your should have a `users` table that has one column: `security_answer_digest`.
37
+ * You should have a `users` table that has one column: `security_answer_digest`.
38
38
  * It creates a reader: `security_answer`.
39
- * It creates a writer: `security_answer=(value)` which basically saves the security answer given into the database on column `security_answer_digest` but is saves it encrypted.
39
+ * It creates a writer: `security_answer=(value)` which basically saves the security answer given into the database on column `security_answer_digest` but it saves it encrypted.
40
40
  * It adds some validations (if you want to avoid having these validations: `has_secure_security_answer validations: false`).
41
41
  * It creates a confirmation validation on `security_answer` but only if `security_answer` is given (for confirmation validations see [this](http://http://guides.rubyonrails.org/active_record_validations.html#confirmation)).
42
42
  * It creates a presence validation on `security_answer` but only on create.
@@ -1,3 +1,3 @@
1
1
  module HasSecureAttribute
2
- VERSION = "0.4.0"
2
+ VERSION = "1.0.0"
3
3
  end
@@ -6,7 +6,6 @@ development:
6
6
  pool: 5
7
7
  username: root
8
8
  password:
9
- socket: /var/run/mysqld/mysqld.sock
10
9
 
11
10
  # Warning: The database defined as "test" will be erased and
12
11
  # re-generated from your development database when you run "rake".
@@ -19,7 +18,6 @@ test:
19
18
  pool: 5
20
19
  username: root
21
20
  password:
22
- socket: /var/run/mysqld/mysqld.sock
23
21
 
24
22
  production:
25
23
  adapter: mysql2
@@ -29,5 +27,4 @@ production:
29
27
  pool: 5
30
28
  username: root
31
29
  password:
32
- socket: /var/run/mysqld/mysqld.sock
33
30
 
@@ -1,4 +1,4 @@
1
- class CreateTestModelWithAttributes < ActiveRecord::Migration
1
+ class CreateTestModelWithAttributes < ActiveRecord::Migration[5.1]
2
2
  def up
3
3
  HasSecureAttribute::DbHelper.new.connect_to_database
4
4
  return if ActiveRecord::Base.connection.table_exists? :test_model_with_attributes
@@ -21,4 +21,4 @@ class CreateTestModelWithAttributes < ActiveRecord::Migration
21
21
  end
22
22
 
23
23
 
24
- end
24
+ end
@@ -1,3 +1,5 @@
1
+ require 'yaml'
2
+
1
3
  module HasSecureAttribute
2
4
  class DbHelper
3
5
  def connect_to_database
@@ -12,4 +14,4 @@ module HasSecureAttribute
12
14
  ActiveRecord::Base.establish_connection database_settings['test'].delete_if{|k,v| 'database' == k}
13
15
  end
14
16
  end
15
- end
17
+ end
@@ -1,4 +1,4 @@
1
- FactoryGirl.define do
1
+ FactoryBot.define do
2
2
  factory :test_model_with_attribute do
3
3
  username 'username'
4
4
  password 'password'
@@ -41,4 +41,4 @@ FactoryGirl.define do
41
41
  security_question 'question'
42
42
  security_answer 'answer'
43
43
  end
44
- end
44
+ end
@@ -1,64 +1,64 @@
1
1
  require 'spec_helper'
2
2
 
3
3
  describe TestModelWithAttribute do
4
- it { should respond_to(:security_answer) }
5
- it { should respond_to(:security_answer=) }
6
- it { should respond_to(:security_answer_confirmation) }
7
- it { should respond_to(:security_answer_confirmation=) }
8
- it { should respond_to(:authenticate_security_answer) }
4
+ it { expect(subject).to respond_to(:security_answer) }
5
+ it { expect(subject).to respond_to(:security_answer=) }
6
+ it { expect(subject).to respond_to(:security_answer_confirmation) }
7
+ it { expect(subject).to respond_to(:security_answer_confirmation=) }
8
+ it { expect(subject).to respond_to(:authenticate_security_answer) }
9
9
 
10
10
  it 'should confirm security answer' do
11
11
  subject.security_answer = 'hello there'
12
12
  subject.security_answer_confirmation = 'there hello'
13
13
  subject.valid?
14
- subject.errors[:security_answer_confirmation].should include("doesn't match Security answer")
14
+ expect(subject.errors[:security_answer_confirmation]).to include("doesn't match Security answer")
15
15
  end
16
16
 
17
17
  it 'should not confirm security answer if not given' do
18
18
  subject.security_answer = nil
19
19
  subject.security_answer_confirmation = 'there hello'
20
20
  subject.valid?
21
- subject.errors[:security_answer_confirmation].should be_blank
21
+ expect(subject.errors[:security_answer_confirmation]).to be_blank
22
22
  end
23
23
 
24
24
  it 'should require security answer on create' do
25
- subject.should be_new_record
25
+ expect(subject).to be_new_record
26
26
  subject.security_answer = nil
27
27
  subject.valid?
28
- subject.errors[:security_answer].should include("can't be blank")
28
+ expect(subject.errors[:security_answer]).to include("can't be blank")
29
29
  end
30
30
 
31
31
  it 'should require security answer confirmation if security answer given ' do
32
32
  subject.security_answer = 'hello there'
33
33
  subject.valid?
34
- subject.errors[:security_answer_confirmation].should include "can't be blank"
34
+ expect(subject.errors[:security_answer_confirmation]).to include("can't be blank")
35
35
  end
36
36
 
37
37
  it 'should not require security answer confirmation if security answer is not given' do
38
38
  subject.security_answer = ''
39
39
  subject.valid?
40
- subject.errors[:security_answer_confirmation].should be_blank
40
+ expect(subject.errors[:security_answer_confirmation]).to be_blank
41
41
  end
42
42
 
43
43
  it 'should require security answer digest on create' do
44
- subject = FactoryGirl.build :test_model_with_attribute
45
- subject.should be_new_record
44
+ subject = FactoryBot.build :test_model_with_attribute
45
+ expect(subject).to be_new_record
46
46
 
47
47
  # change the security_answer_digest to verify the test
48
48
  subject.security_answer_digest = ''
49
- lambda do
49
+ expect do
50
50
  begin
51
51
  subject.save!
52
52
  rescue Exception => ex
53
- ex.message.should include("security_answer_digest missing on new record")
53
+ expect(ex.message).to include("security_answer_digest missing on new record")
54
54
  raise
55
55
  end
56
- end.should raise_error RuntimeError
56
+ end.to raise_error RuntimeError
57
57
  end
58
58
 
59
59
  it 'should not require security answer digest on update' do
60
- subject = FactoryGirl.build :test_model_with_attribute
61
- subject.should be_new_record
60
+ subject = FactoryBot.build :test_model_with_attribute
61
+ expect(subject).to be_new_record
62
62
 
63
63
  subject.save!
64
64
 
@@ -68,72 +68,72 @@ describe TestModelWithAttribute do
68
68
  subject.save!
69
69
 
70
70
  subject.reload
71
- subject.security_answer_digest.should be_blank
71
+ expect(subject.security_answer_digest).to be_blank
72
72
  end
73
73
 
74
74
  it 'should allow to call security answer digest directly if protect setter for digest is not given as option' do
75
- lambda do
75
+ expect do
76
76
  subject.security_answer_digest = 'hello'
77
- end.should_not raise_error
77
+ end.not_to raise_error
78
78
  end
79
79
 
80
80
  describe "#security_answer=" do
81
81
  it 'should set the security answer and save it encrypted' do
82
- tmwa = FactoryGirl.create :test_model_with_attribute, security_answer: 'old answer', security_answer_confirmation: 'old answer'
83
- tmwa.security_answer_digest.should_not be_blank
82
+ tmwa = FactoryBot.create :test_model_with_attribute, security_answer: 'old answer', security_answer_confirmation: 'old answer'
83
+ expect(tmwa.security_answer_digest).not_to be_blank
84
84
  old_security_answer_digest = tmwa.security_answer_digest
85
85
 
86
86
  tmwa.security_answer = 'new answer'
87
87
  tmwa.security_answer_confirmation = 'new answer'
88
- tmwa.instance_variable_get(:@security_answer).should == 'new answer'
88
+ expect(tmwa.instance_variable_get(:@security_answer)).to eq('new answer')
89
89
  tmwa.save!
90
- tmwa.security_answer_digest.should_not be_blank
91
- tmwa.security_answer_digest.should_not == old_security_answer_digest
90
+ expect(tmwa.security_answer_digest).not_to be_blank
91
+ expect(tmwa.security_answer_digest).not_to eq(old_security_answer_digest)
92
92
  end
93
93
  end
94
94
 
95
95
  describe '#authenticate_security_answer' do
96
96
  it 'should return subject if security answer given matches the one stored' do
97
- tmwa = FactoryGirl.create :test_model_with_attribute, security_answer: 'some answer', security_answer_confirmation: 'some answer'
98
- tmwa.authenticate_security_answer('some answer').should eq tmwa
97
+ tmwa = FactoryBot.create :test_model_with_attribute, security_answer: 'some answer', security_answer_confirmation: 'some answer'
98
+ expect(tmwa.authenticate_security_answer('some answer')).to eq(tmwa)
99
99
  end
100
100
 
101
101
  it 'should return false if security answer given does not match the one stored' do
102
- tmwa = FactoryGirl.create :test_model_with_attribute, security_answer: 'some answer', security_answer_confirmation: 'some answer'
103
- tmwa.authenticate_security_answer('some other answer').should be_false
102
+ tmwa = FactoryBot.create :test_model_with_attribute, security_answer: 'some answer', security_answer_confirmation: 'some answer'
103
+ expect(tmwa.authenticate_security_answer('some other answer')).to eq(false)
104
104
  end
105
105
  end
106
106
  end
107
107
 
108
108
  describe TestModelWithAttributeNoValidation do
109
- it { should respond_to(:security_answer) }
110
- it { should respond_to(:security_answer=) }
111
- it { should_not respond_to(:security_answer_confirmation) }
112
- it { should_not respond_to(:security_answer_confirmation=) }
113
- it { should respond_to(:authenticate_security_answer) }
109
+ it { expect(subject).to respond_to(:security_answer) }
110
+ it { expect(subject).to respond_to(:security_answer=) }
111
+ it { expect(subject).to_not respond_to(:security_answer_confirmation) }
112
+ it { expect(subject).to_not respond_to(:security_answer_confirmation=) }
113
+ it { expect(subject).to respond_to(:authenticate_security_answer) }
114
114
 
115
115
  it 'should not require security answer on create' do
116
- subject.should be_new_record
116
+ expect(subject).to be_new_record
117
117
  subject.security_answer = nil
118
118
  subject.valid?
119
- subject.errors[:security_answer].should be_blank
119
+ expect(subject.errors[:security_answer]).to be_blank
120
120
  end
121
121
 
122
122
  it 'should not require security answer confirmation if security answer given ' do
123
123
  subject.security_answer = 'hello there'
124
124
  subject.valid?
125
- subject.errors[:security_answer_confirmation].should be_blank
125
+ expect(subject.errors[:security_answer_confirmation]).to be_blank
126
126
  end
127
127
 
128
128
  it 'should not require security answer confirmation if security answer is not given' do
129
129
  subject.security_answer = ''
130
130
  subject.valid?
131
- subject.errors[:security_answer_confirmation].should be_blank
131
+ expect(subject.errors[:security_answer_confirmation]).to be_blank
132
132
  end
133
133
 
134
134
  it 'should not require security answer digest on create' do
135
- subject = FactoryGirl.build :test_model_with_attribute_no_validation
136
- subject.should be_new_record
135
+ subject = FactoryBot.build :test_model_with_attribute_no_validation
136
+ expect(subject).to be_new_record
137
137
 
138
138
  # change the security_answer_digest to verify the test
139
139
  subject.security_answer_digest = ''
@@ -141,8 +141,8 @@ describe TestModelWithAttributeNoValidation do
141
141
  end
142
142
 
143
143
  it 'should not require security answer digest on update' do
144
- subject = FactoryGirl.build :test_model_with_attribute_no_validation
145
- subject.should be_new_record
144
+ subject = FactoryBot.build :test_model_with_attribute_no_validation
145
+ expect(subject).to be_new_record
146
146
 
147
147
  subject.save!
148
148
 
@@ -152,49 +152,49 @@ describe TestModelWithAttributeNoValidation do
152
152
  subject.save!
153
153
 
154
154
  subject.reload
155
- subject.security_answer_digest.should be_blank
155
+ expect(subject.security_answer_digest).to be_blank
156
156
  end
157
157
  end
158
158
 
159
159
  describe TestModelWithAttributeProtectSetterForDigest do
160
160
  it 'should not allow to call security answer digest directly' do
161
- lambda do
161
+ expect do
162
162
  subject.security_answer_digest = 'hello'
163
- end.should raise_error NoMethodError
163
+ end.to raise_error NoMethodError
164
164
  end
165
165
  end
166
166
 
167
167
  describe TestModelWithAttributeWithCaseSensitive do
168
168
  it 'should authenticate even if answer is of different case' do
169
- t = FactoryGirl.create :test_model_with_attribute_with_case_sensitive, security_answer: 'Answer', security_answer_confirmation: 'Answer'
169
+ t = FactoryBot.create :test_model_with_attribute_with_case_sensitive, security_answer: 'Answer', security_answer_confirmation: 'Answer'
170
170
 
171
- t.authenticate_security_answer('answer').should eq t
171
+ expect(t.authenticate_security_answer('answer')).to eq t
172
172
  end
173
173
  end
174
174
 
175
175
  describe TestModelWithAttributeDisableConfirmation do
176
- it { should_not respond_to(:security_answer_confirmation) }
177
- it { should_not respond_to(:security_answer_confirmation=) }
176
+ it { expect(subject).to_not respond_to(:security_answer_confirmation) }
177
+ it { expect(subject).to_not respond_to(:security_answer_confirmation=) }
178
178
  it 'should allow to create and save without any confirmation on security answer' do
179
- t = FactoryGirl.create :test_model_with_attribute_disable_confirmation, security_answer: 'Answer'
179
+ t = FactoryBot.create :test_model_with_attribute_disable_confirmation, security_answer: 'Answer'
180
180
  t.save!
181
- t.authenticate_security_answer('another answer').should be_false
182
- t.authenticate_security_answer('Answer').should eq t
181
+ expect(t.authenticate_security_answer('another answer')).to eq(false)
182
+ expect(t.authenticate_security_answer('Answer')).to eq(t)
183
183
  end
184
184
  end
185
185
 
186
186
  describe TestModelWithAlternativeSyntax do
187
- it { should respond_to(:username) }
188
- it { should respond_to(:username=) }
189
- it { should respond_to(:username_confirmation) }
190
- it { should respond_to(:username_confirmation=) }
191
- it { should respond_to(:authenticate_username) }
187
+ it { expect(subject).to respond_to(:username) }
188
+ it { expect(subject).to respond_to(:username=) }
189
+ it { expect(subject).to respond_to(:username_confirmation) }
190
+ it { expect(subject).to respond_to(:username_confirmation=) }
191
+ it { expect(subject).to respond_to(:authenticate_username) }
192
192
 
193
193
  context "with no validation" do
194
- it { should respond_to(:security_answer) }
195
- it { should respond_to(:security_answer=) }
196
- it { should_not respond_to(:security_answer_confirmation) }
197
- it { should_not respond_to(:security_answer_confirmation=) }
198
- it { should respond_to(:authenticate_security_answer) }
194
+ it { expect(subject).to respond_to(:security_answer) }
195
+ it { expect(subject).to respond_to(:security_answer=) }
196
+ it { expect(subject).to_not respond_to(:security_answer_confirmation) }
197
+ it { expect(subject).to_not respond_to(:security_answer_confirmation=) }
198
+ it { expect(subject).to respond_to(:authenticate_security_answer) }
199
199
  end
200
200
  end
data/spec/spec_helper.rb CHANGED
@@ -11,8 +11,8 @@ require File.expand_path("../models/test_model_with_attribute_with_case_sensitiv
11
11
  require File.expand_path("../models/test_model_with_attribute_disable_confirmation", __FILE__)
12
12
  require File.expand_path("../models/test_model_with_alternative_syntax", __FILE__)
13
13
 
14
- require 'factory_girl'
15
- FactoryGirl.find_definitions
14
+ require 'factory_bot'
15
+ FactoryBot.find_definitions
16
16
  require 'database_cleaner'
17
17
 
18
18
  RSpec.configure do |config|
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: has_secure_attribute
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.4.0
4
+ version: 1.0.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Panayotis Matsinopoulos
@@ -14,100 +14,112 @@ dependencies:
14
14
  name: activerecord
15
15
  requirement: !ruby/object:Gem::Requirement
16
16
  requirements:
17
- - - '>='
17
+ - - "~>"
18
18
  - !ruby/object:Gem::Version
19
- version: '0'
19
+ version: '5.1'
20
20
  type: :runtime
21
21
  prerelease: false
22
22
  version_requirements: !ruby/object:Gem::Requirement
23
23
  requirements:
24
- - - '>='
24
+ - - "~>"
25
25
  - !ruby/object:Gem::Version
26
- version: '0'
26
+ version: '5.1'
27
27
  - !ruby/object:Gem::Dependency
28
28
  name: bcrypt-ruby
29
29
  requirement: !ruby/object:Gem::Requirement
30
30
  requirements:
31
- - - ~>
31
+ - - "~>"
32
32
  - !ruby/object:Gem::Version
33
- version: 3.0.0
33
+ version: '3.1'
34
34
  type: :runtime
35
35
  prerelease: false
36
36
  version_requirements: !ruby/object:Gem::Requirement
37
37
  requirements:
38
- - - ~>
38
+ - - "~>"
39
39
  - !ruby/object:Gem::Version
40
- version: 3.0.0
40
+ version: '3.1'
41
41
  - !ruby/object:Gem::Dependency
42
42
  name: rake
43
43
  requirement: !ruby/object:Gem::Requirement
44
44
  requirements:
45
- - - '>='
45
+ - - "~>"
46
46
  - !ruby/object:Gem::Version
47
- version: '0'
47
+ version: '12.0'
48
48
  type: :development
49
49
  prerelease: false
50
50
  version_requirements: !ruby/object:Gem::Requirement
51
51
  requirements:
52
- - - '>='
52
+ - - "~>"
53
53
  - !ruby/object:Gem::Version
54
- version: '0'
54
+ version: '12.0'
55
55
  - !ruby/object:Gem::Dependency
56
56
  name: rspec
57
57
  requirement: !ruby/object:Gem::Requirement
58
58
  requirements:
59
- - - '>='
59
+ - - "~>"
60
60
  - !ruby/object:Gem::Version
61
- version: '0'
61
+ version: '3.0'
62
62
  type: :development
63
63
  prerelease: false
64
64
  version_requirements: !ruby/object:Gem::Requirement
65
65
  requirements:
66
- - - '>='
66
+ - - "~>"
67
67
  - !ruby/object:Gem::Version
68
- version: '0'
68
+ version: '3.0'
69
69
  - !ruby/object:Gem::Dependency
70
70
  name: mysql2
71
71
  requirement: !ruby/object:Gem::Requirement
72
72
  requirements:
73
- - - '>='
73
+ - - "~>"
74
74
  - !ruby/object:Gem::Version
75
- version: '0'
75
+ version: 0.4.0
76
76
  type: :development
77
77
  prerelease: false
78
78
  version_requirements: !ruby/object:Gem::Requirement
79
79
  requirements:
80
- - - '>='
80
+ - - "~>"
81
81
  - !ruby/object:Gem::Version
82
- version: '0'
82
+ version: 0.4.0
83
83
  - !ruby/object:Gem::Dependency
84
- name: factory_girl
84
+ name: factory_bot
85
85
  requirement: !ruby/object:Gem::Requirement
86
86
  requirements:
87
- - - '>='
87
+ - - "~>"
88
88
  - !ruby/object:Gem::Version
89
- version: '0'
89
+ version: '4.8'
90
+ - - ">="
91
+ - !ruby/object:Gem::Version
92
+ version: 4.8.0
90
93
  type: :development
91
94
  prerelease: false
92
95
  version_requirements: !ruby/object:Gem::Requirement
93
96
  requirements:
94
- - - '>='
97
+ - - "~>"
98
+ - !ruby/object:Gem::Version
99
+ version: '4.8'
100
+ - - ">="
95
101
  - !ruby/object:Gem::Version
96
- version: '0'
102
+ version: 4.8.0
97
103
  - !ruby/object:Gem::Dependency
98
104
  name: database_cleaner
99
105
  requirement: !ruby/object:Gem::Requirement
100
106
  requirements:
101
- - - '>='
107
+ - - "~>"
108
+ - !ruby/object:Gem::Version
109
+ version: '1.6'
110
+ - - ">="
102
111
  - !ruby/object:Gem::Version
103
- version: '0'
112
+ version: 1.6.0
104
113
  type: :development
105
114
  prerelease: false
106
115
  version_requirements: !ruby/object:Gem::Requirement
107
116
  requirements:
108
- - - '>='
117
+ - - "~>"
109
118
  - !ruby/object:Gem::Version
110
- version: '0'
119
+ version: '1.6'
120
+ - - ">="
121
+ - !ruby/object:Gem::Version
122
+ version: 1.6.0
111
123
  description: Does what `has_secure_password` does, but for any attribute that you
112
124
  want. It does not have to be a `password` attribute. It may be for example `security_answer`
113
125
  email:
@@ -116,23 +128,23 @@ executables: []
116
128
  extensions: []
117
129
  extra_rdoc_files: []
118
130
  files:
131
+ - MIT
132
+ - README.md
119
133
  - lib/active_model/secure_attribute/has_secure_attribute.rb
120
134
  - lib/has_secure_attribute.rb
121
135
  - lib/has_secure_attribute/version.rb
122
- - spec/spec_helper.rb
123
- - spec/factories/test_model_with_attributes.rb
124
136
  - spec/config/database.yml
137
+ - spec/db/migrate/create_test_model_with_attributes.rb
138
+ - spec/db/migrate/db_helper.rb
139
+ - spec/factories/test_model_with_attributes.rb
125
140
  - spec/models/has_secure_attribute_spec.rb
126
- - spec/models/test_model_with_attribute_no_validation.rb
127
- - spec/models/test_model_with_attribute_protect_setter_for_digest.rb
128
141
  - spec/models/test_model_with_alternative_syntax.rb
129
- - spec/models/test_model_with_attribute_disable_confirmation.rb
130
142
  - spec/models/test_model_with_attribute.rb
143
+ - spec/models/test_model_with_attribute_disable_confirmation.rb
144
+ - spec/models/test_model_with_attribute_no_validation.rb
145
+ - spec/models/test_model_with_attribute_protect_setter_for_digest.rb
131
146
  - spec/models/test_model_with_attribute_with_case_sensitive.rb
132
- - spec/db/migrate/db_helper.rb
133
- - spec/db/migrate/create_test_model_with_attributes.rb
134
- - README.md
135
- - MIT
147
+ - spec/spec_helper.rb
136
148
  homepage: https://github.com/pmatsinopoulos/has_secure_attribute
137
149
  licenses:
138
150
  - MIT
@@ -143,17 +155,17 @@ require_paths:
143
155
  - lib
144
156
  required_ruby_version: !ruby/object:Gem::Requirement
145
157
  requirements:
146
- - - '>='
158
+ - - ">="
147
159
  - !ruby/object:Gem::Version
148
160
  version: '0'
149
161
  required_rubygems_version: !ruby/object:Gem::Requirement
150
162
  requirements:
151
- - - '>='
163
+ - - ">="
152
164
  - !ruby/object:Gem::Version
153
165
  version: '0'
154
166
  requirements: []
155
167
  rubyforge_project:
156
- rubygems_version: 2.0.3
168
+ rubygems_version: 2.6.14
157
169
  signing_key:
158
170
  specification_version: 4
159
171
  summary: Allows an ActiveRecord::Base class to declare an attribute that will be saved