module Cistern::Client
Public Class Methods
included(klass)
click to toggle source
vanilla include
Calls superclass method
# File lib/cistern/client.rb, line 32 def self.included(klass) setup(klass) super end
setup(klass, options = {})
click to toggle source
# File lib/cistern/client.rb, line 38 def self.setup(klass, options = {}) request_class = options[:request] || 'Request' collection_class = options[:collection] || 'Collection' model_class = options[:model] || 'Model' singular_class = options[:singular] || 'Singular' interface = options[:interface] || :class interface_callback = (:class == interface) ? :inherited : :included if interface == :class Cistern.deprecation( %q{'class' interface is deprecated. Use `include Cistern::Client.with(interface: :module). See https://github.com/lanej/cistern#custom-architecture}, caller[2], ) end unless klass.name fail ArgumentError, "can't turn anonymous class into a Cistern cistern" end klass.class_eval <<-EOS, __FILE__, __LINE__ module Collections include ::Cistern::Client::Collections def cistern Cistern.deprecation( '#cistern is deprecated. Please use #cistern', caller[0] ) #{klass.name} end def cistern #{klass.name} end end def self.cistern Cistern.deprecation( '#cistern is deprecated. Please use #cistern', caller[0] ) #{klass.name} end def self.cistern #{klass.name} end class Real def initialize(options={}) end def mocking? false end end class Mock def initialize(options={}) end def mocking? true end end #{interface} #{model_class} def self.#{interface_callback}(klass) cistern.models << klass klass.send(:include, ::Cistern::Model) super end def self.cistern Cistern.deprecation( '#cistern is deprecated. Please use #cistern', caller[0] ) #{klass.name} end def self.cistern #{klass.name} end end #{interface} #{singular_class} def self.#{interface_callback}(klass) cistern.singularities << klass klass.send(:include, ::Cistern::Singular) super end def self.service Cistern.deprecation( '#service is deprecated. Please use #cistern', caller[0] ) #{klass.name} end def self.cistern #{klass.name} end end #{interface} #{collection_class} include ::Cistern::Collection def self.#{interface_callback}(klass) klass.send(:extend, Cistern::Attributes::ClassMethods) klass.send(:extend, Cistern::Collection::ClassMethods) klass.send(:include, Cistern::Attributes::InstanceMethods) cistern.collections << klass super end def self.service Cistern.deprecation( '#service is deprecated. Please use #cistern', caller[0] ) #{klass.name} end def self.cistern #{klass.name} end end #{interface} #{request_class} include ::Cistern::Request def self.service Cistern.deprecation( '#service is deprecated. Please use #cistern', caller[0] ) #{klass.name} end def self.cistern #{klass.name} end def self.#{interface_callback}(klass) klass.extend(::Cistern::Request::ClassMethods) cistern.requests << klass super end end EOS klass.send(:extend, Cistern::Client::ClassMethods) klass.send(:const_set, :Timeout, Class.new(Cistern::Error)) klass::Mock.send(:include, klass::Collections) klass::Mock.send(:extend, Cistern::WaitFor) klass::Mock.timeout_error = klass::Timeout klass::Mock.send(:extend, Cistern::Data) klass::Real.send(:include, klass::Collections) klass::Real.send(:extend, Cistern::WaitFor) klass::Real.timeout_error = klass::Timeout end
with(options = {})
click to toggle source
custom include
# File lib/cistern/client.rb, line 15 def self.with(options = {}) client_module = Module.new custom_include = <<-EOS def self.included(klass) Cistern::Client.setup(klass, #{options.inspect}) super end EOS client_module.class_eval(custom_include, __FILE__, __LINE__) client_module end