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



137
138
139
140
141
142
143
# File 'lib/lazy_resource/relation.rb', line 137

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

#other_attributesObject

Returns the value of attribute other_attributes.



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

def other_attributes
  @other_attributes
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



131
132
133
134
135
# File 'lib/lazy_resource/relation.rb', line 131

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)


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

def fetched?
  @fetched
end

#headersObject



56
57
58
# File 'lib/lazy_resource/relation.rb', line 56

def headers
  @headers ||= @klass.default_headers
end

#limit(limit_value) ⇒ Object



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

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

#limit_valueObject



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

def limit_value
  @values[:limit_value]
end

#load(objects) ⇒ Object



42
43
44
45
46
47
48
49
50
51
52
53
54
# File 'lib/lazy_resource/relation.rb', line 42

def load(objects)
  @fetched = true

  if mapped_name = @klass.mapped_root_node_name(objects)
    other_attributes = objects.dup
    objects = other_attributes.delete(mapped_name)
    @other_attributes = other_attributes
  end

  @result = objects.map do |object|
    @klass.load(object)
  end
end

#offset(offset_value) ⇒ Object



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

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

#offset_valueObject



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

def offset_value
  @values[:offset_value]
end

#order(order_value) ⇒ Object



74
75
76
77
# File 'lib/lazy_resource/relation.rb', line 74

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

#order_valueObject



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

def order_value
  @values[:order_value] 
end

#page(page_value) ⇒ Object



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

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

#page_valueObject



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

def page_value
  @values[:page_value]
end

#resource_queueObject



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

def resource_queue
  self.class.resource_queue
end

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

Returns:

  • (Boolean)


127
128
129
# File 'lib/lazy_resource/relation.rb', line 127

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

#resultObject



123
124
125
# File 'lib/lazy_resource/relation.rb', line 123

def result
  @result ||= []
end

#to_aObject



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

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



64
65
66
67
68
69
70
71
72
# File 'lib/lazy_resource/relation.rb', line 64

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



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

def where_values
  @values[:where_values]
end