Class: Webring::Generators::MembershipRequestGenerator

Inherits:
Rails::Generators::Base
  • Object
show all
Includes:
Rails::Generators::Migration, Shared::RouteInjector
Defined in:
lib/generators/webring/membership_request/membership_request_generator.rb

Overview

Note:

After running this generator, you should run the migration with: rails db:migrate

It creates both the model file and a migration to create the database table

Examples:

Generated MembershipRequest model has the following attributes:

# name - The name of the member site
# url - The URL of the member site (required)
# callback_email - Email for notifications
# description - Description of the site

Class Method Summary collapse

Instance Method Summary collapse

Class Method Details

.next_migration_number(dirname) ⇒ Integer

Generates the next migration number for the migration file This is required by Rails::Generators::Migration

Parameters:

  • dirname (String)

    The directory where migrations are stored

Returns:

  • (Integer)

    The next migration number



69
70
71
72
# File 'lib/generators/webring/membership_request/membership_request_generator.rb', line 69

def self.next_migration_number(dirname)
  next_migration_number = current_migration_number(dirname) + 1
  ActiveRecord::Migration.next_migration_number(next_migration_number)
end

Instance Method Details

#create_migration_fileObject

Creates a migration file to create the webring_membership_requests table



29
30
31
32
# File 'lib/generators/webring/membership_request/membership_request_generator.rb', line 29

def create_migration_file
  migration_template 'migration.rb', 'db/migrate/create_webring_membership_requests.rb'
  migration_template 'relations_migration.rb', 'db/migrate/add_membership_request_to_webring_members.rb'
end

#create_model_fileObject

Creates the MembershipRequest model file based on the template



35
36
37
# File 'lib/generators/webring/membership_request/membership_request_generator.rb', line 35

def create_model_file
  template 'model.rb', 'app/models/webring/membership_request.rb'
end

#inject_into_member_modelObject

Injects the belongs_to relationship into the Member model



40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
# File 'lib/generators/webring/membership_request/membership_request_generator.rb', line 40

def inject_into_member_model
  member_model_path = 'app/models/webring/member.rb'

  inject_conditions = [
    { line: 'UID_LENGTH =', inject_options: { after: /UID_LENGTH =.*\n\n/ } },
    { line: 'extend Webring::Navigation', inject_options: { after: "extend Webring::Navigation\n\n" } },
    { line: 'class Member < ApplicationRecord', inject_options: { after: "class Member < ApplicationRecord\n" } }
  ]

  return unless File.exist?(member_model_path)

  content = File.read(member_model_path)
  options = inject_conditions.find { |condition| content.include?(condition[:line]) }&.fetch(:inject_options)
  return if options.blank?

  inject_into_file member_model_path, **options do
    "    belongs_to :membership_request,\n" \
    "               class_name: 'Webring::MembershipRequest',\n" \
    "               foreign_key: :webring_membership_request_id,\n" \
    "               optional: true,\n" \
    "               inverse_of: :member\n" \
    "\n"
  end
end

#show_readmeObject

Displays the README with next steps after installation



75
76
77
# File 'lib/generators/webring/membership_request/membership_request_generator.rb', line 75

def show_readme
  readme 'AFTER_INSTALL' if behavior == :invoke
end