require ‘net/http’ require ‘open-uri’ require ‘json’

require ‘addons/recipes/types’ require ‘addons/recipes/recipe’ require ‘addons/recipes/instructions’

namespace :addons do

namespace :recipe do

  desc "Run a recipe by name"
  task :run, :recipe_handle do |t, args|
    recipes = nil
    recipeUrl = "https://addons.io/api/v1/addons/apps/recipes?source=rubygem"

    uri = URI.parse(recipeUrl)

    http = Net::HTTP.new(uri.host, uri.port)
    http.use_ssl = true
    request = Net::HTTP::Get.new(uri.request_uri)
    request.basic_auth(ENV['ADDONS_API_ID'], ENV['ADDONS_AUTH_TOKEN'])
    response = http.request(request).body

    recipes = JSON.parse response

    # parse instructions into ruby
    recipes.each { |recipe| recipe["instructions"] = JSON.parse(recipe["instructions"]) }

    @run = false
    if "all" == args[:recipe_handle]
      puts "Running all your AddonList recipes"

      recipes.each do |recipe|
        Addons::Recipe.run recipe
      end
    elsif handle = args[:recipe_handle]
      recipes.each do |recipe|
        # run recipe if it's the correct one
        if handle == recipe["handle"]
          @run = true
          Addons::Recipe.run recipe
        end
      end
      puts "Error: Recipe not found." unless @run
    else
      puts "Error: Incorrect usage. Expecting: `rake addons:recipe:run[recipe_handle]`"
    end
  end # end task: run

end # end namespace: recipe

end # end namespace: addons

# DEBUG RECIPE BELOW

# require ‘net/http’ # require ‘open-uri’ # require ‘json’

# require ‘addons/recipes/types’ # require ‘addons/recipes/recipe’ # require ‘addons/recipes/instructions’

# RECIPE = { # “name” => “Rollbar”, # “handle” => “rollbar”, # “revision” => “1”, # “platform” => “Rails 4”, # “instructions” => [ # # install gem rollbar with Gemfile and run from terminal # { # “run_msg” => “Adding gem ‘rollbar’ to Gemfile”, # “type” => InstructionTypes::MODIFY_CODE, # “command” => { # “type” => ModifyCodeTypes::ADD_CODE, # “file” => “Gemfile”, # “code” => “gem ‘rollbar’”, # “comment_code_if” => /rollbar/, # }, # “error_msg” => “Error: Could not add gem ‘rollbar’ to Gemfile” # }, # Addons::Recipe::Instructions::Bundler::BUNDLER_INSTALL, # # run rollbar generator # { # “run_msg” => “rails generate rollbar”, # “type” => InstructionTypes::TERMINAL_COMMAND, # “command” => “rails generate rollbar”, # “expected_result” => { # “type” => ResultTypes::NO_EXPECTATION # }, # “error_msg” => “Error: You have unstaged files or uncommitted changes in Git. Please commit or stash everything so we can start on a clean slate.” # }, # ] # } # Addons::Recipe.run(RECIPE)