Class: ActiveZuora::Relation
- Inherits:
-
Object
- Object
- ActiveZuora::Relation
show all
- Defined in:
- lib/active_zuora/relation.rb
Instance Attribute Summary collapse
Instance Method Summary
collapse
Constructor Details
#initialize(zobject_class, selected_field_names = [:id]) ⇒ Relation
Returns a new instance of Relation.
8
9
10
11
|
# File 'lib/active_zuora/relation.rb', line 8
def initialize(zobject_class, selected_field_names=[:id])
@zobject_class, @selected_field_names, @filters = zobject_class, selected_field_names, []
@order_attribute, @order_direction = :created_date, :asc
end
|
Dynamic Method Handling
This class handles dynamic methods through the method_missing method
#method_missing(method, *args, &block) ⇒ Object
157
158
159
160
161
162
163
164
165
166
167
|
# File 'lib/active_zuora/relation.rb', line 157
def method_missing(method, *args, &block)
if Array.method_defined?(method)
to_a.send(method, *args, &block)
elsif zobject_class.respond_to?(method)
scoped { zobject_class.send(method, *args, &block) }
else
super
end
end
|
Instance Attribute Details
#filters ⇒ Object
Returns the value of attribute filters.
4
5
6
|
# File 'lib/active_zuora/relation.rb', line 4
def filters
@filters
end
|
#order_attribute ⇒ Object
Returns the value of attribute order_attribute.
4
5
6
|
# File 'lib/active_zuora/relation.rb', line 4
def order_attribute
@order_attribute
end
|
#order_direction ⇒ Object
Returns the value of attribute order_direction.
4
5
6
|
# File 'lib/active_zuora/relation.rb', line 4
def order_direction
@order_direction
end
|
#selected_field_names ⇒ Object
Returns the value of attribute selected_field_names.
4
5
6
|
# File 'lib/active_zuora/relation.rb', line 4
def selected_field_names
@selected_field_names
end
|
#zobject_class ⇒ Object
Returns the value of attribute zobject_class.
6
7
8
|
# File 'lib/active_zuora/relation.rb', line 6
def zobject_class
@zobject_class
end
|
Instance Method Details
#delete_all ⇒ Object
151
152
153
|
# File 'lib/active_zuora/relation.rb', line 151
def delete_all
zobject_class.delete(to_a.map(&:id))
end
|
#dup ⇒ Object
13
14
15
16
17
18
19
|
# File 'lib/active_zuora/relation.rb', line 13
def dup
dup = super
dup.selected_field_names = dup.selected_field_names.dup
dup.filters = dup.filters.dup
dup.unload
dup
end
|
#find(id) ⇒ Object
77
78
79
80
|
# File 'lib/active_zuora/relation.rb', line 77
def find(id)
return nil if id.blank?
where(:id => id).first
end
|
#find_each(&block) ⇒ Object
82
83
84
85
86
87
88
89
90
|
# File 'lib/active_zuora/relation.rb', line 82
def find_each(&block)
if loaded?
to_a.each(&block)
else
query.each(&block)
end
end
|
#loaded? ⇒ Boolean
98
99
100
|
# File 'lib/active_zuora/relation.rb', line 98
def loaded?
!@records.nil?
end
|
#merge(relation) ⇒ Object
56
57
58
59
60
61
62
63
64
65
66
67
|
# File 'lib/active_zuora/relation.rb', line 56
def merge(relation)
if relation.is_a?(Hash)
where(relation)
else
dup.tap do |dup|
dup.filters.concat relation.filters
dup.filters.uniq!
dup.order_attribute = relation.order_attribute
dup.order_direction = relation.order_direction
end
end
end
|
#or(conditions) ⇒ Object
35
36
37
|
# File 'lib/active_zuora/relation.rb', line 35
def or(conditions)
dup.tap { |dup| dup.filters << ['or', conditions] }\
end
|
#order(attribute, direction = :asc) ⇒ Object
39
40
41
42
43
44
|
# File 'lib/active_zuora/relation.rb', line 39
def order(attribute, direction = :asc)
dup.tap do |dup|
dup.order_attribute = attribute
dup.order_direction = direction
end
end
|
#query(&block) ⇒ Object
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
|
# File 'lib/active_zuora/relation.rb', line 112
def query(&block)
response = zobject_class.connection.request(:query){ |soap| soap.body = { :query_string => to_zql } }
query_response = response[:query_response]
records = objectify_query_results(query_response[:result][:records])
records.each(&:block) if block_given?
until query_response[:result][:done]
query_response = zobject_class.connection.request(:query_more) do |soap|
soap.body = { :query_locator => response[:query_response][:result][:query_locator] }
end[:query_more_response]
more_records = objectify_query_results(query_response[:result][:records])
more_records.each(&:block) if block_given?
records.concat more_records
end
sort_records!(records)
rescue Savon::SOAP::Fault => exception
exception.message << ": #{to_zql}"
raise
end
|
#reload ⇒ Object
107
108
109
110
|
# File 'lib/active_zuora/relation.rb', line 107
def reload
unload.to_a
self
end
|
#scoped ⇒ Object
46
47
48
49
50
51
52
53
54
|
# File 'lib/active_zuora/relation.rb', line 46
def scoped
previous_scope, zobject_class.current_scope = zobject_class.current_scope, self
yield
ensure
zobject_class.current_scope = previous_scope
end
|
#select(*field_names) ⇒ Object
25
26
27
|
# File 'lib/active_zuora/relation.rb', line 25
def select(*field_names)
dup.tap { |dup| dup.selected_field_names = field_names.flatten }
end
|
#to_a ⇒ Object
Also known as:
all
92
93
94
|
# File 'lib/active_zuora/relation.rb', line 92
def to_a
@records ||= query
end
|
#to_zql ⇒ Object
73
74
75
|
# File 'lib/active_zuora/relation.rb', line 73
def to_zql
select_statement + " from " + zobject_class.zuora_object_name + " " + where_statement
end
|
#unload ⇒ Object
102
103
104
105
|
# File 'lib/active_zuora/relation.rb', line 102
def unload
@records = nil
self
end
|
#update_all(attributes = {}) ⇒ Object
140
141
142
143
144
145
146
147
148
149
|
# File 'lib/active_zuora/relation.rb', line 140
def update_all(attributes={})
if block_given?
to_a.each { |record| yield record }
else
to_a.each { |record| record.attributes = attributes }
end
zobject_class.update(to_a)
end
|
#where(conditions) ⇒ Object
Also known as:
and
29
30
31
|
# File 'lib/active_zuora/relation.rb', line 29
def where(conditions)
dup.tap { |dup| dup.filters << ['and', conditions] }
end
|