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