Class: BpluserGenerator

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

Class Method Summary collapse

Instance Method Summary collapse

Class Method Details

.next_migration_number(path) ⇒ Object

Implement the required interface for Rails::Generators::Migration. taken from github.com/rails/rails/blob/master/activerecord/lib/generators/active_record.rb



24
25
26
27
28
29
30
31
# File 'lib/generators/bpluser/bpluser_generator.rb', line 24

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

#add_the_gemsObject

Add gem dependenceies



65
66
67
68
69
70
71
72
73
74
75
# File 'lib/generators/bpluser/bpluser_generator.rb', line 65

def add_the_gems
  gem 'omniauth'
  gem 'omniauth-ldap'
  gem 'omniauth-facebook'
  gem 'omniauth-polaris', :git => 'https://github.com/boston-library/omniauth-polaris.git'
  gem 'omniauth-password'
  gem 'bootstrap_forms'
  Bundler.with_clean_env do
    run "bundle install"
  end
end

#check_argumentsObject



33
34
35
36
37
38
# File 'lib/generators/bpluser/bpluser_generator.rb', line 33

def check_arguments
  #if File.exists?("app/models/#{model_name}.rb") and options[:devise]
    #puts "Because you have selected \"#{model_name}\", which is an existing class, you will need to install devise manually and then run this generator without the Devise option. You can find additional information here: https://github.com/plataformatec/devise. \n Please be sure to include a to_s method in #{model_name} that returns the users name or email, as this will be used by Blacklight to provide a link to user specific information."
    #exit
  #end
end

#copy_migrationsObject

Setup the database migrations



105
106
107
108
109
110
111
# File 'lib/generators/bpluser/bpluser_generator.rb', line 105

def copy_migrations
  # Can't get this any more DRY, because we need this order.
  better_migration_template "add_fields_to_user.rb"
  better_migration_template "add_folders_to_user.rb"
  better_migration_template "add_folder_items_to_folder.rb"
  #better_migration_template "create_institutions_for_users.rb"
end

#create_configuration_filesObject

Copy all files in templates/config directory to host config



79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
# File 'lib/generators/bpluser/bpluser_generator.rb', line 79

def create_configuration_files
  copy_file "config/initializers/devise.rb", "config/initializers/devise.rb"
  copy_file "controllers/users/omniauth_callbacks_controller.rb", "app/controllers/users/omniauth_callbacks_controller.rb"
  copy_file "controllers/users/registrations_controller.rb", "app/controllers/users/registrations_controller.rb"
  copy_file "controllers/users/sessions_controller.rb", "app/controllers/users/sessions_controller.rb"
  copy_file "models/user.rb", "app/models/user.rb"
  copy_file "models/ability.rb", "app/models/ability.rb"
  copy_file "views/devise/registrations/new.html.erb", "app/views/devise/registrations/new.html.erb"
  copy_file "views/devise/registrations/edit.html.erb", "app/views/devise/registrations/edit.html.erb"
  copy_file "views/devise/sessions/new.html.erb", "app/views/devise/sessions/new.html.erb"

  if !File.exists?("config/hydra-ldap.yml")
    copy_file "config/hydra-ldap.yml", "config/hydra-ldap.yml"
  end

  if !File.exists?("config/omniauth-polaris.yml")
    copy_file "config/omniauth-polaris.yml", "config/omniauth-polaris.yml"
  end

  if !File.exists?("config/omniauth-facebook.yml")
    copy_file "config/omniauth-facebook.yml", "config/omniauth-facebook.yml"
  end

end

#generate_bpl_institution_managementObject

Install BPL Institution management?



136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
# File 'lib/generators/bpluser/bpluser_generator.rb', line 136

def generate_bpl_institution_management
  if options[:institution_management]
    if Rails::VERSION::MAJOR == 4
      #gem "devise", github:'plataformatec/devise', branch: 'rails4'
    else
      gem 'bpl-institution-management', :git => 'https://github.com/boston-library/bpl-institution-management.git'
    end

    Bundler.with_clean_env do
      run "bundle install"
    end

    generate "institutions"

    Bundler.with_clean_env do
      run "bundle install"
    end
  end
end

#generate_devise_assetsObject

Install Devise?



41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
# File 'lib/generators/bpluser/bpluser_generator.rb', line 41

def generate_devise_assets
  if options[:devise]
    if Rails::VERSION::MAJOR == 4
      gem "devise", github:'plataformatec/devise', branch: 'rails4'
    else
      gem "devise"
    end

    gem "devise-guests", "~> 0.3"

    Bundler.with_clean_env do
      run "bundle install"
    end

    generate "devise:install"
    generate "devise", model_name.classify
    generate "devise_guests", model_name.classify
    generate "devise:views"

  end
end

#generate_hydra_role_managementObject

Install Hydra Role Management?



115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
# File 'lib/generators/bpluser/bpluser_generator.rb', line 115

def generate_hydra_role_management
  if options[:role_management]
    if Rails::VERSION::MAJOR == 4
      #gem "devise", github:'plataformatec/devise', branch: 'rails4'
    else
      gem "hydra-role-management"
    end

    Bundler.with_clean_env do
      run "bundle install"
    end

    generate "roles"

    Bundler.with_clean_env do
      run "bundle install"
    end
  end
end

#inject_bpluser_routesObject



157
158
159
160
161
162
163
164
165
166
# File 'lib/generators/bpluser/bpluser_generator.rb', line 157

def inject_bpluser_routes
  # These will end up in routes.rb file in reverse order
  # we add em, since each is added at the top of file.
  # we want "root" to be FIRST for optimal url generation.
  #route('devise_for :users, :controllers => { :omniauth_callbacks => "bpluser/users/omniauth_callbacks" }')
  gsub_file("config/routes.rb", "devise_for :users", "")
  route('devise_for :users, :controllers => { :omniauth_callbacks => "users/omniauth_callbacks", :registrations => "users/registrations", :sessions => "users/sessions"}')
  route('mount Bpluser::Engine => "/bpluser"')
  route('Bpluser.add_routes(self)')
end