class JunglePath::Controller::Base

Attributes

table_class[R]

Public Class Methods

add_audit_key_for_insert(params, current_key, timestamp=Time.now.utc) click to toggle source
# File lib/jungle_path/controller/base.rb, line 195
def self.add_audit_key_for_insert(params, current_key, timestamp=Time.now.utc)
  params[:created_at] = timestamp unless params[:created_at]
  params[:created_by_key_id] = current_key.id unless params[:created_by_key_id]
  add_audit_key_for_update(params, current_key, timestamp)
end
add_audit_key_for_update(params, current_key, timestamp=Time.now.utc) click to toggle source
# File lib/jungle_path/controller/base.rb, line 201
def self.add_audit_key_for_update(params, current_key, timestamp=Time.now.utc)
  params[:updated_at] = timestamp unless params[:updated_at]
  params[:updated_by_key_id] = current_key.id unless params[:updated_by_key_id]
  params
end
add_audit_parameter_values_for_insert(params, current_user, current_key, table_class) click to toggle source
# File lib/jungle_path/controller/base.rb, line 165
def self.add_audit_parameter_values_for_insert(params, current_user, current_key, table_class)
  if table_class.columns.include?(:created_by_user_id)
    params = add_audit_user_for_insert(params, current_user)
  elsif table_class.columns.include?(:created_by_key_id)
    params = add_audit_key_for_insert(params, current_key)
  end
  params
end
add_audit_parameter_values_for_update(params, current_user, current_key, table_class) click to toggle source
# File lib/jungle_path/controller/base.rb, line 174
def self.add_audit_parameter_values_for_update(params, current_user, current_key, table_class)
  if table_class.columns.include?(:created_by_user_id)
    params = add_audit_user_for_update(params, current_user)
  elsif table_class.columns.include?(:created_by_key_id)
    params = add_audit_key_for_update(params, current_key)
  end
  params
end
add_audit_user_for_insert(params, current_user, timestamp=Time.now.utc) click to toggle source
# File lib/jungle_path/controller/base.rb, line 183
def self.add_audit_user_for_insert(params, current_user, timestamp=Time.now.utc)
  params[:created_at] = timestamp unless params[:created_at]
  params[:created_by_user_id] = current_user.id unless params[:created_by_user_id]
  add_audit_user_for_update(params, current_user, timestamp)
end
add_audit_user_for_update(params, current_user, timestamp=Time.now.utc) click to toggle source
# File lib/jungle_path/controller/base.rb, line 189
def self.add_audit_user_for_update(params, current_user, timestamp=Time.now.utc)
  params[:updated_at] = timestamp unless params[:updated_at]
  params[:updated_by_user_id] = current_user.id unless params[:updated_by_user_id]
  params
end
by_primary_key?(params, primary_key_columns) click to toggle source
# File lib/jungle_path/controller/base.rb, line 158
def self.by_primary_key?(params, primary_key_columns)
  primary_key_columns.keys.each do |k|
    return false unless params.include? k
  end
  true
end
convert_to_type(params, columns) click to toggle source
# File lib/jungle_path/controller/base.rb, line 92
def self.convert_to_type(params, columns)
  DBModel::Params.convert_to_type(params, columns)
end
handle_include_secure_columns_flag(result, include_secure_columns_flag, table_class) click to toggle source
# File lib/jungle_path/controller/base.rb, line 144
def self.handle_include_secure_columns_flag(result, include_secure_columns_flag, table_class)
  if include_secure_columns_flag
    # mark instance #_secure = false to allow columns marked :secure to be exported as json or as a hash when #to_hash or #to_json is called.
    if result.class == table_class
      result._secure = false
      return result
    end
    result.each do |item|
      item._secure = false
    end
  end
  result
end
new(current_identity, params, db, table_class) click to toggle source
# File lib/jungle_path/controller/base.rb, line 9
def initialize(current_identity, params, db, table_class)
  @current_identity = current_identity
  @current_user = current_identity.user
  @current_key = current_identity.key
  @db = db
  @table_class = table_class
  @params = self.class.transform(params.to_h, table_class.columns)
  #puts "base @params: #{@params}."
end
symbolize(params) click to toggle source
# File lib/jungle_path/controller/base.rb, line 88
def self.symbolize(params)
  DBModel::Params.symbolize(params)
end
to_bool(value) click to toggle source
# File lib/jungle_path/controller/base.rb, line 96
def self.to_bool(value)
  DBModel::Params.to_bool(value)
end
transform(params, columns) click to toggle source
# File lib/jungle_path/controller/base.rb, line 84
def self.transform(params, columns)
  DBModel::Params.transform(params, columns)
end
validate_delete(model, additional_message=nil) click to toggle source
# File lib/jungle_path/controller/base.rb, line 131
def self.validate_delete(model, additional_message=nil)
  additional_message += " \n" if additional_message
  missing = []
  model._columns.values.each do |column|
    required = false
    if column.primary_key?
      required = true
    end
    missing << column.name if required and model._values[column.name] == nil
  end
  raise Exceptions::MissingRequiredFields, "#{additional_message}Missing values for: #{missing.join(', ')}.", caller if missing.length > 0
end
validate_insert(model, additional_message=nil) click to toggle source
# File lib/jungle_path/controller/base.rb, line 100
def self.validate_insert(model, additional_message=nil)
  additional_message += " \n" if additional_message
  missing = []
  model._columns.values.each do |column|
    required = false
    if column.primary_key? and column.foreign_key?
      required = true
    elsif !column.calculated? and column.not_null?
      required = true
    end
    #puts "#{column.name}: #{model._values[column.name]}." if required
    missing << column.name if required and model._values[column.name] == nil
  end
  raise Exceptions::MissingRequiredFields, "#{additional_message}Missing values for: #{missing.join(', ')}.", caller if missing.length > 0
end
validate_update(model, additional_message=nil) click to toggle source
# File lib/jungle_path/controller/base.rb, line 116
def self.validate_update(model, additional_message=nil)
  additional_message += " \n" if additional_message
  missing = []
  model._columns.values.each do |column|
    required = false
    if column.primary_key?
      required = true
    elsif !column.calculated? and column.not_null?
      required = true
    end
    missing << column.name if required and model._modified.member?(column.name) and model._values[column.name] == nil
  end
  raise Exceptions::MissingRequiredFields, "#{additional_message}Missing values for: #{missing.join(', ')}.", caller if missing.length > 0
end

Public Instance Methods

create_table() click to toggle source
# File lib/jungle_path/controller/base.rb, line 75
def create_table
  @db.schema.create_table @table_class
end
delete() click to toggle source
# File lib/jungle_path/controller/base.rb, line 56
def delete
  @db.transaction do
    model = @table_class.new @params
    self.class.validate_delete(model)
    result = @db.delete._model(model)
  end
end
delete_rows() click to toggle source
# File lib/jungle_path/controller/base.rb, line 64
def delete_rows
  @db.transaction do
    model = @table_class.new @params
    result = @db.delete._models(model, true)
  end
end
drop_table() click to toggle source
# File lib/jungle_path/controller/base.rb, line 71
def drop_table
  @db.schema.drop_table @table_class
end
insert(include_secure_columns: false) click to toggle source
# File lib/jungle_path/controller/base.rb, line 37
def insert(include_secure_columns: false)
  @db.transaction do
    params = self.class.add_audit_parameter_values_for_insert(@params, @current_user, @current_key, @table_class)
    model = @table_class.new params
    self.class.validate_insert(model)
    result = @db.insert._model(model)
    result = self.class.handle_include_secure_columns_flag(result, include_secure_columns, @table_class)
  end
end
reset_table() click to toggle source
# File lib/jungle_path/controller/base.rb, line 79
def reset_table
  @db.schema.reset_table @table_class
end
select(include_secure_columns: false, use_only_pk_columns_to_select_if_available: true) click to toggle source
# File lib/jungle_path/controller/base.rb, line 19
def select(include_secure_columns: false, use_only_pk_columns_to_select_if_available: true)
  @db.transaction do
    if use_only_pk_columns_to_select_if_available and self.class.by_primary_key?(@params, @table_class.primary_key_columns)
      #puts "a"
      pk_hash = @table_class.new(@params)._primary_key
      model = @table_class.new(pk_hash)
      result = @db.select._model(model) # todo: use _model here instead?
    elsif self.class.by_primary_key?(@params, @table_class.primary_key_columns)
      #puts "b"
      result = @db.select._model_by_any(@table_class.new(@params))
    else
      #puts "c"
      result = @db.select._models(@table_class.new(@params))
    end
    result = self.class.handle_include_secure_columns_flag(result, include_secure_columns, @table_class)
  end
end
update() click to toggle source
# File lib/jungle_path/controller/base.rb, line 47
def update
  @db.transaction do
    params = self.class.add_audit_parameter_values_for_update(@params, @current_user, @current_key, @table_class)
    model = @table_class.new params
    self.class.validate_update(model)
    result = @db.update._model(model)
  end
end