checkpoint 1.1.2 → 1.2.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 +4 -4
- data/.github/dependabot.yml +10 -0
- data/.github/workflows/test.yml +32 -0
- data/.standard.yml +1 -0
- data/CHANGELOG.md +10 -0
- data/README.md +17 -2
- data/Rakefile +1 -1
- data/bin/standardrb +29 -0
- data/checkpoint.gemspec +17 -14
- data/db/migrations/1_create_grants.rb +9 -9
- data/lib/checkpoint/agent/token.rb +4 -4
- data/lib/checkpoint/agent.rb +2 -2
- data/lib/checkpoint/authority.rb +9 -9
- data/lib/checkpoint/credential/permission.rb +1 -1
- data/lib/checkpoint/credential/role.rb +1 -1
- data/lib/checkpoint/credential/role_map_resolver.rb +1 -1
- data/lib/checkpoint/credential/token.rb +4 -4
- data/lib/checkpoint/credential.rb +9 -9
- data/lib/checkpoint/db/grant.rb +3 -3
- data/lib/checkpoint/db/params.rb +5 -5
- data/lib/checkpoint/db/query/ac.rb +6 -8
- data/lib/checkpoint/db/query/acr.rb +9 -11
- data/lib/checkpoint/db/query/ar.rb +8 -10
- data/lib/checkpoint/db/query/cr.rb +6 -8
- data/lib/checkpoint/db.rb +18 -18
- data/lib/checkpoint/grants.rb +2 -2
- data/lib/checkpoint/query/action_permitted.rb +5 -5
- data/lib/checkpoint/query/role_granted.rb +3 -3
- data/lib/checkpoint/query.rb +2 -2
- data/lib/checkpoint/railtie.rb +4 -4
- data/lib/checkpoint/resource/all_of_type.rb +1 -1
- data/lib/checkpoint/resource/any_entity_of_type.rb +1 -1
- data/lib/checkpoint/resource/token.rb +5 -5
- data/lib/checkpoint/resource.rb +6 -6
- data/lib/checkpoint/version.rb +1 -1
- data/lib/checkpoint.rb +8 -8
- data/lib/tasks/migrate.rake +14 -14
- metadata +59 -44
- data/.rubocop.yml +0 -45
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA256:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: d6e1f38df526120f3c876818d47b8ca2474cdda3cf01bb369ed85e785231a064
|
|
4
|
+
data.tar.gz: b1dc9721eb030b185f599bef7f406e2f06f122e2cda507b4c3b8ba2119b530bc
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: d15bfc9d3e20a6bdaa5d58eb4c3670f0be7cb8501f62da37441d6a8f6d5afddb03a7961d4f596aaad46ee694e67c858fb7e12aaaba22811dc40e05f7b8fdc220
|
|
7
|
+
data.tar.gz: cd2f5a448180b3c22ef86d3190bd02b336805d489b35198629fe1b3fa0ee2923acb4743e67295cd42a3b1a1eed10c4811cbecd679bdc917c5af24997b7b4db20
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
name: Tests
|
|
2
|
+
|
|
3
|
+
on:
|
|
4
|
+
push:
|
|
5
|
+
branches: [ main ]
|
|
6
|
+
pull_request:
|
|
7
|
+
branches: [ main ]
|
|
8
|
+
|
|
9
|
+
jobs:
|
|
10
|
+
test:
|
|
11
|
+
strategy:
|
|
12
|
+
matrix:
|
|
13
|
+
os: [ ubuntu-latest ]
|
|
14
|
+
ruby-version: [3.2, 3.3, 3.4, 4.0]
|
|
15
|
+
|
|
16
|
+
runs-on: ${{ matrix.os }}
|
|
17
|
+
|
|
18
|
+
steps:
|
|
19
|
+
- uses: actions/checkout@v6
|
|
20
|
+
- name: Set up Ruby ${{ matrix.ruby-version }}
|
|
21
|
+
uses: ruby/setup-ruby@v1
|
|
22
|
+
with:
|
|
23
|
+
ruby-version: ${{ matrix.ruby-version }}
|
|
24
|
+
bundler-cache: true
|
|
25
|
+
- name: Run linter for Ruby ${{ matrix.ruby-version }} on ${{ matrix.os }}
|
|
26
|
+
run: bin/standardrb
|
|
27
|
+
- name: Run tests for Ruby ${{ matrix.ruby-version }} on ${{ matrix.os }}
|
|
28
|
+
run: bin/rspec
|
|
29
|
+
- name: Report to Coveralls
|
|
30
|
+
uses: coverallsapp/github-action@v2
|
|
31
|
+
with:
|
|
32
|
+
github-token: ${{ secrets.github_token }}
|
data/.standard.yml
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
ruby_version: 3.0.0
|
data/CHANGELOG.md
ADDED
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
# Change Log
|
|
2
|
+
|
|
3
|
+
## v1.2.0 - 2026-01-26
|
|
4
|
+
|
|
5
|
+
### Changes
|
|
6
|
+
|
|
7
|
+
In v1.2.0, there is a large jump in Ruby version support and requirements.
|
|
8
|
+
The `sqlite3` gem is upgraded to 2.9, and the minimum Ruby version is **3.2**.
|
|
9
|
+
The `sequel` gem is upgraded many versions to `5.100.0` However, there are no
|
|
10
|
+
API changes to Checkpoint.
|
data/README.md
CHANGED
|
@@ -1,5 +1,6 @@
|
|
|
1
|
-
[](https://github.com/mlibrary/checkpoint/actions/workflows/test.yml)
|
|
2
|
+
[](https://coveralls.io/github/mlibrary/checkpoint?branch=main)
|
|
3
|
+
[](https://github.com/testdouble/standard)
|
|
3
4
|
[](https://checkpoint.readthedocs.io/en/latest)
|
|
4
5
|
[](https://www.rubydoc.info/gems/checkpoint)
|
|
5
6
|
|
|
@@ -20,6 +21,20 @@ And then execute:
|
|
|
20
21
|
|
|
21
22
|
$ bundle
|
|
22
23
|
|
|
24
|
+
## Compatibility
|
|
25
|
+
|
|
26
|
+
Checkpoint is intended to be compatible with all community-supported Ruby branches (i.e., minor versions), currently:
|
|
27
|
+
|
|
28
|
+
- 3.2
|
|
29
|
+
- 3.3
|
|
30
|
+
- 3.4
|
|
31
|
+
- 4.0
|
|
32
|
+
|
|
33
|
+
We prefer the newest syntax and linting rules that preserve compatibility with the oldest branch in normal maintenance.
|
|
34
|
+
When the security maintenance for a branch expires, Checkpoint's compatibility should be considered unsupported.
|
|
35
|
+
|
|
36
|
+
See also, [Ruby's branch maintenance policy](https://www.ruby-lang.org/en/downloads/branches/).
|
|
37
|
+
|
|
23
38
|
## Documentation
|
|
24
39
|
|
|
25
40
|
User documentation source is available in the `docs` directory and in rendered format
|
data/Rakefile
CHANGED
data/bin/standardrb
ADDED
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
#!/usr/bin/env ruby
|
|
2
|
+
# frozen_string_literal: true
|
|
3
|
+
|
|
4
|
+
#
|
|
5
|
+
# This file was generated by Bundler.
|
|
6
|
+
#
|
|
7
|
+
# The application 'standardrb' is installed as part of a gem, and
|
|
8
|
+
# this file is here to facilitate running it.
|
|
9
|
+
#
|
|
10
|
+
|
|
11
|
+
require "pathname"
|
|
12
|
+
ENV["BUNDLE_GEMFILE"] ||= File.expand_path("../../Gemfile",
|
|
13
|
+
Pathname.new(__FILE__).realpath)
|
|
14
|
+
|
|
15
|
+
bundle_binstub = File.expand_path("../bundle", __FILE__)
|
|
16
|
+
|
|
17
|
+
if File.file?(bundle_binstub)
|
|
18
|
+
if File.read(bundle_binstub, 300) =~ /This file was generated by Bundler/
|
|
19
|
+
load(bundle_binstub)
|
|
20
|
+
else
|
|
21
|
+
abort("Your `bin/bundle` was not generated by Bundler, so this binstub cannot run.
|
|
22
|
+
Replace `bin/bundle` by running `bundle binstubs bundler --force`, then run this command again.")
|
|
23
|
+
end
|
|
24
|
+
end
|
|
25
|
+
|
|
26
|
+
require "rubygems"
|
|
27
|
+
require "bundler/setup"
|
|
28
|
+
|
|
29
|
+
load Gem.bin_path("standard", "standardrb")
|
data/checkpoint.gemspec
CHANGED
|
@@ -1,14 +1,14 @@
|
|
|
1
1
|
# frozen_string_literal: true
|
|
2
2
|
|
|
3
|
-
lib = File.expand_path(
|
|
3
|
+
lib = File.expand_path("lib", __dir__)
|
|
4
4
|
$LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
|
|
5
5
|
require "checkpoint/version"
|
|
6
6
|
|
|
7
7
|
Gem::Specification.new do |spec|
|
|
8
|
-
spec.name
|
|
8
|
+
spec.name = "checkpoint"
|
|
9
9
|
spec.version = Checkpoint::VERSION
|
|
10
|
-
spec.authors = ["Noah Botimer"]
|
|
11
|
-
spec.email
|
|
10
|
+
spec.authors = ["Noah Botimer", "Aaron Elkiss"]
|
|
11
|
+
spec.email = ["botimer@umich.edu", "aelkiss@umich.edu"]
|
|
12
12
|
spec.license = "BSD-3-Clause"
|
|
13
13
|
|
|
14
14
|
spec.summary = <<~SUMMARY
|
|
@@ -21,22 +21,25 @@ Gem::Specification.new do |spec|
|
|
|
21
21
|
spec.files = `git ls-files -z`.split("\x0").reject do |f|
|
|
22
22
|
f.match(%r{^(test|spec|features)/})
|
|
23
23
|
end
|
|
24
|
-
spec.bindir
|
|
25
|
-
spec.executables
|
|
24
|
+
spec.bindir = "exe"
|
|
25
|
+
spec.executables = spec.files.grep(%r{^exe/}) { |f| File.basename(f) }
|
|
26
26
|
spec.require_paths = ["lib"]
|
|
27
27
|
|
|
28
|
+
spec.required_ruby_version = ">= 3.2.0"
|
|
29
|
+
|
|
28
30
|
spec.add_dependency "ettin", "~> 1.1"
|
|
29
|
-
spec.add_dependency "sequel", "~> 5.
|
|
31
|
+
spec.add_dependency "sequel", "~> 5.100"
|
|
30
32
|
|
|
31
|
-
spec.add_development_dependency "bundler"
|
|
32
|
-
spec.add_development_dependency "
|
|
33
|
+
spec.add_development_dependency "bundler"
|
|
34
|
+
spec.add_development_dependency "logger"
|
|
35
|
+
spec.add_development_dependency "simplecov"
|
|
36
|
+
spec.add_development_dependency "simplecov-lcov"
|
|
37
|
+
spec.add_development_dependency "ostruct"
|
|
33
38
|
spec.add_development_dependency "pry"
|
|
34
39
|
spec.add_development_dependency "pry-byebug"
|
|
35
|
-
spec.add_development_dependency "rake", "~>
|
|
40
|
+
spec.add_development_dependency "rake", "~> 13.0"
|
|
36
41
|
spec.add_development_dependency "rspec", "~> 3.0"
|
|
37
|
-
spec.add_development_dependency "
|
|
38
|
-
spec.add_development_dependency "
|
|
39
|
-
spec.add_development_dependency "rubocop-rspec", "~> 1.16"
|
|
40
|
-
spec.add_development_dependency "sqlite3", "~> 1.3"
|
|
42
|
+
spec.add_development_dependency "standard", "~> 1.53"
|
|
43
|
+
spec.add_development_dependency "sqlite3", "~> 2.9"
|
|
41
44
|
spec.add_development_dependency "yard", "~> 0.9"
|
|
42
45
|
end
|
|
@@ -4,16 +4,16 @@ Sequel.migration do
|
|
|
4
4
|
change do
|
|
5
5
|
create_table :grants do
|
|
6
6
|
primary_key :id
|
|
7
|
-
column :agent_type,
|
|
8
|
-
column :agent_id,
|
|
9
|
-
column :agent_token,
|
|
10
|
-
column :credential_type,
|
|
11
|
-
column :credential_id,
|
|
7
|
+
column :agent_type, String, size: 100, null: false
|
|
8
|
+
column :agent_id, String, size: 100, null: false
|
|
9
|
+
column :agent_token, String, size: 201, null: false
|
|
10
|
+
column :credential_type, String, size: 100, null: false
|
|
11
|
+
column :credential_id, String, size: 100, null: false
|
|
12
12
|
column :credential_token, String, size: 201, null: false
|
|
13
|
-
column :resource_type,
|
|
14
|
-
column :resource_id,
|
|
15
|
-
column :resource_token,
|
|
16
|
-
column :zone_id,
|
|
13
|
+
column :resource_type, String, size: 100, null: false
|
|
14
|
+
column :resource_id, String, size: 100, null: false
|
|
15
|
+
column :resource_token, String, size: 201, null: false
|
|
16
|
+
column :zone_id, String, size: 100, null: false
|
|
17
17
|
end
|
|
18
18
|
end
|
|
19
19
|
end
|
|
@@ -50,10 +50,10 @@ module Checkpoint
|
|
|
50
50
|
to_s.hash
|
|
51
51
|
end
|
|
52
52
|
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
53
|
+
alias_method :==, :eql?
|
|
54
|
+
alias_method :inspect, :uri
|
|
55
|
+
alias_method :agent_id, :id
|
|
56
|
+
alias_method :agent_type, :type
|
|
57
57
|
end
|
|
58
58
|
end
|
|
59
59
|
end
|
data/lib/checkpoint/agent.rb
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
# frozen_string_literal: true
|
|
2
2
|
|
|
3
|
-
require
|
|
4
|
-
require
|
|
3
|
+
require "checkpoint/agent/resolver"
|
|
4
|
+
require "checkpoint/agent/token"
|
|
5
5
|
|
|
6
6
|
module Checkpoint
|
|
7
7
|
# An Agent is an any person or entity that might be granted various
|
data/lib/checkpoint/authority.rb
CHANGED
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
# frozen_string_literal: true
|
|
2
2
|
|
|
3
|
-
require
|
|
4
|
-
require
|
|
5
|
-
require
|
|
6
|
-
require
|
|
3
|
+
require "checkpoint/agent/resolver"
|
|
4
|
+
require "checkpoint/credential/resolver"
|
|
5
|
+
require "checkpoint/resource/resolver"
|
|
6
|
+
require "checkpoint/grants"
|
|
7
7
|
|
|
8
8
|
module Checkpoint
|
|
9
9
|
# An Authority is the central point of contact for authorization questions in
|
|
@@ -14,12 +14,12 @@ module Checkpoint
|
|
|
14
14
|
agent_resolver: Agent::Resolver.new,
|
|
15
15
|
credential_resolver: Credential::Resolver.new,
|
|
16
16
|
resource_resolver: Resource::Resolver.new,
|
|
17
|
-
grants: Grants.new
|
|
18
|
-
|
|
19
|
-
@agent_resolver
|
|
17
|
+
grants: Grants.new
|
|
18
|
+
)
|
|
19
|
+
@agent_resolver = agent_resolver
|
|
20
20
|
@credential_resolver = credential_resolver
|
|
21
|
-
@resource_resolver
|
|
22
|
-
@grants
|
|
21
|
+
@resource_resolver = resource_resolver
|
|
22
|
+
@grants = grants
|
|
23
23
|
end
|
|
24
24
|
|
|
25
25
|
# Check whether there are any matching grants that would allow this actor
|
|
@@ -49,10 +49,10 @@ module Checkpoint
|
|
|
49
49
|
to_s.hash
|
|
50
50
|
end
|
|
51
51
|
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
52
|
+
alias_method :==, :eql?
|
|
53
|
+
alias_method :inspect, :uri
|
|
54
|
+
alias_method :credential_type, :type
|
|
55
|
+
alias_method :credential_id, :id
|
|
56
56
|
end
|
|
57
57
|
end
|
|
58
58
|
end
|
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
# frozen_string_literal: true
|
|
2
2
|
|
|
3
|
-
require
|
|
4
|
-
require
|
|
5
|
-
require
|
|
6
|
-
require
|
|
7
|
-
require
|
|
3
|
+
require "checkpoint/credential/resolver"
|
|
4
|
+
require "checkpoint/credential/role_map_resolver"
|
|
5
|
+
require "checkpoint/credential/role"
|
|
6
|
+
require "checkpoint/credential/permission"
|
|
7
|
+
require "checkpoint/credential/token"
|
|
8
8
|
|
|
9
9
|
module Checkpoint
|
|
10
10
|
# A Credential is the permission to take a particular action, or any
|
|
@@ -19,7 +19,7 @@ module Checkpoint
|
|
|
19
19
|
# possibly bound to a {Resource}.
|
|
20
20
|
class Credential
|
|
21
21
|
attr_reader :type, :id
|
|
22
|
-
|
|
22
|
+
alias_method :name, :id
|
|
23
23
|
|
|
24
24
|
# Create a new generic Credential. This should generally not be called,
|
|
25
25
|
# preferring to use a factory or instantiate a {Permission}, {Role}, or
|
|
@@ -38,8 +38,8 @@ module Checkpoint
|
|
|
38
38
|
#
|
|
39
39
|
# @param name [String|Symbol] the name of this credential
|
|
40
40
|
def initialize(name)
|
|
41
|
-
@id
|
|
42
|
-
@type =
|
|
41
|
+
@id = name.to_s
|
|
42
|
+
@type = "credential"
|
|
43
43
|
end
|
|
44
44
|
|
|
45
45
|
# Return the list of Credentials that would grant this one.
|
|
@@ -90,6 +90,6 @@ module Checkpoint
|
|
|
90
90
|
type.eql?(other.type) && name.eql?(other.id)
|
|
91
91
|
end
|
|
92
92
|
|
|
93
|
-
|
|
93
|
+
alias_method :==, :eql?
|
|
94
94
|
end
|
|
95
95
|
end
|
data/lib/checkpoint/db/grant.rb
CHANGED
|
@@ -8,16 +8,16 @@ module Checkpoint
|
|
|
8
8
|
# resource, credential).
|
|
9
9
|
def self.from(agent, credential, resource, zone: default_zone)
|
|
10
10
|
new(
|
|
11
|
-
agent_type: agent.type,
|
|
11
|
+
agent_type: agent.type, agent_id: agent.id, agent_token: agent.token,
|
|
12
12
|
credential_type: credential.type, credential_id: credential.id, credential_token: credential.token,
|
|
13
|
-
resource_type: resource.type,
|
|
13
|
+
resource_type: resource.type, resource_id: resource.id, resource_token: resource.token,
|
|
14
14
|
zone_id: zone
|
|
15
15
|
)
|
|
16
16
|
end
|
|
17
17
|
|
|
18
18
|
# The default/system zone
|
|
19
19
|
def self.default_zone
|
|
20
|
-
|
|
20
|
+
"(all)"
|
|
21
21
|
end
|
|
22
22
|
end
|
|
23
23
|
end
|
data/lib/checkpoint/db/params.rb
CHANGED
|
@@ -11,7 +11,7 @@ module Checkpoint
|
|
|
11
11
|
attr_reader :items, :prefix
|
|
12
12
|
|
|
13
13
|
def initialize(items, prefix)
|
|
14
|
-
@items
|
|
14
|
+
@items = [items].flatten
|
|
15
15
|
@prefix = prefix
|
|
16
16
|
end
|
|
17
17
|
|
|
@@ -24,10 +24,10 @@ module Checkpoint
|
|
|
24
24
|
def values
|
|
25
25
|
items.map.with_index do |item, i|
|
|
26
26
|
value = if item.respond_to?(:sql_value)
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
27
|
+
item.sql_value
|
|
28
|
+
else
|
|
29
|
+
item.to_s
|
|
30
|
+
end
|
|
31
31
|
[:"#{prefix}_#{i}", value]
|
|
32
32
|
end
|
|
33
33
|
end
|
|
@@ -15,32 +15,30 @@ module Checkpoint::DB
|
|
|
15
15
|
|
|
16
16
|
def initialize(agents, credentials, scope: Grant)
|
|
17
17
|
super(scope: scope)
|
|
18
|
-
@agents
|
|
18
|
+
@agents = tokenize(agents)
|
|
19
19
|
@credentials = tokenize(credentials)
|
|
20
20
|
end
|
|
21
21
|
|
|
22
22
|
def conditions
|
|
23
23
|
super.merge(
|
|
24
|
-
agent_token:
|
|
24
|
+
agent_token: agent_params.placeholders,
|
|
25
25
|
credential_token: credential_params.placeholders
|
|
26
26
|
)
|
|
27
27
|
end
|
|
28
28
|
|
|
29
29
|
def parameters
|
|
30
|
-
super.merge(
|
|
31
|
-
|
|
32
|
-
credential_params.values
|
|
33
|
-
])
|
|
30
|
+
super.merge((agent_params.values +
|
|
31
|
+
credential_params.values).to_h)
|
|
34
32
|
end
|
|
35
33
|
|
|
36
34
|
protected
|
|
37
35
|
|
|
38
36
|
def agent_params
|
|
39
|
-
Params.new(agents,
|
|
37
|
+
Params.new(agents, "at")
|
|
40
38
|
end
|
|
41
39
|
|
|
42
40
|
def credential_params
|
|
43
|
-
Params.new(credentials,
|
|
41
|
+
Params.new(credentials, "ct")
|
|
44
42
|
end
|
|
45
43
|
end
|
|
46
44
|
end
|
|
@@ -15,39 +15,37 @@ module Checkpoint::DB
|
|
|
15
15
|
|
|
16
16
|
def initialize(agents, credentials, resources, scope: Grant)
|
|
17
17
|
super(scope: scope)
|
|
18
|
-
@agents
|
|
18
|
+
@agents = tokenize(agents)
|
|
19
19
|
@credentials = tokenize(credentials)
|
|
20
|
-
@resources
|
|
20
|
+
@resources = tokenize(resources)
|
|
21
21
|
end
|
|
22
22
|
|
|
23
23
|
def conditions
|
|
24
24
|
super.merge(
|
|
25
|
-
agent_token:
|
|
25
|
+
agent_token: agent_params.placeholders,
|
|
26
26
|
credential_token: credential_params.placeholders,
|
|
27
|
-
resource_token:
|
|
27
|
+
resource_token: resource_params.placeholders
|
|
28
28
|
)
|
|
29
29
|
end
|
|
30
30
|
|
|
31
31
|
def parameters
|
|
32
|
-
super.merge(
|
|
33
|
-
agent_params.values +
|
|
32
|
+
super.merge((agent_params.values +
|
|
34
33
|
credential_params.values +
|
|
35
|
-
resource_params.values
|
|
36
|
-
])
|
|
34
|
+
resource_params.values).to_h)
|
|
37
35
|
end
|
|
38
36
|
|
|
39
37
|
protected
|
|
40
38
|
|
|
41
39
|
def agent_params
|
|
42
|
-
Params.new(agents,
|
|
40
|
+
Params.new(agents, "at")
|
|
43
41
|
end
|
|
44
42
|
|
|
45
43
|
def credential_params
|
|
46
|
-
Params.new(credentials,
|
|
44
|
+
Params.new(credentials, "ct")
|
|
47
45
|
end
|
|
48
46
|
|
|
49
47
|
def resource_params
|
|
50
|
-
Params.new(resources,
|
|
48
|
+
Params.new(resources, "rt")
|
|
51
49
|
end
|
|
52
50
|
end
|
|
53
51
|
end
|
|
@@ -15,32 +15,30 @@ module Checkpoint::DB
|
|
|
15
15
|
|
|
16
16
|
def initialize(agents, resources, scope: Grant)
|
|
17
17
|
super(scope: scope)
|
|
18
|
-
@agents
|
|
19
|
-
@resources
|
|
18
|
+
@agents = tokenize(agents)
|
|
19
|
+
@resources = tokenize(resources)
|
|
20
20
|
end
|
|
21
21
|
|
|
22
22
|
def conditions
|
|
23
23
|
super.merge(
|
|
24
|
-
agent_token:
|
|
25
|
-
resource_token:
|
|
24
|
+
agent_token: agent_params.placeholders,
|
|
25
|
+
resource_token: resource_params.placeholders
|
|
26
26
|
)
|
|
27
27
|
end
|
|
28
28
|
|
|
29
29
|
def parameters
|
|
30
|
-
super.merge(
|
|
31
|
-
|
|
32
|
-
resource_params.values
|
|
33
|
-
])
|
|
30
|
+
super.merge((agent_params.values +
|
|
31
|
+
resource_params.values).to_h)
|
|
34
32
|
end
|
|
35
33
|
|
|
36
34
|
protected
|
|
37
35
|
|
|
38
36
|
def agent_params
|
|
39
|
-
Params.new(agents,
|
|
37
|
+
Params.new(agents, "at")
|
|
40
38
|
end
|
|
41
39
|
|
|
42
40
|
def resource_params
|
|
43
|
-
Params.new(resources,
|
|
41
|
+
Params.new(resources, "rt")
|
|
44
42
|
end
|
|
45
43
|
end
|
|
46
44
|
end
|
|
@@ -16,31 +16,29 @@ module Checkpoint::DB
|
|
|
16
16
|
def initialize(credentials, resources, scope: Grant)
|
|
17
17
|
super(scope: scope)
|
|
18
18
|
@credentials = tokenize(credentials)
|
|
19
|
-
@resources
|
|
19
|
+
@resources = tokenize(resources)
|
|
20
20
|
end
|
|
21
21
|
|
|
22
22
|
def conditions
|
|
23
23
|
super.merge(
|
|
24
24
|
credential_token: credential_params.placeholders,
|
|
25
|
-
resource_token:
|
|
25
|
+
resource_token: resource_params.placeholders
|
|
26
26
|
)
|
|
27
27
|
end
|
|
28
28
|
|
|
29
29
|
def parameters
|
|
30
|
-
super.merge(
|
|
31
|
-
|
|
32
|
-
resource_params.values
|
|
33
|
-
])
|
|
30
|
+
super.merge((credential_params.values +
|
|
31
|
+
resource_params.values).to_h)
|
|
34
32
|
end
|
|
35
33
|
|
|
36
34
|
protected
|
|
37
35
|
|
|
38
36
|
def credential_params
|
|
39
|
-
Params.new(credentials,
|
|
37
|
+
Params.new(credentials, "ct")
|
|
40
38
|
end
|
|
41
39
|
|
|
42
40
|
def resource_params
|
|
43
|
-
Params.new(resources,
|
|
41
|
+
Params.new(resources, "rt")
|
|
44
42
|
end
|
|
45
43
|
end
|
|
46
44
|
end
|
data/lib/checkpoint/db.rb
CHANGED
|
@@ -1,15 +1,15 @@
|
|
|
1
1
|
# frozen_string_literal: true
|
|
2
2
|
|
|
3
|
-
require
|
|
4
|
-
require
|
|
5
|
-
require
|
|
3
|
+
require "ostruct"
|
|
4
|
+
require "logger"
|
|
5
|
+
require "yaml"
|
|
6
6
|
|
|
7
|
-
require_relative
|
|
8
|
-
require_relative
|
|
9
|
-
require_relative
|
|
10
|
-
require_relative
|
|
11
|
-
require_relative
|
|
12
|
-
require_relative
|
|
7
|
+
require_relative "db/cartesian_select"
|
|
8
|
+
require_relative "db/params"
|
|
9
|
+
require_relative "db/query/acr"
|
|
10
|
+
require_relative "db/query/ac"
|
|
11
|
+
require_relative "db/query/ar"
|
|
12
|
+
require_relative "db/query/cr"
|
|
13
13
|
|
|
14
14
|
module Checkpoint
|
|
15
15
|
# Module for everything related to the Checkpoint database.
|
|
@@ -17,9 +17,9 @@ module Checkpoint
|
|
|
17
17
|
# Any error with the database that Checkpoint itself detects but cannot handle.
|
|
18
18
|
class DatabaseError < StandardError; end
|
|
19
19
|
|
|
20
|
-
CONNECTION_ERROR =
|
|
20
|
+
CONNECTION_ERROR = "The Checkpoint database is not initialized. Call initialize! first."
|
|
21
21
|
|
|
22
|
-
ALREADY_CONNECTED =
|
|
22
|
+
ALREADY_CONNECTED = "Already connected; refusing to connect to another database."
|
|
23
23
|
|
|
24
24
|
MISSING_CONFIG = <<~MSG
|
|
25
25
|
CHECKPOINT_DATABASE_URL and DATABASE_URL are both missing and a connection
|
|
@@ -91,7 +91,7 @@ module Checkpoint
|
|
|
91
91
|
def migrate!
|
|
92
92
|
connect! unless connected?
|
|
93
93
|
Sequel.extension :migration
|
|
94
|
-
Sequel::Migrator.run(db, File.join(__dir__,
|
|
94
|
+
Sequel::Migrator.run(db, File.join(__dir__, "../../db/migrations"), table: schema_table)
|
|
95
95
|
end
|
|
96
96
|
|
|
97
97
|
def schema_table
|
|
@@ -99,7 +99,7 @@ module Checkpoint
|
|
|
99
99
|
end
|
|
100
100
|
|
|
101
101
|
def schema_file
|
|
102
|
-
|
|
102
|
+
"db/checkpoint.yml"
|
|
103
103
|
end
|
|
104
104
|
|
|
105
105
|
def dump_schema!
|
|
@@ -117,19 +117,19 @@ module Checkpoint
|
|
|
117
117
|
|
|
118
118
|
def model_files
|
|
119
119
|
[
|
|
120
|
-
|
|
120
|
+
"db/grant"
|
|
121
121
|
]
|
|
122
122
|
end
|
|
123
123
|
|
|
124
124
|
# Merge url, opts, or db settings from a hash into our config
|
|
125
125
|
def merge_config!(config = {})
|
|
126
|
-
self.config.url
|
|
126
|
+
self.config.url = config[:url] if config.key?(:url)
|
|
127
127
|
self.config.opts = config[:opts] if config.key?(:opts)
|
|
128
|
-
self.config.db
|
|
128
|
+
self.config.db = config[:db] if config.key?(:db)
|
|
129
129
|
end
|
|
130
130
|
|
|
131
131
|
def conn_opts
|
|
132
|
-
log = {
|
|
132
|
+
log = {logger: Logger.new("db/checkpoint.log")}
|
|
133
133
|
url = config.url
|
|
134
134
|
opts = config.opts
|
|
135
135
|
if url
|
|
@@ -143,7 +143,7 @@ module Checkpoint
|
|
|
143
143
|
|
|
144
144
|
def config
|
|
145
145
|
@config ||= OpenStruct.new(
|
|
146
|
-
url: ENV[
|
|
146
|
+
url: ENV["CHECKPOINT_DATABASE_URL"] || ENV["DATABASE_URL"]
|
|
147
147
|
)
|
|
148
148
|
end
|
|
149
149
|
|
data/lib/checkpoint/grants.rb
CHANGED
|
@@ -7,7 +7,7 @@
|
|
|
7
7
|
# application, there should be an initializer that reads whatever appropriate
|
|
8
8
|
# configuration and does the initialization.
|
|
9
9
|
|
|
10
|
-
require
|
|
10
|
+
require "checkpoint/db"
|
|
11
11
|
|
|
12
12
|
module Checkpoint
|
|
13
13
|
# The repository of grants -- a simple wrapper for the Sequel Datastore / grants table.
|
|
@@ -104,7 +104,7 @@ module Checkpoint
|
|
|
104
104
|
private
|
|
105
105
|
|
|
106
106
|
def scope
|
|
107
|
-
{
|
|
107
|
+
{scope: grants}
|
|
108
108
|
end
|
|
109
109
|
|
|
110
110
|
def where(agents, credentials, resources)
|
|
@@ -20,11 +20,11 @@ module Checkpoint
|
|
|
20
20
|
user,
|
|
21
21
|
action,
|
|
22
22
|
target = Checkpoint::Resource.all,
|
|
23
|
-
authority: Authority::RejectAll.new
|
|
24
|
-
|
|
25
|
-
@user
|
|
26
|
-
@action
|
|
27
|
-
@target
|
|
23
|
+
authority: Authority::RejectAll.new
|
|
24
|
+
)
|
|
25
|
+
@user = user
|
|
26
|
+
@action = action.to_sym
|
|
27
|
+
@target = target
|
|
28
28
|
@authority = authority
|
|
29
29
|
end
|
|
30
30
|
|
|
@@ -37,9 +37,9 @@ module Checkpoint
|
|
|
37
37
|
# @param authority [Checkpoint::Authority] the authority to ask about
|
|
38
38
|
# this role-grant
|
|
39
39
|
def initialize(user, role, target = Resource.all, authority: Authority::RejectAll.new)
|
|
40
|
-
@user
|
|
41
|
-
@role
|
|
42
|
-
@target
|
|
40
|
+
@user = user
|
|
41
|
+
@role = role.to_sym
|
|
42
|
+
@target = target
|
|
43
43
|
@authority = authority
|
|
44
44
|
end
|
|
45
45
|
|
data/lib/checkpoint/query.rb
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
# frozen_string_literal: true
|
|
2
2
|
|
|
3
|
-
require
|
|
4
|
-
require
|
|
3
|
+
require "checkpoint/query/role_granted"
|
|
4
|
+
require "checkpoint/query/action_permitted"
|
|
5
5
|
|
|
6
6
|
module Checkpoint
|
|
7
7
|
# The Query module is a container for the various types of checks or
|
data/lib/checkpoint/railtie.rb
CHANGED
|
@@ -68,9 +68,9 @@ module Checkpoint
|
|
|
68
68
|
unless config.url
|
|
69
69
|
case Rails.env
|
|
70
70
|
when "development"
|
|
71
|
-
config[:opts] = {
|
|
71
|
+
config[:opts] = {adapter: "sqlite", database: "db/checkpoint_development.sqlite3"}
|
|
72
72
|
when "test"
|
|
73
|
-
config[:opts] = {
|
|
73
|
+
config[:opts] = {adapter: "sqlite"}
|
|
74
74
|
end
|
|
75
75
|
end
|
|
76
76
|
|
|
@@ -95,8 +95,8 @@ module Checkpoint
|
|
|
95
95
|
end
|
|
96
96
|
|
|
97
97
|
def rake_files
|
|
98
|
-
base = Pathname(__dir__) +
|
|
99
|
-
[base +
|
|
98
|
+
base = Pathname(__dir__) + "../tasks/"
|
|
99
|
+
[base + "migrate.rake"]
|
|
100
100
|
end
|
|
101
101
|
|
|
102
102
|
rake_tasks do
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
# frozen_string_literal: true
|
|
2
2
|
|
|
3
|
-
require
|
|
3
|
+
require "checkpoint/resource/resolver"
|
|
4
4
|
|
|
5
5
|
module Checkpoint
|
|
6
6
|
class Resource
|
|
@@ -78,10 +78,10 @@ module Checkpoint
|
|
|
78
78
|
to_s.hash
|
|
79
79
|
end
|
|
80
80
|
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
81
|
+
alias_method :==, :eql?
|
|
82
|
+
alias_method :inspect, :uri
|
|
83
|
+
alias_method :resource_type, :type
|
|
84
|
+
alias_method :resource_id, :id
|
|
85
85
|
end
|
|
86
86
|
end
|
|
87
87
|
end
|
data/lib/checkpoint/resource.rb
CHANGED
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
# frozen_string_literal: true
|
|
2
2
|
|
|
3
|
-
require
|
|
4
|
-
require
|
|
5
|
-
require
|
|
6
|
-
require
|
|
7
|
-
require
|
|
3
|
+
require "checkpoint/resource/token"
|
|
4
|
+
require "checkpoint/resource/all_of_type"
|
|
5
|
+
require "checkpoint/resource/all_of_any_type"
|
|
6
|
+
require "checkpoint/resource/any_entity"
|
|
7
|
+
require "checkpoint/resource/any_entity_of_type"
|
|
8
8
|
|
|
9
9
|
module Checkpoint
|
|
10
10
|
# A Resource is any application object that should be considered for
|
|
@@ -37,7 +37,7 @@ module Checkpoint
|
|
|
37
37
|
|
|
38
38
|
# Special string to be used when granting or searching for grants on all
|
|
39
39
|
# types or all resources
|
|
40
|
-
ALL =
|
|
40
|
+
ALL = "(all)"
|
|
41
41
|
|
|
42
42
|
# Creates a Resource for this entity. Prefer the factory method {::from},
|
|
43
43
|
# which applies default conversion rules. This constructor does not
|
data/lib/checkpoint/version.rb
CHANGED
data/lib/checkpoint.rb
CHANGED
|
@@ -2,8 +2,8 @@
|
|
|
2
2
|
|
|
3
3
|
require "checkpoint/version"
|
|
4
4
|
|
|
5
|
-
require
|
|
6
|
-
require
|
|
5
|
+
require "sequel"
|
|
6
|
+
require "ettin"
|
|
7
7
|
|
|
8
8
|
# All of the Checkpoint components are contained within this top-level module.
|
|
9
9
|
module Checkpoint
|
|
@@ -12,9 +12,9 @@ module Checkpoint
|
|
|
12
12
|
class NoIdentifierError < StandardError; end
|
|
13
13
|
end
|
|
14
14
|
|
|
15
|
-
require
|
|
16
|
-
require
|
|
17
|
-
require
|
|
18
|
-
require
|
|
19
|
-
require
|
|
20
|
-
require
|
|
15
|
+
require "checkpoint/agent"
|
|
16
|
+
require "checkpoint/credential"
|
|
17
|
+
require "checkpoint/resource"
|
|
18
|
+
require "checkpoint/authority"
|
|
19
|
+
require "checkpoint/query"
|
|
20
|
+
require "checkpoint/railtie" if defined?(Rails)
|
data/lib/tasks/migrate.rake
CHANGED
|
@@ -1,15 +1,15 @@
|
|
|
1
1
|
# frozen_string_literal: true
|
|
2
2
|
|
|
3
|
-
require
|
|
4
|
-
require
|
|
3
|
+
require "bundler/setup"
|
|
4
|
+
require "checkpoint"
|
|
5
5
|
|
|
6
6
|
if defined?(Rails)
|
|
7
7
|
# When db:schema:dump is called directly, we can tack this on.
|
|
8
8
|
# If we do it unconditionally, db:migrate will try to dump before we have
|
|
9
9
|
# been able to migrate the checkpoint tables.
|
|
10
|
-
if Rake.application.top_level_tasks.include?(
|
|
11
|
-
Rake::Task[
|
|
12
|
-
Rake::Task[
|
|
10
|
+
if Rake.application.top_level_tasks.include?("db:schema:dump")
|
|
11
|
+
Rake::Task["db:schema:dump"].enhance do
|
|
12
|
+
Rake::Task["checkpoint:schema:dump"].invoke
|
|
13
13
|
end
|
|
14
14
|
end
|
|
15
15
|
|
|
@@ -17,13 +17,13 @@ if defined?(Rails)
|
|
|
17
17
|
# schema_info, so migrations don't try to double-run. The actual table
|
|
18
18
|
# structure is handled by the Rails schema:dump and schema:load.
|
|
19
19
|
# A db:setup will trigger this, so we don't have to handle it separately.
|
|
20
|
-
Rake::Task[
|
|
21
|
-
Rake::Task[
|
|
20
|
+
Rake::Task["db:schema:load"].enhance do
|
|
21
|
+
Rake::Task["checkpoint:schema:load"].invoke
|
|
22
22
|
end
|
|
23
23
|
|
|
24
24
|
# We hook into db:migrate for convenience.
|
|
25
|
-
Rake::Task[
|
|
26
|
-
Rake::Task[
|
|
25
|
+
Rake::Task["db:migrate"].enhance do
|
|
26
|
+
Rake::Task["checkpoint:migrate"].invoke
|
|
27
27
|
end
|
|
28
28
|
|
|
29
29
|
end
|
|
@@ -36,7 +36,7 @@ namespace :checkpoint do
|
|
|
36
36
|
# The Railtie is smart enough to know whether we are in a Rake task,
|
|
37
37
|
# so it can avoid initializing and we can migrate safely before the
|
|
38
38
|
# models are loaded.
|
|
39
|
-
Rake::Task[
|
|
39
|
+
Rake::Task["environment"].invoke
|
|
40
40
|
end
|
|
41
41
|
|
|
42
42
|
# After migrating, we initialize here, even though it isn't strictly
|
|
@@ -54,21 +54,21 @@ namespace :checkpoint do
|
|
|
54
54
|
namespace :schema do
|
|
55
55
|
desc "Dump the Checkpoint version to db/checkpoint.yml"
|
|
56
56
|
task :dump do
|
|
57
|
-
Rake::Task[
|
|
57
|
+
Rake::Task["environment"].invoke
|
|
58
58
|
Checkpoint::DB.dump_schema!
|
|
59
59
|
end
|
|
60
60
|
|
|
61
61
|
desc "Load the Checkpoint version from db/checkpoint.yml"
|
|
62
62
|
task :load do
|
|
63
|
-
Rake::Task[
|
|
63
|
+
Rake::Task["environment"].invoke
|
|
64
64
|
Checkpoint::DB.load_schema!
|
|
65
65
|
end
|
|
66
66
|
|
|
67
67
|
# When running under Rails, we dump the schema after migrating so
|
|
68
68
|
# everything stays synced up for db:setup against a new database.
|
|
69
69
|
# Rake::Task['checkpoint:schema:dump'].invoke
|
|
70
|
-
Rake::Task[
|
|
71
|
-
Rake::Task[
|
|
70
|
+
Rake::Task["checkpoint:migrate"].enhance do
|
|
71
|
+
Rake::Task["checkpoint:schema:dump"].invoke
|
|
72
72
|
end
|
|
73
73
|
end
|
|
74
74
|
end
|
metadata
CHANGED
|
@@ -1,14 +1,14 @@
|
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
|
2
2
|
name: checkpoint
|
|
3
3
|
version: !ruby/object:Gem::Version
|
|
4
|
-
version: 1.
|
|
4
|
+
version: 1.2.0
|
|
5
5
|
platform: ruby
|
|
6
6
|
authors:
|
|
7
7
|
- Noah Botimer
|
|
8
|
-
|
|
8
|
+
- Aaron Elkiss
|
|
9
9
|
bindir: exe
|
|
10
10
|
cert_chain: []
|
|
11
|
-
date:
|
|
11
|
+
date: 1980-01-02 00:00:00.000000000 Z
|
|
12
12
|
dependencies:
|
|
13
13
|
- !ruby/object:Gem::Dependency
|
|
14
14
|
name: ettin
|
|
@@ -30,44 +30,44 @@ dependencies:
|
|
|
30
30
|
requirements:
|
|
31
31
|
- - "~>"
|
|
32
32
|
- !ruby/object:Gem::Version
|
|
33
|
-
version: '5.
|
|
33
|
+
version: '5.100'
|
|
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: '5.
|
|
40
|
+
version: '5.100'
|
|
41
41
|
- !ruby/object:Gem::Dependency
|
|
42
42
|
name: bundler
|
|
43
43
|
requirement: !ruby/object:Gem::Requirement
|
|
44
44
|
requirements:
|
|
45
|
-
- - "
|
|
45
|
+
- - ">="
|
|
46
46
|
- !ruby/object:Gem::Version
|
|
47
|
-
version: '
|
|
47
|
+
version: '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: '
|
|
54
|
+
version: '0'
|
|
55
55
|
- !ruby/object:Gem::Dependency
|
|
56
|
-
name:
|
|
56
|
+
name: logger
|
|
57
57
|
requirement: !ruby/object:Gem::Requirement
|
|
58
58
|
requirements:
|
|
59
|
-
- - "
|
|
59
|
+
- - ">="
|
|
60
60
|
- !ruby/object:Gem::Version
|
|
61
|
-
version: '0
|
|
61
|
+
version: '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: '0'
|
|
69
69
|
- !ruby/object:Gem::Dependency
|
|
70
|
-
name:
|
|
70
|
+
name: simplecov
|
|
71
71
|
requirement: !ruby/object:Gem::Requirement
|
|
72
72
|
requirements:
|
|
73
73
|
- - ">="
|
|
@@ -81,7 +81,7 @@ dependencies:
|
|
|
81
81
|
- !ruby/object:Gem::Version
|
|
82
82
|
version: '0'
|
|
83
83
|
- !ruby/object:Gem::Dependency
|
|
84
|
-
name:
|
|
84
|
+
name: simplecov-lcov
|
|
85
85
|
requirement: !ruby/object:Gem::Requirement
|
|
86
86
|
requirements:
|
|
87
87
|
- - ">="
|
|
@@ -95,89 +95,103 @@ dependencies:
|
|
|
95
95
|
- !ruby/object:Gem::Version
|
|
96
96
|
version: '0'
|
|
97
97
|
- !ruby/object:Gem::Dependency
|
|
98
|
-
name:
|
|
98
|
+
name: ostruct
|
|
99
99
|
requirement: !ruby/object:Gem::Requirement
|
|
100
100
|
requirements:
|
|
101
|
-
- - "
|
|
101
|
+
- - ">="
|
|
102
102
|
- !ruby/object:Gem::Version
|
|
103
|
-
version: '
|
|
103
|
+
version: '0'
|
|
104
104
|
type: :development
|
|
105
105
|
prerelease: false
|
|
106
106
|
version_requirements: !ruby/object:Gem::Requirement
|
|
107
107
|
requirements:
|
|
108
|
-
- - "
|
|
108
|
+
- - ">="
|
|
109
109
|
- !ruby/object:Gem::Version
|
|
110
|
-
version: '
|
|
110
|
+
version: '0'
|
|
111
111
|
- !ruby/object:Gem::Dependency
|
|
112
|
-
name:
|
|
112
|
+
name: pry
|
|
113
113
|
requirement: !ruby/object:Gem::Requirement
|
|
114
114
|
requirements:
|
|
115
|
-
- - "
|
|
115
|
+
- - ">="
|
|
116
116
|
- !ruby/object:Gem::Version
|
|
117
|
-
version: '
|
|
117
|
+
version: '0'
|
|
118
118
|
type: :development
|
|
119
119
|
prerelease: false
|
|
120
120
|
version_requirements: !ruby/object:Gem::Requirement
|
|
121
121
|
requirements:
|
|
122
|
-
- - "
|
|
122
|
+
- - ">="
|
|
123
123
|
- !ruby/object:Gem::Version
|
|
124
|
-
version: '
|
|
124
|
+
version: '0'
|
|
125
|
+
- !ruby/object:Gem::Dependency
|
|
126
|
+
name: pry-byebug
|
|
127
|
+
requirement: !ruby/object:Gem::Requirement
|
|
128
|
+
requirements:
|
|
129
|
+
- - ">="
|
|
130
|
+
- !ruby/object:Gem::Version
|
|
131
|
+
version: '0'
|
|
132
|
+
type: :development
|
|
133
|
+
prerelease: false
|
|
134
|
+
version_requirements: !ruby/object:Gem::Requirement
|
|
135
|
+
requirements:
|
|
136
|
+
- - ">="
|
|
137
|
+
- !ruby/object:Gem::Version
|
|
138
|
+
version: '0'
|
|
125
139
|
- !ruby/object:Gem::Dependency
|
|
126
|
-
name:
|
|
140
|
+
name: rake
|
|
127
141
|
requirement: !ruby/object:Gem::Requirement
|
|
128
142
|
requirements:
|
|
129
143
|
- - "~>"
|
|
130
144
|
- !ruby/object:Gem::Version
|
|
131
|
-
version: '0
|
|
145
|
+
version: '13.0'
|
|
132
146
|
type: :development
|
|
133
147
|
prerelease: false
|
|
134
148
|
version_requirements: !ruby/object:Gem::Requirement
|
|
135
149
|
requirements:
|
|
136
150
|
- - "~>"
|
|
137
151
|
- !ruby/object:Gem::Version
|
|
138
|
-
version: '0
|
|
152
|
+
version: '13.0'
|
|
139
153
|
- !ruby/object:Gem::Dependency
|
|
140
|
-
name:
|
|
154
|
+
name: rspec
|
|
141
155
|
requirement: !ruby/object:Gem::Requirement
|
|
142
156
|
requirements:
|
|
143
157
|
- - "~>"
|
|
144
158
|
- !ruby/object:Gem::Version
|
|
145
|
-
version: '
|
|
159
|
+
version: '3.0'
|
|
146
160
|
type: :development
|
|
147
161
|
prerelease: false
|
|
148
162
|
version_requirements: !ruby/object:Gem::Requirement
|
|
149
163
|
requirements:
|
|
150
164
|
- - "~>"
|
|
151
165
|
- !ruby/object:Gem::Version
|
|
152
|
-
version: '
|
|
166
|
+
version: '3.0'
|
|
153
167
|
- !ruby/object:Gem::Dependency
|
|
154
|
-
name:
|
|
168
|
+
name: standard
|
|
155
169
|
requirement: !ruby/object:Gem::Requirement
|
|
156
170
|
requirements:
|
|
157
171
|
- - "~>"
|
|
158
172
|
- !ruby/object:Gem::Version
|
|
159
|
-
version: '1.
|
|
173
|
+
version: '1.53'
|
|
160
174
|
type: :development
|
|
161
175
|
prerelease: false
|
|
162
176
|
version_requirements: !ruby/object:Gem::Requirement
|
|
163
177
|
requirements:
|
|
164
178
|
- - "~>"
|
|
165
179
|
- !ruby/object:Gem::Version
|
|
166
|
-
version: '1.
|
|
180
|
+
version: '1.53'
|
|
167
181
|
- !ruby/object:Gem::Dependency
|
|
168
182
|
name: sqlite3
|
|
169
183
|
requirement: !ruby/object:Gem::Requirement
|
|
170
184
|
requirements:
|
|
171
185
|
- - "~>"
|
|
172
186
|
- !ruby/object:Gem::Version
|
|
173
|
-
version: '
|
|
187
|
+
version: '2.9'
|
|
174
188
|
type: :development
|
|
175
189
|
prerelease: false
|
|
176
190
|
version_requirements: !ruby/object:Gem::Requirement
|
|
177
191
|
requirements:
|
|
178
192
|
- - "~>"
|
|
179
193
|
- !ruby/object:Gem::Version
|
|
180
|
-
version: '
|
|
194
|
+
version: '2.9'
|
|
181
195
|
- !ruby/object:Gem::Dependency
|
|
182
196
|
name: yard
|
|
183
197
|
requirement: !ruby/object:Gem::Requirement
|
|
@@ -192,19 +206,22 @@ dependencies:
|
|
|
192
206
|
- - "~>"
|
|
193
207
|
- !ruby/object:Gem::Version
|
|
194
208
|
version: '0.9'
|
|
195
|
-
description:
|
|
196
209
|
email:
|
|
197
210
|
- botimer@umich.edu
|
|
211
|
+
- aelkiss@umich.edu
|
|
198
212
|
executables: []
|
|
199
213
|
extensions: []
|
|
200
214
|
extra_rdoc_files: []
|
|
201
215
|
files:
|
|
202
216
|
- ".envrc"
|
|
217
|
+
- ".github/dependabot.yml"
|
|
218
|
+
- ".github/workflows/test.yml"
|
|
203
219
|
- ".gitignore"
|
|
204
220
|
- ".rspec"
|
|
205
|
-
- ".
|
|
221
|
+
- ".standard.yml"
|
|
206
222
|
- ".travis.yml"
|
|
207
223
|
- ".yardopts"
|
|
224
|
+
- CHANGELOG.md
|
|
208
225
|
- Gemfile
|
|
209
226
|
- LICENSE.md
|
|
210
227
|
- README.md
|
|
@@ -214,6 +231,7 @@ files:
|
|
|
214
231
|
- bin/rspec
|
|
215
232
|
- bin/sequel
|
|
216
233
|
- bin/setup
|
|
234
|
+
- bin/standardrb
|
|
217
235
|
- bin/yard
|
|
218
236
|
- bin/yardoc
|
|
219
237
|
- checkpoint.gemspec
|
|
@@ -262,7 +280,6 @@ homepage: https://github.com/mlibrary/checkpoint
|
|
|
262
280
|
licenses:
|
|
263
281
|
- BSD-3-Clause
|
|
264
282
|
metadata: {}
|
|
265
|
-
post_install_message:
|
|
266
283
|
rdoc_options: []
|
|
267
284
|
require_paths:
|
|
268
285
|
- lib
|
|
@@ -270,16 +287,14 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
|
270
287
|
requirements:
|
|
271
288
|
- - ">="
|
|
272
289
|
- !ruby/object:Gem::Version
|
|
273
|
-
version:
|
|
290
|
+
version: 3.2.0
|
|
274
291
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
|
275
292
|
requirements:
|
|
276
293
|
- - ">="
|
|
277
294
|
- !ruby/object:Gem::Version
|
|
278
295
|
version: '0'
|
|
279
296
|
requirements: []
|
|
280
|
-
|
|
281
|
-
rubygems_version: 2.7.6.2
|
|
282
|
-
signing_key:
|
|
297
|
+
rubygems_version: 4.0.3
|
|
283
298
|
specification_version: 4
|
|
284
299
|
summary: Checkpoint provides a model and infrastructure for policy-based authorization,
|
|
285
300
|
especially in Rails applications.
|
data/.rubocop.yml
DELETED
|
@@ -1,45 +0,0 @@
|
|
|
1
|
-
Rails:
|
|
2
|
-
Enabled: true
|
|
3
|
-
|
|
4
|
-
Rails/Delegate:
|
|
5
|
-
Enabled: false
|
|
6
|
-
|
|
7
|
-
# inherit_gem:
|
|
8
|
-
# rubocop-rails:
|
|
9
|
-
# - config/rails.yml
|
|
10
|
-
|
|
11
|
-
AllCops:
|
|
12
|
-
DisplayCopNames: true
|
|
13
|
-
TargetRubyVersion: 2.4
|
|
14
|
-
Exclude:
|
|
15
|
-
- 'bin/**/*'
|
|
16
|
-
- 'vendor/**/*'
|
|
17
|
-
|
|
18
|
-
Layout/EmptyLineAfterGuardClause:
|
|
19
|
-
Enabled: false
|
|
20
|
-
|
|
21
|
-
Layout/MultilineMethodDefinitionBraceLayout:
|
|
22
|
-
EnforcedStyle: same_line
|
|
23
|
-
|
|
24
|
-
Metrics/LineLength:
|
|
25
|
-
Max: 110
|
|
26
|
-
|
|
27
|
-
Metrics/BlockLength:
|
|
28
|
-
Exclude:
|
|
29
|
-
- '*.gemspec'
|
|
30
|
-
ExcludedMethods: ['describe', 'context', 'xdescribe', 'xcontext']
|
|
31
|
-
|
|
32
|
-
Layout/SpaceInsideBlockBraces:
|
|
33
|
-
Enabled: false
|
|
34
|
-
|
|
35
|
-
Layout/IndentArray:
|
|
36
|
-
EnforcedStyle: consistent
|
|
37
|
-
|
|
38
|
-
Style/ClassAndModuleChildren:
|
|
39
|
-
Enabled: false
|
|
40
|
-
|
|
41
|
-
Style/StringLiterals:
|
|
42
|
-
Enabled: false
|
|
43
|
-
|
|
44
|
-
Style/SymbolArray:
|
|
45
|
-
EnforcedStyle: brackets
|