super_auth 0.3.1 → 0.3.2

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: d7dd44cc4a7bc63bd611b41e4f4555896c61095a279a32640831d4ff22b11628
4
- data.tar.gz: bb64fa3b4cbd5059a56ef8d3aa27b372f96c7d8df15c2a42efc84d9b2f78bac9
3
+ metadata.gz: f8b9f0044162ed48bfd00d97ec8c865d426a1b23eba3843c812ddb06d9d074e6
4
+ data.tar.gz: 5359617185bba8cb18f7defa857f388deed32fb458fbdbc02e324a435f91daac
5
5
  SHA512:
6
- metadata.gz: de44b731731d0e9d6f86d944306e67db639a7a768416ad96bbcb5956600f6f38bd12f253ca12e30592b5e29078cbdb56078a197d89d9242017043ac8fbd4679b
7
- data.tar.gz: 77ef025662b6bc4ed8110d9dd6ef77347a1744a723cb4b56a4779262010b651ece3a65af605a9cf4cea9fcf850b8d2a6c784fa2a8814f7d06787453e02b3d727
6
+ metadata.gz: 8835d68b13a025b2fcf6a56746716d08b595f1d26b649823110938c9e55496f21f9394b27cb88dfbacce01cdb564844c7423d400881d3ea3b5995b58fa69cfc6
7
+ data.tar.gz: fb79208c943335fb1a6b9fc6de388f413384ab383068f29e118e1e3b4ee386fca9d5285b121356af140686643b30e7a96f348c5caa7c320314fb874f36856961
data/CHANGELOG.md CHANGED
@@ -1,5 +1,11 @@
1
1
  ## [Unreleased]
2
2
 
3
+ ## [0.3.2] - 2026-03-10
4
+
5
+ - Feature: Add `SuperAuth.missing_user_behavior` configuration option
6
+ - `:none` (default) — returns empty result set when `current_user` is blank (existing behavior)
7
+ - `:raise` — raises `SuperAuth::Error` when `current_user` is blank (fail-fast for apps that always require authentication)
8
+
3
9
  ## [0.3.1] - 2026-03-10
4
10
 
5
11
  - Refactor: move authorization compilation logic into Authorization model (`compile!` and `from_graph` class methods)
data/Gemfile.lock CHANGED
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- super_auth (0.3.1)
4
+ super_auth (0.3.2)
5
5
  sequel
6
6
 
7
7
  GEM
data/README.md CHANGED
@@ -47,6 +47,21 @@ Then visit: `http://localhost:3000/super_auth/visualization`
47
47
 
48
48
  See [VISUALIZATION.md](VISUALIZATION.md) for complete documentation.
49
49
 
50
+ ## Configuration
51
+
52
+ ```ruby
53
+ # config/initializers/super_auth.rb
54
+ SuperAuth.setup do |config|
55
+ # Raise an error when a query runs without a current user set.
56
+ # Default is :none (returns empty results silently).
57
+ config.missing_user_behavior = :raise
58
+ end
59
+ ```
60
+
61
+ | Option | Values | Default | Description |
62
+ |--------|--------|---------|-------------|
63
+ | `missing_user_behavior` | `:none`, `:raise` | `:none` | Controls what happens when `SuperAuth.current_user` is blank. `:none` returns an empty result set. `:raise` raises `SuperAuth::Error`. |
64
+
50
65
  ## Usage
51
66
 
52
67
  SuperAuth is a rules engine engine that works on 5 different authorization concepts:
@@ -3,5 +3,7 @@
3
3
  # models on boot. Use this file for any additional configuration.
4
4
  #
5
5
  # SuperAuth.setup do |config|
6
- # # configuration options here
6
+ # # Raise an error when a query runs without a current user set.
7
+ # # Default is :none (returns empty results silently).
8
+ # # config.missing_user_behavior = :raise
7
9
  # end
@@ -1,7 +1,10 @@
1
1
  module SuperAuth::ActiveRecord::ByCurrentUser
2
2
  def self.included(base)
3
3
  base.send(:default_scope, **{all_queries: true}) do
4
- next none if SuperAuth.current_user.blank?
4
+ if SuperAuth.current_user.blank?
5
+ raise SuperAuth::Error, "SuperAuth.current_user not set" if SuperAuth.missing_user_behavior == :raise
6
+ next none
7
+ end
5
8
 
6
9
  if SuperAuth.current_user.respond_to?(:system?) && SuperAuth.current_user.system?
7
10
  self
@@ -1,3 +1,3 @@
1
1
  module SuperAuth
2
- VERSION = "0.3.1"
2
+ VERSION = "0.3.2"
3
3
  end
data/lib/super_auth.rb CHANGED
@@ -8,6 +8,20 @@ module SuperAuth
8
8
  yield self if block_given?
9
9
  end
10
10
 
11
+ # Controls behavior when SuperAuth.current_user is blank in ByCurrentUser scope.
12
+ # :none (default) — returns an empty result set silently
13
+ # :raise — raises SuperAuth::Error
14
+ def self.missing_user_behavior
15
+ @missing_user_behavior || :none
16
+ end
17
+
18
+ def self.missing_user_behavior=(behavior)
19
+ unless %i[none raise].include?(behavior)
20
+ raise ArgumentError, "missing_user_behavior must be :none or :raise, got #{behavior.inspect}"
21
+ end
22
+ @missing_user_behavior = behavior
23
+ end
24
+
11
25
  def self.load
12
26
  require "super_auth/authorization"
13
27
  require "super_auth/edge"
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: super_auth
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.3.1
4
+ version: 0.3.2
5
5
  platform: ruby
6
6
  authors:
7
7
  - Jonathan Frias
@@ -100,7 +100,6 @@ files:
100
100
  - lib/super_auth/user.rb
101
101
  - lib/super_auth/version.rb
102
102
  - lib/tasks/super_auth_tasks.rake
103
- - super_auth.gemspec
104
103
  - visualization.html
105
104
  homepage: https://github.com/JonathanFrias/super_auth
106
105
  licenses:
data/super_auth.gemspec DELETED
@@ -1,35 +0,0 @@
1
- require_relative "lib/super_auth/version"
2
-
3
- Gem::Specification.new do |spec|
4
- spec.name = "super_auth"
5
- spec.version = SuperAuth::VERSION
6
- spec.authors = ["Jonathan Frias"]
7
- spec.email = ["jonathan@gofrias.com"]
8
-
9
- spec.summary = "Make Unauthenticated State Unrepresentable"
10
- spec.description = "Simple, yet super powerful authorization for you application"
11
- spec.homepage = "https://github.com/JonathanFrias/super_auth"
12
- spec.license = "MIT"
13
- spec.required_ruby_version = ">= 2.6.0"
14
-
15
- spec.metadata["homepage_uri"] = spec.homepage
16
- spec.metadata["source_code_uri"] = "https://github.com/JonathanFrias/super_auth"
17
- spec.metadata["changelog_uri"] = "https://github.com/JonathanFrias/super_auth/blob/main/CHANGELOG.md"
18
-
19
- # Specify which files should be added to the gem when it is released.
20
- # The `git ls-files -z` loads the files in the RubyGem that have been added into git.
21
- spec.files = Dir.chdir(__dir__) do
22
- `git ls-files -z`.split("\x0").reject do |f|
23
- (f == __FILE__) || f.match(%r{\A(?:(?:bin|test|spec|features)/|\.(?:git|circleci)|appveyor)})
24
- end
25
- end
26
- spec.bindir = "bin"
27
- spec.executables = spec.files.grep(%r{\Abin/}) { |f| File.basename(f) }
28
- spec.require_paths = ["lib"]
29
-
30
- # Uncomment to register a new dependency of your gem
31
- spec.add_dependency "sequel"
32
- spec.add_development_dependency "sqlite3"
33
- # For more information and examples about making a new gem, check out our
34
- # guide at: https://bundler.io/guides/creating_gem.html
35
- end