Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
23 changes: 14 additions & 9 deletions app/controllers/concerns/motor/current_user_method.rb
Original file line number Diff line number Diff line change
Expand Up @@ -3,16 +3,21 @@
module Motor
module CurrentUserMethod
def current_user
@current_user ||=
if defined?(current_admin)
current_admin
elsif defined?(current_admin_user)
return Motor::AdminUser.public if current_admin_user.nil? && Motor.with_public_access?
# Use the configured current_user_method if available
if Motor.configuration.current_user_method.respond_to?(:call)
@current_user ||= instance_exec(&Motor.configuration.current_user_method)
else
@current_user ||=
if defined?(current_admin)
current_admin
elsif defined?(current_admin_user)
return Motor::AdminUser.public if current_admin_user.nil? && Motor.with_public_access?

current_admin_user
elsif defined?(super)
super
end
current_admin_user
elsif defined?(super)
super
end
end
end
end
end
21 changes: 21 additions & 0 deletions config/initializers/motor_config.rb
Original file line number Diff line number Diff line change
@@ -0,0 +1,21 @@
# frozen_string_literal: true

# Example Motor configuration
Rails.application.config.to_prepare do
Motor.configure do |config|
# Configure whether models are visible by default in the admin UI
# Set to false if you want to hide models by default
# config.models_visible_by_default = false

# Define a custom current_user method implementation if needed
# Example using Warden (commonly used by Devise and other authentication systems):
# config.current_user_method = -> do
# @current_user ||= begin
# warden = request.env['warden']
# if warden && warden.user
# warden.user
# end
# end
# end
end
end
1 change: 1 addition & 0 deletions lib/motor.rb
Original file line number Diff line number Diff line change
Expand Up @@ -66,6 +66,7 @@ def development?
end

require 'motor/version'
require 'motor/configuration'
require 'motor/admin'
require 'motor/assets'
require 'motor/active_record_utils'
Expand Down
2 changes: 1 addition & 1 deletion lib/motor/build_schema/load_from_rails.rb
Original file line number Diff line number Diff line change
Expand Up @@ -78,7 +78,7 @@ def build_model_schema(model)
tabs: BuildSchema::Defaults.tabs,
searchable_columns: FindSearchableColumns.call(model),
custom_sql: nil,
visible: true,
visible: Motor.configuration.models_visible_by_default,
display_primary_key: true,
preferences: {
display_as: 'table'
Expand Down
32 changes: 32 additions & 0 deletions lib/motor/configuration.rb
Original file line number Diff line number Diff line change
@@ -0,0 +1,32 @@
# frozen_string_literal: true

module Motor
# Configuration class for Motor customizations
class Configuration
# Method used to define the current_user implementation
# @return [Proc] a lambda that returns the current user
attr_accessor :current_user_method

# Controls whether models are visible by default in the admin interface
# @return [Boolean] true if models should be visible by default
attr_accessor :models_visible_by_default

def initialize
# Default to nil - will use the original implementation
@current_user_method = nil

# Default to true - models are visible by default
@models_visible_by_default = true
end
end

class << self
def configuration
@configuration ||= Configuration.new
end

def configure
yield(configuration) if block_given?
end
end
end