Module: AtomicArrays
- Defined in:
- lib/atomic_arrays.rb,
lib/atomic_arrays/version.rb
Defined Under Namespace
Modules: AtomicClassMethods
Constant Summary
collapse
- VERSION =
"1.1.0"
Class Method Summary
collapse
Instance Method Summary
collapse
Class Method Details
.included(klass) ⇒ Object
5
6
7
8
9
|
# File 'lib/atomic_arrays.rb', line 5
def self.included(klass)
klass.class_eval do
extend AtomicClassMethods
end
end
|
Instance Method Details
#atomic_append(field, value) ⇒ Object
11
12
13
14
15
|
# File 'lib/atomic_arrays.rb', line 11
def atomic_append(field, value)
raise "Cannot append multiple values." if value.is_a?(Array)
value = prepare_array_vals(value)
return self.execute_array_query(field, value, "array_append")
end
|
#atomic_cat(field, values) ⇒ Object
23
24
25
26
27
|
# File 'lib/atomic_arrays.rb', line 23
def atomic_cat(field, values)
raise "Cannot cat strings or integers" if (values.is_a?(Integer) || values.is_a?(String))
values = prepare_array_vals(values)
return self.execute_array_query(field, "ARRAY[#{values}]", "array_cat")
end
|
#atomic_relate(field, related_class, limit = 100) ⇒ Object
29
30
31
32
33
34
|
# File 'lib/atomic_arrays.rb', line 29
def atomic_relate(field, related_class, limit=100)
raise "Relates to a class, not a string or integer." if (related_class.is_a?(Integer) || related_class.is_a?(String))
(table, field) = self.prepare_array_query(field)
related_table = related_class.table_name.inspect
return result = related_class.execute_and_wrap(%Q{SELECT #{related_table}.* FROM #{related_table} JOIN (SELECT unnest(#{table}.#{field}) AS id FROM #{table} WHERE #{table}.id = #{self.id}) u USING (id) LIMIT #{limit}})
end
|
#atomic_remove(field, value) ⇒ Object
17
18
19
20
21
|
# File 'lib/atomic_arrays.rb', line 17
def atomic_remove(field, value)
raise "Cannot remove multiple values." if value.is_a?(Array)
value = prepare_array_vals(value)
return self.execute_array_query(field, value, "array_remove")
end
|
#execute_array_query(field, value, array_method) ⇒ Object
36
37
38
39
40
|
# File 'lib/atomic_arrays.rb', line 36
def execute_array_query(field, value, array_method)
(table, field) = self.prepare_array_query(field)
result = self.class.execute_and_wrap(%Q{UPDATE #{table} SET #{field} = #{array_method}(#{field}, #{value}) WHERE #{table}.id = #{self.id} RETURNING #{table}.*})
return result[0]
end
|
#prepare_array_query(field) ⇒ Object
42
43
44
45
46
|
# File 'lib/atomic_arrays.rb', line 42
def prepare_array_query(field)
table = self.class.table_name.inspect
field = field.to_s.inspect
return [table, field]
end
|
#prepare_array_vals(value) ⇒ Object
48
49
50
51
52
|
# File 'lib/atomic_arrays.rb', line 48
def prepare_array_vals(value)
prep_array = []
[*value].map {|val| val = "\'#{val}\'" if val.class == String; prep_array.push(val)}
return prep_array.join(", ")
end
|