Module: N1Loader::Loadable::ClassMethods
- Includes:
- ArLazyPreload::Loadable::ClassMethods, Name
- Defined in:
- lib/n1_loader/core/loadable.rb
Overview
:nodoc:
Instance Method Summary collapse
- #n1_loader(name) ⇒ Object
- #n1_loader_defined?(name) ⇒ Boolean
- #n1_loaders ⇒ Object
-
#n1_optimized(name, loader = nil, &block) ⇒ Object
rubocop:disable Metrics/MethodLength, Metrics/AbcSize.
Methods included from Name
Instance Method Details
#n1_loader(name) ⇒ Object
54 55 56 57 58 |
# File 'lib/n1_loader/core/loadable.rb', line 54 def n1_loader(name) name = n1_loader_name(name) send("#{name}_loader") end |
#n1_loader_defined?(name) ⇒ Boolean
60 61 62 63 64 |
# File 'lib/n1_loader/core/loadable.rb', line 60 def n1_loader_defined?(name) name = n1_loader_name(name) respond_to?("#{name}_loader") end |
#n1_loaders ⇒ Object
66 67 68 |
# File 'lib/n1_loader/core/loadable.rb', line 66 def n1_loaders @n1_loaders ||= superclass.respond_to?(:n1_loaders) ? superclass.n1_loaders.dup : [] end |
#n1_optimized(name, loader = nil, &block) ⇒ Object
rubocop:disable Metrics/MethodLength, Metrics/AbcSize
70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 |
# File 'lib/n1_loader/core/loadable.rb', line 70 def n1_optimized(name, loader = nil, &block) # rubocop:disable Metrics/MethodLength, Metrics/AbcSize loader ||= Class.new(N1Loader::Loader) do if block.arity == 1 define_method(:perform, &block) else class_eval(&block) end end loader_name = "#{n1_loader_name(name)}_loader" loader_variable_name = "@#{loader_name}" n1_loaders << name define_singleton_method(loader_name) do loader end define_method("#{loader_name}_reload") do instance_variable_set(loader_variable_name, N1Loader::LoaderCollection.new(self.class.send(loader_name), [self])) end define_method("#{loader_name}=") do |loader_collection_instance| instance_variable_set(loader_variable_name, loader_collection_instance) end define_method(loader_name) do instance_variable_get(loader_variable_name) || send("#{loader_name}_reload") end define_method(name) do |reload: false, **args| send("#{loader_name}_reload") if reload send(loader_name).with(**args).for(self) end [name, loader_name, loader_variable_name] end |