class DatabaseLogic::Generators::TriggerGenerator

Public Instance Methods

generate(asset_type = :trigger) click to toggle source

<%= name %> <%= @when %> <%= @sql_action %> on <%= @table %>

# File lib/generators/database_logic/trigger_generator.rb, line 13
def generate(asset_type = :trigger)
    ensure_path_exists! asset_type
    validate_file_name! asset_type
    validate_asset_name! asset_type
    
    @when = run_when
    validate_when!
    
    @sql_action = sql_action
    validate_sql_action!
    
    @table = table
    validate_table!
    
    create_asset! asset_type
end

Private Instance Methods

asset_name() click to toggle source
# File lib/generators/database_logic/trigger_generator.rb, line 59
def asset_name
    name
end
create_asset!(asset_type) click to toggle source
# File lib/generators/database_logic/trigger_generator.rb, line 33
def create_asset!(asset_type)
    @name = serialized_asset_name
    create_file file_name_with_path(asset_type.to_s.pluralize), ERB.new( File.read( "#{ File.dirname(File.realpath(__FILE__)) }/templates/#{asset_type}.erb.sqlt"  )  ).result(binding)
end
ensure_path_exists!(asset_dir) click to toggle source
# File lib/generators/database_logic/trigger_generator.rb, line 39
def ensure_path_exists!(asset_dir)
    FileUtils.mkdir_p Rails.root.join("app/sql/#{ asset_dir.to_s.pluralize }")
end
file_name_with_path( dir ) click to toggle source
# File lib/generators/database_logic/trigger_generator.rb, line 54
def file_name_with_path( dir )
    Rails.root.join "app/sql/#{ dir }/#{ file_name_with_timestamp }.sql"
end
file_name_with_timestamp() click to toggle source
# File lib/generators/database_logic/trigger_generator.rb, line 49
def file_name_with_timestamp
    "#{ timestamp }_#{ serialized_asset_name }"
end
serialized_asset_name() click to toggle source
# File lib/generators/database_logic/trigger_generator.rb, line 64
def serialized_asset_name
    asset_name.parameterize.underscore
end
timestamp() click to toggle source
# File lib/generators/database_logic/trigger_generator.rb, line 44
def timestamp
    Time.now.strftime("%Y%M%d%H%M%S")
end
validate_asset_name!( asset_type ) click to toggle source
# File lib/generators/database_logic/trigger_generator.rb, line 83
def validate_asset_name!( asset_type )
    raise Error.new("#{ asset_type.to_s.capitalize } named #{serialized_asset_name} already exists, please choose another name") if Dir.glob(Rails.root.join("app/sql/#{ asset_type.to_s.pluralize }/*_#{serialized_asset_name}.sql")).size > 0
end
validate_file_name!( asset_type ) click to toggle source
# File lib/generators/database_logic/trigger_generator.rb, line 88
def validate_file_name!( asset_type )
    raise Error.new("File #{file_name_with_timestamp} already exists") if File.exist?( file_name_with_path( asset_type.to_s.pluralize ) )
end
validate_sql_action!() click to toggle source
# File lib/generators/database_logic/trigger_generator.rb, line 74
def validate_sql_action!
    raise Error.new("Trigger must run either on insert, update, create or delete") if !["insert", "update", "create", "delete"].include?(@sql_action.downcase)
end
validate_table!() click to toggle source
# File lib/generators/database_logic/trigger_generator.rb, line 69
def validate_table!
    raise Error.new("Must specify a table to attach trigger to") if @table.empty?
    # TODO check if table really exists
end
validate_when!() click to toggle source
# File lib/generators/database_logic/trigger_generator.rb, line 78
def validate_when!
    raise Error.new("Trigger must run either before or after") if !["before", "after"].include?(@run_when.downcase)
end