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 +5 -5
- data/.github/workflows/ci.yml +28 -0
- data/.gitignore +1 -0
- data/.rubocop.yml +168 -0
- data/.ruby-version +1 -0
- data/README.md +4 -2
- data/Rakefile +5 -7
- data/lib/generators/passwd/install/templates/passwd.rb +3 -9
- data/lib/passwd.rb +10 -18
- data/lib/passwd/config.rb +3 -5
- data/lib/passwd/errors.rb +1 -0
- data/lib/passwd/rails/action_controller_ext.rb +8 -7
- data/lib/passwd/rails/active_record_ext.rb +7 -9
- data/lib/passwd/railtie.rb +2 -2
- data/lib/passwd/version.rb +1 -2
- data/passwd.gemspec +13 -9
- metadata +53 -24
- data/.travis.yml +0 -5
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
|
-
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
2
|
+
SHA256:
|
3
|
+
metadata.gz: f9a0399d0e6b478da6e96ad38e2806fb32199bae624d5bddf4abd5093d652cf8
|
4
|
+
data.tar.gz: 6b7a805295dcd19b924156838b24463cbdd9bf233280027cf3ce49d4abeeb9df
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
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
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.
|
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 "
|
2
|
+
require "rspec/core/rake_task"
|
3
|
+
require "rubocop/rake_task"
|
3
4
|
|
4
|
-
|
5
|
-
|
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 =>
|
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
|
-
#
|
8
|
-
#
|
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 "
|
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
|
-
|
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
|
25
|
-
config.stretching.
|
26
|
-
|
27
|
-
|
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(
|
31
|
-
Array.new(
|
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
|
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.
|
17
|
+
options.each_key {|key| send("#{key}=", options[key]) }
|
19
18
|
self
|
20
19
|
end
|
21
20
|
|
22
21
|
def reset
|
23
|
-
@
|
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
@@ -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[:
|
36
|
+
redirect_to session[:signin_referer].presence || path, **options
|
37
37
|
end
|
38
38
|
|
39
39
|
def require_signin
|
40
|
-
|
41
|
-
|
42
|
-
|
43
|
-
|
44
|
-
|
45
|
-
|
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,
|
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,
|
7
|
-
define_instance_set_password(passwd,
|
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,
|
21
|
+
def define_instance_auth_with_passwd(passwd, password_col)
|
22
22
|
define_method :authenticate do |plain|
|
23
|
-
|
23
|
+
BCrypt::Password.new(send(password_col)) == plain
|
24
24
|
end
|
25
25
|
end
|
26
26
|
|
27
|
-
def define_instance_set_password(passwd,
|
27
|
+
def define_instance_set_password(passwd, password_col)
|
28
28
|
define_method :set_password do |plain = nil|
|
29
29
|
plain ||= passwd.random
|
30
|
-
|
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
|
data/lib/passwd/railtie.rb
CHANGED
@@ -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.
|
10
|
+
::ActionController::Base.include ::Passwd::Rails::ActionControllerExt
|
11
11
|
end
|
12
12
|
|
13
13
|
ActiveSupport.on_load(:active_record) do
|
14
|
-
::ActiveRecord::Base.
|
14
|
+
::ActiveRecord::Base.extend Passwd::Rails::ActiveRecordExt
|
15
15
|
end
|
16
16
|
end
|
17
17
|
end
|
data/lib/passwd/version.rb
CHANGED
data/passwd.gemspec
CHANGED
@@ -1,4 +1,4 @@
|
|
1
|
-
lib = File.expand_path("
|
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 = ["
|
9
|
+
spec.email = ["iiboshi@craftake.co.jp"]
|
10
10
|
|
11
|
-
spec.description =
|
12
|
-
spec.summary =
|
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/}) {
|
21
|
+
spec.executables = spec.files.grep(%r{^exe/}) {|f| File.basename(f) }
|
22
22
|
spec.require_paths = ["lib"]
|
23
23
|
|
24
|
-
spec.
|
25
|
-
|
26
|
-
spec.
|
27
|
-
spec.add_development_dependency "
|
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.
|
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:
|
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:
|
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:
|
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:
|
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:
|
68
|
+
version: 13.0.0
|
41
69
|
- !ruby/object:Gem::Dependency
|
42
|
-
name:
|
70
|
+
name: rspec
|
43
71
|
requirement: !ruby/object:Gem::Requirement
|
44
72
|
requirements:
|
45
73
|
- - "~>"
|
46
74
|
- !ruby/object:Gem::Version
|
47
|
-
version:
|
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:
|
82
|
+
version: 3.10.0
|
55
83
|
- !ruby/object:Gem::Dependency
|
56
|
-
name:
|
84
|
+
name: rubocop
|
57
85
|
requirement: !ruby/object:Gem::Requirement
|
58
86
|
requirements:
|
59
|
-
- -
|
87
|
+
- - '='
|
60
88
|
- !ruby/object:Gem::Version
|
61
|
-
version:
|
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:
|
96
|
+
version: 1.11.0
|
69
97
|
description: Passwd is provide hashed password creation and authentication.
|
70
98
|
email:
|
71
|
-
-
|
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
|
-
- ".
|
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:
|
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
|
-
|
115
|
-
|
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: []
|