Class: Kitestrings::Generators::MessagesGenerator

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

Class Method Summary collapse

Instance Method Summary collapse

Class Method Details

.next_migration_number(dirname) ⇒ Object



69
70
71
# File 'lib/generators/kitestrings/messages_generator.rb', line 69

def self.next_migration_number(dirname)
  Time.now.utc.strftime("%Y%m%d%H%M%S")
end

Instance Method Details

#setup_messages_modelObject



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
41
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
# File 'lib/generators/kitestrings/messages_generator.rb', line 9

def setup_messages_model
  template "message.rb.erb", "app/models/message.rb"
  copy_file "message_mailer.rb", "app/mailers/message_mailer.rb"
  copy_file "default.text.erb", "app/views/message_mailer/default.text.erb"
  copy_file "message_spec.rb", "spec/models/message_spec.rb"
  copy_file "messages.rb", "spec/factories/messages.rb"
  copy_file "messages_controller.rb", "app/controllers/messages_controller.rb"
  copy_file "messages_controller_spec.rb", "spec/controllers/messages_controller_spec.rb"
  copy_file "index.html.haml", "app/views/messages/index.html.haml"
  copy_file "show.html.haml", "app/views/messages/show.html.haml"

  if Dir.glob(destination_root + "/db/migrate/*create_messages.rb").count == 0
    migration_template "message_migration.rb", "db/migrate/create_messages.rb"
  end

  routes = <<RUBY
  resources :messages, only: [:index, :show]
  # also nest under user, for example:
  # resources :user do
  #   resources :messages, only: [:index, :show]
  # end
RUBY
  inject_into_file "config/routes.rb", routes, :before => /^end/


  puts <<OUTPUT
-------------------------------------------------------------------------------

Kitestrings Message scaffold. Please complete the following manually:

1. Check config/routes.rb for nesting messages under the user model. For example:

  resources :user do
    resources :messages, only: [:index, :show]
  end

2. Update CanCan abilities so users can read their messages, for example:

    can(:read, Message) { |message| message.user == user }
    can(:index_all, Message) if user.admin?

3. Add the following to your user model

  has_many :messages

4. Set the default host. This is needed as the Message model needs to generate
   absolute URLs to be inserted into email bodies. Example, add to routes.rb:

  default_url_options :host => (ENV['DEFAULT_URL_HOST'] || 'localhost')

5. Add "message" and "message_other" to your common lets. Example:

  # Messages
  let(:message) { create :message, user: user }
  let(:message_other) { create :message, user: user_other }

-------------------------------------------------------------------------------
OUTPUT
end