class MobileWorkflow::Generators::InstallGenerator

Public Instance Methods

create_api_controller() click to toggle source
# File lib/generators/mobile_workflow/install/install_generator.rb, line 19
def create_api_controller
  template("api_controller.rb.erb", "app/controllers/api_controller.rb")
end
generate_controllers_and_routes() click to toggle source
# File lib/generators/mobile_workflow/install/install_generator.rb, line 70
def generate_controllers_and_routes
  say "Generating controllers"
  controller_name_to_actions = open_api_spec.controller_name_to_actions
  route "root to: 'admin/#{controller_name_to_actions.keys.first}#index'"
  
  controller_name_to_actions.each_pair do |plural_controller_name, actions|
    controller_name = plural_controller_name.singularize
    model_properties = model_name_to_properties[controller_name]
    
    unless model_properties
      # Generate a model because it probably wasnt present in the schema
      # And set default attributes
      model_properties = "text:string"
      generate_model(controller_name, model_properties)
    end
    
    generate "mobile_workflow:controller #{controller_name} --actions #{actions.join(" ")} --attributes #{model_properties} #{generate_controller_args}".strip
    route "resources :#{plural_controller_name}, only: [#{actions.map{|a| ":#{a}"}.join(", ")}]"
  end
end
generate_doorkeeper() click to toggle source
# File lib/generators/mobile_workflow/install/install_generator.rb, line 27
def generate_doorkeeper
  return unless options[:doorkeeper_oauth]
  say "Generating Doorkeeper OAuth"
  
  migration_template "create_users.rb", "db/migrate/create_users.rb"
  
  generate 'doorkeeper:install'
  gsub_file 'config/initializers/doorkeeper.rb', 'raise "Please configure doorkeeper resource_owner_authenticator block located in #{__FILE__}"', 'User.find_by_id(session.delete(:user_id)) || redirect_to(new_session_url(return_to: request.fullpath))'
  generate 'doorkeeper:migration'
  generate 'doorkeeper:pkce'
  template("user.rb.erb", "app/models/user.rb")
  template("sessions_controller.rb.erb", "app/controllers/sessions_controller.rb")
  route "resources :sessions, only: [:new, :create]"
  
  # View related for login screen
  copy_file("app/views/layouts/application.html.erb")
  copy_file("app/views/sessions/new.html.erb")
  copy_file("app/helpers/application_helper.rb")
  copy_file("spec/factories/users.rb")
end
generate_models() click to toggle source
# File lib/generators/mobile_workflow/install/install_generator.rb, line 48
def generate_models
  say "Loading OpenAPI Spec: #{open_api_spec_path}"
  say "Generating models"
  
  copy_file("app/models/application_record.rb")
  
  model_name_to_properties.each_pair do |model_name, model_properties|   
    
    if doorkeeper_oauth?
      model_properties = "#{model_properties} user:references"
      @model_name_to_properties[model_name] = model_properties
    end
           
    if interactive? && !yes?("Use generated schema #{model_name}(#{model_properties})[yn]?")
      model_properties = ask "Specify schema for #{model_name}: (e.g. text:string image:attachment region:reference)"
      @model_name_to_properties[model_name] = model_properties
    end

    generate_model(model_name, model_properties)
  end
end
generate_seeds() click to toggle source
# File lib/generators/mobile_workflow/install/install_generator.rb, line 91
def generate_seeds
  template("seeds.rb.erb", "db/seeds.rb", force: true)
end
mount_engine() click to toggle source
# File lib/generators/mobile_workflow/install/install_generator.rb, line 23
def mount_engine
  route "mount MobileWorkflow::Engine => '/'"
end

Private Instance Methods

doorkeeper_oauth?() click to toggle source
# File lib/generators/mobile_workflow/install/install_generator.rb, line 116
def doorkeeper_oauth?
  options[:doorkeeper_oauth]
end
generate_controller_args() click to toggle source
# File lib/generators/mobile_workflow/install/install_generator.rb, line 101
def generate_controller_args
  args = ''
  args += ' --s3-storage' if s3_storage?
  args += ' --doorkeeper-oauth' if doorkeeper_oauth?
  args.strip
end
generate_model(model_name, model_properties) click to toggle source
# File lib/generators/mobile_workflow/install/install_generator.rb, line 97
def generate_model(model_name, model_properties)
  generate("mobile_workflow:model #{model_name} #{model_properties}")
end
interactive?() click to toggle source
# File lib/generators/mobile_workflow/install/install_generator.rb, line 128
def interactive?
  options[:interactive]
end
model_name_to_properties() click to toggle source
# File lib/generators/mobile_workflow/install/install_generator.rb, line 108
def model_name_to_properties
  @model_name_to_properties ||= open_api_spec.model_name_to_properties
end
open_api_spec() click to toggle source
# File lib/generators/mobile_workflow/install/install_generator.rb, line 112
def open_api_spec
  @open_api_spec ||= ::MobileWorkflow::OpenApiSpec::Parser.new(File.read(open_api_spec_path))
end
open_api_spec_path() click to toggle source
# File lib/generators/mobile_workflow/install/install_generator.rb, line 124
def open_api_spec_path
  options[:open_api_spec_path]
end
s3_storage?() click to toggle source
# File lib/generators/mobile_workflow/install/install_generator.rb, line 120
def s3_storage?
  options[:s3_storage]
end