class NoBrainer::Document::AtomicOps::PendingAtomic
Attributes
type[RW]
Public Class Methods
_new(instance, field, value, is_user_value)
click to toggle source
# File lib/no_brainer/document/atomic_ops.rb, line 7 def self._new(instance, field, value, is_user_value) type = instance.class.fields[field.to_sym].try(:[], :type) type ||= value.class unless value.nil? case when type == Array then PendingAtomicArray when type == Set then PendingAtomicSet else self end.new(instance, field, value, is_user_value, type) end
new(instance, field, value, is_user_value, type)
click to toggle source
# File lib/no_brainer/document/atomic_ops.rb, line 18 def initialize(instance, field, value, is_user_value, type) @instance = instance @field = field.to_s @value = value @is_user_value = is_user_value @type = type @ops = [] end
Public Instance Methods
compile_rql_value(rql_doc)
click to toggle source
# File lib/no_brainer/document/atomic_ops.rb, line 57 def compile_rql_value(rql_doc) field = @instance.class.lookup_field_alias(@field) if @is_user_value casted_value = @instance.class.cast_model_to_db_for(@field, @value) value = RethinkDB::RQL.new.expr(casted_value) else value = rql_doc[field] end value = value.default(default_value) if default_value @ops.reduce(value) { |v, (method, a, b)| v.__send__(method, *a, &b) } end
default_value()
click to toggle source
# File lib/no_brainer/document/atomic_ops.rb, line 27 def default_value case when @type == Array then [] when @type == Set then [] when @type == Integer then 0 when @type == Float then 0.0 when @type == String then "" end end
initialize_copy(other)
click to toggle source
Calls superclass method
# File lib/no_brainer/document/atomic_ops.rb, line 37 def initialize_copy(other) super @ops = @ops.dup end
inspect()
click to toggle source
# File lib/no_brainer/document/atomic_ops.rb, line 45 def inspect; to_s; end
method_missing(method, *a, &b)
click to toggle source
# File lib/no_brainer/document/atomic_ops.rb, line 47 def method_missing(method, *a, &b) if method == :<< method = :append modify_source! end @ops << [method, a, b] self end
modify_source!()
click to toggle source
# File lib/no_brainer/document/atomic_ops.rb, line 69 def modify_source! if (@is_user_value && @instance.instance_eval { @_attributes[@field].equal?(@value) }) || !@instance._is_attribute_touched?(@field) @instance._write_attribute(@field, self) end end
to_s()
click to toggle source
# File lib/no_brainer/document/atomic_ops.rb, line 42 def to_s "<`#{@field}' with #{@ops.size} pending atomic operations>" end