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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: bf2a734d88636479dc383bd75b0766440d7446aa969867ec6917893f2452963a
4
- data.tar.gz: 1fa12e10adc19d5cef6a57a56e4e0476a85f4d07f00345e33b69b574597d0455
3
+ metadata.gz: d6e1f38df526120f3c876818d47b8ca2474cdda3cf01bb369ed85e785231a064
4
+ data.tar.gz: b1dc9721eb030b185f599bef7f406e2f06f122e2cda507b4c3b8ba2119b530bc
5
5
  SHA512:
6
- metadata.gz: b8f372415ce564a3ee70f5540208a0898b120c24780303ae6a0b3cf715c81bd7f3bfa7d74b6b505d783e86641c76d36d6d4ea4b3523792f4e2ba259cd3732cac
7
- data.tar.gz: 2d9bd9bb04764d28e0bd202285651ef7656dce7d669722a82b82f1fea8651a0b92705ebbc6e8eca9e9f09356633146c8ea452d7604770a993aa68a6f836ea2d0
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
- spec.authors = ["Noah Botimer"]
11
- spec.email = ["botimer@umich.edu"]
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 = "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-rails", "~> 1.1"
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, 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.2"
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,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: checkpoint
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.1.2
4
+ version: 1.2.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Noah Botimer
8
- autorequire:
8
+ - Aaron Elkiss
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2019-05-23 00:00:00.000000000 Z
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.6'
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.6'
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: '2.0'
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: '2.0'
54
+ version: '0'
55
55
  - !ruby/object:Gem::Dependency
56
- name: coveralls
56
+ name: logger
57
57
  requirement: !ruby/object:Gem::Requirement
58
58
  requirements:
59
- - - "~>"
59
+ - - ">="
60
60
  - !ruby/object:Gem::Version
61
- version: '0.8'
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.8'
68
+ version: '0'
69
69
  - !ruby/object:Gem::Dependency
70
- name: pry
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: pry-byebug
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: rake
98
+ name: ostruct
99
99
  requirement: !ruby/object:Gem::Requirement
100
100
  requirements:
101
- - - "~>"
101
+ - - ">="
102
102
  - !ruby/object:Gem::Version
103
- version: '10.0'
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: '10.0'
110
+ version: '0'
111
111
  - !ruby/object:Gem::Dependency
112
- name: rspec
112
+ name: pry
113
113
  requirement: !ruby/object:Gem::Requirement
114
114
  requirements:
115
- - - "~>"
115
+ - - ">="
116
116
  - !ruby/object:Gem::Version
117
- version: '3.0'
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: '3.0'
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: rubocop
140
+ name: rake
127
141
  requirement: !ruby/object:Gem::Requirement
128
142
  requirements:
129
143
  - - "~>"
130
144
  - !ruby/object:Gem::Version
131
- version: '0.52'
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.52'
152
+ version: '13.0'
139
153
  - !ruby/object:Gem::Dependency
140
- name: rubocop-rails
154
+ name: rspec
141
155
  requirement: !ruby/object:Gem::Requirement
142
156
  requirements:
143
157
  - - "~>"
144
158
  - !ruby/object:Gem::Version
145
- version: '1.1'
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: '1.1'
166
+ version: '3.0'
153
167
  - !ruby/object:Gem::Dependency
154
- name: rubocop-rspec
168
+ name: standard
155
169
  requirement: !ruby/object:Gem::Requirement
156
170
  requirements:
157
171
  - - "~>"
158
172
  - !ruby/object:Gem::Version
159
- version: '1.16'
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.16'
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: '1.3'
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: '1.3'
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
- - ".rubocop.yml"
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: '0'
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
- rubyforge_project:
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