Class: RailsQuery::Query

Inherits:
Object
  • Object
show all
Defined in:
lib/rails_query/query.rb

Overview

Base class for queries

Class Method Summary collapse

Instance Method Summary collapse

Class Method Details

.call(*args, **opts) ⇒ Object



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

def call(*args, **opts)
  new.call(*args, **opts)
end

.key(&block) ⇒ Object



21
22
23
24
# File 'lib/rails_query/query.rb', line 21

def key(&block)
  @key_block = block if block
  @key_block
end

.stale(value = nil) ⇒ Object



16
17
18
19
# File 'lib/rails_query/query.rb', line 16

def stale(value = nil)
  @stale = value if value
  @stale
end

.ttl(value = nil) ⇒ Object



11
12
13
14
# File 'lib/rails_query/query.rb', line 11

def ttl(value = nil)
  @ttl = value if value
  @ttl
end

Instance Method Details

#build_key(*args, **opts) ⇒ Object



43
44
45
46
47
48
# File 'lib/rails_query/query.rb', line 43

def build_key(*args, **opts)
  opts = opts.select { |k, _| self.class.key.parameters.map(&:last).include?(k) }
  return instance_exec(*args, **opts, &self.class.key) if self.class.key

  [self.class.name, args]
end

#call(*args, **opts) ⇒ Object



27
28
29
30
31
32
33
# File 'lib/rails_query/query.rb', line 27

def call(*args, **opts)
  key = build_key(*args, **opts)
  provider_class = opts[:provider] || self.class.name
  RailsQuery.client.fetch(key, ttl: ttl, stale: stale, provider: provider_class) do
    kwargs? ? resolve(*args, **opts) : resolve(*args)
  end
end

#kwargs?Boolean

Returns:

  • (Boolean)


50
51
52
# File 'lib/rails_query/query.rb', line 50

def kwargs?
  method(:resolve).parameters.any? { |type, _| %i[keyrest opt].include?(type) }
end

#resolveObject

Raises:

  • (NotImplementedError)


54
55
56
# File 'lib/rails_query/query.rb', line 54

def resolve(*)
  raise NotImplementedError
end

#staleObject



39
40
41
# File 'lib/rails_query/query.rb', line 39

def stale
  self.class.stale || RailsQuery.configuration.default_stale
end

#ttlObject



35
36
37
# File 'lib/rails_query/query.rb', line 35

def ttl
  self.class.ttl || RailsQuery.configuration.default_ttl
end