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



73
74
75
# File 'lib/generators/mobile_workflow/install/install_generator.rb', line 73

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

#create_api_controllerObject



21
22
23
# File 'lib/generators/mobile_workflow/install/install_generator.rb', line 21

def create_api_controller
  template('api_controller.rb.erb', 'app/controllers/api_controller.rb')
end

#generate_controllers_and_routesObject



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

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



77
78
79
80
81
82
83
84
85
86
87
# File 'lib/generators/mobile_workflow/install/install_generator.rb', line 77

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



29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
# File 'lib/generators/mobile_workflow/install/install_generator.rb', line 29

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



52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
# File 'lib/generators/mobile_workflow/install/install_generator.rb', line 52

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



110
111
112
# File 'lib/generators/mobile_workflow/install/install_generator.rb', line 110

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

#mount_engineObject



25
26
27
# File 'lib/generators/mobile_workflow/install/install_generator.rb', line 25

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