Class: LazyResource::Relation

Inherits:
Object
  • Object
show all
Defined in:
lib/lazy_resource/relation.rb

Instance Attribute Summary collapse

Class Method Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(klass, options = {}) ⇒ Relation

Returns a new instance of Relation.



13
14
15
16
17
18
19
20
21
22
# File 'lib/lazy_resource/relation.rb', line 13

def initialize(klass, options = {})
  @klass = klass
  @values = options.slice(:where_values, :order_value, :limit_value, :offset_value, :page_value)
  @fetched = options[:fetched] || false
  unless fetched?
    resource_queue.queue(self)
  end

  self
end

Dynamic Method Handling

This class handles dynamic methods through the method_missing method

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



124
125
126
127
128
129
130
# File 'lib/lazy_resource/relation.rb', line 124

def method_missing(name, *args, &block)
  if result.respond_to?(name)
    self.to_a.send(name, *args, &block)
  else
    super
  end
end

Instance Attribute Details

#fetchedObject

Returns the value of attribute fetched.



11
12
13
# File 'lib/lazy_resource/relation.rb', line 11

def fetched
  @fetched
end

#fromObject

Returns the value of attribute from.



11
12
13
# File 'lib/lazy_resource/relation.rb', line 11

def from
  @from
end

#klassObject

Returns the value of attribute klass.



11
12
13
# File 'lib/lazy_resource/relation.rb', line 11

def klass
  @klass
end

#siteObject

Returns the value of attribute site.



11
12
13
# File 'lib/lazy_resource/relation.rb', line 11

def site
  @site
end

#valuesObject

Returns the value of attribute values.



11
12
13
# File 'lib/lazy_resource/relation.rb', line 11

def values
  @values
end

Class Method Details

.resource_queueObject



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

def resource_queue
  Thread.current[:resource_queue] ||= ResourceQueue.new
end

Instance Method Details

#as_json(options = {}) ⇒ Object



118
119
120
121
122
# File 'lib/lazy_resource/relation.rb', line 118

def as_json(options = {})
  to_a.map do |record|
    record.as_json
  end
end

#collection_nameObject



28
29
30
# File 'lib/lazy_resource/relation.rb', line 28

def collection_name
  from
end

#fetched?Boolean

Returns:

  • (Boolean)


101
102
103
# File 'lib/lazy_resource/relation.rb', line 101

def fetched?
  @fetched
end

#limit(limit_value) ⇒ Object



66
67
68
69
# File 'lib/lazy_resource/relation.rb', line 66

def limit(limit_value)
  @values[:limit_value] = limit_value
  self
end

#limit_valueObject



89
90
91
# File 'lib/lazy_resource/relation.rb', line 89

def limit_value
  @values[:limit_value]
end

#load(objects) ⇒ Object



42
43
44
45
# File 'lib/lazy_resource/relation.rb', line 42

def load(objects)
  @fetched = true
  @result = @klass.load(objects)
end

#offset(offset_value) ⇒ Object



71
72
73
74
# File 'lib/lazy_resource/relation.rb', line 71

def offset(offset_value)
  @values[:offset_value] = offset_value
  self
end

#offset_valueObject



93
94
95
# File 'lib/lazy_resource/relation.rb', line 93

def offset_value
  @values[:offset_value]
end

#order(order_value) ⇒ Object



61
62
63
64
# File 'lib/lazy_resource/relation.rb', line 61

def order(order_value)
  @values[:order_value] = order_value
  self
end

#order_valueObject



85
86
87
# File 'lib/lazy_resource/relation.rb', line 85

def order_value
  @values[:order_value] 
end

#page(page_value) ⇒ Object



76
77
78
79
# File 'lib/lazy_resource/relation.rb', line 76

def page(page_value)
  @values[:page_value] = page_value
  self
end

#page_valueObject



97
98
99
# File 'lib/lazy_resource/relation.rb', line 97

def page_value
  @values[:page_value]
end

#resource_queueObject



47
48
49
# File 'lib/lazy_resource/relation.rb', line 47

def resource_queue
  self.class.resource_queue
end

#respond_to?(method, include_private = false) ⇒ Boolean

Returns:

  • (Boolean)


114
115
116
# File 'lib/lazy_resource/relation.rb', line 114

def respond_to?(method, include_private = false)
  super || result.respond_to?(method, include_private)
end

#resultObject



110
111
112
# File 'lib/lazy_resource/relation.rb', line 110

def result
  @result ||= []
end

#to_aObject



105
106
107
108
# File 'lib/lazy_resource/relation.rb', line 105

def to_a
  resource_queue.run if !fetched?
  result
end

#to_paramsObject



32
33
34
35
36
37
38
39
40
# File 'lib/lazy_resource/relation.rb', line 32

def to_params
  params = {}
  params.merge!(where_values) unless where_values.nil?
  params.merge!(:order => order_value) unless order_value.nil?
  params.merge!(:limit => limit_value) unless limit_value.nil?
  params.merge!(:offset => offset_value) unless offset_value.nil?
  params.merge!(:page => page_value) unless page_value.nil?
  params
end

#where(where_values) ⇒ Object



51
52
53
54
55
56
57
58
59
# File 'lib/lazy_resource/relation.rb', line 51

def where(where_values)
  if @values[:where_values].nil?
    @values[:where_values] = where_values
  else
    @values[:where_values].merge!(where_values)
  end

  self
end

#where_valuesObject



81
82
83
# File 'lib/lazy_resource/relation.rb', line 81

def where_values
  @values[:where_values]
end