drailties 0.4.3 → 0.5.0.pre
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +6 -14
- data/bin/drails +4 -42
- data/lib/drails/app_drails_loader.rb +62 -0
- data/lib/drails/cli.rb +11 -0
- data/lib/drails/commands/application.rb +43 -0
- data/lib/drails/commands/destroy.rb +12 -0
- data/lib/drails/commands/domainserver.rb +6 -0
- data/lib/drails/commands/generate.rb +12 -0
- data/lib/drails/commands/projectionserver.rb +9 -0
- data/lib/drails/commands/server.rb +22 -0
- data/lib/drails/commands.rb +70 -0
- data/lib/drails/generators.rb +48 -0
- data/lib/drails/server/domain_server.rb +4 -1
- data/lib/drails/server/projection_servers.rb +5 -2
- data/lib/generators/drails/app/USAGE +12 -12
- data/lib/generators/drails/app/app_generator.rb +134 -52
- data/lib/generators/drails/app/templates/{event_source_controller.rb → app/controllers/event_source_controller.rb} +15 -15
- data/lib/generators/drails/app/templates/bin/drails +3 -0
- data/lib/generators/drails/app/templates/config/disco.yml +27 -0
- data/lib/generators/drails/app/templates/{build_validations_registry.rb → config/initializers/build_validations_registry.rb} +18 -18
- data/lib/generators/drails/app/templates/{create_domain.rb → config/initializers/create_domain.rb} +4 -4
- data/lib/generators/drails/app/templates/db/seeds.rb +14 -0
- data/lib/generators/drails/command/USAGE +11 -11
- data/lib/generators/drails/command/command_generator.rb +68 -40
- data/lib/generators/drails/command/templates/command.rb +24 -6
- data/lib/generators/drails/command/templates/event.rb +11 -10
- data/lib/generators/drails/command_processor/USAGE +1 -1
- data/lib/generators/drails/command_processor/command_processor_generator.rb +22 -15
- data/lib/generators/drails/command_processor/templates/command_processor.rb +5 -5
- data/lib/generators/drails/domain.rb +18 -18
- data/lib/generators/drails/event_name.rb +51 -51
- data/lib/generators/drails/migration/USAGE +41 -1
- data/lib/generators/drails/migration/migration_generator.rb +27 -28
- data/lib/generators/drails/migration/templates/create_table_migration.rb +19 -19
- data/lib/generators/drails/model/USAGE +17 -17
- data/lib/generators/drails/model/model_generator.rb +29 -23
- data/lib/generators/drails/model/templates/domain_model.rb +5 -5
- data/lib/generators/drails/model/templates/model.rb +4 -4
- data/lib/generators/drails/processor_name.rb +47 -47
- data/lib/generators/drails/projection/projection_generator.rb +3 -3
- data/lib/generators/drails/projection/templates/domain_projection.rb +9 -9
- data/lib/generators/drails/projection/templates/domain_projection_test.rb +6 -6
- data/lib/generators/drails/projection/templates/projection.rb +9 -9
- data/lib/generators/drails/projection/templates/projection_test.rb +6 -6
- data/lib/generators/drails/scaffold/USAGE +26 -26
- data/lib/generators/drails/scaffold/scaffold_generator.rb +91 -89
- data/lib/generators/drails/scaffold/templates/_eventstream.js.erb +15 -15
- data/lib/generators/drails/{controller → scaffold_controller}/USAGE +1 -1
- data/lib/generators/drails/{controller/controller_generator.rb → scaffold_controller/scaffold_controller_generator.rb} +27 -26
- data/lib/generators/drails/scaffold_controller/templates/controller.rb +68 -0
- data/lib/generators/drails/{controller → scaffold_controller}/templates/controller_test.rb +45 -45
- data/lib/generators/drails/use_domain_option.rb +53 -53
- data/lib/rails-disco/version.rb +3 -3
- data/lib/tasks/db.rake +187 -88
- metadata +33 -27
- data/lib/drails/application.rb +0 -8
- data/lib/drails/domainserver.rb +0 -5
- data/lib/drails/generate.rb +0 -21
- data/lib/drails/projectionserver.rb +0 -8
- data/lib/drails/server.rb +0 -18
- data/lib/generators/drails/app/templates/disco.yml +0 -54
- data/lib/generators/drails/controller/templates/controller.rb +0 -67
checksums.yaml
CHANGED
@@ -1,15 +1,7 @@
|
|
1
1
|
---
|
2
|
-
|
3
|
-
metadata.gz:
|
4
|
-
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
metadata.gz: !binary |-
|
9
|
-
NDlkNzcxMmMyY2E3Mjk1MDJlY2NjZWRlNTYzZmM0YjM0YWVhMjExMzI0YTlk
|
10
|
-
MzBmNmRmY2Y5YjI4ZWNjOTNkMWE3ZTg5YmM5MDhlYmVmYWYxZmI0MzIzNDNi
|
11
|
-
ZmZmOGYwYjc0NDg1ZTdjNzhjNjAxZGIxYTU2YjAzMzE3NzJhYjg=
|
12
|
-
data.tar.gz: !binary |-
|
13
|
-
ZGYyNzVjZDE3MTI3MWU1NWE2YjQ1NDdhYTIzZWE4YzA4MDA5ODMwY2RmNjdj
|
14
|
-
MTc0ZGNkNzYyMDA1MGQ4Y2U4YTljMDFhYjJhYmMxOWJjZGU1YzY3ZjdhNWEy
|
15
|
-
ZTNhMDQ5NjVlOWIzN2I1YzExNDI0YjNlMTM4ZGU3ZjA4YWZkMjU=
|
2
|
+
SHA1:
|
3
|
+
metadata.gz: 2a7dd88b03bbf2263cdce75dfcd41bba3278efba
|
4
|
+
data.tar.gz: 4b41195f65faa47954dd2fe06cbdbffec857c5a0
|
5
|
+
SHA512:
|
6
|
+
metadata.gz: ad80208ff69c00f671b652a2ddc7f4eece1c2ca4ef60440b62aa09679b2f14e94923a9d90b439101902a9d888e19ba8d5d6514d48f349f757a4331917a7a0473
|
7
|
+
data.tar.gz: cfebcb2e8d70a8ea7aed32b21338e89445498108ce0777c441bed0602af03c23f060f4d9b2424adf3f2f0b15a56785dc53affa83e29088dbae2febad8f64da76
|
data/bin/drails
CHANGED
@@ -1,45 +1,7 @@
|
|
1
1
|
#!/usr/bin/env ruby
|
2
|
-
|
3
|
-
|
2
|
+
|
3
|
+
unless Gem::Specification.find_by_name('drailties').gem_dir == File.expand_path('../..', __FILE__)
|
4
|
+
$:.push File.expand_path('../../lib', __FILE__)
|
4
5
|
$:.delete "#{Gem::Specification.find_by_name('drailties').gem_dir}/lib"
|
5
6
|
end
|
6
|
-
|
7
|
-
ARGV << '--help' if ARGV.empty?
|
8
|
-
|
9
|
-
aliases = {
|
10
|
-
'ds' => 'domainserver',
|
11
|
-
's' => 'server',
|
12
|
-
'ps' => 'projectionserver',
|
13
|
-
'g' => 'generate'
|
14
|
-
}
|
15
|
-
|
16
|
-
|
17
|
-
help_message = <<-EOT
|
18
|
-
|
19
|
-
Usage: drails COMMAND
|
20
|
-
|
21
|
-
where COMMAND is one of:
|
22
|
-
|
23
|
-
new creates a new drails application
|
24
|
-
generate(g) run a rails generator
|
25
|
-
domainserver(ds) start the domain server
|
26
|
-
projectionserver(ps) start the projection server
|
27
|
-
server(s) start both server
|
28
|
-
EOT
|
29
|
-
|
30
|
-
command = ARGV.shift
|
31
|
-
command = aliases[command] || command
|
32
|
-
|
33
|
-
case command
|
34
|
-
when 'new'
|
35
|
-
require 'drails/application'
|
36
|
-
when 'generate','rake','server', 'domainserver', 'projectionserver'
|
37
|
-
ROOT_DIR ||= Dir.pwd
|
38
|
-
require "drails/#{command}"
|
39
|
-
when '-h', '--help'
|
40
|
-
puts help_message
|
41
|
-
else
|
42
|
-
puts "Error: Command '#{command}' not recognized"
|
43
|
-
puts help_message
|
44
|
-
exit(1)
|
45
|
-
end
|
7
|
+
require 'drails/cli'
|
@@ -0,0 +1,62 @@
|
|
1
|
+
require 'pathname'
|
2
|
+
|
3
|
+
module Drails
|
4
|
+
module AppDrailsLoader
|
5
|
+
RUBY = File.join(*RbConfig::CONFIG.values_at('bindir', 'ruby_install_name')) + RbConfig::CONFIG['EXEEXT']
|
6
|
+
EXECUTABLES = ['bin/drails']
|
7
|
+
BUNDLER_WARNING = <<EOS
|
8
|
+
Looks like your app's ./bin/drails is a stub that was generated by Bundler.
|
9
|
+
|
10
|
+
In Rails Disco, your app's bin/ directory contains executables that are versioned
|
11
|
+
like any other source code, rather than stubs that are generated on demand.
|
12
|
+
|
13
|
+
Here's how to upgrade:
|
14
|
+
|
15
|
+
bundle config --delete bin # Turn off Bundler's stub generator
|
16
|
+
rake drails:update:bin # Use the new Rails Disco executables
|
17
|
+
git add bin # Add bin/ to source control
|
18
|
+
|
19
|
+
You may need to remove bin/ from your .gitignore as well.
|
20
|
+
|
21
|
+
When you install a gem whose executable you want to use in your app,
|
22
|
+
generate it and add it to source control:
|
23
|
+
|
24
|
+
bundle binstubs some-gem-name
|
25
|
+
git add bin/new-executable
|
26
|
+
|
27
|
+
EOS
|
28
|
+
|
29
|
+
def self.exec_app_drails
|
30
|
+
original_cwd = Dir.pwd
|
31
|
+
|
32
|
+
loop do
|
33
|
+
exe = find_executable
|
34
|
+
if exe
|
35
|
+
contents = File.read(exe)
|
36
|
+
|
37
|
+
if contents =~ /(APP|ENGINE)_PATH/
|
38
|
+
exec RUBY, exe, *ARGV
|
39
|
+
break # non reachable, hack to be able to stub exec in the test suite
|
40
|
+
elsif exe.end_with?('bin/drails') && contents.include?('This file was generated by Bundler')
|
41
|
+
$stderr.puts(BUNDLER_WARNING)
|
42
|
+
Object.const_set(:APP_PATH, File.expand_path('config/application', Dir.pwd))
|
43
|
+
require File.expand_path('../boot', APP_PATH)
|
44
|
+
require 'drails/commands'
|
45
|
+
break
|
46
|
+
end
|
47
|
+
end
|
48
|
+
|
49
|
+
# If we exhaust the search there is no executable, this could be a
|
50
|
+
# call to generate a new application, so restore the original cwd.
|
51
|
+
Dir.chdir(original_cwd) and return if Pathname.new(Dir.pwd).root?
|
52
|
+
|
53
|
+
# Otherwise keep moving upwards in search of a executable.
|
54
|
+
Dir.chdir('..')
|
55
|
+
end
|
56
|
+
end
|
57
|
+
|
58
|
+
def self.find_executable
|
59
|
+
EXECUTABLES.find { |exe| File.exists?(exe) }
|
60
|
+
end
|
61
|
+
end
|
62
|
+
end
|
data/lib/drails/cli.rb
ADDED
@@ -0,0 +1,11 @@
|
|
1
|
+
require 'rbconfig'
|
2
|
+
require 'drails/app_drails_loader'
|
3
|
+
|
4
|
+
# If we are inside a Rails application this method performs an exec and thus
|
5
|
+
# the rest of this script is not run.
|
6
|
+
Drails::AppDrailsLoader.exec_app_drails
|
7
|
+
|
8
|
+
require 'rails/ruby_version_check'
|
9
|
+
Signal.trap('INT') { puts; exit(1) }
|
10
|
+
|
11
|
+
require 'drails/commands/application'
|
@@ -0,0 +1,43 @@
|
|
1
|
+
require 'rails-disco/version'
|
2
|
+
|
3
|
+
if ['--version', '-v'].include?(ARGV.first)
|
4
|
+
puts "Drails #{RailsDisco::VERSION::STRING}"
|
5
|
+
exit(0)
|
6
|
+
end
|
7
|
+
|
8
|
+
if ARGV.first != "new"
|
9
|
+
ARGV[0] = "--help"
|
10
|
+
else
|
11
|
+
ARGV.shift
|
12
|
+
unless ARGV.delete("--no-rc")
|
13
|
+
customrc = ARGV.index{ |x| x.include?("--rc=") }
|
14
|
+
railsrc = if customrc
|
15
|
+
File.expand_path(ARGV.delete_at(customrc).gsub(/--rc=/, ""))
|
16
|
+
else
|
17
|
+
File.join(File.expand_path("~"), '.railsrc')
|
18
|
+
end
|
19
|
+
if File.exist?(railsrc)
|
20
|
+
extra_args_string = File.read(railsrc)
|
21
|
+
extra_args = extra_args_string.split(/\n+/).map {|l| l.split}.flatten
|
22
|
+
puts "Using #{extra_args.join(" ")} from #{railsrc}"
|
23
|
+
ARGV.insert(1, *extra_args)
|
24
|
+
end
|
25
|
+
end
|
26
|
+
end
|
27
|
+
|
28
|
+
require 'rails/generators'
|
29
|
+
require 'generators/drails/app/app_generator'
|
30
|
+
|
31
|
+
module Drails
|
32
|
+
module Generators
|
33
|
+
class AppGenerator # :nodoc:
|
34
|
+
# We want to exit on failure to be kind to other libraries
|
35
|
+
# This is only when accessing via CLI
|
36
|
+
def self.exit_on_failure?
|
37
|
+
true
|
38
|
+
end
|
39
|
+
end
|
40
|
+
end
|
41
|
+
end
|
42
|
+
|
43
|
+
Drails::Generators::AppGenerator.start
|
@@ -0,0 +1,12 @@
|
|
1
|
+
require 'drails/generators'
|
2
|
+
|
3
|
+
if [nil, '-h', '--help'].include?(ARGV.first)
|
4
|
+
Rails::Generators.help 'destroy'
|
5
|
+
exit
|
6
|
+
end
|
7
|
+
|
8
|
+
name = ARGV.shift
|
9
|
+
name = name.sub(/^drails:/, '')
|
10
|
+
|
11
|
+
root = defined?(ENGINE_ROOT) ? ENGINE_ROOT : Rails.root
|
12
|
+
Rails::Generators.invoke "drails:#{name}", ARGV, behavior: :revoke, destination_root: root
|
@@ -0,0 +1,12 @@
|
|
1
|
+
require 'drails/generators'
|
2
|
+
|
3
|
+
if [nil, '-h', '--help'].include?(ARGV.first)
|
4
|
+
Rails::Generators.help 'generate'
|
5
|
+
exit
|
6
|
+
end
|
7
|
+
|
8
|
+
name = ARGV.shift
|
9
|
+
name = name.sub(/^drails:/, '')
|
10
|
+
|
11
|
+
root = defined?(ENGINE_ROOT) ? ENGINE_ROOT : Rails.root
|
12
|
+
Rails::Generators.invoke "drails:#{name}", ARGV, behavior: :invoke, destination_root: root
|
@@ -0,0 +1,9 @@
|
|
1
|
+
count = [ARGV.shift.to_i, 1].max
|
2
|
+
puts "Starting Projection Server (#{count} processes)"
|
3
|
+
puts '=> Ctrl-C to shutdown projections server'
|
4
|
+
Signal.trap('INT') { puts; exit(1) }
|
5
|
+
|
6
|
+
count.times do |i|
|
7
|
+
Process.spawn({'ROOT_DIR' => Dir.pwd, 'WORKER_COUNT' => count.to_s, 'WORKER_NUMBER' => i.to_s}, "ruby #{File.expand_path '../../server', __FILE__}/projection_servers.rb")
|
8
|
+
end
|
9
|
+
Process.waitall
|
@@ -0,0 +1,22 @@
|
|
1
|
+
count = [ARGV.shift.to_i, 1].max
|
2
|
+
puts "Starting domain, projection (*#{count}) and Rails server..."
|
3
|
+
puts '=> Ctrl-C to shutdown all servers'
|
4
|
+
env = {'ROOT_DIR' => Dir.pwd}
|
5
|
+
pids = []
|
6
|
+
pids << Process.spawn(env, "ruby #{File.expand_path '../../server', __FILE__}/domain_server.rb")
|
7
|
+
count.times do |i|
|
8
|
+
pids << Process.spawn(env.merge('WORKER_COUNT' => count.to_s, 'WORKER_NUMBER' => i.to_s), "ruby #{File.expand_path '../../server', __FILE__}/projection_servers.rb")
|
9
|
+
end
|
10
|
+
pids << Process.spawn(env, 'rails s')
|
11
|
+
trap(:INT) do
|
12
|
+
pids.each do |pid|
|
13
|
+
begin
|
14
|
+
Process.kill 9, pid
|
15
|
+
rescue Exception
|
16
|
+
# do nothing
|
17
|
+
end
|
18
|
+
end
|
19
|
+
puts
|
20
|
+
exit(1)
|
21
|
+
end
|
22
|
+
Process.waitall
|
@@ -0,0 +1,70 @@
|
|
1
|
+
ARGV << '--help' if ARGV.empty?
|
2
|
+
|
3
|
+
aliases = {
|
4
|
+
'ds' => 'domainserver',
|
5
|
+
's' => 'server',
|
6
|
+
'ps' => 'projectionserver',
|
7
|
+
'g' => 'generate',
|
8
|
+
'-h' => '--help',
|
9
|
+
'-v' => '--version',
|
10
|
+
}
|
11
|
+
|
12
|
+
help_message = <<-EOT
|
13
|
+
Usage: drails COMMAND [ARGS]
|
14
|
+
|
15
|
+
The most common drails commands are:
|
16
|
+
generate(g) Generate new Rails Disco code
|
17
|
+
domainserver(ds) Start the domain server
|
18
|
+
projectionserver(ps) Start the projection server
|
19
|
+
server(s) Start domain and projection server
|
20
|
+
new Creates a new Rails Disco application
|
21
|
+
"drails new my_app" creates a
|
22
|
+
new application called MyApp in "./my_app"
|
23
|
+
|
24
|
+
In addition to those, there are:
|
25
|
+
application Generate the Rails Disco application code
|
26
|
+
destroy(d) Undo code generated with "generate"
|
27
|
+
|
28
|
+
All commands can be run with -h (or --help) for more information.
|
29
|
+
EOT
|
30
|
+
|
31
|
+
|
32
|
+
command = ARGV.shift
|
33
|
+
command = aliases[command] || command
|
34
|
+
|
35
|
+
case command
|
36
|
+
when 'generate', 'destroy'
|
37
|
+
require 'drails/generators'
|
38
|
+
|
39
|
+
require APP_PATH
|
40
|
+
Rails.application.require_environment!
|
41
|
+
Rails.application.load_generators
|
42
|
+
|
43
|
+
require "drails/commands/#{command}"
|
44
|
+
|
45
|
+
when 'server', 'domainserver', 'projectionserver'
|
46
|
+
Dir.chdir(File.expand_path('../../', APP_PATH)) unless File.exists?(File.expand_path('config.ru'))
|
47
|
+
|
48
|
+
require "drails/commands/#{command}"
|
49
|
+
|
50
|
+
when 'new'
|
51
|
+
if %w(-h --help).include?(ARGV.first)
|
52
|
+
require 'drails/commands/application'
|
53
|
+
else
|
54
|
+
puts "Can't initialize a new Rails Disco application within the directory of another, please change to a non-Rails Disco directory first.\n"
|
55
|
+
puts "Type 'drails' for help."
|
56
|
+
exit(1)
|
57
|
+
end
|
58
|
+
|
59
|
+
when '--version'
|
60
|
+
require 'rails-disco/version'
|
61
|
+
puts "Drails #{RailsDisco::VERSION::STRING}"
|
62
|
+
|
63
|
+
when '--help'
|
64
|
+
puts help_message
|
65
|
+
|
66
|
+
else
|
67
|
+
puts "Error: Command '#{command}' not recognized"
|
68
|
+
puts help_message
|
69
|
+
exit(1)
|
70
|
+
end
|
@@ -0,0 +1,48 @@
|
|
1
|
+
require 'rails/generators'
|
2
|
+
|
3
|
+
module Rails
|
4
|
+
module Generators
|
5
|
+
|
6
|
+
def self.help(command = 'generate')
|
7
|
+
lookup!
|
8
|
+
|
9
|
+
namespaces = subclasses.map { |k| k.namespace }
|
10
|
+
namespaces.sort!
|
11
|
+
|
12
|
+
drails = []
|
13
|
+
namespaces.each do |namespace|
|
14
|
+
drails << namespace if namespace.split(':').first == 'drails'
|
15
|
+
end
|
16
|
+
|
17
|
+
puts <<-EOT
|
18
|
+
Usage: drails #{command} GENERATOR [args] [options]
|
19
|
+
|
20
|
+
General options:
|
21
|
+
-h, [--help] # Print generator's options and usage
|
22
|
+
-p, [--pretend] # Run but do not make any changes
|
23
|
+
-f, [--force] # Overwrite files that already exist
|
24
|
+
-s, [--skip] # Skip files that already exist
|
25
|
+
-q, [--quiet] # Suppress status output
|
26
|
+
|
27
|
+
Please choose a generator below.
|
28
|
+
|
29
|
+
EOT
|
30
|
+
|
31
|
+
drails.reject! { |n| hidden_namespaces.include?(n) }
|
32
|
+
drails.map! { |n| n.sub(/^drails:/, '') }
|
33
|
+
drails.delete('app')
|
34
|
+
drails.delete('plugin_new')
|
35
|
+
print_list('drails', drails)
|
36
|
+
end
|
37
|
+
|
38
|
+
end
|
39
|
+
end
|
40
|
+
|
41
|
+
Rails::Generators.options.deep_merge! drails: {
|
42
|
+
command: :command,
|
43
|
+
command_processor: :command_processor,
|
44
|
+
migration: :migration,
|
45
|
+
model: :model,
|
46
|
+
projection: :projection,
|
47
|
+
scaffold_controller: :scaffold_controller,
|
48
|
+
}
|
@@ -1,9 +1,12 @@
|
|
1
1
|
#!/usr/bin/env ruby.exe
|
2
|
+
ROOT_DIR ||= ENV['ROOT_DIR']
|
3
|
+
ENV['BUNDLE_GEMFILE'] ||= File.expand_path('Gemfile', ROOT_DIR)
|
4
|
+
require 'bundler/setup' if File.exists?(ENV['BUNDLE_GEMFILE'])
|
5
|
+
|
2
6
|
require 'active_event'
|
3
7
|
require 'active_domain'
|
4
8
|
require 'active_record'
|
5
9
|
|
6
|
-
ROOT_DIR ||= ENV['ROOT_DIR']
|
7
10
|
LOGGER = ActiveEvent::Support::MultiLogger.new 'Domain Server'
|
8
11
|
|
9
12
|
ActiveEvent::Autoload.app_path = ROOT_DIR
|
@@ -1,9 +1,12 @@
|
|
1
1
|
#!/usr/bin/env ruby.exe
|
2
|
+
ROOT_DIR ||= ENV['ROOT_DIR']
|
3
|
+
ENV['BUNDLE_GEMFILE'] ||= File.expand_path('Gemfile', ROOT_DIR)
|
4
|
+
require 'bundler/setup' if File.exists?(ENV['BUNDLE_GEMFILE'])
|
5
|
+
|
2
6
|
require 'active_event'
|
3
7
|
require 'active_projection'
|
4
8
|
require 'active_record'
|
5
9
|
|
6
|
-
ROOT_DIR ||= ENV['ROOT_DIR']
|
7
10
|
WORKER_COUNT = [ENV['WORKER_COUNT'].to_i, 1].max
|
8
11
|
WORKER_NUMBER = ENV['WORKER_NUMBER'].to_i
|
9
12
|
LOGGER = ActiveEvent::Support::MultiLogger.new "Projection Server#{WORKER_COUNT > 1 ? " Nr. #{WORKER_NUMBER}" : ""}"
|
@@ -20,4 +23,4 @@ RELOADER = ActiveSupport::FileUpdateChecker.new([], watchable_dirs) do
|
|
20
23
|
ActiveProjection::Autoload.reload
|
21
24
|
end
|
22
25
|
ActiveProjection::Server.base_path = ROOT_DIR
|
23
|
-
ActiveProjection::Server.run
|
26
|
+
ActiveProjection::Server.run
|
@@ -1,13 +1,13 @@
|
|
1
|
-
Description:
|
2
|
-
Add drails to your project.
|
3
|
-
|
4
|
-
Example:
|
5
|
-
rails generate drails:app
|
6
|
-
|
7
|
-
This will create:
|
8
|
-
app/controllers/event_source_controller.rb
|
9
|
-
a route for this controller
|
10
|
-
config/build_validations_registry.rb
|
11
|
-
config/initializers/create_domain.rb
|
12
|
-
config/disco.yml
|
1
|
+
Description:
|
2
|
+
Add drails to your project.
|
3
|
+
|
4
|
+
Example:
|
5
|
+
rails generate drails:app
|
6
|
+
|
7
|
+
This will create:
|
8
|
+
app/controllers/event_source_controller.rb
|
9
|
+
a route for this controller
|
10
|
+
config/build_validations_registry.rb
|
11
|
+
config/initializers/create_domain.rb
|
12
|
+
config/disco.yml
|
13
13
|
adds rails-disco to your gemfile
|
@@ -1,52 +1,134 @@
|
|
1
|
-
|
2
|
-
|
3
|
-
|
4
|
-
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
|
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
|
-
end
|
1
|
+
require 'rails/generators/rails/app/app_generator'
|
2
|
+
require 'yaml'
|
3
|
+
|
4
|
+
module Drails
|
5
|
+
class AppBuilder < Rails::AppBuilder
|
6
|
+
|
7
|
+
def gemfile
|
8
|
+
super
|
9
|
+
append_file 'Gemfile', "\n# Rails Disco support
|
10
|
+
gem 'rails-disco', '~> #{RailsDisco::VERSION::STRING}'\n
|
11
|
+
# Required Multithreaded Webserver
|
12
|
+
gem 'puma'\n" unless behavior == :revoke
|
13
|
+
end
|
14
|
+
|
15
|
+
def app
|
16
|
+
super
|
17
|
+
copy_file 'app/controllers/event_source_controller.rb'
|
18
|
+
keep_file 'app/commands'
|
19
|
+
keep_file 'app/events'
|
20
|
+
keep_file 'app/projections'
|
21
|
+
keep_file 'app/validations'
|
22
|
+
|
23
|
+
keep_file 'domain/command_processors/domain'
|
24
|
+
keep_file 'domain/models/domain'
|
25
|
+
keep_file 'domain/projections/domain'
|
26
|
+
keep_file 'domain/validations/domain'
|
27
|
+
end
|
28
|
+
|
29
|
+
def bin
|
30
|
+
super
|
31
|
+
copy_file 'bin/drails'
|
32
|
+
chmod 'bin/drails', 0755, verbose: false
|
33
|
+
end
|
34
|
+
|
35
|
+
def config
|
36
|
+
super
|
37
|
+
inside 'config/initializers' do
|
38
|
+
template 'create_domain.rb'
|
39
|
+
copy_file 'build_validations_registry.rb'
|
40
|
+
end
|
41
|
+
end
|
42
|
+
|
43
|
+
def database_yml
|
44
|
+
super
|
45
|
+
template 'config/disco.yml'
|
46
|
+
end
|
47
|
+
|
48
|
+
def db
|
49
|
+
super
|
50
|
+
append_file 'db/seeds.rb', File.binread(File.expand_path('../templates/db/seeds.rb', __FILE__)) unless behavior == :revoke
|
51
|
+
end
|
52
|
+
end
|
53
|
+
|
54
|
+
module Generators
|
55
|
+
class AppGenerator < Rails::Generators::AppGenerator
|
56
|
+
remove_class_option :version
|
57
|
+
class_option :version, type: :boolean, aliases: '-v', group: :drails,
|
58
|
+
desc: 'Show Rails Disco version number and quit'
|
59
|
+
|
60
|
+
remove_class_option :help
|
61
|
+
class_option :help, type: :boolean, aliases: '-h', group: :drails,
|
62
|
+
desc: 'Show this help message and quit'
|
63
|
+
|
64
|
+
# this does not seem to work !
|
65
|
+
remove_command :apply_rails_template, :run_bundle
|
66
|
+
|
67
|
+
def source_paths
|
68
|
+
[File.join(Gem::Specification.find_by_name('railties').gem_dir, 'lib/rails/generators/rails/app/templates'), File.expand_path('../templates', __FILE__)]
|
69
|
+
end
|
70
|
+
|
71
|
+
def add_event_source_route
|
72
|
+
return if behavior == :revoke
|
73
|
+
route "get 'event_stream' => 'event_source#stream'"
|
74
|
+
end
|
75
|
+
|
76
|
+
def enable_rake_tasks
|
77
|
+
return if behavior == :revoke
|
78
|
+
content = "
|
79
|
+
require 'rails-disco/tasks'"
|
80
|
+
inject_into_file File.join('config/application.rb'), content, after: /require 'rails\/all'/
|
81
|
+
rescue Exception
|
82
|
+
puts "Seems like you invoked it from an engine, so put\n
|
83
|
+
require 'rails-disco/tasks'\n
|
84
|
+
in your application.rb from the main application to have the rails disco rake tasks available"
|
85
|
+
end
|
86
|
+
|
87
|
+
def enable_concurrency
|
88
|
+
return if behavior == :revoke
|
89
|
+
application 'config.preload_frameworks = true'
|
90
|
+
application 'config.allow_concurrency = true'
|
91
|
+
rescue Exception
|
92
|
+
puts "Seems like you invoked it from an engine, so remember to put\n
|
93
|
+
config.preload_frameworks = true
|
94
|
+
config.allow_concurrency = true\n
|
95
|
+
in your application.rb from the main application"
|
96
|
+
end
|
97
|
+
|
98
|
+
public_task :apply_rails_template, :run_bundle
|
99
|
+
|
100
|
+
private
|
101
|
+
|
102
|
+
def get_builder_class
|
103
|
+
defined?(::AppBuilder) ? ::AppBuilder : Drails::AppBuilder
|
104
|
+
end
|
105
|
+
|
106
|
+
def domain_database(env, indent_level)
|
107
|
+
config = YAML.load(File.read('config/database.yml'))[env.to_s]
|
108
|
+
config['database'].sub!(/.*#{env}/, '\0_domain')
|
109
|
+
indent( ({'domain_database' => config}.to_yaml(indentation: 2))[4..-1], indent_level)
|
110
|
+
end
|
111
|
+
|
112
|
+
# copied namespace support from NamedBase
|
113
|
+
def module_namespacing(&block)
|
114
|
+
content = capture(&block)
|
115
|
+
content = wrap_with_namespace(content) if namespace
|
116
|
+
concat(content)
|
117
|
+
end
|
118
|
+
|
119
|
+
def indent(content, multiplier = 2)
|
120
|
+
spaces = ' ' * multiplier
|
121
|
+
content.each_line.map {|line| line.blank? ? line : "#{spaces}#{line}" }.join
|
122
|
+
end
|
123
|
+
|
124
|
+
def wrap_with_namespace(content)
|
125
|
+
content = indent(content).chomp
|
126
|
+
"module #{namespace.name}\n#{content}\nend\n"
|
127
|
+
end
|
128
|
+
|
129
|
+
def namespace
|
130
|
+
Rails::Generators.namespace
|
131
|
+
end
|
132
|
+
end
|
133
|
+
end
|
134
|
+
end
|
@@ -1,16 +1,16 @@
|
|
1
|
-
class EventSourceController < ApplicationController
|
2
|
-
include ActionController::Live
|
3
|
-
include ActiveEvent::EventSourceServer
|
4
|
-
|
5
|
-
def stream
|
6
|
-
event_connection.start
|
7
|
-
response.headers['Content-Type'] = 'text/event-stream'
|
8
|
-
sse = ActiveEvent::SSE.new(response.stream)
|
9
|
-
subscribe_to event_queue do |delivery_info, properties, body|
|
10
|
-
sse.write({:id => body}, :event => 'refresh')
|
11
|
-
end
|
12
|
-
rescue IOError
|
13
|
-
ensure
|
14
|
-
sse.close
|
15
|
-
end
|
1
|
+
class EventSourceController < ApplicationController
|
2
|
+
include ActionController::Live
|
3
|
+
include ActiveEvent::EventSourceServer
|
4
|
+
|
5
|
+
def stream
|
6
|
+
event_connection.start
|
7
|
+
response.headers['Content-Type'] = 'text/event-stream'
|
8
|
+
sse = ActiveEvent::SSE.new(response.stream)
|
9
|
+
subscribe_to event_queue do |delivery_info, properties, body|
|
10
|
+
sse.write({:id => body}, :event => 'refresh')
|
11
|
+
end
|
12
|
+
rescue IOError
|
13
|
+
ensure
|
14
|
+
sse.close
|
15
|
+
end
|
16
16
|
end
|