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)