passwd 0.3.0 → 0.4.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
- SHA1:
3
- metadata.gz: 4315761117ee941709bb71c7eb31757f2a5b7ec2
4
- data.tar.gz: ad9db1a83f918d12d53a6ac15f4d3cb39e8f3c9b
2
+ SHA256:
3
+ metadata.gz: f9a0399d0e6b478da6e96ad38e2806fb32199bae624d5bddf4abd5093d652cf8
4
+ data.tar.gz: 6b7a805295dcd19b924156838b24463cbdd9bf233280027cf3ce49d4abeeb9df
5
5
  SHA512:
6
- metadata.gz: d8025a6e85f67eacdf856281b17ceef650fb354e48fbafe1a4c06c979a7d2e1bf98ed1e4d812d3429b141945f1f7cbb0bcd7652b1ca65a288ba0583ba7ad971c
7
- data.tar.gz: 780295751daffe7ebda019356f62aac1f56fe5a388b09281d8a8889654feb5d97d2f527c0de3c85f8344e1e41351887068202493d1cb5994022bfda4ebe83a71
6
+ metadata.gz: 99d186d8eb981e43d3ece62f8d96c74ec84cb328d5d5fc56338d322cd9e0cef8f626ef405647eaad01e5cb0fda7e1af3f077beed16ec2fe9adc2798bc3ad9fa7
7
+ data.tar.gz: 7498777e9c67f19b18be0e4c1119fa810551bc4a2fc01411ac1ada816879fce1c2b16d9f31635e1f0426aa2c1486af985dc5b47894529a3b31e657457b5ec748
@@ -0,0 +1,28 @@
1
+ # This workflow uses actions that are not certified by GitHub.
2
+ # They are provided by a third-party and are governed by
3
+ # separate terms of service, privacy policy, and support
4
+ # documentation.
5
+ # This workflow will download a prebuilt Ruby version, install dependencies and run tests with Rake
6
+ # For more information see: https://github.com/marketplace/actions/setup-ruby-jruby-and-truffleruby
7
+
8
+ name: CI
9
+ on:
10
+ push:
11
+ branches: [ master ]
12
+ pull_request:
13
+ branches: [ master ]
14
+ jobs:
15
+ test:
16
+ runs-on: ubuntu-latest
17
+ steps:
18
+ - uses: actions/checkout@v2
19
+ - name: Set up Ruby
20
+ uses: ruby/setup-ruby@v1
21
+ with:
22
+ ruby-version: 2.7.2
23
+ - name: Install dependencies
24
+ run: bundle install
25
+ - name: Run tests
26
+ run: bundle exec rake spec
27
+ - name: Run rubocop
28
+ run: bundle exec rake rubocop
data/.gitignore CHANGED
@@ -8,3 +8,4 @@
8
8
  /tmp/
9
9
 
10
10
  /Gemfile.lock
11
+ /.rspec_status
data/.rubocop.yml ADDED
@@ -0,0 +1,168 @@
1
+ AllCops:
2
+ NewCops: enable
3
+ TargetRubyVersion: 2.7
4
+ Exclude:
5
+ - "node_modules/**/*"
6
+ - "vendor/**/*"
7
+
8
+ # Private methods indent.
9
+ Layout/IndentationConsistency:
10
+ EnforcedStyle: indented_internal_methods
11
+
12
+ # Warning: 120 characters
13
+ # Error: 160 characters
14
+ # Make the library more restrictive.
15
+ Layout/LineLength:
16
+ Max: 120
17
+
18
+ # Multi-line indentation with receiver.
19
+ Layout/MultilineMethodCallIndentation:
20
+ EnforcedStyle: indented_relative_to_receiver
21
+
22
+ Layout/SpaceInsideBlockBraces:
23
+ SpaceBeforeBlockParameters: false
24
+
25
+ Lint/AmbiguousBlockAssociation:
26
+ Exclude:
27
+ - "spec/**/*_spec.rb"
28
+
29
+ # May define constants within the block in spec.
30
+ Lint/ConstantDefinitionInBlock:
31
+ Exclude:
32
+ - "spec/**/*_spec.rb"
33
+
34
+ Lint/InheritException:
35
+ EnforcedStyle: standard_error
36
+
37
+ Lint/UnderscorePrefixedVariableName:
38
+ Enabled: false
39
+
40
+ Lint/UnusedMethodArgument:
41
+ Enabled: false
42
+
43
+ Metrics/AbcSize:
44
+ Max: 24
45
+
46
+ Metrics/BlockLength:
47
+ Exclude:
48
+ - "spec/**/*.rb"
49
+ - "Gemfile"
50
+ - "*.gemspec"
51
+
52
+ Metrics/CyclomaticComplexity:
53
+ Max: 10
54
+
55
+ Metrics/MethodLength:
56
+ Max: 20
57
+
58
+ Security/YAMLLoad:
59
+ Enabled: false
60
+
61
+ Style/Alias:
62
+ EnforcedStyle: prefer_alias_method
63
+
64
+ Style/AndOr:
65
+ EnforcedStyle: conditionals
66
+
67
+ Style/AsciiComments:
68
+ Enabled: false
69
+
70
+ Style/BlockDelimiters:
71
+ Enabled: false
72
+
73
+ Style/ClassAndModuleChildren:
74
+ Enabled: false
75
+
76
+ Style/CollectionMethods:
77
+ PreferredMethods:
78
+ detect: "detect"
79
+ find: "detect"
80
+ inject: "inject"
81
+ reduce: "inject"
82
+
83
+ Style/Documentation:
84
+ Enabled: false
85
+
86
+ Style/DoubleNegation:
87
+ Enabled: false
88
+
89
+ Style/EmptyCaseCondition:
90
+ Enabled: false
91
+
92
+ Style/EmptyElse:
93
+ EnforcedStyle: empty
94
+
95
+ Style/EmptyMethod:
96
+ EnforcedStyle: expanded
97
+
98
+ Style/FormatString:
99
+ EnforcedStyle: percent
100
+
101
+ # Do not use frozen_string_literal comment.
102
+ Style/FrozenStringLiteralComment:
103
+ Enabled: false
104
+
105
+ Style/HashSyntax:
106
+ Exclude:
107
+ - "Rakefile"
108
+
109
+ Style/MultilineBlockChain:
110
+ Enabled: false
111
+
112
+ Style/MixinUsage:
113
+ Exclude:
114
+ - "bin/setup"
115
+
116
+ # Use _ when 7 digits or more.
117
+ Style/NumericLiterals:
118
+ MinDigits: 7
119
+ Strict: true
120
+
121
+ Style/NumericPredicate:
122
+ Enabled: false
123
+
124
+ Style/OrAssignment:
125
+ Enabled: false
126
+
127
+ Style/PercentLiteralDelimiters:
128
+ Enabled: false
129
+
130
+ # `has_xxx?` is more readable.
131
+ Style/PreferredHashMethods:
132
+ EnforcedStyle: verbose
133
+
134
+ # Do not use unnecessary returns. (Allow to return multiple values.)
135
+ Style/RedundantReturn:
136
+ AllowMultipleReturnValues: true
137
+
138
+ # Do not specify error class when rescuing StandardError.
139
+ Style/RescueStandardError:
140
+ EnforcedStyle: implicit
141
+
142
+ # String literals use double quotes.
143
+ Style/StringLiterals:
144
+ EnforcedStyle: double_quotes
145
+
146
+ # String literal inside the string interpolation use double quotes too.
147
+ Style/StringLiteralsInInterpolation:
148
+ EnforcedStyle: double_quotes
149
+
150
+ # Percent(`%i(a b)`) and brackets(`[:a, :b]`) are acceptable.
151
+ Style/SymbolArray:
152
+ Enabled: false
153
+
154
+ # Put a trailing comma in argument list.
155
+ Style/TrailingCommaInArguments:
156
+ EnforcedStyleForMultiline: comma
157
+
158
+ # Put a trailing comma in Array literal.
159
+ Style/TrailingCommaInArrayLiteral:
160
+ EnforcedStyleForMultiline: comma
161
+
162
+ # Put a trailing comma in Hash literal.
163
+ Style/TrailingCommaInHashLiteral:
164
+ EnforcedStyleForMultiline: comma
165
+
166
+ # Percent(`%w(a b)`) and brackets(`["a", "b"]`) are acceptable.
167
+ Style/WordArray:
168
+ Enabled: false
data/.ruby-version ADDED
@@ -0,0 +1 @@
1
+ 2.7.2
data/README.md CHANGED
@@ -36,7 +36,10 @@ See [config](https://github.com/i2bskn/passwd/blob/master/lib/generators/passwd/
36
36
  ```ruby
37
37
  passwd = Passwd.current
38
38
  passwd.random(10) # Create random password of 10 characters.
39
- passwd.hashed_password("secret", "salt") # Create hashed password with stretching.
39
+ password = passwd.password_hashing("secret") # Create hashed password from plain text.
40
+ password == "secret" # => true
41
+ load_password = passwd.load_password("hashed_password") # Load hashed password.
42
+ load_password == "secret"
40
43
  ```
41
44
 
42
45
  ### ActiveRecord with Rails
@@ -56,7 +59,6 @@ User model The following column are required.
56
59
  Column name can be changed with the specified options.
57
60
 
58
61
  - `:id => :email` Unique value to be used for authentication.
59
- - `:salt => :salt` Column of String to save the salt.
60
62
  - `:password => :password` Column of String to save the hashed password.
61
63
 
62
64
  Use the `name` column as id.
data/Rakefile CHANGED
@@ -1,10 +1,8 @@
1
1
  require "bundler/gem_tasks"
2
- require "rake/testtask"
2
+ require "rspec/core/rake_task"
3
+ require "rubocop/rake_task"
3
4
 
4
- Rake::TestTask.new(:test) do |t|
5
- t.libs << "test"
6
- t.libs << "lib"
7
- t.test_files = FileList["test/**/*_test.rb"]
8
- end
5
+ RSpec::Core::RakeTask.new(:spec)
6
+ RuboCop::RakeTask.new
9
7
 
10
- task :default => :test
8
+ task :default => %i(spec rubocop)
@@ -1,11 +1,8 @@
1
1
  Passwd.current.config.tap do |config|
2
- # Hashing algorithm
3
- # Supported algorithm is :md5, :rmd160, :sha1, :sha256, :sha384 and :sha512
4
- # config.algorithm = :sha512
5
-
6
2
  # Number of hashed by stretching
7
- # Not stretching if specified nil or 0.
8
- # config.stretching = 100
3
+ # Minimum is 4, maximum is 31, default is 12.
4
+ # See also BCrypt::Engine
5
+ # config.stretching = 12
9
6
 
10
7
  # Random generate password length
11
8
  # config.length = 10
@@ -22,6 +19,3 @@ end
22
19
 
23
20
  # Redirect path when not signin
24
21
  # Rails.application.config.passwd.signin_path = :signin_path
25
-
26
- # Salt generation logic
27
- # Rails.application.config.passwd.random_salt = proc { SecureRandom.uuid }
data/lib/passwd.rb CHANGED
@@ -1,6 +1,4 @@
1
- require "digest"
2
- require "securerandom"
3
-
1
+ require "bcrypt"
4
2
  require "passwd/version"
5
3
  require "passwd/errors"
6
4
  require "passwd/config"
@@ -12,32 +10,26 @@ class Passwd
12
10
  @current ||= new
13
11
  end
14
12
 
15
- def current=(passwd)
16
- @current = passwd
17
- end
13
+ attr_writer :current
18
14
  end
19
15
 
20
16
  def initialize(conf = nil)
21
17
  @config = conf
22
18
  end
23
19
 
24
- def hashed_password(plain, salt)
25
- config.stretching.to_i.times.with_object([digest_class.hexdigest([plain, salt].join)]) { |_, pass|
26
- pass[0] = digest_class.hexdigest(pass[0])
27
- }.first
20
+ def password_hashing(plain)
21
+ BCrypt::Password.create(plain, cost: config.stretching.clamp(BCrypt::Engine::MIN_COST, BCrypt::Engine::MAX_COST))
22
+ end
23
+
24
+ def load_password(hashed_password)
25
+ BCrypt::Password.new(hashed_password)
28
26
  end
29
27
 
30
- def random(n = nil)
31
- Array.new(n || config.length) { config.characters[rand(config.characters.size)] }.join
28
+ def random(long = nil)
29
+ Array.new(long || config.length) { config.characters[rand(config.characters.size)] }.join
32
30
  end
33
31
 
34
32
  def config
35
33
  @config ||= Config.new
36
34
  end
37
-
38
- private
39
-
40
- def digest_class
41
- Digest.const_get(config.algorithm.upcase)
42
- end
43
35
  end
data/lib/passwd/config.rb CHANGED
@@ -1,13 +1,12 @@
1
1
  class Passwd
2
2
  class Config
3
3
  VALID_OPTIONS = [
4
- :algorithm,
5
4
  :stretching,
6
5
  :length,
7
6
  :characters,
8
7
  ].freeze
9
8
 
10
- attr_accessor *VALID_OPTIONS
9
+ attr_accessor(*VALID_OPTIONS)
11
10
 
12
11
  def initialize(options = {})
13
12
  reset
@@ -15,13 +14,12 @@ class Passwd
15
14
  end
16
15
 
17
16
  def merge(options)
18
- options.keys.each { |key| send("#{key}=", options[key]) }
17
+ options.each_key {|key| send("#{key}=", options[key]) }
19
18
  self
20
19
  end
21
20
 
22
21
  def reset
23
- @algorithm = :sha512
24
- @stretching = 100
22
+ @stretching = 12
25
23
  @length = 10
26
24
  @characters = [("a".."z"), ("A".."Z"), ("0".."9")].map(&:to_a).flatten
27
25
  end
data/lib/passwd/errors.rb CHANGED
@@ -1,3 +1,4 @@
1
1
  class Passwd
2
2
  class UnauthorizedAccess < StandardError; end
3
+ class ContainsBinaryCharacter < StandardError; end
3
4
  end
@@ -33,16 +33,17 @@ module Passwd::Rails
33
33
  end
34
34
 
35
35
  def redirect_to_referer_or(path, options = {})
36
- redirect_to session[:referer].presence || path, **options
36
+ redirect_to session[:signin_referer].presence || path, **options
37
37
  end
38
38
 
39
39
  def require_signin
40
- unless signin?
41
- path = _signin_path
42
- raise UnauthorizedAccess unless path
43
- session[:referer] = request.fullpath
44
- redirect_to path
45
- end
40
+ return if signin?
41
+
42
+ path = _signin_path
43
+ raise UnauthorizedAccess unless path
44
+
45
+ session[:signin_referer] = request.fullpath
46
+ redirect_to path
46
47
  end
47
48
 
48
49
  def passwd_auth_class
@@ -1,10 +1,10 @@
1
1
  module Passwd::Rails
2
2
  module ActiveRecordExt
3
- def with_authenticate(passwd: nil, user_id: :email, salt: :salt, password: :password)
3
+ def with_authenticate(passwd: nil, user_id: :email, password: :password)
4
4
  passwd ||= Passwd.current
5
5
  define_singleton_auth_with_passwd(user_id)
6
- define_instance_auth_with_passwd(passwd, salt, password)
7
- define_instance_set_password(passwd, salt, password)
6
+ define_instance_auth_with_passwd(passwd, password)
7
+ define_instance_set_password(passwd, password)
8
8
  end
9
9
 
10
10
  private
@@ -18,18 +18,16 @@ module Passwd::Rails
18
18
  end
19
19
  end
20
20
 
21
- def define_instance_auth_with_passwd(passwd, salt_col, password_col)
21
+ def define_instance_auth_with_passwd(passwd, password_col)
22
22
  define_method :authenticate do |plain|
23
- passwd.hashed_password(plain, send(salt_col)) == send(password_col)
23
+ BCrypt::Password.new(send(password_col)) == plain
24
24
  end
25
25
  end
26
26
 
27
- def define_instance_set_password(passwd, salt_col, password_col)
27
+ def define_instance_set_password(passwd, password_col)
28
28
  define_method :set_password do |plain = nil|
29
29
  plain ||= passwd.random
30
- random_salt = Rails.application.config.passwd.random_salt || proc { SecureRandom.uuid }
31
- send("#{salt_col}=", random_salt.call(self)) unless send(salt_col)
32
- send("#{password_col}=", passwd.hashed_password(plain, send(salt_col)))
30
+ send("#{password_col}=", passwd.password_hashing(plain))
33
31
  plain
34
32
  end
35
33
  end
@@ -7,11 +7,11 @@ class Passwd
7
7
  require "passwd/rails/active_record_ext"
8
8
 
9
9
  ActiveSupport.on_load(:action_controller) do
10
- ::ActionController::Base.send(:include, ::Passwd::Rails::ActionControllerExt)
10
+ ::ActionController::Base.include ::Passwd::Rails::ActionControllerExt
11
11
  end
12
12
 
13
13
  ActiveSupport.on_load(:active_record) do
14
- ::ActiveRecord::Base.send(:extend, Passwd::Rails::ActiveRecordExt)
14
+ ::ActiveRecord::Base.extend Passwd::Rails::ActiveRecordExt
15
15
  end
16
16
  end
17
17
  end
@@ -1,4 +1,3 @@
1
1
  class Passwd
2
- VERSION = "0.3.0".freeze
2
+ VERSION = "0.4.0".freeze
3
3
  end
4
-
data/passwd.gemspec CHANGED
@@ -1,4 +1,4 @@
1
- lib = File.expand_path("../lib", __FILE__)
1
+ lib = File.expand_path("lib", __dir__)
2
2
  $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
3
3
  require "passwd/version"
4
4
 
@@ -6,10 +6,10 @@ Gem::Specification.new do |spec|
6
6
  spec.name = "passwd"
7
7
  spec.version = Passwd::VERSION
8
8
  spec.authors = ["i2bskn"]
9
- spec.email = ["i2bskn@gmail.com"]
9
+ spec.email = ["iiboshi@craftake.co.jp"]
10
10
 
11
- spec.description = %q{Passwd is provide hashed password creation and authentication.}
12
- spec.summary = %q{Passwd is provide hashed password creation and authentication.}
11
+ spec.description = "Passwd is provide hashed password creation and authentication."
12
+ spec.summary = "Passwd is provide hashed password creation and authentication."
13
13
  spec.homepage = "https://github.com/i2bskn/passwd"
14
14
  spec.license = "MIT"
15
15
 
@@ -18,11 +18,15 @@ Gem::Specification.new do |spec|
18
18
  end
19
19
 
20
20
  spec.bindir = "exe"
21
- spec.executables = spec.files.grep(%r{^exe/}) { |f| File.basename(f) }
21
+ spec.executables = spec.files.grep(%r{^exe/}) {|f| File.basename(f) }
22
22
  spec.require_paths = ["lib"]
23
23
 
24
- spec.add_development_dependency "bundler"
25
- spec.add_development_dependency "rake"
26
- spec.add_development_dependency "minitest", "~> 5.0"
27
- spec.add_development_dependency "pry"
24
+ spec.required_ruby_version = ">= 2.7.0"
25
+
26
+ spec.add_dependency "bcrypt", "~> 3.1.0"
27
+ spec.add_development_dependency "bundler", ">= 2.1.0"
28
+ spec.add_development_dependency "pry", "~> 0.14.0"
29
+ spec.add_development_dependency "rake", "~> 13.0.0"
30
+ spec.add_development_dependency "rspec", "~> 3.10.0"
31
+ spec.add_development_dependency "rubocop", "1.11.0"
28
32
  end
metadata CHANGED
@@ -1,80 +1,110 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: passwd
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.3.0
4
+ version: 0.4.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - i2bskn
8
- autorequire:
8
+ autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2018-07-23 00:00:00.000000000 Z
11
+ date: 2021-03-18 00:00:00.000000000 Z
12
12
  dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: bcrypt
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - "~>"
18
+ - !ruby/object:Gem::Version
19
+ version: 3.1.0
20
+ type: :runtime
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - "~>"
25
+ - !ruby/object:Gem::Version
26
+ version: 3.1.0
13
27
  - !ruby/object:Gem::Dependency
14
28
  name: bundler
15
29
  requirement: !ruby/object:Gem::Requirement
16
30
  requirements:
17
31
  - - ">="
18
32
  - !ruby/object:Gem::Version
19
- version: '0'
33
+ version: 2.1.0
20
34
  type: :development
21
35
  prerelease: false
22
36
  version_requirements: !ruby/object:Gem::Requirement
23
37
  requirements:
24
38
  - - ">="
25
39
  - !ruby/object:Gem::Version
26
- version: '0'
40
+ version: 2.1.0
41
+ - !ruby/object:Gem::Dependency
42
+ name: pry
43
+ requirement: !ruby/object:Gem::Requirement
44
+ requirements:
45
+ - - "~>"
46
+ - !ruby/object:Gem::Version
47
+ version: 0.14.0
48
+ type: :development
49
+ prerelease: false
50
+ version_requirements: !ruby/object:Gem::Requirement
51
+ requirements:
52
+ - - "~>"
53
+ - !ruby/object:Gem::Version
54
+ version: 0.14.0
27
55
  - !ruby/object:Gem::Dependency
28
56
  name: rake
29
57
  requirement: !ruby/object:Gem::Requirement
30
58
  requirements:
31
- - - ">="
59
+ - - "~>"
32
60
  - !ruby/object:Gem::Version
33
- version: '0'
61
+ version: 13.0.0
34
62
  type: :development
35
63
  prerelease: false
36
64
  version_requirements: !ruby/object:Gem::Requirement
37
65
  requirements:
38
- - - ">="
66
+ - - "~>"
39
67
  - !ruby/object:Gem::Version
40
- version: '0'
68
+ version: 13.0.0
41
69
  - !ruby/object:Gem::Dependency
42
- name: minitest
70
+ name: rspec
43
71
  requirement: !ruby/object:Gem::Requirement
44
72
  requirements:
45
73
  - - "~>"
46
74
  - !ruby/object:Gem::Version
47
- version: '5.0'
75
+ version: 3.10.0
48
76
  type: :development
49
77
  prerelease: false
50
78
  version_requirements: !ruby/object:Gem::Requirement
51
79
  requirements:
52
80
  - - "~>"
53
81
  - !ruby/object:Gem::Version
54
- version: '5.0'
82
+ version: 3.10.0
55
83
  - !ruby/object:Gem::Dependency
56
- name: pry
84
+ name: rubocop
57
85
  requirement: !ruby/object:Gem::Requirement
58
86
  requirements:
59
- - - ">="
87
+ - - '='
60
88
  - !ruby/object:Gem::Version
61
- version: '0'
89
+ version: 1.11.0
62
90
  type: :development
63
91
  prerelease: false
64
92
  version_requirements: !ruby/object:Gem::Requirement
65
93
  requirements:
66
- - - ">="
94
+ - - '='
67
95
  - !ruby/object:Gem::Version
68
- version: '0'
96
+ version: 1.11.0
69
97
  description: Passwd is provide hashed password creation and authentication.
70
98
  email:
71
- - i2bskn@gmail.com
99
+ - iiboshi@craftake.co.jp
72
100
  executables: []
73
101
  extensions: []
74
102
  extra_rdoc_files: []
75
103
  files:
104
+ - ".github/workflows/ci.yml"
76
105
  - ".gitignore"
77
- - ".travis.yml"
106
+ - ".rubocop.yml"
107
+ - ".ruby-version"
78
108
  - Gemfile
79
109
  - LICENSE
80
110
  - README.md
@@ -96,7 +126,7 @@ homepage: https://github.com/i2bskn/passwd
96
126
  licenses:
97
127
  - MIT
98
128
  metadata: {}
99
- post_install_message:
129
+ post_install_message:
100
130
  rdoc_options: []
101
131
  require_paths:
102
132
  - lib
@@ -104,16 +134,15 @@ required_ruby_version: !ruby/object:Gem::Requirement
104
134
  requirements:
105
135
  - - ">="
106
136
  - !ruby/object:Gem::Version
107
- version: '0'
137
+ version: 2.7.0
108
138
  required_rubygems_version: !ruby/object:Gem::Requirement
109
139
  requirements:
110
140
  - - ">="
111
141
  - !ruby/object:Gem::Version
112
142
  version: '0'
113
143
  requirements: []
114
- rubyforge_project:
115
- rubygems_version: 2.6.11
116
- signing_key:
144
+ rubygems_version: 3.1.4
145
+ signing_key:
117
146
  specification_version: 4
118
147
  summary: Passwd is provide hashed password creation and authentication.
119
148
  test_files: []
data/.travis.yml DELETED
@@ -1,5 +0,0 @@
1
- sudo: false
2
- language: ruby
3
- rvm:
4
- - 2.5.1
5
- before_install: gem install bundler -v 1.16.2