Skip to content

Commit b86bf39

Browse files
committed
Merge pull request rails#23600 from maclover7/actioncable-work
Assorted Railties generators work
2 parents e729949 + cf423f8 commit b86bf39

File tree

8 files changed

+64
-0
lines changed

8 files changed

+64
-0
lines changed

actioncable/lib/rails/generators/channel/channel_generator.rb

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -15,12 +15,29 @@ def create_channel_file
1515
if options[:assets]
1616
template "assets/channel.coffee", File.join('app/assets/javascripts/channels', class_path, "#{file_name}.coffee")
1717
end
18+
19+
generate_application_cable_files
1820
end
1921

2022
protected
2123
def file_name
2224
@_file_name ||= super.gsub(/\_channel/i, '')
2325
end
26+
27+
# FIXME: Change these files to symlinks once RubyGems 2.5.0 is required.
28+
def generate_application_cable_files
29+
return if self.behavior != :invoke
30+
31+
files = [
32+
'application_cable/channel.rb',
33+
'application_cable/connection.rb'
34+
]
35+
36+
files.each do |name|
37+
path = File.join('app/channels/', name)
38+
template(name, path) if !File.exist?(path)
39+
end
40+
end
2441
end
2542
end
2643
end
Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
# Be sure to restart your server when you modify this file. Action Cable runs in a loop that does not support auto reloading.
2+
module ApplicationCable
3+
class Channel < ActionCable::Channel::Base
4+
end
5+
end
Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
# Be sure to restart your server when you modify this file. Action Cable runs in a loop that does not support auto reloading.
2+
module ApplicationCable
3+
class Connection < ActionCable::Connection::Base
4+
end
5+
end

activerecord/lib/rails/generators/active_record/model/model_generator.rb

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -22,11 +22,13 @@ def create_migration_file
2222

2323
def create_model_file
2424
template 'model.rb', File.join('app/models', class_path, "#{file_name}.rb")
25+
generate_application_record
2526
end
2627

2728
def create_module_file
2829
return if regular_class_path.empty?
2930
template 'module.rb', File.join('app/models', "#{class_path.join('/')}.rb") if behavior == :invoke
31+
generate_application_record
3032
end
3133

3234
hook_for :test_framework
@@ -37,6 +39,13 @@ def attributes_with_index
3739
attributes.select { |a| !a.reference? && a.has_index? }
3840
end
3941

42+
# FIXME: Change this file to a symlink once RubyGems 2.5.0 is required.
43+
def generate_application_record
44+
if self.behavior == :invoke && !File.exist?('app/models/application_record.rb')
45+
template 'application_record.rb', 'app/models/application_record.rb'
46+
end
47+
end
48+
4049
# Used by the migration template to determine the parent name of the model
4150
def parent_class_name
4251
options[:parent] || determine_default_parent_class
Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
class ApplicationRecord < ActiveRecord::Base
2+
self.abstract_class = true
3+
end

railties/lib/rails/generators/rails/app/app_generator.rb

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -91,6 +91,7 @@ def config_when_updating
9191
cookie_serializer_config_exist = File.exist?('config/initializers/cookies_serializer.rb')
9292
callback_terminator_config_exist = File.exist?('config/initializers/callback_terminator.rb')
9393
active_record_belongs_to_required_by_default_config_exist = File.exist?('config/initializers/active_record_belongs_to_required_by_default.rb')
94+
action_cable_config_exist = File.exist?('config/cable.yml')
9495

9596
config
9697

@@ -105,6 +106,10 @@ def config_when_updating
105106
unless active_record_belongs_to_required_by_default_config_exist
106107
remove_file 'config/initializers/active_record_belongs_to_required_by_default.rb'
107108
end
109+
110+
unless action_cable_config_exist
111+
template 'config/cable.yml'
112+
end
108113
end
109114

110115
def database_yml

railties/test/generators/channel_generator_test.rb

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,18 @@ class ChannelGeneratorTest < Rails::Generators::TestCase
55
include GeneratorsTestHelper
66
tests Rails::Generators::ChannelGenerator
77

8+
def test_application_cable_skeleton_is_created
9+
run_generator ['books']
10+
11+
assert_file "app/channels/application_cable/channel.rb" do |cable|
12+
assert_match(/module ApplicationCable\n class Channel < ActionCable::Channel::Base\n/, cable)
13+
end
14+
15+
assert_file "app/channels/application_cable/connection.rb" do |cable|
16+
assert_match(/module ApplicationCable\n class Connection < ActionCable::Connection::Base\n/, cable)
17+
end
18+
end
19+
820
def test_channel_is_created
921
run_generator ['chat']
1022

railties/test/generators/model_generator_test.rb

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,14 @@ class ModelGeneratorTest < Rails::Generators::TestCase
66
include GeneratorsTestHelper
77
arguments %w(Account name:string age:integer)
88

9+
def test_application_record_skeleton_is_created
10+
run_generator
11+
assert_file "app/models/application_record.rb" do |record|
12+
assert_match(/class ApplicationRecord < ActiveRecord::Base/, record)
13+
assert_match(/self.abstract_class = true/, record)
14+
end
15+
end
16+
917
def test_help_shows_invoked_generators_options
1018
content = run_generator ["--help"]
1119
assert_match(/ActiveRecord options:/, content)

0 commit comments

Comments
 (0)