module Rails_current
Constants
- VERSION
Public Class Methods
attribute(name, *args, &block)
click to toggle source
# File lib/rails_current.rb, line 50 def Current.attribute(name, *args, &block) options = Map.options_for!(args) name = name.to_s attribute_names.push(name) attribute_names.uniq! if options.has_key?(:default) default = options[:default] if default.respond_to?(:call) block ||= default else data[name] = default end end if !args.empty? value = args.shift data[name] = value end if block generators[name] = block end define_attribute_method(name) self end
attribute?(name)
click to toggle source
# File lib/rails_current.rb, line 119 def Current.attribute?(name) attribute_names.include?(name.to_s) end
attribute_names()
click to toggle source
# File lib/rails_current.rb, line 123 def Current.attribute_names @attribute_names ||= [] end
attributes()
click to toggle source
# File lib/rails_current.rb, line 127 def Current.attributes attribute_names.inject(Map.new){|map, name| map.update(name => send(name))} end
clear()
click to toggle source
# File lib/rails_current.rb, line 34 def Current.clear data.clear self end
data()
click to toggle source
# File lib/rails_current.rb, line 30 def Current.data Thread.current[:current] ||= Map.new end
define_attribute_method(name)
click to toggle source
# File lib/rails_current.rb, line 81 def Current.define_attribute_method(name) name = name.to_s unless respond_to?(name) singleton_class.module_eval do define_method(name) do value = data[name] if value.nil? and generator = generators[name] value = generator.call data[name] = value end value end define_method(name + '=') do |value| data[name] = value end define_method(name + '?') do |*args| send(name) end end end end
dependencies()
click to toggle source
# File lib/rails_current.rb, line 9 def Current.dependencies { 'map' => [ 'map', ' ~> 6.0' ] } end
description()
click to toggle source
# File lib/rails_current.rb, line 15 def Current.description "track 'current_user' et all in a tidy, global, and thread-safe fashion for your rails apps" end
ensure_rails_application(&block)
click to toggle source
# File lib/rails_current.rb, line 211 def Current.ensure_rails_application(&block) require 'rails' unless defined?(Rails) if Rails.application.nil? mock = Class.new(Rails::Application) Rails.application = mock.instance if defined?(Rails.application.config.secret_key_base) Rails.application.config.secret_key_base = '42' end begin block.call() ensure Rails.application = nil end else block.call() end end
generators()
click to toggle source
# File lib/rails_current.rb, line 46 def Current.generators @generators ||= Map.new end
install_before_action!()
click to toggle source
# File lib/rails_current.rb, line 261 def Current.install_before_action! if defined?(::ActionController::Base) ::ActionController::Base.module_eval do prepend_before_action do |controller| Current.clear Current.controller = Current.proxy_for(controller) Current.action = controller ? controller.send(:action_name) : nil end extend Current include Current helper{ include Current } end end end
method_missing(method, *args, &block)
click to toggle source
# File lib/rails_current.rb, line 131 def Current.method_missing(method, *args, &block) case method.to_s when /^(.*)[=]$/ name = $1 value = args.shift attribute(name, value) value when /^(.*)[?]$/ nil else if block name = method.to_s attribute(name, &block) block else nil end end end
mock_controller(options = {})
click to toggle source
# File lib/rails_current.rb, line 163 def Current.mock_controller(options = {}) ensure_rails_application do require 'action_controller' require 'action_dispatch/testing/test_request.rb' require 'action_dispatch/testing/test_response.rb' store = ActiveSupport::Cache::MemoryStore.new controller = mock_controller_class.new controller.perform_caching = true controller.cache_store = store request = ActionDispatch::TestRequest.create response = ActionDispatch::TestResponse.create controller.request = request controller.response = response singleton_class = class << controller self end singleton_class.module_eval do define_method(:default_url_options) do @default_url_options ||= ( defined?(DefaultUrlOptions) ? DefaultUrlOptions.dup : {} ) end end Current.proxy_for(controller) end end
mock_controller_class()
click to toggle source
# File lib/rails_current.rb, line 198 def Current.mock_controller_class unless const_defined?(:Controller) controller_class = if defined?(::ApplicationController) Class.new(::ApplicationController) else Class.new(::ActionController::Base) end const_set(:Controller, controller_class) end return const_get(:Controller) end
proxy_for(object)
click to toggle source
# File lib/rails_current.rb, line 243 def Current.proxy_for(object) Proxy.new(object) end
reset()
click to toggle source
# File lib/rails_current.rb, line 39 def Current.reset attribute_names.each{|name| undefine_attribute_method(name)} attribute_names.clear generators.clear clear end
singleton_class()
click to toggle source
# File lib/rails_current.rb, line 115 def Current.singleton_class @singleton_class ||= class << self; self; end end
undefine_attribute_method(name)
click to toggle source
# File lib/rails_current.rb, line 105 def Current.undefine_attribute_method(name) if respond_to?(name) singleton_class.module_eval do remove_method(name) remove_method(name + '=') remove_method(name + '?') end end end
version()
click to toggle source
# File lib/rails_current.rb, line 5 def Current.version VERSION end
Public Instance Methods
method_missing(method, *args, &block)
click to toggle source
Calls superclass method
# File lib/rails_current.rb, line 153 def method_missing(method, *args, &block) case method.to_s when /^current_(.*)$/ msg = $1 Current.send(msg, *args, &block) else super end end