has_secure_attribute 0.4.0 → 1.0.0

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
  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