drailties 0.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +7 -0
- data/MIT-LICENSE +20 -0
- data/Rakefile +1 -0
- data/bin/drails +46 -0
- data/lib/drails/application.rb +8 -0
- data/lib/drails/domainserver.rb +5 -0
- data/lib/drails/generate.rb +21 -0
- data/lib/drails/projectionserver.rb +8 -0
- data/lib/drails/rake.rb +17 -0
- data/lib/drails/server/domain_server.rb +12 -0
- data/lib/drails/server/projection_servers.rb +15 -0
- data/lib/drails/server.rb +7 -0
- data/lib/drailties.rb +3 -0
- data/lib/generators/drails/app/USAGE +10 -0
- data/lib/generators/drails/app/app_generator.rb +24 -0
- data/lib/generators/drails/app/templates/build_validations_registry.rb +5 -0
- data/lib/generators/drails/app/templates/create_domain.rb +5 -0
- data/lib/generators/drails/app/templates/disco.yml +54 -0
- data/lib/generators/drails/command/USAGE +11 -0
- data/lib/generators/drails/command/command_generator.rb +44 -0
- data/lib/generators/drails/command/templates/command.rb +5 -0
- data/lib/generators/drails/command/templates/event.rb +9 -0
- data/lib/generators/drails/command_processor/USAGE +1 -0
- data/lib/generators/drails/command_processor/command_processor_generator.rb +23 -0
- data/lib/generators/drails/command_processor/templates/command_processor.rb +5 -0
- data/lib/generators/drails/controller/USAGE +1 -0
- data/lib/generators/drails/controller/controller_generator.rb +14 -0
- data/lib/generators/drails/controller/templates/controller.rb +58 -0
- data/lib/generators/drails/migration/USAGE +1 -0
- data/lib/generators/drails/migration/migration_generator.rb +27 -0
- data/lib/generators/drails/migration/templates/create_table_migration.rb +19 -0
- data/lib/generators/drails/projection/USAGE +15 -0
- data/lib/generators/drails/projection/projection_generator.rb +43 -0
- data/lib/generators/drails/projection/templates/domain_model.rb +5 -0
- data/lib/generators/drails/projection/templates/domain_projection.rb +5 -0
- data/lib/generators/drails/projection/templates/model.rb +5 -0
- data/lib/generators/drails/projection/templates/projection.rb +5 -0
- data/lib/generators/drails/scaffold/USAGE +29 -0
- data/lib/generators/drails/scaffold/scaffold_generator.rb +63 -0
- data/lib/rails-disco/version.rb +10 -0
- data/lib/tasks/db.rake +108 -0
- data/lib/tasks/split.rake +94 -0
- metadata +141 -0
checksums.yaml
ADDED
@@ -0,0 +1,7 @@
|
|
1
|
+
---
|
2
|
+
SHA1:
|
3
|
+
metadata.gz: 65530ec8ee4b4e0bb596565ebc246edd1cf6f098
|
4
|
+
data.tar.gz: 88187f39270abd6e9b3fa911f5e737ee5cc1196e
|
5
|
+
SHA512:
|
6
|
+
metadata.gz: 6069343b46957d55dfaf50b7ebddae0ff364c2a994ad9af6e2a54315ad6ca10e333bbe6047fd2669c66e813738fc8eeb9a668c080935f6ac6bc88147591f9f70
|
7
|
+
data.tar.gz: 88923b01ba585b115ec286b7def5c8c39994765b23bc73745fe770dd2564671507ee95a69a47f61f82a6f87cf730bab67d9daa0fb9ad9b439cb25068dc9db2c2
|
data/MIT-LICENSE
ADDED
@@ -0,0 +1,20 @@
|
|
1
|
+
Copyright (c) 2013 Robert Kranz
|
2
|
+
|
3
|
+
Permission is hereby granted, free of charge, to any person obtaining
|
4
|
+
a copy of this software and associated documentation files (the
|
5
|
+
"Software"), to deal in the Software without restriction, including
|
6
|
+
without limitation the rights to use, copy, modify, merge, publish,
|
7
|
+
distribute, sublicense, and/or sell copies of the Software, and to
|
8
|
+
permit persons to whom the Software is furnished to do so, subject to
|
9
|
+
the following conditions:
|
10
|
+
|
11
|
+
The above copyright notice and this permission notice shall be
|
12
|
+
included in all copies or substantial portions of the Software.
|
13
|
+
|
14
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
15
|
+
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
16
|
+
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
|
17
|
+
NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
|
18
|
+
LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
|
19
|
+
OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
|
20
|
+
WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
data/Rakefile
ADDED
@@ -0,0 +1 @@
|
|
1
|
+
Dir.glob('lib/tasks/*.rake').each {|r| import r}
|
data/bin/drails
ADDED
@@ -0,0 +1,46 @@
|
|
1
|
+
#!/usr/bin/env ruby
|
2
|
+
unless Gem::Specification.find_by_name('drailties').gem_dir == File.expand_path("../..", __FILE__)
|
3
|
+
$:.push File.expand_path("../../lib", __FILE__)
|
4
|
+
$:.delete "#{Gem::Specification.find_by_name('drailties').gem_dir}/lib"
|
5
|
+
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
|
+
rake start a rake task
|
29
|
+
EOT
|
30
|
+
|
31
|
+
command = ARGV.shift
|
32
|
+
command = aliases[command] || command
|
33
|
+
|
34
|
+
case command
|
35
|
+
when 'new'
|
36
|
+
require 'drails/application'
|
37
|
+
when 'generate','rake','server', 'domainserver', 'projectionserver'
|
38
|
+
ROOT_DIR ||= Dir.pwd
|
39
|
+
require "drails/#{command}"
|
40
|
+
when '-h', '--help'
|
41
|
+
puts help_message
|
42
|
+
else
|
43
|
+
puts "Error: Command '#{command}' not recognized"
|
44
|
+
puts help_message
|
45
|
+
exit(1)
|
46
|
+
end
|
@@ -0,0 +1,21 @@
|
|
1
|
+
require 'rails/generators'
|
2
|
+
|
3
|
+
if [nil, "-h", "--help"].include?(ARGV.first)
|
4
|
+
puts "Usage: drails generate GENERATOR [args] [options]"
|
5
|
+
puts
|
6
|
+
puts "General options:"
|
7
|
+
puts " -h, [--help] # Print generator's options and usage"
|
8
|
+
puts " -p, [--pretend] # Run but do not make any changes"
|
9
|
+
puts " -f, [--force] # Overwrite files that already exist"
|
10
|
+
puts " -s, [--skip] # Skip files that already exist"
|
11
|
+
puts " -q, [--quiet] # Suppress status output"
|
12
|
+
puts
|
13
|
+
puts "Please choose a generator below."
|
14
|
+
puts
|
15
|
+
puts "Scaffold"
|
16
|
+
puts "Command"
|
17
|
+
puts "Projection"
|
18
|
+
exit(1)
|
19
|
+
end
|
20
|
+
|
21
|
+
Rails::Generators.invoke "drails:#{ARGV.shift}", ARGV, behavior: :invoke, destination_root: ROOT_DIR
|
@@ -0,0 +1,8 @@
|
|
1
|
+
puts 'Starting Projection Server'
|
2
|
+
puts '=> Ctrl-C to shutdown projections server'
|
3
|
+
trap(:INT) { exit }
|
4
|
+
count = [ARGV.shift.to_i, 1].max
|
5
|
+
count.times do |i|
|
6
|
+
Process.spawn({"ROOT_DIR" => ROOT_DIR, "WORKER_COUNT" => count.to_s, "WORKER_NUMBER" => i.to_s}, "ruby #{File.expand_path '../server', __FILE__}/projection_servers.rb")
|
7
|
+
end
|
8
|
+
Process.waitall
|
data/lib/drails/rake.rb
ADDED
@@ -0,0 +1,17 @@
|
|
1
|
+
# Run rake tasks from my_gem once it's installed.
|
2
|
+
#
|
3
|
+
# Example:
|
4
|
+
# my_gem rake some-task
|
5
|
+
# my_gem rake some-task[args]
|
6
|
+
#
|
7
|
+
# Author:: N David Brown
|
8
|
+
gem_dir = File.expand_path("..", File.dirname(__FILE__))
|
9
|
+
$LOAD_PATH.unshift gem_dir # Look in gem directory for resources first.
|
10
|
+
require 'rake'
|
11
|
+
require 'pp'
|
12
|
+
pwd = Dir.pwd
|
13
|
+
Dir.chdir(gem_dir) # We'll load rakefile from the gem's dir.
|
14
|
+
Rake.application.init
|
15
|
+
Rake.application.load_rakefile
|
16
|
+
Dir.chdir(pwd) # Revert to original pwd for any path args passed to task.
|
17
|
+
Rake.application.invoke_task(ARGV.first)
|
@@ -0,0 +1,12 @@
|
|
1
|
+
#!/usr/bin/env ruby.exe
|
2
|
+
require 'active_event'
|
3
|
+
require 'active_domain'
|
4
|
+
require 'active_record'
|
5
|
+
|
6
|
+
ROOT_DIR ||= ENV['ROOT_DIR']
|
7
|
+
|
8
|
+
ActiveEvent::Autoload.app_path = File.join ROOT_DIR, 'app'
|
9
|
+
ActiveDomain::Autoload.app_path = File.join ROOT_DIR, 'domain'
|
10
|
+
|
11
|
+
ActiveDomain::Server.base_path = ROOT_DIR
|
12
|
+
ActiveDomain::Server.run
|
@@ -0,0 +1,15 @@
|
|
1
|
+
#!/usr/bin/env ruby.exe
|
2
|
+
require 'active_event'
|
3
|
+
require 'active_projection'
|
4
|
+
require 'active_record'
|
5
|
+
|
6
|
+
ROOT_DIR ||= ENV['ROOT_DIR']
|
7
|
+
WORKER_COUNT = [ENV['WORKER_COUNT'].to_i, 1].max
|
8
|
+
WORKER_NUMBER = ENV['WORKER_NUMBER'].to_i
|
9
|
+
|
10
|
+
ActiveEvent::Autoload.app_path = File.join ROOT_DIR, 'app'
|
11
|
+
ActiveProjection::Autoload.app_path = File.join(ROOT_DIR, 'app')
|
12
|
+
ActiveProjection::Autoload.worker_config = {path: File.join(ROOT_DIR, 'app', 'projections'), count: WORKER_COUNT, number: WORKER_NUMBER}
|
13
|
+
|
14
|
+
ActiveProjection::Server.base_path = ROOT_DIR
|
15
|
+
ActiveProjection::Server.run
|
@@ -0,0 +1,7 @@
|
|
1
|
+
puts 'Domain and Projection Server started'
|
2
|
+
puts '=> Ctrl-C to shutdown both server'
|
3
|
+
trap(:INT) { exit }
|
4
|
+
Process.spawn({"ROOT_DIR" => ROOT_DIR}, "ruby #{File.expand_path '../server', __FILE__}/domain_server.rb")
|
5
|
+
Process.spawn({"ROOT_DIR" => ROOT_DIR}, "ruby #{File.expand_path '../server', __FILE__}/projection_servers.rb")
|
6
|
+
Process.spawn({"ROOT_DIR" => ROOT_DIR}, "rails s")
|
7
|
+
Process.waitall
|
data/lib/drailties.rb
ADDED
@@ -0,0 +1,24 @@
|
|
1
|
+
module Drails
|
2
|
+
module Generators
|
3
|
+
class AppGenerator < Rails::Generators::NamedBase
|
4
|
+
source_root File.expand_path('../templates', __FILE__)
|
5
|
+
argument :name, type: :string, default: '', banner: "[name]"
|
6
|
+
|
7
|
+
def copy_config
|
8
|
+
copy_file 'disco.yml', File.join('config', 'disco.yml')
|
9
|
+
end
|
10
|
+
|
11
|
+
def create_domain_initializer
|
12
|
+
template 'create_domain.rb', File.join('config', 'initializers', 'create_domain.rb')
|
13
|
+
end
|
14
|
+
|
15
|
+
def copy_validation_registry_initializer
|
16
|
+
copy_file 'build_validations_registry.rb', File.join('config', 'initializers', 'build_validations_registry.rb')
|
17
|
+
end
|
18
|
+
|
19
|
+
def add_drails_to_gemfile
|
20
|
+
gem "rails-disco"
|
21
|
+
end
|
22
|
+
end
|
23
|
+
end
|
24
|
+
end
|
@@ -0,0 +1,54 @@
|
|
1
|
+
development:
|
2
|
+
domain_database:
|
3
|
+
adapter: sqlite3
|
4
|
+
database: db/domain_dev.sqlite3
|
5
|
+
pool: 5
|
6
|
+
timeout: 5000
|
7
|
+
projection_database:
|
8
|
+
adapter: sqlite3
|
9
|
+
database: db/projection_dev.sqlite3
|
10
|
+
pool: 5
|
11
|
+
timeout: 5000
|
12
|
+
drb_server:
|
13
|
+
scheme: druby
|
14
|
+
host: 127.0.0.1
|
15
|
+
port: 8787
|
16
|
+
event_connection:
|
17
|
+
scheme: amqp
|
18
|
+
host: 127.0.0.1
|
19
|
+
port: 5672
|
20
|
+
event_exchange: events
|
21
|
+
|
22
|
+
test:
|
23
|
+
domain_database:
|
24
|
+
adapter: sqlite3
|
25
|
+
database: db/domain_test.sqlite3
|
26
|
+
pool: 5
|
27
|
+
timeout: 5000
|
28
|
+
projection_database:
|
29
|
+
adapter: sqlite3
|
30
|
+
database: db/projection_test.sqlite3
|
31
|
+
pool: 5
|
32
|
+
timeout: 5000
|
33
|
+
|
34
|
+
production:
|
35
|
+
domain_database:
|
36
|
+
adapter: sqlite3
|
37
|
+
database: db/domain.sqlite3
|
38
|
+
pool: 5
|
39
|
+
timeout: 5000
|
40
|
+
projection_database:
|
41
|
+
adapter: sqlite3
|
42
|
+
database: db/projection.sqlite3
|
43
|
+
pool: 5
|
44
|
+
timeout: 5000
|
45
|
+
drb_server:
|
46
|
+
protocol: druby
|
47
|
+
host: 127.0.0.1
|
48
|
+
port: 8787
|
49
|
+
event_connection:
|
50
|
+
scheme: amqp
|
51
|
+
userinfo: amqp:password
|
52
|
+
host: 127.0.0.1
|
53
|
+
port: 9797
|
54
|
+
event_exchange: events
|
@@ -0,0 +1,11 @@
|
|
1
|
+
Description:
|
2
|
+
Generates a Command, an Event and adds it to the CommandProcessor or creates one.
|
3
|
+
|
4
|
+
Example:
|
5
|
+
rails generate drails:command ThingCreate
|
6
|
+
|
7
|
+
This will create:
|
8
|
+
app/commands/thing_create_command.rb
|
9
|
+
app/events/thing_create_event.rb
|
10
|
+
domain/command_processors/thing_processor.rb if it not exists
|
11
|
+
Adds a method to this or the existing processor
|
@@ -0,0 +1,44 @@
|
|
1
|
+
module Drails
|
2
|
+
module Generators
|
3
|
+
class CommandGenerator < Rails::Generators::NamedBase
|
4
|
+
source_root File.expand_path('../templates', __FILE__)
|
5
|
+
argument :attributes, type: :array, default: [], banner: "attribute attribute"
|
6
|
+
|
7
|
+
def create_command_file
|
8
|
+
template 'command.rb', File.join('app/commands', class_path, "#{file_name}_command.rb")
|
9
|
+
end
|
10
|
+
|
11
|
+
def create_related_event_file
|
12
|
+
template 'event.rb', File.join('app/events', class_path, "#{file_name}_event.rb")
|
13
|
+
end
|
14
|
+
|
15
|
+
def create_command_processor
|
16
|
+
generate 'drails:command_processor', processor_file_name, '-s'
|
17
|
+
end
|
18
|
+
|
19
|
+
def add_to_command_processor
|
20
|
+
content = "
|
21
|
+
|
22
|
+
process #{class_name}Command do |command|
|
23
|
+
command.is_valid_do { event #{class_name}Event.new command.to_hash }
|
24
|
+
end"
|
25
|
+
inject_into_file File.join('domain/command_processors', domain_ns, "#{processor_file_name}_processor.rb"), content, after: /(\s)*include(\s)*ActiveDomain::CommandProcessor/
|
26
|
+
end
|
27
|
+
|
28
|
+
private
|
29
|
+
def processor_file_name
|
30
|
+
file_name.split('_').first
|
31
|
+
end
|
32
|
+
|
33
|
+
def domain_ns
|
34
|
+
namespace_path = Array.new class_path
|
35
|
+
if namespace_path.empty?
|
36
|
+
namespace_path[0] = 'domain'
|
37
|
+
else
|
38
|
+
namespace_path[-1] += '_domain'
|
39
|
+
end
|
40
|
+
namespace_path
|
41
|
+
end
|
42
|
+
end
|
43
|
+
end
|
44
|
+
end
|
@@ -0,0 +1 @@
|
|
1
|
+
Not intended for extern use!
|
@@ -0,0 +1,23 @@
|
|
1
|
+
module Drails
|
2
|
+
module Generators
|
3
|
+
class CommandProcessorGenerator < Rails::Generators::NamedBase
|
4
|
+
source_root File.expand_path('../templates', __FILE__)
|
5
|
+
hide!
|
6
|
+
|
7
|
+
def create_command_processor_file
|
8
|
+
template 'command_processor.rb', File.join('domain/command_processors', domain_ns, "#{file_name}_processor.rb")
|
9
|
+
end
|
10
|
+
|
11
|
+
private
|
12
|
+
def domain_ns
|
13
|
+
namespace_path = Array.new class_path
|
14
|
+
if namespace_path.empty?
|
15
|
+
namespace_path[0] = 'domain'
|
16
|
+
else
|
17
|
+
namespace_path[-1] += '_domain'
|
18
|
+
end
|
19
|
+
namespace_path
|
20
|
+
end
|
21
|
+
end
|
22
|
+
end
|
23
|
+
end
|
@@ -0,0 +1 @@
|
|
1
|
+
Not intended for extern use!
|
@@ -0,0 +1,14 @@
|
|
1
|
+
require 'rails/generators/rails/scaffold_controller/scaffold_controller_generator'
|
2
|
+
module Drails
|
3
|
+
module Generators
|
4
|
+
class ControllerGenerator < Rails::Generators::ScaffoldControllerGenerator
|
5
|
+
source_root File.expand_path('../templates', __FILE__)
|
6
|
+
hide!
|
7
|
+
|
8
|
+
private
|
9
|
+
def params_string
|
10
|
+
attributes.map{|x| "#{x.name}: params[:#{singular_table_name}][:#{x.name}]" }.join(', ')
|
11
|
+
end
|
12
|
+
end
|
13
|
+
end
|
14
|
+
end
|
@@ -0,0 +1,58 @@
|
|
1
|
+
<% module_namespacing do -%>
|
2
|
+
class <%= controller_class_name %>Controller < ApplicationController
|
3
|
+
before_action :set_<%= singular_table_name %>, only: [:show, :edit]
|
4
|
+
|
5
|
+
def index
|
6
|
+
@<%= plural_table_name %> = <%= orm_class.all(class_name) %>
|
7
|
+
end
|
8
|
+
|
9
|
+
def show
|
10
|
+
end
|
11
|
+
|
12
|
+
def new
|
13
|
+
@<%= singular_table_name %> = <%= orm_class.build(class_name) %>
|
14
|
+
end
|
15
|
+
|
16
|
+
def edit
|
17
|
+
end
|
18
|
+
|
19
|
+
def create
|
20
|
+
<%= singular_table_name %> = <%= "#{human_name}"%>CreateCommand.new({<%= params_string %>})
|
21
|
+
valid = <%= singular_table_name %>.valid?
|
22
|
+
if valid and Domain.run_command <%= singular_table_name %>
|
23
|
+
flash[:notice] = <%= "'#{human_name} was successfully created.'" %>
|
24
|
+
redirect_to action: :index
|
25
|
+
else
|
26
|
+
flash[:error] = <%= "'#{human_name} couldn\\'t be created.'" %>
|
27
|
+
redirect_to action: :new
|
28
|
+
end
|
29
|
+
end
|
30
|
+
|
31
|
+
def update
|
32
|
+
<%= singular_table_name %> = <%= "#{human_name}"%>UpdateCommand.new({id: params[:id]<%=',' unless params_string == ''%> <%= params_string %>})
|
33
|
+
valid = <%= singular_table_name %>.valid?
|
34
|
+
if valid and Domain.run_command <%= singular_table_name %>
|
35
|
+
flash[:notice] = <%= "'#{human_name} was successfully updated.'" %>
|
36
|
+
redirect_to action: :show, id: params[:id]
|
37
|
+
else
|
38
|
+
flash[:error] = <%= "'#{human_name} couldn\\'t be updated.'" %>
|
39
|
+
redirect_to action: :edit, id: params[:id]
|
40
|
+
end
|
41
|
+
end
|
42
|
+
|
43
|
+
def destroy
|
44
|
+
<%= singular_table_name %> = <%= "#{human_name}"%>DeleteCommand.new({id: params[:id]})
|
45
|
+
if Domain.run_command <%= singular_table_name %>
|
46
|
+
flash[:notice] = <%= "'#{human_name} was successfully deleted.'" %>
|
47
|
+
else
|
48
|
+
flash[:error] = <%= "'#{human_name} couldn\\'t be deleted.'" %>
|
49
|
+
end
|
50
|
+
redirect_to action: :index
|
51
|
+
end
|
52
|
+
|
53
|
+
private
|
54
|
+
def set_<%= singular_table_name %>
|
55
|
+
@<%= singular_table_name %> = <%= orm_class.find(class_name, "params[:id]") %>
|
56
|
+
end
|
57
|
+
end
|
58
|
+
<% end -%>
|
@@ -0,0 +1 @@
|
|
1
|
+
Not intended for extern use!
|
@@ -0,0 +1,27 @@
|
|
1
|
+
require 'rails/generators/active_record/migration/migration_generator'
|
2
|
+
module Drails
|
3
|
+
module Generators
|
4
|
+
class MigrationGenerator < ActiveRecord::Generators::MigrationGenerator
|
5
|
+
source_root File.expand_path('../templates', __FILE__)
|
6
|
+
hide!
|
7
|
+
remove_argument :attibutes
|
8
|
+
argument :use_domain, type: :string, default: 'false'
|
9
|
+
argument :attributes, type: :array, default: [], banner: "field[:type] field[:type]"
|
10
|
+
|
11
|
+
def create_migration_file
|
12
|
+
set_local_assigns!
|
13
|
+
validate_file_name!
|
14
|
+
migration_template @migration_template, "db/#{migration_dir}/#{file_name}.rb"
|
15
|
+
end
|
16
|
+
|
17
|
+
private
|
18
|
+
def migration_dir
|
19
|
+
if (/^(true|t|yes|y|1)$/i).match(use_domain)
|
20
|
+
'migrate_domain'
|
21
|
+
else
|
22
|
+
'migrate'
|
23
|
+
end
|
24
|
+
end
|
25
|
+
end
|
26
|
+
end
|
27
|
+
end
|
@@ -0,0 +1,19 @@
|
|
1
|
+
class <%= migration_class_name %> < ActiveRecord::Migration
|
2
|
+
def change
|
3
|
+
create_table :<%= table_name %> do |t|
|
4
|
+
<% attributes.each do |attribute| -%>
|
5
|
+
<% if attribute.password_digest? -%>
|
6
|
+
t.string :password_digest<%= attribute.inject_options %>
|
7
|
+
<% else -%>
|
8
|
+
t.<%= attribute.type %> :<%= attribute.name %><%= attribute.inject_options %>
|
9
|
+
<% end -%>
|
10
|
+
<% end -%>
|
11
|
+
<% if options[:timestamps] %>
|
12
|
+
t.timestamps
|
13
|
+
<% end -%>
|
14
|
+
end
|
15
|
+
<% attributes_with_index.each do |attribute| -%>
|
16
|
+
add_index :<%= table_name %>, :<%= attribute.index_name %><%= attribute.inject_index_options %>
|
17
|
+
<% end -%>
|
18
|
+
end
|
19
|
+
end
|
@@ -0,0 +1,15 @@
|
|
1
|
+
Description:
|
2
|
+
Generates a Projection and a Model.
|
3
|
+
|
4
|
+
Example:
|
5
|
+
rails generate drails:projection Thing [use_domain]
|
6
|
+
|
7
|
+
This will create if use_domain is false(standard):
|
8
|
+
app/projection/thing_projection.rb
|
9
|
+
app/models/thing.rb
|
10
|
+
db/migrate/create_thing.rb
|
11
|
+
|
12
|
+
This will create if use_domain is true:
|
13
|
+
domain/projection/thing_projection.rb
|
14
|
+
domain/models/thing.rb
|
15
|
+
db/migrate_domain/create_thing.rb
|
@@ -0,0 +1,43 @@
|
|
1
|
+
module Drails
|
2
|
+
module Generators
|
3
|
+
class ProjectionGenerator < Rails::Generators::NamedBase
|
4
|
+
source_root File.expand_path('../templates', __FILE__)
|
5
|
+
argument :use_domain, type: :string, default: 'false'
|
6
|
+
argument :attributes, type: :array, default: [], banner: "field[:type] field[:type]"
|
7
|
+
|
8
|
+
def create_projection_file
|
9
|
+
if domain?
|
10
|
+
template 'domain_projection.rb', File.join('domain', 'projections', domain_ns, "#{file_name}_projection.rb")
|
11
|
+
else
|
12
|
+
template 'projection.rb', File.join('app', 'projections', class_path, "#{file_name}_projection.rb")
|
13
|
+
end
|
14
|
+
end
|
15
|
+
|
16
|
+
def create_model_file
|
17
|
+
if domain?
|
18
|
+
template 'domain_model.rb', File.join('domain', 'models', domain_ns, "#{file_name}.rb")
|
19
|
+
else
|
20
|
+
template 'model.rb', File.join('app', 'models', class_path, "#{file_name}.rb")
|
21
|
+
end
|
22
|
+
end
|
23
|
+
|
24
|
+
def create_migration
|
25
|
+
generate 'drails:migration', "create_#{table_name}", use_domain, attributes.map { |x| "#{x.name}:#{x.type}" }.join(' ')
|
26
|
+
end
|
27
|
+
|
28
|
+
private
|
29
|
+
def domain?
|
30
|
+
@domain ||= !!(/^(true|t|yes|y|1)$/i).match(use_domain)
|
31
|
+
end
|
32
|
+
|
33
|
+
def domain_ns
|
34
|
+
namespace_path = Array.new class_path
|
35
|
+
if namespace_path.empty?
|
36
|
+
namespace_path[0] = 'domain'
|
37
|
+
else
|
38
|
+
namespace_path[-1] += '_domain'
|
39
|
+
end
|
40
|
+
end
|
41
|
+
end
|
42
|
+
end
|
43
|
+
end
|
@@ -0,0 +1,29 @@
|
|
1
|
+
Description:
|
2
|
+
Scaffolds a complete resource with models, migration, projections, controller, views
|
3
|
+
commands, events and command_processor.
|
4
|
+
|
5
|
+
Example:
|
6
|
+
rails generate drails:scaffold Thing
|
7
|
+
|
8
|
+
This will create:
|
9
|
+
app/commands/thing_create_command.rb
|
10
|
+
app/commands/thing_update_command.rb
|
11
|
+
app/commands/thing_delete_command.rb
|
12
|
+
app/controllers/things_controller
|
13
|
+
app/events/thing_create_event.rb
|
14
|
+
app/events/thing_update_event.rb
|
15
|
+
app/events/thing_delete_event.rb
|
16
|
+
app/helpers/thing_helper.rb
|
17
|
+
app/models/thing.rb
|
18
|
+
app/projections/thing_projection.rb
|
19
|
+
app/views/things/_form.html.erb
|
20
|
+
app/views/things/edit.html.erb
|
21
|
+
app/views/things/index.html.erb
|
22
|
+
app/views/things/new.html.erb
|
23
|
+
app/views/things/show.html.erb
|
24
|
+
db/migrate/create_thing.rb
|
25
|
+
db/migrate_domain/create_thing.rb
|
26
|
+
domain/command_processors/thing_processor.rb
|
27
|
+
domain/models/thing.rb
|
28
|
+
domain/projections/thing_projection.rb
|
29
|
+
a resource route
|
@@ -0,0 +1,63 @@
|
|
1
|
+
module Drails
|
2
|
+
module Generators
|
3
|
+
class ScaffoldGenerator < Rails::Generators::NamedBase
|
4
|
+
source_root File.expand_path('../templates', __FILE__)
|
5
|
+
argument :attributes, type: :array, default: [], banner: "field[:type] field[:type]"
|
6
|
+
|
7
|
+
def create_projections
|
8
|
+
generate 'drails:projection', name, 'false', attr_string
|
9
|
+
generate 'drails:projection', name, 'true', attr_string
|
10
|
+
end
|
11
|
+
|
12
|
+
def create_commands
|
13
|
+
%w(create update delete).each do |action|
|
14
|
+
attr_arg = attributes_names.join(' ') unless action == 'delete'
|
15
|
+
command = "#{name}_#{action}"
|
16
|
+
generate 'drails:command', command, attr_arg
|
17
|
+
add_to_projections(action)
|
18
|
+
end
|
19
|
+
end
|
20
|
+
|
21
|
+
def add_route
|
22
|
+
route "resources :#{plural_name}"
|
23
|
+
end
|
24
|
+
|
25
|
+
def create_controller
|
26
|
+
generate 'drails:controller', name, attr_string
|
27
|
+
end
|
28
|
+
|
29
|
+
private
|
30
|
+
def attr_string
|
31
|
+
@attr_string ||= attributes.map { |x| "#{x.name}:#{x.type}" }.join(' ')
|
32
|
+
end
|
33
|
+
|
34
|
+
def add_to_projections(action)
|
35
|
+
content = "
|
36
|
+
|
37
|
+
def #{name}_#{action}_event(event)
|
38
|
+
#{method_bodies[action]}
|
39
|
+
end"
|
40
|
+
inject_into_file File.join('app', 'projections', class_path, "#{file_name}_projection.rb"), content, after: /(\s)*include(\s)*ActiveProjection::ProjectionType/
|
41
|
+
inject_into_file File.join('domain', 'projections', domain_ns, "#{file_name}_projection.rb"), content, after: /(\s)*include(\s)*ActiveDomain::Projection/
|
42
|
+
end
|
43
|
+
|
44
|
+
def method_bodies
|
45
|
+
{
|
46
|
+
'create' => "#{human_name}.create! event.values.merge(id: event.id)",
|
47
|
+
'update' => "#{human_name}.find(event.id).update! event.values",
|
48
|
+
'delete' => "#{human_name}.find(event.id).destroy!",
|
49
|
+
}
|
50
|
+
end
|
51
|
+
|
52
|
+
def domain_ns
|
53
|
+
namespace_path = Array.new class_path
|
54
|
+
if namespace_path.empty?
|
55
|
+
namespace_path[0] = 'domain'
|
56
|
+
else
|
57
|
+
namespace_path[-1] += '_domain'
|
58
|
+
end
|
59
|
+
namespace_path
|
60
|
+
end
|
61
|
+
end
|
62
|
+
end
|
63
|
+
end
|
data/lib/tasks/db.rake
ADDED
@@ -0,0 +1,108 @@
|
|
1
|
+
require 'yaml'
|
2
|
+
require 'logger'
|
3
|
+
require 'active_record'
|
4
|
+
|
5
|
+
namespace :db do
|
6
|
+
def create_database config
|
7
|
+
options = {:charset => 'utf8', :collation => 'utf8_unicode_ci'}
|
8
|
+
|
9
|
+
create_db = lambda do |config|
|
10
|
+
ActiveRecord::Base.establish_connection config.merge('database' => nil)
|
11
|
+
ActiveRecord::Base.connection.create_database config['database'], options
|
12
|
+
ActiveRecord::Base.establish_connection config
|
13
|
+
end
|
14
|
+
|
15
|
+
begin
|
16
|
+
create_db.call config
|
17
|
+
rescue Mysql::Error => sqlerr
|
18
|
+
if sqlerr.errno == 1405
|
19
|
+
print "#{sqlerr.error}. \nPlease provide the root password for your mysql installation\n>"
|
20
|
+
root_password = $stdin.gets.strip
|
21
|
+
|
22
|
+
grant_statement = <<-SQL
|
23
|
+
GRANT ALL PRIVILEGES ON #{config['database']}.*
|
24
|
+
TO '#{config['username']}'@'localhost'
|
25
|
+
IDENTIFIED BY '#{config['password']}' WITH GRANT OPTION;
|
26
|
+
SQL
|
27
|
+
|
28
|
+
create_db.call config.merge('database' => nil, 'username' => 'root', 'password' => root_password)
|
29
|
+
else
|
30
|
+
$stderr.puts sqlerr.error
|
31
|
+
$stderr.puts "Couldn't create database for #{config.inspect}, charset: utf8, collation: utf8_unicode_ci"
|
32
|
+
$stderr.puts "(if you set the charset manually, make sure you have a matching collation)" if config['charset']
|
33
|
+
end
|
34
|
+
end
|
35
|
+
end
|
36
|
+
|
37
|
+
task :db_env do
|
38
|
+
DATABASE_ENV = ENV['DATABASE_ENV'] || 'development'
|
39
|
+
end
|
40
|
+
|
41
|
+
task :environment, [:file_name] => [:db_env] do |t, args|
|
42
|
+
if args.file_name == 'domain'
|
43
|
+
@migration_dir = ENV['MIGRATIONS_DIR'] || 'db/migrate_domain'
|
44
|
+
else
|
45
|
+
@migration_dir = ENV['MIGRATIONS_DIR'] || 'db/migrate'
|
46
|
+
end
|
47
|
+
end
|
48
|
+
|
49
|
+
task :configuration, [:file_name] => [:environment] do |t, args|
|
50
|
+
@config = YAML.load_file("config/disco.yml")[DATABASE_ENV]["#{args.file_name}_database"]
|
51
|
+
end
|
52
|
+
|
53
|
+
task :configure_connection => :configuration do
|
54
|
+
ActiveRecord::Base.establish_connection @config
|
55
|
+
ActiveRecord::Base.logger = Logger.new STDOUT if @config['logger']
|
56
|
+
end
|
57
|
+
|
58
|
+
desc 'Create the database from config/disco.yml for the current DATABASE_ENV'
|
59
|
+
task :create => :configure_connection do
|
60
|
+
create_database @config
|
61
|
+
end
|
62
|
+
|
63
|
+
desc 'Drops the database for the current DATABASE_ENV'
|
64
|
+
task :drop => :configure_connection do
|
65
|
+
ActiveRecord::Base.connection.drop_database @config['database']
|
66
|
+
end
|
67
|
+
|
68
|
+
desc 'Migrate the database (options: VERSION=x, VERBOSE=false).'
|
69
|
+
task :migrate => :configure_connection do
|
70
|
+
ActiveRecord::Migration.verbose = true
|
71
|
+
ActiveRecord::Migrator.migrate @migration_dir, ENV['VERSION'] ? ENV['VERSION'].to_i : nil
|
72
|
+
end
|
73
|
+
|
74
|
+
desc 'Rolls the schema back to the previous version (specify steps w/ STEP=n).'
|
75
|
+
task :rollback => :configure_connection do
|
76
|
+
step = ENV['STEP'] ? ENV['STEP'].to_i : 1
|
77
|
+
ActiveRecord::Migrator.rollback @migration_dir, step
|
78
|
+
end
|
79
|
+
|
80
|
+
desc 'Retrieves the current schema version number'
|
81
|
+
task :version => :configure_connection do
|
82
|
+
puts "Current version: #{ActiveRecord::Migrator.current_version}"
|
83
|
+
end
|
84
|
+
|
85
|
+
desc 'Migrates the domain database (for use in multi project setup)'
|
86
|
+
task :setup_domain do
|
87
|
+
Rake::Task[:'db:configuration'].invoke('domain')
|
88
|
+
cp_r Gem::Specification.find_by_name('active_event').gem_dir + '/db/migrate/.', 'db/migrate_domain'
|
89
|
+
Rake::Task[:'db:migrate'].invoke
|
90
|
+
end
|
91
|
+
|
92
|
+
desc 'Migrates the projection database (for use in multi project setup)'
|
93
|
+
task :setup_projection do
|
94
|
+
Rake::Task[:'db:configuration'].invoke('projection')
|
95
|
+
cp_r Gem::Specification.find_by_name('active_projection').gem_dir + '/db/migrate/.', 'db/migrate'
|
96
|
+
Rake::Task[:'db:migrate'].invoke
|
97
|
+
end
|
98
|
+
|
99
|
+
desc 'Migrates the domain and the projection database (for use in single project setup)'
|
100
|
+
task :setup do
|
101
|
+
Rake::Task[:'db:setup_domain'].invoke
|
102
|
+
Rake::Task[:'db:environment'].reenable
|
103
|
+
Rake::Task[:'db:configure_connection'].reenable
|
104
|
+
Rake::Task[:'db:configuration'].reenable
|
105
|
+
Rake::Task[:'db:migrate'].reenable
|
106
|
+
Rake::Task[:'db:setup_projection'].invoke
|
107
|
+
end
|
108
|
+
end
|
@@ -0,0 +1,94 @@
|
|
1
|
+
def do_in_parent_dir
|
2
|
+
cd '../'
|
3
|
+
yield
|
4
|
+
cd PROJECT_NAME
|
5
|
+
end
|
6
|
+
|
7
|
+
task :environment do
|
8
|
+
PROJECT_NAME = File.basename(pwd)
|
9
|
+
end
|
10
|
+
|
11
|
+
task :create_domain => :create_frontend do
|
12
|
+
dir = "#{PROJECT_NAME}_domain"
|
13
|
+
app_dir = "#{dir}/app"
|
14
|
+
config_dir = "#{dir}/config"
|
15
|
+
bin_dir = "#{dir}/bin"
|
16
|
+
db_dir = "#{dir}/db"
|
17
|
+
do_in_parent_dir do
|
18
|
+
mkdir dir unless Dir.exists?(dir)
|
19
|
+
mkdir app_dir unless Dir.exists?(app_dir)
|
20
|
+
move "#{FRONTEND_DIR}/domain/command_processors", app_dir
|
21
|
+
move "#{FRONTEND_DIR}/domain/models", app_dir
|
22
|
+
move "#{FRONTEND_DIR}/domain/projections", app_dir
|
23
|
+
move "#{FRONTEND_DIR}/domain/validations", app_dir
|
24
|
+
remove_dir "#{FRONTEND_DIR}/domain"
|
25
|
+
mkdir config_dir unless Dir.exists?(config_dir)
|
26
|
+
move "#{FRONTEND_DIR}/config/disco.yml", config_dir
|
27
|
+
mkdir bin_dir unless Dir.exists?(bin_dir)
|
28
|
+
move "#{FRONTEND_DIR}/bin/domain_server.rb", bin_dir
|
29
|
+
mkdir db_dir unless Dir.exists?(db_dir)
|
30
|
+
move "#{FRONTEND_DIR}/db/migrate_domain/.", "#{db_dir}/migrate"
|
31
|
+
remove_dir "#{FRONTEND_DIR}/db" if Dir["#{FRONTEND_DIR}/db/*"].empty?
|
32
|
+
#todo: gemfile and gemspec
|
33
|
+
end
|
34
|
+
end
|
35
|
+
|
36
|
+
task :create_projection => :create_frontend do
|
37
|
+
dir = "#{PROJECT_NAME}_projection"
|
38
|
+
app_dir = "#{dir}/app"
|
39
|
+
config_dir = "#{dir}/config"
|
40
|
+
bin_dir = "#{dir}/bin"
|
41
|
+
db_dir = "#{dir}/db"
|
42
|
+
do_in_parent_dir do
|
43
|
+
mkdir dir unless Dir.exists?(dir)
|
44
|
+
mkdir app_dir unless Dir.exists?(app_dir)
|
45
|
+
move "#{FRONTEND_DIR}/app/models", app_dir
|
46
|
+
move "#{FRONTEND_DIR}/app/projections", app_dir
|
47
|
+
mkdir config_dir unless Dir.exists?(config_dir)
|
48
|
+
move "#{FRONTEND_DIR}/config/disco.yml", config_dir
|
49
|
+
mkdir bin_dir unless Dir.exists?(bin_dir)
|
50
|
+
move "#{FRONTEND_DIR}/bin/projection_servers.rb", bin_dir
|
51
|
+
mkdir db_dir unless Dir.exists?(db_dir)
|
52
|
+
move "#{FRONTEND_DIR}/db/migrate/.", "#{db_dir}/migrate"
|
53
|
+
remove_dir "#{FRONTEND_DIR}/db" if Dir["#{FRONTEND_DIR}/db/*"].empty?
|
54
|
+
#todo: gemfile and gemspec
|
55
|
+
end
|
56
|
+
end
|
57
|
+
|
58
|
+
task :create_interface => :create_frontend do
|
59
|
+
dir = "#{PROJECT_NAME}_interface"
|
60
|
+
app_dir = "#{dir}/app"
|
61
|
+
lib_dir = "#{dir}/lib"
|
62
|
+
do_in_parent_dir do
|
63
|
+
mkdir dir unless Dir.exists?(dir)
|
64
|
+
mkdir app_dir unless Dir.exists?(app_dir)
|
65
|
+
move "#{FRONTEND_DIR}/app/commands", app_dir
|
66
|
+
move "#{FRONTEND_DIR}/app/events", app_dir
|
67
|
+
move "#{FRONTEND_DIR}/app/validations", app_dir
|
68
|
+
mkdir lib_dir unless Dir.exists?(lib_dir)
|
69
|
+
temp_dir = "#{lib_dir}/#{PROJECT_NAME}"
|
70
|
+
mkdir temp_dir unless Dir.exists?(temp_dir)
|
71
|
+
move "#{FRONTEND_DIR}/lib/#{PROJECT_NAME}/domain.rb", temp_dir
|
72
|
+
move "#{FRONTEND_DIR}/lib/#{PROJECT_NAME}.rb", "#{lib_dir}/#{dir}.rb"
|
73
|
+
#todo: delete first line in this file
|
74
|
+
#todo: gemfile and gemspec
|
75
|
+
end
|
76
|
+
end
|
77
|
+
|
78
|
+
task :create_frontend => :environment do
|
79
|
+
FRONTEND_DIR = "#{PROJECT_NAME}_frontend"
|
80
|
+
app_dir = "#{FRONTEND_DIR}/app"
|
81
|
+
lib_dir = "#{FRONTEND_DIR}/lib"
|
82
|
+
do_in_parent_dir do
|
83
|
+
mkdir FRONTEND_DIR unless Dir.exists?(FRONTEND_DIR)
|
84
|
+
cp_r "#{PROJECT_NAME}/.", FRONTEND_DIR
|
85
|
+
cp_r "#{FRONTEND_DIR}/lib/#{PROJECT_NAME}.rb", "#{lib_dir}/#{FRONTEND_DIR}.rb"
|
86
|
+
#todo: delete line 2, 5 and 6 in this file
|
87
|
+
end
|
88
|
+
end
|
89
|
+
|
90
|
+
|
91
|
+
desc 'split this'
|
92
|
+
task :split => [:create_projection, :create_domain, :create_interface] do
|
93
|
+
puts 'done'
|
94
|
+
end
|
metadata
ADDED
@@ -0,0 +1,141 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: drailties
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.1.0
|
5
|
+
platform: ruby
|
6
|
+
authors:
|
7
|
+
- Robert Kranz
|
8
|
+
autorequire:
|
9
|
+
bindir: bin
|
10
|
+
cert_chain: []
|
11
|
+
date: 2013-09-11 00:00:00.000000000 Z
|
12
|
+
dependencies:
|
13
|
+
- !ruby/object:Gem::Dependency
|
14
|
+
name: active_event
|
15
|
+
requirement: !ruby/object:Gem::Requirement
|
16
|
+
requirements:
|
17
|
+
- - '='
|
18
|
+
- !ruby/object:Gem::Version
|
19
|
+
version: 0.1.0
|
20
|
+
type: :runtime
|
21
|
+
prerelease: false
|
22
|
+
version_requirements: !ruby/object:Gem::Requirement
|
23
|
+
requirements:
|
24
|
+
- - '='
|
25
|
+
- !ruby/object:Gem::Version
|
26
|
+
version: 0.1.0
|
27
|
+
- !ruby/object:Gem::Dependency
|
28
|
+
name: active_domain
|
29
|
+
requirement: !ruby/object:Gem::Requirement
|
30
|
+
requirements:
|
31
|
+
- - '='
|
32
|
+
- !ruby/object:Gem::Version
|
33
|
+
version: 0.1.0
|
34
|
+
type: :runtime
|
35
|
+
prerelease: false
|
36
|
+
version_requirements: !ruby/object:Gem::Requirement
|
37
|
+
requirements:
|
38
|
+
- - '='
|
39
|
+
- !ruby/object:Gem::Version
|
40
|
+
version: 0.1.0
|
41
|
+
- !ruby/object:Gem::Dependency
|
42
|
+
name: active_projection
|
43
|
+
requirement: !ruby/object:Gem::Requirement
|
44
|
+
requirements:
|
45
|
+
- - '='
|
46
|
+
- !ruby/object:Gem::Version
|
47
|
+
version: 0.1.0
|
48
|
+
type: :runtime
|
49
|
+
prerelease: false
|
50
|
+
version_requirements: !ruby/object:Gem::Requirement
|
51
|
+
requirements:
|
52
|
+
- - '='
|
53
|
+
- !ruby/object:Gem::Version
|
54
|
+
version: 0.1.0
|
55
|
+
- !ruby/object:Gem::Dependency
|
56
|
+
name: rails
|
57
|
+
requirement: !ruby/object:Gem::Requirement
|
58
|
+
requirements:
|
59
|
+
- - ~>
|
60
|
+
- !ruby/object:Gem::Version
|
61
|
+
version: 4.0.0
|
62
|
+
type: :runtime
|
63
|
+
prerelease: false
|
64
|
+
version_requirements: !ruby/object:Gem::Requirement
|
65
|
+
requirements:
|
66
|
+
- - ~>
|
67
|
+
- !ruby/object:Gem::Version
|
68
|
+
version: 4.0.0
|
69
|
+
description: 'Internals: rake tasks, generators, commandline interface'
|
70
|
+
email: robert.kranz@hicknhack-software.com
|
71
|
+
executables:
|
72
|
+
- drails
|
73
|
+
extensions: []
|
74
|
+
extra_rdoc_files: []
|
75
|
+
files:
|
76
|
+
- lib/drails/application.rb
|
77
|
+
- lib/drails/domainserver.rb
|
78
|
+
- lib/drails/generate.rb
|
79
|
+
- lib/drails/projectionserver.rb
|
80
|
+
- lib/drails/rake.rb
|
81
|
+
- lib/drails/server/domain_server.rb
|
82
|
+
- lib/drails/server/projection_servers.rb
|
83
|
+
- lib/drails/server.rb
|
84
|
+
- lib/drailties.rb
|
85
|
+
- lib/generators/drails/app/app_generator.rb
|
86
|
+
- lib/generators/drails/app/templates/build_validations_registry.rb
|
87
|
+
- lib/generators/drails/app/templates/create_domain.rb
|
88
|
+
- lib/generators/drails/app/templates/disco.yml
|
89
|
+
- lib/generators/drails/app/USAGE
|
90
|
+
- lib/generators/drails/command/command_generator.rb
|
91
|
+
- lib/generators/drails/command/templates/command.rb
|
92
|
+
- lib/generators/drails/command/templates/event.rb
|
93
|
+
- lib/generators/drails/command/USAGE
|
94
|
+
- lib/generators/drails/command_processor/command_processor_generator.rb
|
95
|
+
- lib/generators/drails/command_processor/templates/command_processor.rb
|
96
|
+
- lib/generators/drails/command_processor/USAGE
|
97
|
+
- lib/generators/drails/controller/controller_generator.rb
|
98
|
+
- lib/generators/drails/controller/templates/controller.rb
|
99
|
+
- lib/generators/drails/controller/USAGE
|
100
|
+
- lib/generators/drails/migration/migration_generator.rb
|
101
|
+
- lib/generators/drails/migration/templates/create_table_migration.rb
|
102
|
+
- lib/generators/drails/migration/USAGE
|
103
|
+
- lib/generators/drails/projection/projection_generator.rb
|
104
|
+
- lib/generators/drails/projection/templates/domain_model.rb
|
105
|
+
- lib/generators/drails/projection/templates/domain_projection.rb
|
106
|
+
- lib/generators/drails/projection/templates/model.rb
|
107
|
+
- lib/generators/drails/projection/templates/projection.rb
|
108
|
+
- lib/generators/drails/projection/USAGE
|
109
|
+
- lib/generators/drails/scaffold/scaffold_generator.rb
|
110
|
+
- lib/generators/drails/scaffold/USAGE
|
111
|
+
- lib/rails-disco/version.rb
|
112
|
+
- lib/tasks/db.rake
|
113
|
+
- lib/tasks/split.rake
|
114
|
+
- Rakefile
|
115
|
+
- MIT-LICENSE
|
116
|
+
- bin/drails
|
117
|
+
homepage: https://github.com/hicknhack-software/rails-disco
|
118
|
+
licenses:
|
119
|
+
- MIT
|
120
|
+
metadata: {}
|
121
|
+
post_install_message:
|
122
|
+
rdoc_options: []
|
123
|
+
require_paths:
|
124
|
+
- lib
|
125
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
126
|
+
requirements:
|
127
|
+
- - '>='
|
128
|
+
- !ruby/object:Gem::Version
|
129
|
+
version: '0'
|
130
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
131
|
+
requirements:
|
132
|
+
- - '>='
|
133
|
+
- !ruby/object:Gem::Version
|
134
|
+
version: '0'
|
135
|
+
requirements: []
|
136
|
+
rubyforge_project:
|
137
|
+
rubygems_version: 2.0.5
|
138
|
+
signing_key:
|
139
|
+
specification_version: 4
|
140
|
+
summary: Tools for working with Rails Disco
|
141
|
+
test_files: []
|