Module: Squirrell

Included in:
ExampleQuery
Defined in:
lib/squirrell.rb,
lib/squirrell/version.rb

Defined Under Namespace

Classes: ExecutorError, InvalidArelError

Constant Summary collapse

VERSION =
'0.1.0'

Class Attribute Summary collapse

Class Method Summary collapse

Instance Method Summary collapse

Class Attribute Details

.executorObject

Returns the value of attribute executor.



7
8
9
# File 'lib/squirrell.rb', line 7

def executor
  @executor
end

.permitsObject

Returns the value of attribute permits.



6
7
8
# File 'lib/squirrell.rb', line 6

def permits
  @permits
end

.requiresObject

Returns the value of attribute requires.



5
6
7
# File 'lib/squirrell.rb', line 5

def requires
  @requires
end

Class Method Details

.configure {|_self| ... } ⇒ Object

Yields:

  • (_self)

Yield Parameters:

  • _self (Squirrell)

    the object that the method was called on



17
18
19
# File 'lib/squirrell.rb', line 17

def self.configure
  yield self
end

.included(klass) ⇒ Object



34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
# File 'lib/squirrell.rb', line 34

def self.included(klass)
  Squirrell.requires ||= {}
  Squirrell.requires[klass] = []
  Squirrell.permits ||= {}
  Squirrell.permits[klass] = []

  def klass.requires(*args)
    Squirrell.requires[self] = args
  end

  def klass.permits(*args)
    Squirrell.permits[self] = args
  end

  def initialize(args)
    Squirrell.requires[self.class].each do |k|
      unless args.keys.include? k
        fail ArgumentError, "Missing required parameter: #{k}"
      end
      instance_variable_set "@#{k}", args.delete(k)
    end

    Squirrell.permits[self.class].each do |k|
      instance_variable_set "@#{k}", args.delete(k) if args.keys.include? k
    end

    fail ArgumentError if args.any?
  end

  def klass.find(args = {})
    do_query(new(args))
  end

  def klass.do_query(object)
    result = nil
    if object.respond_to? :finder
      result = object.finder
    else
      sql = object.raw_sql
      result = Squirrell.executor.call(sql)
    end
    object.process(result)
  end
end

Instance Method Details

#initialize(args) ⇒ Object



48
49
50
51
52
53
54
55
56
57
58
59
60
61
# File 'lib/squirrell.rb', line 48

def initialize(args)
  Squirrell.requires[self.class].each do |k|
    unless args.keys.include? k
      fail ArgumentError, "Missing required parameter: #{k}"
    end
    instance_variable_set "@#{k}", args.delete(k)
  end

  Squirrell.permits[self.class].each do |k|
    instance_variable_set "@#{k}", args.delete(k) if args.keys.include? k
  end

  fail ArgumentError if args.any?
end

#process(results) ⇒ Object



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

def process(results)
  results
end

#raw_sqlObject



21
22
23
24
25
# File 'lib/squirrell.rb', line 21

def raw_sql
  sql = arel
  fail InvalidArelError unless sql.respond_to? :to_sql
  sql.to_sql
end