class Nor::BackendGenerator
Attributes
mount_path[R]
user_class[R]
Public Class Methods
new(args, *options)
click to toggle source
Calls superclass method
# File lib/generators/nor/backend/backend_generator.rb, line 9 def initialize(args, *options) raise 'Next On Rails can be installed only on a Rails API app! Please create a new app with `rails new APPNAME --api`' unless rails_api? super @user_class = args[0] || 'User' @mount_path = args[1] || 'auth' end
next_migration_number(_path)
click to toggle source
# File lib/generators/nor/backend/backend_generator.rb, line 117 def self.next_migration_number(_path) Time.zone.now.utc.strftime('%Y%m%d%H%M%S') end
Public Instance Methods
install_application_controller()
click to toggle source
# File lib/generators/nor/backend/backend_generator.rb, line 59 def install_application_controller remove_file 'app/controllers/application_controller.rb' template 'application_controller.rb', 'app/controllers/application_controller.rb' end
install_cors_config()
click to toggle source
# File lib/generators/nor/backend/backend_generator.rb, line 69 def install_cors_config config = <<~CONFIG Rails.application.config.middleware.insert_before 0, Rack::Cors do allow do origins 'localhost:3001' resource '*', headers: :any, methods: [:get, :post, :put, :patch, :delete, :options, :head], expose: [ DeviseTokenAuth.headers_names[:'access-token'], DeviseTokenAuth.headers_names[:client], DeviseTokenAuth.headers_names[:expiry], DeviseTokenAuth.headers_names[:uid], DeviseTokenAuth.headers_names[:'token-type'] ] end end CONFIG append_to_file 'config/initializers/cors.rb', config end
install_devise_config()
click to toggle source
# File lib/generators/nor/backend/backend_generator.rb, line 64 def install_devise_config template File.join(Gem.loaded_specs['devise'].full_gem_path, 'lib/generators/templates/devise.rb'), 'config/initializers/devise.rb' gsub_file 'config/initializers/devise.rb', "require 'devise/orm/'", "# require 'devise/orm/'" if File.exist?('config/initializers/devise.rb') end
install_devise_token_auth()
click to toggle source
# File lib/generators/nor/backend/backend_generator.rb, line 25 def install_devise_token_auth generate 'devise_token_auth:install', @user_class, @mount_path config = <<~CONFIG \s\s# Configure default URLs and redirects \s\sconfig.default_confirm_success_url = 'http://localhost:3001/' \s\sconfig.default_password_reset_url = 'http://localhost:3001/change-password' \s\sconfig.redirect_whitelist = ['http://localhost:3001/*'] \s\s# If config.check_current_password_before_update is set to :attributes the \s\s# current_password param is checked before any update, if it is set to \s\s# :password the current_password param is checked only if the request \s\s# updates user password. Default current_password is never checked. \s\sconfig.check_current_password_before_update = :password CONFIG insert_into_file 'config/initializers/devise_token_auth.rb', config, before: /end$/ end
install_routes()
click to toggle source
# File lib/generators/nor/backend/backend_generator.rb, line 43 def install_routes custom_routes = <<~ROUTES , controllers: { confirmations: 'next_on_rails/devise_token_auth_override/confirmations', omniauth_callbacks: 'next_on_rails/devise_token_auth_override/omniauth_callbacks', passwords: 'next_on_rails/devise_token_auth_override/passwords', registrations: 'next_on_rails/devise_token_auth_override/registrations', sessions: 'next_on_rails/devise_token_auth_override/sessions', token_validations: 'next_on_rails/devise_token_auth_override/token_validations', unlocks: 'next_on_rails/devise_token_auth_override/unlocks' } mount NextOnRails::Engine => '/' ROUTES insert_into_file 'config/routes.rb', custom_routes, after: "mount_devise_token_auth_for '#{@user_class}', at: '#{@mount_path}'" end
install_user()
click to toggle source
# File lib/generators/nor/backend/backend_generator.rb, line 17 def install_user model_file = "app/models/#{user_class.singularize.gsub('::', '').underscore}.rb" template 'user.rb', model_file unless File.exist?(model_file) migration_file = "devise_token_auth_create_#{user_class.pluralize.gsub('::', '').underscore}" migration_template 'user_migration.rb', File.join('db', 'migrate', "#{migration_file}.rb") unless self.class.migration_exists?('db/migrate', migration_file) end
install_user_serializer()
click to toggle source
# File lib/generators/nor/backend/backend_generator.rb, line 91 def install_user_serializer template 'user_serializer.rb', "app/serializers/#{@user_class.underscore}_serializer.rb" template 'current_user_serializer.rb', "app/serializers/current_#{@user_class.underscore}_serializer.rb" end
remove_wrap_parameters()
click to toggle source
# File lib/generators/nor/backend/backend_generator.rb, line 96 def remove_wrap_parameters gsub_file 'config/initializers/wrap_parameters.rb', 'wrap_parameters format: [:json]', 'wrap_parameters format: []' end
setup_gems()
click to toggle source
# File lib/generators/nor/backend/backend_generator.rb, line 100 def setup_gems gem_group :development do gem 'foreman' gem 'letter_opener' end template 'Procfile' config = <<~CONFIG \s\s# Mailer setup \s\sconfig.action_mailer.preview_path = Rails.root.join('test', 'mailers', 'previews') \s\sconfig.action_mailer.delivery_method = :letter_opener \s\sconfig.action_mailer.raise_delivery_errors = true \s\sconfig.action_mailer.default_url_options = { host: 'http://localhost:3000' } CONFIG insert_into_file 'config/environments/development.rb', config, before: /end$/ end
Protected Instance Methods
rails_api?()
click to toggle source
# File lib/generators/nor/backend/backend_generator.rb, line 123 def rails_api? filename = 'config/application.rb' str = 'config.api_only = true' str.in?(File.read(filename)) end