class Dronr::Manager
Attributes
app_generator[RW]
register[RW]
Public Class Methods
existing(options={})
click to toggle source
# File lib/dronr/manager.rb, line 42 def self.existing(options={}) generator = Rails::Generators::AppGenerator.new [Rails.root], {}, destination_root: Rails.root manager = new(generator) manager.load_register canonical_register = Register.load_canonical manager.register.sort_by_example_register(canonical_register) manager.up manager.commit_register manager.say_goodbye end
from_scratch(app_name, template_register, user_params={})
click to toggle source
# File lib/dronr/manager.rb, line 13 def self.from_scratch(app_name, template_register, user_params={}) opts = { skip_bundle: true } template_register.drones.each do |drone| opts.merge! drone.args_for_app_create end generator = Rails::Generators::AppGenerator.new([app_name], opts) generator.invoke_all # BOOTSTRAP manager = new(generator, template_register) manager.say_hello dronr = Drones::Dronr.new(:incoming) manager.bundle_drone(dronr) manager.run_bundle manager.install_drone(dronr) manager.register.drones << dronr manager.commit_register manager.app_generator.run 'bin/dronr up' end
new(app_generator, register=Register.new)
click to toggle source
# File lib/dronr/manager.rb, line 8 def initialize(app_generator, register=Register.new) @app_generator = app_generator @register = register end
Public Instance Methods
app_root()
click to toggle source
# File lib/dronr/manager.rb, line 158 def app_root @app_generator.instance_variable_get(:@destination_stack).first end
bundle_drone(drone)
click to toggle source
# File lib/dronr/manager.rb, line 110 def bundle_drone(drone) say_status :dronr, "Bundling #{drone.human_name}", :blue if block = drone.class.bundle_block @app_generator.instance_eval(&block) end drone.state = :bundled end
commit_register()
click to toggle source
# output all commands..
end
# File lib/dronr/manager.rb, line 72 def commit_register @register.commit(register_path) end
finish_drone(drone)
click to toggle source
# File lib/dronr/manager.rb, line 128 def finish_drone(drone) if block = drone.class.finish_block @app_generator.instance_eval(&block) end drone.state = :finished end
install_drone(drone)
click to toggle source
# File lib/dronr/manager.rb, line 120 def install_drone(drone) say_status :dronr, "Installing #{drone.human_name}", :yellow if block = drone.class.install_block @app_generator.instance_eval(&block) end end
load_register()
click to toggle source
# File lib/dronr/manager.rb, line 76 def load_register @register = Register.load(register_path) end
register_path()
click to toggle source
# File lib/dronr/manager.rb, line 162 def register_path File.join(app_root, '.dronr.yml') end
run_bundle()
click to toggle source
# File lib/dronr/manager.rb, line 154 def run_bundle @app_generator.send :bundle_command, 'install --quiet' end
say_goodbye()
click to toggle source
# File lib/dronr/manager.rb, line 146 def say_goodbye if register.finished_drones.count == register.drones.count say_status :dronr, 'All yours, sparky!', :blue else say_status :dronr, 'Completed iteration but some drones are unfinished. To continue working, run `bin/dronr up` in the project root.', :red end end
say_hello()
click to toggle source
# File lib/dronr/manager.rb, line 142 def say_hello say_status :dronr, 'Hello :)', :blue end
say_status(*opts)
click to toggle source
# File lib/dronr/manager.rb, line 138 def say_status(*opts) @app_generator.say_status(*opts) end
up()
click to toggle source
# File lib/dronr/manager.rb, line 80 def up incoming_drones = @register.incoming_drones.dup bundled_drones = @register.bundled_drones.dup # ---------------- # 1. BUNDLING new drones incoming_drones.each do |drone| bundle_drone(drone) end if incoming_drones.map(&:class).detect(&:bundle_block) run_bundle end # ------------ # 2. INSTALLING bundled drones bundled_drones.each do |drone| install_drone(drone) end say_status :dronr, "Finishing..", :blue bundled_drones.each do |drone| finish_drone(drone) end end