Module: Repositorish

Defined in:
lib/repositorish.rb,
lib/repositorish/version.rb

Overview

Simple Repository(ish) solution to hold query and command logic into self contained objects

# Example:

“‘ruby class UserRepository

include Repositorish

repositorish :user, scope: :all

def confirmed
  where.not(confirmed_at: nil)
end

end

UserRepository.confirmed # => <User::ActiveRecord_Relation …> “‘

Defined Under Namespace

Modules: ClassMethods Classes: DomainMethodError

Constant Summary collapse

CHAINABLE_NAMESPACES =
%w(ActiveRecord ActiveRecord_Relation ActiveRecord_AssociationRelation)
CHAINABLE_NAMESPACES_REGEX =
/(?:^|::)(?:#{CHAINABLE_NAMESPACES.join('|')})(?:$|::)/.freeze
VERSION =
'0.1.0'.freeze

Class Method Summary collapse

Instance Method Summary collapse

Dynamic Method Handling

This class handles dynamic methods through the method_missing method

#method_missing(method, *args, &block) ⇒ Object



35
36
37
38
39
40
41
42
43
# File 'lib/repositorish.rb', line 35

def method_missing(method, *args, &block)
  return super unless domain.respond_to?(method)

  result = domain.public_send(method, *args, &block)
  return result unless chainable?(result)

  @domain = result
  self
end

Class Method Details

.included(base) ⇒ Object



27
28
29
# File 'lib/repositorish.rb', line 27

def self.included(base)
  base.send :extend, ClassMethods
end

Instance Method Details

#initialize(domain) ⇒ Object



31
32
33
# File 'lib/repositorish.rb', line 31

def initialize(domain)
  @domain = domain
end

#to_aryObject



45
46
47
# File 'lib/repositorish.rb', line 45

def to_ary
  @domain.to_ary
end