module RailsReadonlyInjector
Constants
- ALIASED_METHOD_NAME
- VERSION
Public Class Methods
config() { |configuration| ... }
click to toggle source
Sets the desired configuration object, if a block is provided, and then returns the current configuration object. @return [Configuration] The current configuration object.
# File lib/rails_readonly_injector.rb, line 44 def self.config yield configuration if block_given? configuration end
in_read_only_mode?()
click to toggle source
Returns the currently loaded `config.read_only` value. @return [Boolean] Whether the currently loaded config is set to read-only.
# File lib/rails_readonly_injector.rb, line 32 def self.in_read_only_mode? if config.dirty? && config.changed_attributes.key?(:read_only) # Return the previously stored value config.changed_attributes[:read_only] else config.send(:read_only) end end
reload!()
click to toggle source
Applies changes defined in the `config` object and resets `config.dirty?` to false
# File lib/rails_readonly_injector.rb, line 9 def self.reload! config.classes_to_include.each do |klass| # Ensure we restore classes that we want to exclude, to their defaults # in case they were previously marked as read-only. if config.classes_to_exclude.include? klass restore_readonly_method(klass) next end if config.send(:read_only) override_readonly_method(klass) else restore_readonly_method(klass) end end inject_error_handler_into_actioncontroller_base config.send(:reset_dirty_status!) end
Private Class Methods
configuration()
click to toggle source
@return [Configuration] The current configuration object
# File lib/rails_readonly_injector/configuration.rb, line 99 def self.configuration @config ||= Configuration.new end
inject_error_handler_into_actioncontroller_base()
click to toggle source
# File lib/rails_readonly_injector.rb, line 72 def self.inject_error_handler_into_actioncontroller_base ActionController::Base.class_eval do rescue_from ActiveRecord::ReadOnlyRecord, with: :rescue_from_readonly_failure protected def rescue_from_readonly_failure instance_eval &RailsReadonlyInjector.config.controller_rescue_action end end end
override_readonly_method(klass)
click to toggle source
# File lib/rails_readonly_injector.rb, line 54 def self.override_readonly_method(klass) klass.class_eval do alias_method ALIASED_METHOD_NAME, :readonly? def readonly? true end end end
reset_configuration!()
click to toggle source
Resets the current configuration to the defaults and reloads RailsReadonlyInjector
# File lib/rails_readonly_injector/configuration.rb, line 105 def self.reset_configuration! @config = Configuration.new reload! end
restore_readonly_method(klass)
click to toggle source
# File lib/rails_readonly_injector.rb, line 64 def self.restore_readonly_method(klass) klass.class_eval do def readonly? super end end end
Private Instance Methods
readonly?()
click to toggle source
# File lib/rails_readonly_injector.rb, line 58 def readonly? true end
rescue_from_readonly_failure()
click to toggle source
# File lib/rails_readonly_injector.rb, line 78 def rescue_from_readonly_failure instance_eval &RailsReadonlyInjector.config.controller_rescue_action end