Class: MobileWorkflow::Generators::InstallGenerator

Inherits:
Rails::Generators::Base
  • Object
show all
Includes:
ActiveRecord::Generators::Migration
Defined in:
lib/generators/mobile_workflow/install/install_generator.rb

Instance Method Summary collapse

Instance Method Details

#ability_generatorObject



70
71
72
# File 'lib/generators/mobile_workflow/install/install_generator.rb', line 70

def ability_generator
  copy_file("app/models/ability.rb")
end

#create_api_controllerObject



19
20
21
# 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_routesObject



86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
# File 'lib/generators/mobile_workflow/install/install_generator.rb', line 86

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_deserializersObject



74
75
76
77
78
79
80
81
82
83
84
# File 'lib/generators/mobile_workflow/install/install_generator.rb', line 74

def generate_deserializers
  say "Generating deserializers"

  model_name_to_properties.each_pair do |model_name, properties|
    @deserializer_class = model_name
    @deserializer_properties = properties.split(' ').map { |attribute| attribute.split(':').first }

    template("deserializer.rb.erb", "app/services/#{model_name}_deserializer.rb")
    template("deserializer_spec.rb.erb", "spec/services/#{model_name}_deserializer_spec.rb")
  end
end

#generate_doorkeeperObject



27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
# 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_modelsObject



48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
# 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_seedsObject



107
108
109
# File 'lib/generators/mobile_workflow/install/install_generator.rb', line 107

def generate_seeds
  template("seeds.rb.erb", "db/seeds.rb", force: true)
end

#mount_engineObject



23
24
25
# File 'lib/generators/mobile_workflow/install/install_generator.rb', line 23

def mount_engine
  route "mount MobileWorkflow::Engine => '/'"
end