tennpipes-init 3.6.6
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +7 -0
- data/LICENSE.txt +20 -0
- data/README.rdoc +163 -0
- data/Rakefile +1 -0
- data/bin/tennpipes-init +16 -0
- data/lib/tennpipes-init.rb +73 -0
- data/lib/tennpipes-init/command.rb +18 -0
- data/lib/tennpipes-init/generators/actions.rb +630 -0
- data/lib/tennpipes-init/generators/app.rb +75 -0
- data/lib/tennpipes-init/generators/app/app.rb.tt +72 -0
- data/lib/tennpipes-init/generators/app/app.rb.tt~ +72 -0
- data/lib/tennpipes-init/generators/cli.rb +57 -0
- data/lib/tennpipes-init/generators/component.rb +73 -0
- data/lib/tennpipes-init/generators/components/actions.rb +208 -0
- data/lib/tennpipes-init/generators/components/mocks/mocha.rb +10 -0
- data/lib/tennpipes-init/generators/components/mocks/rr.rb +13 -0
- data/lib/tennpipes-init/generators/components/orms/activerecord.rb +201 -0
- data/lib/tennpipes-init/generators/components/orms/couchrest.rb +55 -0
- data/lib/tennpipes-init/generators/components/orms/datamapper.rb +140 -0
- data/lib/tennpipes-init/generators/components/orms/dynamoid.rb +67 -0
- data/lib/tennpipes-init/generators/components/orms/minirecord.rb +165 -0
- data/lib/tennpipes-init/generators/components/orms/mongoid.rb +113 -0
- data/lib/tennpipes-init/generators/components/orms/mongomapper.rb +43 -0
- data/lib/tennpipes-init/generators/components/orms/mongomatic.rb +84 -0
- data/lib/tennpipes-init/generators/components/orms/ohm.rb +65 -0
- data/lib/tennpipes-init/generators/components/orms/ripple.rb +75 -0
- data/lib/tennpipes-init/generators/components/orms/sequel.rb +99 -0
- data/lib/tennpipes-init/generators/components/renderers/erb.rb +3 -0
- data/lib/tennpipes-init/generators/components/renderers/haml.rb +3 -0
- data/lib/tennpipes-init/generators/components/renderers/liquid.rb +4 -0
- data/lib/tennpipes-init/generators/components/renderers/slim.rb +3 -0
- data/lib/tennpipes-init/generators/components/scripts/dojo.rb +10 -0
- data/lib/tennpipes-init/generators/components/scripts/extcore.rb +10 -0
- data/lib/tennpipes-init/generators/components/scripts/jquery.rb +10 -0
- data/lib/tennpipes-init/generators/components/scripts/mootools.rb +10 -0
- data/lib/tennpipes-init/generators/components/scripts/prototype.rb +12 -0
- data/lib/tennpipes-init/generators/components/scripts/rightjs.rb +10 -0
- data/lib/tennpipes-init/generators/components/stylesheets/compass.rb +39 -0
- data/lib/tennpipes-init/generators/components/stylesheets/compass/application.scss +43 -0
- data/lib/tennpipes-init/generators/components/stylesheets/compass/partials/_base.scss +12 -0
- data/lib/tennpipes-init/generators/components/stylesheets/less.rb +25 -0
- data/lib/tennpipes-init/generators/components/stylesheets/sass.rb +15 -0
- data/lib/tennpipes-init/generators/components/stylesheets/scss.rb +16 -0
- data/lib/tennpipes-init/generators/components/tests/bacon.rb +103 -0
- data/lib/tennpipes-init/generators/components/tests/cucumber.rb +86 -0
- data/lib/tennpipes-init/generators/components/tests/minitest.rb +110 -0
- data/lib/tennpipes-init/generators/components/tests/riot.rb +117 -0
- data/lib/tennpipes-init/generators/components/tests/rspec.rb +111 -0
- data/lib/tennpipes-init/generators/components/tests/shoulda.rb +114 -0
- data/lib/tennpipes-init/generators/components/tests/steak.rb +114 -0
- data/lib/tennpipes-init/generators/controller.rb +77 -0
- data/lib/tennpipes-init/generators/helper.rb +50 -0
- data/lib/tennpipes-init/generators/mailer.rb +52 -0
- data/lib/tennpipes-init/generators/migration.rb +43 -0
- data/lib/tennpipes-init/generators/model.rb +113 -0
- data/lib/tennpipes-init/generators/plugin.rb +67 -0
- data/lib/tennpipes-init/generators/project.rb +160 -0
- data/lib/tennpipes-init/generators/project/config.ru +9 -0
- data/lib/tennpipes-init/generators/project/config/apps.rb.tt +35 -0
- data/lib/tennpipes-init/generators/project/config/boot.rb +49 -0
- data/lib/tennpipes-init/generators/project/public/favicon.ico +0 -0
- data/lib/tennpipes-init/generators/project/public/images/booking.com.png +0 -0
- data/lib/tennpipes-init/generators/project/public/images/causes.png +0 -0
- data/lib/tennpipes-init/generators/project/public/images/ennkeypee_bg.jpg +0 -0
- data/lib/tennpipes-init/generators/project/public/images/ennkeypee_bluelogo.png +0 -0
- data/lib/tennpipes-init/generators/project/public/images/ennkeypee_bluelogo.svg +68 -0
- data/lib/tennpipes-init/generators/project/public/images/ennkeypee_whitelogo.png +0 -0
- data/lib/tennpipes-init/generators/project/public/images/ennkeypee_whitelogo.svg +65 -0
- data/lib/tennpipes-init/generators/project/public/images/forever21.png +0 -0
- data/lib/tennpipes-init/generators/project/public/images/icons/foundation-icons.eot +0 -0
- data/lib/tennpipes-init/generators/project/public/images/icons/foundation-icons.svg +970 -0
- data/lib/tennpipes-init/generators/project/public/images/icons/foundation-icons.ttf +0 -0
- data/lib/tennpipes-init/generators/project/public/images/icons/foundation-icons.woff +0 -0
- data/lib/tennpipes-init/generators/project/public/images/icons/tennpipes-icons.css +598 -0
- data/lib/tennpipes-init/generators/project/public/images/image1.jpg +0 -0
- data/lib/tennpipes-init/generators/project/public/images/image11.jpg +0 -0
- data/lib/tennpipes-init/generators/project/public/images/image2.jpg +0 -0
- data/lib/tennpipes-init/generators/project/public/images/image3.jpg +0 -0
- data/lib/tennpipes-init/generators/project/public/images/intuit.png +0 -0
- data/lib/tennpipes-init/generators/project/public/images/krispykreme.png +0 -0
- data/lib/tennpipes-init/generators/project/public/images/placeholders/README.md +302 -0
- data/lib/tennpipes-init/generators/project/public/images/placeholders/bower.json +4 -0
- data/lib/tennpipes-init/generators/project/public/images/placeholders/composer.json +34 -0
- data/lib/tennpipes-init/generators/project/public/images/placeholders/gulpfile.js +92 -0
- data/lib/tennpipes-init/generators/project/public/images/placeholders/holder.js +1920 -0
- data/lib/tennpipes-init/generators/project/public/images/placeholders/holder.min.js +12 -0
- data/lib/tennpipes-init/generators/project/public/images/placeholders/package.json +46 -0
- data/lib/tennpipes-init/generators/project/public/images/placeholders/src/holder.js +1411 -0
- data/lib/tennpipes-init/generators/project/public/images/placeholders/src/lib/augment.js +27 -0
- data/lib/tennpipes-init/generators/project/public/images/placeholders/src/lib/ondomready.js +155 -0
- data/lib/tennpipes-init/generators/project/public/images/placeholders/src/lib/polyfills.js +177 -0
- data/lib/tennpipes-init/generators/project/public/images/placeholders/src/scenegraph.js +101 -0
- data/lib/tennpipes-init/generators/project/public/images/placeholders/src/utils.js +129 -0
- data/lib/tennpipes-init/generators/project/public/images/priceline.com.png +0 -0
- data/lib/tennpipes-init/generators/project/public/images/stripe.png +0 -0
- data/lib/tennpipes-init/generators/project/public/javascripts/tennpipes.min.js +6081 -0
- data/lib/tennpipes-init/generators/project/public/javascripts/tennpipes/tennpipes.abide.js +340 -0
- data/lib/tennpipes-init/generators/project/public/javascripts/tennpipes/tennpipes.accordion.js +67 -0
- data/lib/tennpipes-init/generators/project/public/javascripts/tennpipes/tennpipes.alert.js +43 -0
- data/lib/tennpipes-init/generators/project/public/javascripts/tennpipes/tennpipes.clearing.js +556 -0
- data/lib/tennpipes-init/generators/project/public/javascripts/tennpipes/tennpipes.dropdown.js +448 -0
- data/lib/tennpipes-init/generators/project/public/javascripts/tennpipes/tennpipes.equalizer.js +77 -0
- data/lib/tennpipes-init/generators/project/public/javascripts/tennpipes/tennpipes.interchange.js +354 -0
- data/lib/tennpipes-init/generators/project/public/javascripts/tennpipes/tennpipes.joyride.js +932 -0
- data/lib/tennpipes-init/generators/project/public/javascripts/tennpipes/tennpipes.js +703 -0
- data/lib/tennpipes-init/generators/project/public/javascripts/tennpipes/tennpipes.magellan.js +203 -0
- data/lib/tennpipes-init/generators/project/public/javascripts/tennpipes/tennpipes.offcanvas.js +152 -0
- data/lib/tennpipes-init/generators/project/public/javascripts/tennpipes/tennpipes.orbit.js +476 -0
- data/lib/tennpipes-init/generators/project/public/javascripts/tennpipes/tennpipes.reveal.js +471 -0
- data/lib/tennpipes-init/generators/project/public/javascripts/tennpipes/tennpipes.slider.js +263 -0
- data/lib/tennpipes-init/generators/project/public/javascripts/tennpipes/tennpipes.tab.js +237 -0
- data/lib/tennpipes-init/generators/project/public/javascripts/tennpipes/tennpipes.tooltip.js +307 -0
- data/lib/tennpipes-init/generators/project/public/javascripts/tennpipes/tennpipes.topbar.js +452 -0
- data/lib/tennpipes-init/generators/project/public/javascripts/vendor/fastclick.js +8 -0
- data/lib/tennpipes-init/generators/project/public/javascripts/vendor/jquery.cookie.js +8 -0
- data/lib/tennpipes-init/generators/project/public/javascripts/vendor/jquery.js +26 -0
- data/lib/tennpipes-init/generators/project/public/javascripts/vendor/modernizr.js +8 -0
- data/lib/tennpipes-init/generators/project/public/javascripts/vendor/placeholder.js +2 -0
- data/lib/tennpipes-init/generators/project/public/stylesheets/app.css~ +178 -0
- data/lib/tennpipes-init/generators/project/public/stylesheets/app1.css~ +177 -0
- data/lib/tennpipes-init/generators/project/public/stylesheets/ennkeypee.css +214 -0
- data/lib/tennpipes-init/generators/project/public/stylesheets/ennkeypee.css~ +214 -0
- data/lib/tennpipes-init/generators/project/public/stylesheets/normalize.css +427 -0
- data/lib/tennpipes-init/generators/project/public/stylesheets/tennpipes.css +6201 -0
- data/lib/tennpipes-init/generators/project/public/stylesheets/tennpipes.css~ +6201 -0
- data/lib/tennpipes-init/generators/project/public/stylesheets/tennpipes.min.css +1 -0
- data/lib/tennpipes-init/generators/runner.rb +139 -0
- data/lib/tennpipes-init/generators/task.rb +45 -0
- data/lib/tennpipes-init/generators/templates/Gemfile.tt +32 -0
- data/lib/tennpipes-init/generators/templates/Rakefile.tt +8 -0
- data/lib/tennpipes-init/generators/templates/controller.rb.tt +22 -0
- data/lib/tennpipes-init/generators/templates/gem/README.md.tt +29 -0
- data/lib/tennpipes-init/generators/templates/gem/gemspec.tt +19 -0
- data/lib/tennpipes-init/generators/templates/gem/lib/libname.tt +6 -0
- data/lib/tennpipes-init/generators/templates/gem/lib/libname/version.tt +3 -0
- data/lib/tennpipes-init/generators/templates/helper.rb.tt +13 -0
- data/lib/tennpipes-init/generators/templates/initializer.rb.tt +5 -0
- data/lib/tennpipes-init/generators/templates/mailer.rb.tt +54 -0
- data/lib/tennpipes-init/generators/templates/project_bin.tt +14 -0
- data/lib/tennpipes-init/generators/templates/task.rb.tt +7 -0
- data/lib/tennpipes-init/tennpipes-tasks/activerecord.rb +377 -0
- data/lib/tennpipes-init/tennpipes-tasks/database.rb +12 -0
- data/lib/tennpipes-init/tennpipes-tasks/datamapper.rb +94 -0
- data/lib/tennpipes-init/tennpipes-tasks/minirecord.rb +19 -0
- data/lib/tennpipes-init/tennpipes-tasks/mongoid.rb +215 -0
- data/lib/tennpipes-init/tennpipes-tasks/mongomapper.rb +55 -0
- data/lib/tennpipes-init/tennpipes-tasks/sequel.rb +85 -0
- data/lib/tennpipes-init/tennpipes-tasks/sql-helpers.rb +72 -0
- data/test/fixtures/admin_template.rb +7 -0
- data/test/fixtures/example_template.rb +15 -0
- data/test/fixtures/git_template.rb +4 -0
- data/test/fixtures/plugin_template.rb +13 -0
- data/test/fixtures/rake_template.rb +9 -0
- data/test/helper.rb +103 -0
- data/test/test_app_generator.rb +142 -0
- data/test/test_cli.rb +27 -0
- data/test/test_component_generator.rb +98 -0
- data/test/test_controller_generator.rb +272 -0
- data/test/test_generator.rb +13 -0
- data/test/test_helper_generator.rb +133 -0
- data/test/test_mailer_generator.rb +69 -0
- data/test/test_migration_generator.rb +222 -0
- data/test/test_model_generator.rb +553 -0
- data/test/test_plugin_generator.rb +152 -0
- data/test/test_project_generator.rb +757 -0
- data/test/test_task_generator.rb +53 -0
- metadata +285 -0
@@ -0,0 +1,114 @@
|
|
1
|
+
STEAK_SETUP = (<<-TEST).gsub(/^ {12}/, '') unless defined?(STEAK_SETUP)
|
2
|
+
RACK_ENV = 'test' unless defined?(RACK_ENV)
|
3
|
+
require File.expand_path(File.dirname(__FILE__) + "/../config/boot")
|
4
|
+
Dir[File.expand_path(File.dirname(__FILE__) + "/../app/helpers/**/*.rb")].each(&method(:require))
|
5
|
+
|
6
|
+
RSpec.configure do |conf|
|
7
|
+
conf.include Rack::Test::Methods
|
8
|
+
conf.include Capybara
|
9
|
+
end
|
10
|
+
|
11
|
+
def app
|
12
|
+
##
|
13
|
+
# You can handle all tennpipes applications using instead:
|
14
|
+
# Tennpipes.application
|
15
|
+
CLASS_NAME.tap { |app| }
|
16
|
+
end
|
17
|
+
|
18
|
+
Capybara.app = app
|
19
|
+
TEST
|
20
|
+
|
21
|
+
STEAK_CONTROLLER_TEST = (<<-TEST).gsub(/^ {12}/, '') unless defined?(STEAK_CONTROLLER_TEST)
|
22
|
+
require 'spec_helper'
|
23
|
+
|
24
|
+
describe "!PATH!" do
|
25
|
+
before do
|
26
|
+
get "!EXPANDED_PATH!"
|
27
|
+
end
|
28
|
+
|
29
|
+
it "returns hello world" do
|
30
|
+
last_response.body.should == "Hello World"
|
31
|
+
end
|
32
|
+
end
|
33
|
+
TEST
|
34
|
+
|
35
|
+
STEAK_CONTROLLER_ACCEPTANCE_TEST = (<<-TEST).gsub(/^ {12}/, '') unless defined?(STEAK_CONTROLLER_ACCEPTANCE_TEST)
|
36
|
+
require 'spec_helper'
|
37
|
+
|
38
|
+
feature "!PATH!" do
|
39
|
+
background do
|
40
|
+
visit "!EXPANDED_PATH!"
|
41
|
+
end
|
42
|
+
|
43
|
+
scenario "returns hello world" do
|
44
|
+
page.should.have_content == "Hello World"
|
45
|
+
end
|
46
|
+
end
|
47
|
+
TEST
|
48
|
+
|
49
|
+
STEAK_RAKE = (<<-TEST).gsub(/^ {12}/, '') unless defined?(STEAK_RAKE)
|
50
|
+
require 'rspec/core/rake_task'
|
51
|
+
|
52
|
+
spec_tasks = Dir['spec/*/'].map { |d| File.basename(d) }
|
53
|
+
|
54
|
+
spec_tasks.each do |folder|
|
55
|
+
RSpec::Core::RakeTask.new("spec:\#{folder}") do |t|
|
56
|
+
t.pattern = "./spec/\#{folder}/**/*_spec.rb"
|
57
|
+
t.rspec_opts = %w(-fs --color)
|
58
|
+
end
|
59
|
+
end
|
60
|
+
|
61
|
+
desc "Run complete application spec suite"
|
62
|
+
task 'spec' => spec_tasks.map { |f| "spec:\#{f}" }
|
63
|
+
TEST
|
64
|
+
|
65
|
+
STEAK_MODEL_TEST = (<<-TEST).gsub(/^ {12}/, '') unless defined?(STEAK_MODEL_TEST)
|
66
|
+
require 'spec_helper'
|
67
|
+
|
68
|
+
describe !NAME! do
|
69
|
+
end
|
70
|
+
TEST
|
71
|
+
|
72
|
+
STEAK_HELPER_TEST = <<-TEST unless defined?(STEAK_HELPER_TEST)
|
73
|
+
require 'spec_helper'
|
74
|
+
|
75
|
+
describe "!NAME!" do
|
76
|
+
let(:helpers){ Class.new }
|
77
|
+
before { helpers.extend !NAME! }
|
78
|
+
subject { helpers }
|
79
|
+
|
80
|
+
it "should return nil" do
|
81
|
+
expect(subject.foo).to be_nil
|
82
|
+
end
|
83
|
+
end
|
84
|
+
TEST
|
85
|
+
|
86
|
+
def setup_test
|
87
|
+
require_dependencies 'rack-test', :require => 'rack/test', :group => 'test'
|
88
|
+
require_dependencies 'steak', :group => 'test'
|
89
|
+
insert_test_suite_setup STEAK_SETUP, :path => "spec/spec_helper.rb"
|
90
|
+
create_file destination_root("spec/spec.rake"), STEAK_RAKE
|
91
|
+
end
|
92
|
+
|
93
|
+
# Generates a controller test given the controllers name
|
94
|
+
def generate_controller_test(name, path)
|
95
|
+
spec_contents = STEAK_CONTROLLER_TEST.gsub(/!PATH!/, path).gsub(/!EXPANDED_PATH!/, path.gsub(/:\w+?_id/, "1"))
|
96
|
+
controller_spec_path = File.join('spec',options[:app],'controllers',"#{name.to_s.underscore}_controller_spec.rb")
|
97
|
+
create_file destination_root(controller_spec_path), spec_contents, :skip => true
|
98
|
+
|
99
|
+
acceptance_contents = STEAK_CONTROLLER_ACCEPTANCE_TEST.gsub(/!PATH!/, path).gsub(/!EXPANDED_PATH!/, path.gsub(/:\w+?_id/, "1"))
|
100
|
+
controller_acceptance_path = File.join('spec',options[:app],'acceptance','controllers',"#{name.to_s.underscore}_controller_spec.rb")
|
101
|
+
create_file destination_root(controller_acceptance_path), acceptance_contents, :skip => true
|
102
|
+
end
|
103
|
+
|
104
|
+
def generate_model_test(name)
|
105
|
+
rspec_contents = STEAK_MODEL_TEST.gsub(/!NAME!/, name.to_s.underscore.camelize).gsub(/!DNAME!/, name.to_s.underscore)
|
106
|
+
model_spec_path = File.join('spec',options[:app],'models',"#{name.to_s.underscore}_spec.rb")
|
107
|
+
create_file destination_root(model_spec_path), rspec_contents, :skip => true
|
108
|
+
end
|
109
|
+
|
110
|
+
def generate_helper_test(name, project_name, app_name)
|
111
|
+
rspec_contents = STEAK_HELPER_TEST.gsub(/!NAME!/, "#{project_name}::#{app_name}::#{name}")
|
112
|
+
helper_spec_path = File.join('spec', options[:app], 'helpers', "#{name.underscore}_spec.rb")
|
113
|
+
create_file destination_root(helper_spec_path), rspec_contents, :skip => true
|
114
|
+
end
|
@@ -0,0 +1,77 @@
|
|
1
|
+
require 'tennpipes-base/application' unless defined?(Tennpipes::Application)
|
2
|
+
|
3
|
+
module Tennpipes
|
4
|
+
module Generators
|
5
|
+
##
|
6
|
+
# Responsible for generating route controllers and associated tests within a Tennpipes application.
|
7
|
+
#
|
8
|
+
class Controller < Thor::Group
|
9
|
+
|
10
|
+
Tennpipes::Generators.add_generator(:controller, self)
|
11
|
+
|
12
|
+
def self.source_root; File.expand_path(File.dirname(__FILE__)); end
|
13
|
+
def self.banner; "tennpipes-init controller [name]"; end
|
14
|
+
|
15
|
+
include Thor::Actions
|
16
|
+
include Tennpipes::Generators::Actions
|
17
|
+
include Tennpipes::Generators::Components::Actions
|
18
|
+
|
19
|
+
desc "Description:\n\n\ttennpipes-init controller generates a new Tennpipes controller"
|
20
|
+
|
21
|
+
argument :name, :desc => 'The name of your tennpipes controller'
|
22
|
+
argument :fields, :desc => 'The fields for the controller', :default => [], :type => :array
|
23
|
+
class_option :root, :desc => 'The root destination', :aliases => '-r', :default => '.', :type => :string
|
24
|
+
class_option :app, :desc => 'The application destination path', :aliases => '-a', :default => '/app', :type => :string
|
25
|
+
class_option :destroy, :aliases => '-d', :default => false, :type => :boolean
|
26
|
+
class_option :namespace, :desc => 'The name space of your tennpipes project', :aliases => '-n', :default => '', :type => :string
|
27
|
+
class_option :layout, :desc => 'The layout for the controller', :aliases => '-l', :default => '', :type => :string
|
28
|
+
class_option :parent, :desc => 'The parent of the controller', :aliases => '-p', :default => '', :type => :string
|
29
|
+
class_option :provides, :desc => 'The formats provided by the controller', :aliases => '-f', :default => '', :type => :string
|
30
|
+
class_option :'no-helper',:desc => 'Not generate helper', :default => false, :type => :boolean
|
31
|
+
|
32
|
+
# Show help if no ARGV given
|
33
|
+
require_arguments!
|
34
|
+
|
35
|
+
##
|
36
|
+
# Execute controller generation
|
37
|
+
#
|
38
|
+
def create_controller
|
39
|
+
self.destination_root = options[:root]
|
40
|
+
if in_app_root?
|
41
|
+
app = options[:app]
|
42
|
+
check_app_existence(app)
|
43
|
+
@project_name = options[:namespace].underscore.camelize
|
44
|
+
@project_name = fetch_project_name(app) if @project_name.empty?
|
45
|
+
@app_name = fetch_app_name(app)
|
46
|
+
@actions = controller_actions(fields)
|
47
|
+
@controller = name.to_s.underscore
|
48
|
+
@layout = options[:layout] if options[:layout] && !options[:layout].empty?
|
49
|
+
|
50
|
+
block_opts = []
|
51
|
+
block_opts << ":parent => :#{options[:parent]}" if options[:parent] && !options[:parent].empty?
|
52
|
+
block_opts << ":provides => [#{options[:provides]}]" if options[:provides] && !options[:provides].empty?
|
53
|
+
@block_opts_string = block_opts.join(', ') unless block_opts.empty?
|
54
|
+
|
55
|
+
self.behavior = :revoke if options[:destroy]
|
56
|
+
template 'templates/controller.rb.tt', destination_root(app, 'controllers', "#{name.to_s.underscore}.rb")
|
57
|
+
empty_directory destination_root(app, "/views/#{name.to_s.underscore}")
|
58
|
+
|
59
|
+
if test?
|
60
|
+
include_component_module_for(:test)
|
61
|
+
path = @controller.dup
|
62
|
+
|
63
|
+
if options[:parent] && !options[:parent].empty?
|
64
|
+
path = Application.process_path_for_parent_params(path, [options[:parent]]).prepend("/")
|
65
|
+
end
|
66
|
+
path.prepend("/") unless path.start_with?("/")
|
67
|
+
generate_controller_test(name, path)
|
68
|
+
end
|
69
|
+
|
70
|
+
create_helper_files(app, name) unless options[:'no-helper']
|
71
|
+
else
|
72
|
+
say 'You are not at the root of a Tennpipes application! (config/boot.rb not found)'
|
73
|
+
end
|
74
|
+
end
|
75
|
+
end
|
76
|
+
end
|
77
|
+
end
|
@@ -0,0 +1,50 @@
|
|
1
|
+
module Tennpipes
|
2
|
+
module Generators
|
3
|
+
##
|
4
|
+
# Responsible for generating route helpers and associated tests within a Tennpipes application.
|
5
|
+
#
|
6
|
+
class Helper < Thor::Group
|
7
|
+
|
8
|
+
Tennpipes::Generators.add_generator(:helper, self)
|
9
|
+
|
10
|
+
def self.source_root; File.expand_path(File.dirname(__FILE__)); end
|
11
|
+
def self.banner; "tennpipes-init helper [name]"; end
|
12
|
+
|
13
|
+
include Thor::Actions
|
14
|
+
include Tennpipes::Generators::Actions
|
15
|
+
include Tennpipes::Generators::Components::Actions
|
16
|
+
|
17
|
+
desc "Description:\n\n\ttennpipes-init helper generates a new Tennpipes helper"
|
18
|
+
|
19
|
+
argument :name, :desc => 'The name of your tennpipes helper'
|
20
|
+
argument :fields, :desc => 'The fields for the helper', :default => [], :type => :array
|
21
|
+
class_option :root, :desc => 'The root destination', :aliases => '-r', :default => '.', :type => :string
|
22
|
+
class_option :app, :desc => 'The application destination path', :aliases => '-a', :default => '/app', :type => :string
|
23
|
+
class_option :destroy, :aliases => '-d', :default => false, :type => :boolean
|
24
|
+
class_option :namespace, :desc => 'The name space of your tennpipes project', :aliases => '-n', :default => '', :type => :string
|
25
|
+
|
26
|
+
# Show help if no ARGV given
|
27
|
+
require_arguments!
|
28
|
+
|
29
|
+
##
|
30
|
+
# Execute helper generation
|
31
|
+
#
|
32
|
+
def create_helper
|
33
|
+
self.destination_root = options[:root]
|
34
|
+
if in_app_root?
|
35
|
+
app = options[:app]
|
36
|
+
check_app_existence(app)
|
37
|
+
@project_name = options[:namespace].underscore.camelize
|
38
|
+
@project_name = fetch_project_name(app) if @project_name.empty?
|
39
|
+
@app_name = fetch_app_name(app)
|
40
|
+
|
41
|
+
self.behavior = :revoke if options[:destroy]
|
42
|
+
|
43
|
+
create_helper_files(app, name)
|
44
|
+
else
|
45
|
+
say 'You are not at the root of a Tennpipes application! (config/boot.rb not found)'
|
46
|
+
end
|
47
|
+
end
|
48
|
+
end
|
49
|
+
end
|
50
|
+
end
|
@@ -0,0 +1,52 @@
|
|
1
|
+
module Tennpipes
|
2
|
+
module Generators
|
3
|
+
##
|
4
|
+
# Responsible for the generating mailers and message definitions.
|
5
|
+
#
|
6
|
+
class Mailer < Thor::Group
|
7
|
+
|
8
|
+
Tennpipes::Generators.add_generator(:mailer, self)
|
9
|
+
|
10
|
+
def self.source_root; File.expand_path(File.dirname(__FILE__)); end
|
11
|
+
def self.banner; 'tennpipes-init mailer [name]'; end
|
12
|
+
|
13
|
+
include Thor::Actions
|
14
|
+
include Tennpipes::Generators::Actions
|
15
|
+
include Tennpipes::Generators::Components::Actions
|
16
|
+
|
17
|
+
desc "Description:\n\n\ttennpipes-init mailer generates a new Tennpipes mailer"
|
18
|
+
|
19
|
+
argument :name, :desc => 'The name of your tennpipes mailer'
|
20
|
+
argument :actions, :desc => 'The delivery actions to add to your mailer', :type => :array, :default => []
|
21
|
+
class_option :root, :desc => 'The root destination', :aliases => '-r', :default => '.', :type => :string
|
22
|
+
class_option :app, :desc => 'The application destination path', :aliases => '-a', :default => '/app', :type => :string
|
23
|
+
class_option :destroy, :aliases => '-d', :default => false, :type => :boolean
|
24
|
+
class_option :namespace, :desc => 'The name space of your tennpipes project', :aliases => '-n', :default => '', :type => :string
|
25
|
+
|
26
|
+
# Show help if no ARGV given.
|
27
|
+
require_arguments!
|
28
|
+
|
29
|
+
##
|
30
|
+
# Execute mailer generation.
|
31
|
+
#
|
32
|
+
def create_mailer
|
33
|
+
self.destination_root = options[:root]
|
34
|
+
if in_app_root?
|
35
|
+
app = options[:app]
|
36
|
+
check_app_existence(app)
|
37
|
+
self.behavior = :revoke if options[:destroy]
|
38
|
+
@project_name = options[:namespace].underscore.camelize
|
39
|
+
@project_name = fetch_project_name(app) if @project_name.empty?
|
40
|
+
@app_name = fetch_app_name(app)
|
41
|
+
@actions = actions.map(&:to_sym)
|
42
|
+
@short_name = name.to_s.gsub(/_mailer/i, '').underscore.downcase
|
43
|
+
@mailer_basename = @short_name.underscore
|
44
|
+
template "templates/mailer.rb.tt", destination_root(app, 'mailers', "#{@mailer_basename}.rb")
|
45
|
+
empty_directory destination_root(app, 'views', 'mailers', @mailer_basename)
|
46
|
+
else
|
47
|
+
say 'You are not at the root of a Tennpipes application! (config/boot.rb not found)'
|
48
|
+
end
|
49
|
+
end
|
50
|
+
end
|
51
|
+
end
|
52
|
+
end
|
@@ -0,0 +1,43 @@
|
|
1
|
+
module Tennpipes
|
2
|
+
module Generators
|
3
|
+
##
|
4
|
+
# Responsible for generating migration files for the appropriate ORM component.
|
5
|
+
#
|
6
|
+
class Migration < Thor::Group
|
7
|
+
Tennpipes::Generators.add_generator(:migration, self)
|
8
|
+
|
9
|
+
def self.source_root; File.expand_path(File.dirname(__FILE__)); end
|
10
|
+
def self.banner; "tennpipes-init migration [name] [fields]"; end
|
11
|
+
|
12
|
+
include Thor::Actions
|
13
|
+
include Tennpipes::Generators::Actions
|
14
|
+
include Tennpipes::Generators::Components::Actions
|
15
|
+
|
16
|
+
desc "Description:\n\n\ttennpipes-init migration generates a new migration file"
|
17
|
+
|
18
|
+
argument :name, :desc => 'The name of your tennpipes migration'
|
19
|
+
argument :columns, :desc => 'The columns for the migration', :type => :array, :default => []
|
20
|
+
class_option :root, :desc => 'The root destination', :aliases => '-r', :default => '.', :type => :string
|
21
|
+
class_option :destroy, :aliases => '-d', :default => false, :type => :boolean
|
22
|
+
|
23
|
+
# Show help if no ARGV given.
|
24
|
+
require_arguments!
|
25
|
+
|
26
|
+
# Creates the migration file within a Tennpipes project.
|
27
|
+
def create_migration
|
28
|
+
self.destination_root = options[:root]
|
29
|
+
if in_app_root?
|
30
|
+
self.behavior = :revoke if options[:destroy]
|
31
|
+
if include_component_module_for(:orm)
|
32
|
+
create_migration_file(name, name, columns)
|
33
|
+
else
|
34
|
+
say '<= You need an ORM adapter for run this generator. Sorry!'
|
35
|
+
raise SystemExit
|
36
|
+
end
|
37
|
+
else
|
38
|
+
say 'You are not at the root of a Tennpipes application! (config/boot.rb not found)'
|
39
|
+
end
|
40
|
+
end
|
41
|
+
end
|
42
|
+
end
|
43
|
+
end
|
@@ -0,0 +1,113 @@
|
|
1
|
+
module Tennpipes
|
2
|
+
module Generators
|
3
|
+
##
|
4
|
+
# Responsible for generating new models for the specified ORM component.
|
5
|
+
#
|
6
|
+
class Model < Thor::Group
|
7
|
+
Tennpipes::Generators.add_generator(:model, self)
|
8
|
+
|
9
|
+
def self.source_root; File.expand_path(File.dirname(__FILE__)); end
|
10
|
+
def self.banner; "tennpipes-init model [name] [fields]"; end
|
11
|
+
|
12
|
+
include Thor::Actions
|
13
|
+
include Tennpipes::Generators::Actions
|
14
|
+
include Tennpipes::Generators::Components::Actions
|
15
|
+
|
16
|
+
desc "Description:\n\n\ttennpipes-init model generates a new model and migration files"
|
17
|
+
|
18
|
+
argument :name, :desc => 'The name of your tennpipes model'
|
19
|
+
argument :fields, :desc => 'The fields for the model', :default => [], :type => :array
|
20
|
+
class_option :root, :desc => 'The root destination', :aliases => '-r', :default => '.', :type => :string
|
21
|
+
class_option :app, :desc => 'The application destination path', :aliases => '-a', :default => '.', :type => :string
|
22
|
+
class_option :destroy, :aliases => '-d', :default => false, :type => :boolean
|
23
|
+
class_option :skip_migration, :aliases => '-s', :default => false, :type => :boolean
|
24
|
+
class_option :force, :desc => 'Generate model files if app already exists', :aliases => '-f', :default => false, :type => :boolean
|
25
|
+
|
26
|
+
# Show help if no ARGV given.
|
27
|
+
require_arguments!
|
28
|
+
|
29
|
+
# Execute the model generation.
|
30
|
+
#
|
31
|
+
def create_model
|
32
|
+
app = options[:app]
|
33
|
+
return unless valid_model_for?(app)
|
34
|
+
|
35
|
+
include_component_module_for(:test)
|
36
|
+
migration_name = "create_#{name.pluralize.underscore}"
|
37
|
+
apply_default_fields fields
|
38
|
+
create_model_file(name, :fields => fields, :app => app)
|
39
|
+
generate_model_test(name) if test?
|
40
|
+
create_model_migration(migration_name, name, fields) unless options[:skip_migration]
|
41
|
+
end
|
42
|
+
|
43
|
+
private
|
44
|
+
|
45
|
+
##
|
46
|
+
# Validate model characteristics
|
47
|
+
# Alert if the model name is being used
|
48
|
+
#
|
49
|
+
def valid_model_for?(app)
|
50
|
+
self.destination_root = options[:root]
|
51
|
+
return false unless correct_path?
|
52
|
+
|
53
|
+
check_app_existence(app)
|
54
|
+
|
55
|
+
if options[:destroy]
|
56
|
+
self.behavior = :revoke
|
57
|
+
else
|
58
|
+
unless options[:force]
|
59
|
+
say "#{@camel_name} already exists."
|
60
|
+
say "Please, change the name."
|
61
|
+
return false
|
62
|
+
end
|
63
|
+
end if model_name_already_exists?
|
64
|
+
|
65
|
+
return false if has_invalid_fields?
|
66
|
+
|
67
|
+
check_orm
|
68
|
+
end
|
69
|
+
|
70
|
+
##
|
71
|
+
# Return false if the model name is being used
|
72
|
+
#
|
73
|
+
def model_name_already_exists?
|
74
|
+
@camel_name = name.to_s.underscore.camelize
|
75
|
+
|
76
|
+
@project_name = ""
|
77
|
+
@project_name = fetch_project_name
|
78
|
+
|
79
|
+
return false unless already_exists?(@camel_name, @project_name)
|
80
|
+
true
|
81
|
+
end
|
82
|
+
|
83
|
+
##
|
84
|
+
# Alert if there is not an ORM Adapter
|
85
|
+
#
|
86
|
+
def check_orm
|
87
|
+
return true if include_component_module_for(:orm)
|
88
|
+
|
89
|
+
say "<= You need an ORM adapter for run this generator. Sorry!"
|
90
|
+
raise SystemExit
|
91
|
+
end
|
92
|
+
|
93
|
+
##
|
94
|
+
# Check app path
|
95
|
+
#
|
96
|
+
def correct_path?
|
97
|
+
return true if in_app_root?
|
98
|
+
say 'You are not at the root of a Tennpipes application! (config/boot.rb not found)'
|
99
|
+
false
|
100
|
+
end
|
101
|
+
|
102
|
+
##
|
103
|
+
# Check if the fields are valid
|
104
|
+
#
|
105
|
+
def has_invalid_fields?
|
106
|
+
if invalids = invalid_fields(fields)
|
107
|
+
say 'Invalid field name:', :red
|
108
|
+
say " #{invalids.join(", ")}"
|
109
|
+
end
|
110
|
+
end
|
111
|
+
end
|
112
|
+
end
|
113
|
+
end
|