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