Class: Pu::Invites::InvitableGenerator

Inherits:
Rails::Generators::Base
  • Object
show all
Includes:
PlutoniumGenerators::Generator
Defined in:
lib/generators/pu/invites/invitable_generator.rb

Instance Method Summary collapse

Methods included from PlutoniumGenerators::Generator

derive_association_name, find_shared_namespace, included

Methods included from PlutoniumGenerators::Concerns::Logger

#debug, #error, #exception, #info, #success, #warn

Methods included from PlutoniumGenerators::Concerns::Config

#read_config, #write_config

Instance Method Details

#add_definition_actionObject



65
66
67
68
69
# File 'lib/generators/pu/invites/invitable_generator.rb', line 65

def add_definition_action
  inject_into_file definition_file_path,
    "  action :invite_user, interaction: #{model_class}::InviteUserInteraction, category: :secondary\n",
    after: /class #{model_class}Definition < .+\n/
end

#add_invitable_concernObject



59
60
61
62
63
# File 'lib/generators/pu/invites/invitable_generator.rb', line 59

def add_invitable_concern
  inject_into_file model_file_path,
    "include Plutonium::Invites::Concerns::Invitable\n  ",
    before: "# add concerns above."
end

#add_policy_methodObject



71
72
73
74
75
# File 'lib/generators/pu/invites/invitable_generator.rb', line 71

def add_policy_method
  inject_into_file policy_file_path,
    "def invite_user?\n    record.can_invite_user?\n  end\n\n  ",
    before: "# Core attributes"
end

#create_email_templatesObject



77
78
79
80
81
82
83
84
85
# File 'lib/generators/pu/invites/invitable_generator.rb', line 77

def create_email_templates
  return unless options[:email_templates]

  template "invitable/invitation.html.erb",
    "packages/invites/app/views/invites/user_invite_mailer/invitation_#{model_table}.html.erb"

  template "invitable/invitation.text.erb",
    "packages/invites/app/views/invites/user_invite_mailer/invitation_#{model_table}.text.erb"
end

#create_interactionObject



54
55
56
57
# File 'lib/generators/pu/invites/invitable_generator.rb', line 54

def create_interaction
  template "invitable/invite_user_interaction.rb",
    interaction_path
end

#show_instructionsObject



87
88
89
90
91
92
93
# File 'lib/generators/pu/invites/invitable_generator.rb', line 87

def show_instructions
  say "\n"
  say "Connected #{model_class} as invitable!", :green
  say "\n"
  say "Implement #{model_class}#on_invite_accepted(user) to handle post-acceptance logic."
  say "\n"
end

#validate_requirementsObject



33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
# File 'lib/generators/pu/invites/invitable_generator.rb', line 33

def validate_requirements
  errors = []

  unless File.exist?(Rails.root.join(model_file_path))
    errors << "Model file not found: #{model_file_path}"
  end

  unless File.exist?(Rails.root.join(definition_file_path))
    errors << "Definition file not found: #{definition_file_path}"
  end

  unless File.exist?(Rails.root.join(policy_file_path))
    errors << "Policy file not found: #{policy_file_path}"
  end

  if errors.any?
    errors.each { |e| say_status :error, e, :red }
    raise Thor::Error, "Required files missing. Ensure #{model_class} resource exists."
  end
end