class AppDynamics::Generators::BusinessTransactionsGenerator

Public Instance Methods

create_business_transactions() click to toggle source
# File lib/generators/app_dynamics/business_transactions_generator.rb, line 10
def create_business_transactions
  routes = Rails.application.routes.routes.reject(&:internal)
  bts = routes.map do |route|
    path = route.path.spec.to_s
    path.gsub!('.', '\.')
    path = if route.parts.length > 0
      route.parts.each do |part|
        path.sub!(":#{part}", ".+")
      end
      path.gsub!(')', ')?')
      "%r{#{path}}"
    else
      "'#{path}'"
    end

    bt = ""
    if route.name
      bt << "bt '#{route.name}' => "
    else
      bt << "# bt ??? => "
    end
    bt << path

    verbs = route.verb.split("|")
    unless verbs.empty?
      bt << ", method: "
      if verbs.length == 1
        bt << ":#{::AppDynamics::BusinessTransactions::METHODS.key(verbs.first)}"
      else
        bt << "[" << verbs.map{|v| ":#{::AppDynamics::BusinessTransactions::METHODS.key(v)}" }.join(", ") << "]"
      end
    end
    bt
  end

  output = ["AppDynamics::BusinessTransactions.define do"]
  output.concat bts.map{|bt| "  #{bt}" }
  output << ["end"]

  initializer "app_dynamics.rb", output.join("\n")
end