checkpoint 1.1.3 → 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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 7a5c5267a1cdf838b77f7e5e0f9f112d16cb0d5483749b94cd96f33d257b0a40
4
- data.tar.gz: afb6b773eaab25240bed3bf6b3f27ad54ef6da31ff360053cca58039765991bc
3
+ metadata.gz: d6e1f38df526120f3c876818d47b8ca2474cdda3cf01bb369ed85e785231a064
4
+ data.tar.gz: b1dc9721eb030b185f599bef7f406e2f06f122e2cda507b4c3b8ba2119b530bc
5
5
  SHA512:
6
- metadata.gz: 62132bd04ab63f179e8f6a661c9cd3b4655af3f29b27c2c8449356e5662eea352c86acda4af8f12b9bf7bdf5b8166552015047efbf1c07cbcfdc19f269b5fcc3
7
- data.tar.gz: 5af70090db1585a188b9e3046aa0c4f8be424c97ef48832cea3488ab794f16a976c382462ba53cc9c83962246592c4d9caf8f641ed7ddc4f44a3f35a195bc311
6
+ metadata.gz: d15bfc9d3e20a6bdaa5d58eb4c3670f0be7cb8501f62da37441d6a8f6d5afddb03a7961d4f596aaad46ee694e67c858fb7e12aaaba22811dc40e05f7b8fdc220
7
+ data.tar.gz: cd2f5a448180b3c22ef86d3190bd02b336805d489b35198629fe1b3fa0ee2923acb4743e67295cd42a3b1a1eed10c4811cbecd679bdc917c5af24997b7b4db20
@@ -0,0 +1,10 @@
1
+ version: 2
2
+ updates:
3
+ - package-ecosystem: "github-actions"
4
+ directory: "/"
5
+ schedule:
6
+ interval: "daily"
7
+ - package-ecosystem: "bundler"
8
+ directory: "/"
9
+ schedule:
10
+ interval: "daily"
@@ -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
- [![Build Status](https://travis-ci.org/mlibrary/checkpoint.svg?branch=master)](https://travis-ci.org/mlibrary/checkpoint?branch=master)
2
- [![Coverage Status](https://coveralls.io/repos/github/mlibrary/checkpoint/badge.svg?branch=master)](https://coveralls.io/github/mlibrary/checkpoint?branch=master)
1
+ [![Tests](https://github.com/mlibrary/checkpoint/actions/workflows/test.yml/badge.svg)](https://github.com/mlibrary/checkpoint/actions/workflows/test.yml)
2
+ [![Coverage Status](https://coveralls.io/repos/github/mlibrary/checkpoint/badge.svg?branch=main)](https://coveralls.io/github/mlibrary/checkpoint?branch=main)
3
+ [![Ruby Style Guide](https://img.shields.io/badge/code_style-standard-brightgreen.svg)](https://github.com/testdouble/standard)
3
4
  [![User Docs](https://img.shields.io/badge/user_docs-readthedocs-blue.svg)](https://checkpoint.readthedocs.io/en/latest)
4
5
  [![API Docs](https://img.shields.io/badge/API_docs-rubydoc.info-blue.svg)](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
@@ -5,7 +5,7 @@ require "rspec/core/rake_task"
5
5
 
6
6
  RSpec::Core::RakeTask.new(:spec)
7
7
 
8
- load 'lib/tasks/migrate.rake'
8
+ load "lib/tasks/migrate.rake"
9
9
 
10
10
  task default: :spec
11
11
 
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('lib', __dir__)
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 = "checkpoint"
8
+ spec.name = "checkpoint"
9
9
  spec.version = Checkpoint::VERSION
10
10
  spec.authors = ["Noah Botimer", "Aaron Elkiss"]
11
- spec.email = ["botimer@umich.edu", "aelkiss@umich.edu"]
11
+ spec.email = ["botimer@umich.edu", "aelkiss@umich.edu"]
12
12
  spec.license = "BSD-3-Clause"
13
13
 
14
14
  spec.summary = <<~SUMMARY
@@ -21,21 +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 = "exe"
25
- spec.executables = spec.files.grep(%r{^exe/}) { |f| File.basename(f) }
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.6"
31
+ spec.add_dependency "sequel", "~> 5.100"
30
32
 
31
- spec.add_development_dependency "bundler", "~> 2.0"
32
- spec.add_development_dependency "coveralls", "~> 0.8"
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", "~> 10.0"
40
+ spec.add_development_dependency "rake", "~> 13.0"
36
41
  spec.add_development_dependency "rspec", "~> 3.0"
37
- spec.add_development_dependency "rubocop", "~> 0.52"
38
- spec.add_development_dependency "rubocop-rspec", "~> 1.16"
39
- spec.add_development_dependency "sqlite3", "~> 1.3"
42
+ spec.add_development_dependency "standard", "~> 1.53"
43
+ spec.add_development_dependency "sqlite3", "~> 2.9"
40
44
  spec.add_development_dependency "yard", "~> 0.9"
41
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, 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
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, 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
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
- alias == eql?
54
- alias inspect uri
55
- alias agent_id id
56
- alias agent_type type
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
@@ -1,7 +1,7 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- require 'checkpoint/agent/resolver'
4
- require 'checkpoint/agent/token'
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
@@ -1,9 +1,9 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- require 'checkpoint/agent/resolver'
4
- require 'checkpoint/credential/resolver'
5
- require 'checkpoint/resource/resolver'
6
- require 'checkpoint/grants'
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 = agent_resolver
17
+ grants: Grants.new
18
+ )
19
+ @agent_resolver = agent_resolver
20
20
  @credential_resolver = credential_resolver
21
- @resource_resolver = resource_resolver
22
- @grants = 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
@@ -18,7 +18,7 @@ module Checkpoint
18
18
  # the actual behavior of the Permission objects, rather than just which
19
19
  # ones are resolved.
20
20
  class Permission < Credential
21
- TYPE = 'permission'
21
+ TYPE = "permission"
22
22
 
23
23
  def type
24
24
  TYPE
@@ -15,7 +15,7 @@ module Checkpoint
15
15
  # should only be necessary if the application needs to extend the actual
16
16
  # behavior of the Role objects, rather than just which ones are resolved.
17
17
  class Role < Credential
18
- TYPE = 'role'
18
+ TYPE = "role"
19
19
 
20
20
  def type
21
21
  TYPE
@@ -45,7 +45,7 @@ class Checkpoint::Credential
45
45
 
46
46
  def roles_granting(action)
47
47
  if permission_map.key?(action)
48
- permission_map[action].map {|role| Role.new(role) }
48
+ permission_map[action].map { |role| Role.new(role) }
49
49
  else
50
50
  []
51
51
  end
@@ -49,10 +49,10 @@ module Checkpoint
49
49
  to_s.hash
50
50
  end
51
51
 
52
- alias == eql?
53
- alias inspect uri
54
- alias credential_type type
55
- alias credential_id id
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 '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'
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
- alias name id
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 = name.to_s
42
- @type = 'credential'
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
- alias == eql?
93
+ alias_method :==, :eql?
94
94
  end
95
95
  end
@@ -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, agent_id: agent.id, agent_token: agent.token,
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, resource_id: resource.id, resource_token: resource.token,
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
- '(all)'
20
+ "(all)"
21
21
  end
22
22
  end
23
23
  end
@@ -11,7 +11,7 @@ module Checkpoint
11
11
  attr_reader :items, :prefix
12
12
 
13
13
  def initialize(items, prefix)
14
- @items = [items].flatten
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
- item.sql_value
28
- else
29
- item.to_s
30
- end
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 = tokenize(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: agent_params.placeholders,
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(Hash[
31
- agent_params.values +
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, 'at')
37
+ Params.new(agents, "at")
40
38
  end
41
39
 
42
40
  def credential_params
43
- Params.new(credentials, 'ct')
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 = tokenize(agents)
18
+ @agents = tokenize(agents)
19
19
  @credentials = tokenize(credentials)
20
- @resources = tokenize(resources)
20
+ @resources = tokenize(resources)
21
21
  end
22
22
 
23
23
  def conditions
24
24
  super.merge(
25
- agent_token: agent_params.placeholders,
25
+ agent_token: agent_params.placeholders,
26
26
  credential_token: credential_params.placeholders,
27
- resource_token: resource_params.placeholders
27
+ resource_token: resource_params.placeholders
28
28
  )
29
29
  end
30
30
 
31
31
  def parameters
32
- super.merge(Hash[
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, 'at')
40
+ Params.new(agents, "at")
43
41
  end
44
42
 
45
43
  def credential_params
46
- Params.new(credentials, 'ct')
44
+ Params.new(credentials, "ct")
47
45
  end
48
46
 
49
47
  def resource_params
50
- Params.new(resources, 'rt')
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 = tokenize(agents)
19
- @resources = tokenize(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: agent_params.placeholders,
25
- resource_token: resource_params.placeholders
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(Hash[
31
- agent_params.values +
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, 'at')
37
+ Params.new(agents, "at")
40
38
  end
41
39
 
42
40
  def resource_params
43
- Params.new(resources, 'rt')
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 = tokenize(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: resource_params.placeholders
25
+ resource_token: resource_params.placeholders
26
26
  )
27
27
  end
28
28
 
29
29
  def parameters
30
- super.merge(Hash[
31
- credential_params.values +
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, 'ct')
37
+ Params.new(credentials, "ct")
40
38
  end
41
39
 
42
40
  def resource_params
43
- Params.new(resources, 'rt')
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 'ostruct'
4
- require 'logger'
5
- require 'yaml'
3
+ require "ostruct"
4
+ require "logger"
5
+ require "yaml"
6
6
 
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'
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 = 'The Checkpoint database is not initialized. Call initialize! first.'
20
+ CONNECTION_ERROR = "The Checkpoint database is not initialized. Call initialize! first."
21
21
 
22
- ALREADY_CONNECTED = 'Already connected; refusing to connect to another database.'
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__, '../../db/migrations'), table: schema_table)
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
- 'db/checkpoint.yml'
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
- 'db/grant'
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 = config[:url] if config.key?(: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 = config[:db] if config.key?(:db)
128
+ self.config.db = config[:db] if config.key?(:db)
129
129
  end
130
130
 
131
131
  def conn_opts
132
- log = { logger: Logger.new('db/checkpoint.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['CHECKPOINT_DATABASE_URL'] || ENV['DATABASE_URL']
146
+ url: ENV["CHECKPOINT_DATABASE_URL"] || ENV["DATABASE_URL"]
147
147
  )
148
148
  end
149
149
 
@@ -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 'checkpoint/db'
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
- { scope: grants }
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 = user
26
- @action = action.to_sym
27
- @target = 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 = user
41
- @role = role.to_sym
42
- @target = target
40
+ @user = user
41
+ @role = role.to_sym
42
+ @target = target
43
43
  @authority = authority
44
44
  end
45
45
 
@@ -1,7 +1,7 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- require 'checkpoint/query/role_granted'
4
- require 'checkpoint/query/action_permitted'
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
@@ -68,9 +68,9 @@ module Checkpoint
68
68
  unless config.url
69
69
  case Rails.env
70
70
  when "development"
71
- config[:opts] = { adapter: 'sqlite', database: 'db/checkpoint_development.sqlite3' }
71
+ config[:opts] = {adapter: "sqlite", database: "db/checkpoint_development.sqlite3"}
72
72
  when "test"
73
- config[:opts] = { adapter: 'sqlite' }
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__) + '../tasks/'
99
- [base + 'migrate.rake']
98
+ base = Pathname(__dir__) + "../tasks/"
99
+ [base + "migrate.rake"]
100
100
  end
101
101
 
102
102
  rake_tasks do
@@ -22,7 +22,7 @@ module Checkpoint
22
22
  other.is_a?(Resource) && type == other.type
23
23
  end
24
24
 
25
- alias == eql?
25
+ alias_method :==, :eql?
26
26
  end
27
27
  end
28
28
  end
@@ -23,7 +23,7 @@ module Checkpoint
23
23
  other.respond_to?(:type) && type == other.type
24
24
  end
25
25
 
26
- alias == eql?
26
+ alias_method :==, :eql?
27
27
  end
28
28
  end
29
29
  end
@@ -1,6 +1,6 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- require 'checkpoint/resource/resolver'
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
- alias == eql?
82
- alias inspect uri
83
- alias resource_type type
84
- alias resource_id id
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
@@ -1,10 +1,10 @@
1
1
  # frozen_string_literal: true
2
2
 
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'
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 = '(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
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module Checkpoint
4
- VERSION = "1.1.3"
4
+ VERSION = "1.2.0"
5
5
  end
data/lib/checkpoint.rb CHANGED
@@ -2,8 +2,8 @@
2
2
 
3
3
  require "checkpoint/version"
4
4
 
5
- require 'sequel'
6
- require 'ettin'
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 '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)
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)
@@ -1,15 +1,15 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- require 'bundler/setup'
4
- require 'checkpoint'
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?('db:schema:dump')
11
- Rake::Task['db:schema:dump'].enhance do
12
- Rake::Task['checkpoint:schema:dump'].invoke
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['db:schema:load'].enhance do
21
- Rake::Task['checkpoint:schema:load'].invoke
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['db:migrate'].enhance do
26
- Rake::Task['checkpoint:migrate'].invoke
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['environment'].invoke
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['environment'].invoke
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['environment'].invoke
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['checkpoint:migrate'].enhance do
71
- Rake::Task['checkpoint:schema:dump'].invoke
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,15 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: checkpoint
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.1.3
4
+ version: 1.2.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Noah Botimer
8
8
  - Aaron Elkiss
9
- autorequire:
10
9
  bindir: exe
11
10
  cert_chain: []
12
- date: 2019-05-23 00:00:00.000000000 Z
11
+ date: 1980-01-02 00:00:00.000000000 Z
13
12
  dependencies:
14
13
  - !ruby/object:Gem::Dependency
15
14
  name: ettin
@@ -31,44 +30,44 @@ dependencies:
31
30
  requirements:
32
31
  - - "~>"
33
32
  - !ruby/object:Gem::Version
34
- version: '5.6'
33
+ version: '5.100'
35
34
  type: :runtime
36
35
  prerelease: false
37
36
  version_requirements: !ruby/object:Gem::Requirement
38
37
  requirements:
39
38
  - - "~>"
40
39
  - !ruby/object:Gem::Version
41
- version: '5.6'
40
+ version: '5.100'
42
41
  - !ruby/object:Gem::Dependency
43
42
  name: bundler
44
43
  requirement: !ruby/object:Gem::Requirement
45
44
  requirements:
46
- - - "~>"
45
+ - - ">="
47
46
  - !ruby/object:Gem::Version
48
- version: '2.0'
47
+ version: '0'
49
48
  type: :development
50
49
  prerelease: false
51
50
  version_requirements: !ruby/object:Gem::Requirement
52
51
  requirements:
53
- - - "~>"
52
+ - - ">="
54
53
  - !ruby/object:Gem::Version
55
- version: '2.0'
54
+ version: '0'
56
55
  - !ruby/object:Gem::Dependency
57
- name: coveralls
56
+ name: logger
58
57
  requirement: !ruby/object:Gem::Requirement
59
58
  requirements:
60
- - - "~>"
59
+ - - ">="
61
60
  - !ruby/object:Gem::Version
62
- version: '0.8'
61
+ version: '0'
63
62
  type: :development
64
63
  prerelease: false
65
64
  version_requirements: !ruby/object:Gem::Requirement
66
65
  requirements:
67
- - - "~>"
66
+ - - ">="
68
67
  - !ruby/object:Gem::Version
69
- version: '0.8'
68
+ version: '0'
70
69
  - !ruby/object:Gem::Dependency
71
- name: pry
70
+ name: simplecov
72
71
  requirement: !ruby/object:Gem::Requirement
73
72
  requirements:
74
73
  - - ">="
@@ -82,7 +81,7 @@ dependencies:
82
81
  - !ruby/object:Gem::Version
83
82
  version: '0'
84
83
  - !ruby/object:Gem::Dependency
85
- name: pry-byebug
84
+ name: simplecov-lcov
86
85
  requirement: !ruby/object:Gem::Requirement
87
86
  requirements:
88
87
  - - ">="
@@ -96,75 +95,103 @@ dependencies:
96
95
  - !ruby/object:Gem::Version
97
96
  version: '0'
98
97
  - !ruby/object:Gem::Dependency
99
- name: rake
98
+ name: ostruct
100
99
  requirement: !ruby/object:Gem::Requirement
101
100
  requirements:
102
- - - "~>"
101
+ - - ">="
103
102
  - !ruby/object:Gem::Version
104
- version: '10.0'
103
+ version: '0'
105
104
  type: :development
106
105
  prerelease: false
107
106
  version_requirements: !ruby/object:Gem::Requirement
108
107
  requirements:
109
- - - "~>"
108
+ - - ">="
110
109
  - !ruby/object:Gem::Version
111
- version: '10.0'
110
+ version: '0'
112
111
  - !ruby/object:Gem::Dependency
113
- name: rspec
112
+ name: pry
113
+ requirement: !ruby/object:Gem::Requirement
114
+ requirements:
115
+ - - ">="
116
+ - !ruby/object:Gem::Version
117
+ version: '0'
118
+ type: :development
119
+ prerelease: false
120
+ version_requirements: !ruby/object:Gem::Requirement
121
+ requirements:
122
+ - - ">="
123
+ - !ruby/object:Gem::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'
139
+ - !ruby/object:Gem::Dependency
140
+ name: rake
114
141
  requirement: !ruby/object:Gem::Requirement
115
142
  requirements:
116
143
  - - "~>"
117
144
  - !ruby/object:Gem::Version
118
- version: '3.0'
145
+ version: '13.0'
119
146
  type: :development
120
147
  prerelease: false
121
148
  version_requirements: !ruby/object:Gem::Requirement
122
149
  requirements:
123
150
  - - "~>"
124
151
  - !ruby/object:Gem::Version
125
- version: '3.0'
152
+ version: '13.0'
126
153
  - !ruby/object:Gem::Dependency
127
- name: rubocop
154
+ name: rspec
128
155
  requirement: !ruby/object:Gem::Requirement
129
156
  requirements:
130
157
  - - "~>"
131
158
  - !ruby/object:Gem::Version
132
- version: '0.52'
159
+ version: '3.0'
133
160
  type: :development
134
161
  prerelease: false
135
162
  version_requirements: !ruby/object:Gem::Requirement
136
163
  requirements:
137
164
  - - "~>"
138
165
  - !ruby/object:Gem::Version
139
- version: '0.52'
166
+ version: '3.0'
140
167
  - !ruby/object:Gem::Dependency
141
- name: rubocop-rspec
168
+ name: standard
142
169
  requirement: !ruby/object:Gem::Requirement
143
170
  requirements:
144
171
  - - "~>"
145
172
  - !ruby/object:Gem::Version
146
- version: '1.16'
173
+ version: '1.53'
147
174
  type: :development
148
175
  prerelease: false
149
176
  version_requirements: !ruby/object:Gem::Requirement
150
177
  requirements:
151
178
  - - "~>"
152
179
  - !ruby/object:Gem::Version
153
- version: '1.16'
180
+ version: '1.53'
154
181
  - !ruby/object:Gem::Dependency
155
182
  name: sqlite3
156
183
  requirement: !ruby/object:Gem::Requirement
157
184
  requirements:
158
185
  - - "~>"
159
186
  - !ruby/object:Gem::Version
160
- version: '1.3'
187
+ version: '2.9'
161
188
  type: :development
162
189
  prerelease: false
163
190
  version_requirements: !ruby/object:Gem::Requirement
164
191
  requirements:
165
192
  - - "~>"
166
193
  - !ruby/object:Gem::Version
167
- version: '1.3'
194
+ version: '2.9'
168
195
  - !ruby/object:Gem::Dependency
169
196
  name: yard
170
197
  requirement: !ruby/object:Gem::Requirement
@@ -179,7 +206,6 @@ dependencies:
179
206
  - - "~>"
180
207
  - !ruby/object:Gem::Version
181
208
  version: '0.9'
182
- description:
183
209
  email:
184
210
  - botimer@umich.edu
185
211
  - aelkiss@umich.edu
@@ -188,11 +214,14 @@ extensions: []
188
214
  extra_rdoc_files: []
189
215
  files:
190
216
  - ".envrc"
217
+ - ".github/dependabot.yml"
218
+ - ".github/workflows/test.yml"
191
219
  - ".gitignore"
192
220
  - ".rspec"
193
- - ".rubocop.yml"
221
+ - ".standard.yml"
194
222
  - ".travis.yml"
195
223
  - ".yardopts"
224
+ - CHANGELOG.md
196
225
  - Gemfile
197
226
  - LICENSE.md
198
227
  - README.md
@@ -202,6 +231,7 @@ files:
202
231
  - bin/rspec
203
232
  - bin/sequel
204
233
  - bin/setup
234
+ - bin/standardrb
205
235
  - bin/yard
206
236
  - bin/yardoc
207
237
  - checkpoint.gemspec
@@ -250,7 +280,6 @@ homepage: https://github.com/mlibrary/checkpoint
250
280
  licenses:
251
281
  - BSD-3-Clause
252
282
  metadata: {}
253
- post_install_message:
254
283
  rdoc_options: []
255
284
  require_paths:
256
285
  - lib
@@ -258,16 +287,14 @@ required_ruby_version: !ruby/object:Gem::Requirement
258
287
  requirements:
259
288
  - - ">="
260
289
  - !ruby/object:Gem::Version
261
- version: '0'
290
+ version: 3.2.0
262
291
  required_rubygems_version: !ruby/object:Gem::Requirement
263
292
  requirements:
264
293
  - - ">="
265
294
  - !ruby/object:Gem::Version
266
295
  version: '0'
267
296
  requirements: []
268
- rubyforge_project:
269
- rubygems_version: 2.7.6.2
270
- signing_key:
297
+ rubygems_version: 4.0.3
271
298
  specification_version: 4
272
299
  summary: Checkpoint provides a model and infrastructure for policy-based authorization,
273
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/IndentFirstArrayElement:
36
- EnforcedStyle: consistent
37
-
38
- Style/ClassAndModuleChildren:
39
- Enabled: false
40
-
41
- Style/StringLiterals:
42
- Enabled: false
43
-
44
- Style/SymbolArray:
45
- EnforcedStyle: brackets