Class: Devowd::Generators::InstallGenerator

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

Class Method Summary collapse

Instance Method Summary collapse

Class Method Details

.next_migration_number(path) ⇒ Object



159
160
161
162
163
164
165
166
# File 'lib/generators/devowd/install_generator.rb', line 159

def self.next_migration_number(path)
  unless @prev_migration_nr
    @prev_migration_nr = Time.now.utc.strftime("%Y%m%d%H%M%S").to_i
  else
    @prev_migration_nr += 1
  end
  @prev_migration_nr.to_s
end

Instance Method Details

#install_admin_modelObject



79
80
81
82
83
84
85
# File 'lib/generators/devowd/install_generator.rb', line 79

def install_admin_model
  puts "..."
  copy_file "models/admin.rb", "app/models/admin.rb"
  copy_file "controllers/admins_controller.rb", "app/controllers/admins_controller.rb"
  migration_template "migrations/admin_migration.rb", "db/migrate/create_admins.rb"
  copy_file "views/admin_show.html", "app/views/admins/show.html.erb"
end

#install_application_layoutObject



148
149
150
151
152
153
154
155
156
157
# File 'lib/generators/devowd/install_generator.rb', line 148

def install_application_layout
  app_layout = "app/views/layouts/application.html.erb"
  this_text = '  <% ENV["HOST"] = request.host_with_port %>
  <%= render partial: "visitor_signed_in" %>
  <%= flash[:notice] %>
  <%= flash[:alert] %>'
  this_line = "<body>\n"
  inject_into_file app_layout, this_text, after: this_line
  copy_file "views/_visitor_signed_in.html", "app/views/application/_visitor_signed_in.html.erb"
end

#install_deviseObject



9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
# File 'lib/generators/devowd/install_generator.rb', line 9

def install_devise
  puts "DEVISE CONFIG"
  @email_signature = ask("Signature you will use to send activation invitation from [ex.: Mike Brown]:")
  @email = ask("Email you will use to send activation invitation from [ex.: [email protected]]:")
  @email_password = ask("Password for email [ex.: s0mepaSS]:")
  #crowd configurations
  puts "CROWD CONFIG"
  @crowd_http = ask("Crowd server http [ex.: http://crowd.example.ru/crowd]:")
  @crowd_appname = ask("Name for your application at Crowd server [ex.: awesomeApp]:")
  @crowd_apppassword = ask("Password for your applicaiton at Crowd server [ex.: secret]:")
  template "config/devise.rb.erb", "config/initializers/devise.rb"
  copy_file "config/devise.en.yml", "config/locales/devise.en.yml"
  copy_file "controllers/omniauth_callbacks_controller.rb", "app/controllers/omniauth_callbacks_controller.rb"
  inject_into_class "app/controllers/application_controller.rb", ApplicationController do
    "   def after_sign_in_path_for(resource)
    if resource.instance_of? User
sign_out(current_admin) if !current_admin.nil?
resource.pass_required = true
return user_path(resource)
    end
    if resource.instance_of? Admin
sign_out(current_user) if !current_user.nil?
return admin_path(resource)
    end
  end

  def after_sign_out_path_for(resource)
    return admin_login_path if resource == :admin
    return new_user_session_path if resource == :user
  end\n"
  end
end

#install_figaroObject



134
135
136
137
138
139
140
141
142
143
144
145
146
# File 'lib/generators/devowd/install_generator.rb', line 134

def install_figaro
  if File.exists?("config/application.yml")
    append_to_file("config/application.yml") do
"CROWD_APPNAME: '#{@crowd_appname}'
CROWD_APPPASSWORD: '#{@crowd_apppassword}'
MAIL_USERNAME: '#{@email}'
MAIL_PASSWORD: '#{@email_password}'
"
    end
  else
    template("config/application.yml.erb", "config/application.yml")
  end
end

#install_mailerObject



42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
# File 'lib/generators/devowd/install_generator.rb', line 42

def install_mailer
  template "mailer/app_mailer.rb.erb", "app/mailers/app_mailer.rb"
  @tls = 'false'
  @address = 'smtp.yandex.ru'
  @port = '587'
  @domain = 'awesome.domain.com'
  @authentication = 'plain'
  @enable_starttls_auto = 'true'

  development = "config/environments/development.rb"
  this_text = "  config.action_mailer.default_url_options = { :host => ENV['HOST'] }
  config.action_mailer.perform_deliveries = true
  config.action_mailer.delivery_method = :smtp
  config.action_mailer.smtp_settings = {
    :tls => #{@tls},
    :address              => '#{@address}',
    :port                 => #{@port},
    :domain               => '#{@domain}',
    :user_name            => ENV['MAIL_USERNAME'],
    :password             => ENV['MAIL_PASSWORD'],
    :authentication       => '#{@authentication}',
    :enable_starttls_auto => #{@enable_starttls_auto}
  }"
  this_line = "#{Rails.application.class.parent_name}::Application.configure do\n"
  inject_into_file development, this_text, after: this_line
  this_line = "Rails.application.configure do\n"
  inject_into_file development, this_text, after: this_line

  production = "config/environments/production.rb"
  this_line = "#{Rails.application.class.parent_name}::Application.configure do\n"
  inject_into_file production, this_text, after: this_line
  this_line = "Rails.application.configure do\n"
  inject_into_file production, this_text, after: this_line
  
  copy_file "mailer/user_activate_mail_template.html.erb", "app/views/app_mailer/user_activate.html.erb"
end

#install_migrationObject



101
102
103
104
# File 'lib/generators/devowd/install_generator.rb', line 101

def install_migration
  run('bundle exec rake db:create')
  run('bundle exec rake db:migrate')
end

#install_routesObject



106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
# File 'lib/generators/devowd/install_generator.rb', line 106

def install_routes
  routes = "config/routes.rb"
  this_text = "  devise_for :admins, controllers: {omniauth_callbacks: 'omniauth_callbacks'}
  devise_scope :admin do
    delete '/admins/logout', to: 'devise/sessions#destroy'
    get '/admin', to: 'admins#admin', as: 'admin_login'
  end
  resources :admins, only: [:show]

  unauthenticated do
    root to: redirect('/users/login'), as: 'user_redirect_to_login'
    get '/users/new', to: redirect('/users/login'), as: 'new_user_redirect_to_login'
  end

  authenticated :user do
    devise_scope :user do
get '/users/new', to: redirect('/'), as: 'new_user_redirect_to_root'
    end
  end

  devise_for :users, path_names: {sign_in: 'login', sign_out: 'logout'}
  resources :users, only: [:show, :create, :new, :edit, :update, :destroy]"
  this_line = "#{Rails.application.class.parent_name}::Application.routes.draw do\n"
  inject_into_file routes, this_text, after: this_line
  this_line = "Rails.application.routes.draw do\n"
  inject_into_file routes, this_text, after: this_line
end

#install_user_modelObject



87
88
89
90
91
92
93
94
95
96
97
98
99
# File 'lib/generators/devowd/install_generator.rb', line 87

def install_user_model
  copy_file "models/user.rb", "app/models/user.rb"
  copy_file "controllers/users_controller.rb", "app/controllers/users_controller.rb"
  migration_template "migrations/user_migration.rb", "db/migrate/create_users.rb"
  empty_directory "app/views/devise/sessions"
  copy_file "views/new.html", "app/views/devise/sessions/new.html.erb"
  copy_file "views/user_new.html", "app/views/users/new.html.erb"
  copy_file "views/user_show.html", "app/views/users/show.html.erb"
  copy_file "views/user_edit.html", "app/views/users/edit.html.erb"
  copy_file "views/user_edit_by_admin.html", "app/views/application/_edit_user_by_admin.html.erb"
  copy_file "views/user_edit_by_user.html", "app/views/application/_edit_user_by_user.html.erb"
  copy_file "views/user_collection_template.html", "app/views/application/_user.html.erb"
end