class Actn::DB::Mod

Attributes

schema[RW]
set[RW]
table[RW]
attributes[RW]

Public Class Methods

count(conds = {}) click to toggle source
# File lib/actn/db/mod.rb, line 69
def count conds = {}
  set.count(conds).match(/(\d+)/)[1].to_i
end
create(data = {}) click to toggle source
# File lib/actn/db/mod.rb, line 38
def create data = {}
  record = new(data)
  record.save
  record
end
data_attr_accessor(*fields) click to toggle source
# File lib/actn/db/mod.rb, line 29
def data_attr_accessor *fields
  fields.each do |field|
    class_eval %Q{ 
      def #{field}; self.attributes['#{field}'] end
      def #{field}=val; self.attributes['#{field}']=val end
    }
  end 
end
new(data = {}) click to toggle source
Calls superclass method
# File lib/actn/db/mod.rb, line 81
def initialize data = {}
  data ||= {}
  register_attr_accessors data
  super(data)
end

Public Instance Methods

destroy() click to toggle source
# File lib/actn/db/mod.rb, line 112
def destroy
  return unless self.persisted?
  run_callbacks :destroy do
    if result = self.class.delete(identity)
      process_upsert_response result
    end
  end
end
persisted?() click to toggle source
# File lib/actn/db/mod.rb, line 91
def persisted?
  self.uuid.present?
end
save() click to toggle source

persistency

# File lib/actn/db/mod.rb, line 102
def save
  create_or_update if valid?
end
update(attrs) click to toggle source
# File lib/actn/db/mod.rb, line 106
def update attrs
  register_attr_accessors attrs        
  self.attributes.update(attrs)
  save
end
uuid() click to toggle source
# File lib/actn/db/mod.rb, line 95
def uuid
  self.attributes['uuid']
end

Private Instance Methods

_insert() click to toggle source
# File lib/actn/db/mod.rb, line 137
def _insert
  run_callbacks :create do
    if result = self.class.validate_and_upsert(self.attributes)
      process_upsert_response result
    end
  end
end
_update() click to toggle source
# File lib/actn/db/mod.rb, line 128
def _update
  run_callbacks :update do        
    # if result = self.class.update(self.attributes,identity)
    if result = self.class.validate_and_upsert(self.attributes.merge(identity))          
      process_upsert_response result
    end
  end
end
create_or_update() click to toggle source
# File lib/actn/db/mod.rb, line 124
def create_or_update
  self.persisted? ? _update : _insert
end
identity() click to toggle source
# File lib/actn/db/mod.rb, line 145
def identity
  {'uuid' => self.uuid}
end
process_upsert_response(result) click to toggle source
# File lib/actn/db/mod.rb, line 162
def process_upsert_response result
  if result =~ /uuid/
    self.from_json(result)            
  elsif result =~ /error/
    JsonSchemaError.new(result).errors.each do |field,err|
      errors.add(field,err.keys.flatten.join(","))            
    end
  end
  self
end
register_attr_accessors(data) click to toggle source

allows dynamic attributes!

# File lib/actn/db/mod.rb, line 152
def register_attr_accessors data
  data.deep_stringify_keys!
  # ignore attributes declared with attr_accessor method
  self.class.data_attr_accessor *data.keys.keep_if{ |key| 
    public_methods.keep_if{ |n| n.to_s.start_with? key }.empty? 
  }
end