tennpipes-init 3.6.6

Sign up to get free protection for your applications and to get access to all the features.
Files changed (167) hide show
  1. checksums.yaml +7 -0
  2. data/LICENSE.txt +20 -0
  3. data/README.rdoc +163 -0
  4. data/Rakefile +1 -0
  5. data/bin/tennpipes-init +16 -0
  6. data/lib/tennpipes-init.rb +73 -0
  7. data/lib/tennpipes-init/command.rb +18 -0
  8. data/lib/tennpipes-init/generators/actions.rb +630 -0
  9. data/lib/tennpipes-init/generators/app.rb +75 -0
  10. data/lib/tennpipes-init/generators/app/app.rb.tt +72 -0
  11. data/lib/tennpipes-init/generators/app/app.rb.tt~ +72 -0
  12. data/lib/tennpipes-init/generators/cli.rb +57 -0
  13. data/lib/tennpipes-init/generators/component.rb +73 -0
  14. data/lib/tennpipes-init/generators/components/actions.rb +208 -0
  15. data/lib/tennpipes-init/generators/components/mocks/mocha.rb +10 -0
  16. data/lib/tennpipes-init/generators/components/mocks/rr.rb +13 -0
  17. data/lib/tennpipes-init/generators/components/orms/activerecord.rb +201 -0
  18. data/lib/tennpipes-init/generators/components/orms/couchrest.rb +55 -0
  19. data/lib/tennpipes-init/generators/components/orms/datamapper.rb +140 -0
  20. data/lib/tennpipes-init/generators/components/orms/dynamoid.rb +67 -0
  21. data/lib/tennpipes-init/generators/components/orms/minirecord.rb +165 -0
  22. data/lib/tennpipes-init/generators/components/orms/mongoid.rb +113 -0
  23. data/lib/tennpipes-init/generators/components/orms/mongomapper.rb +43 -0
  24. data/lib/tennpipes-init/generators/components/orms/mongomatic.rb +84 -0
  25. data/lib/tennpipes-init/generators/components/orms/ohm.rb +65 -0
  26. data/lib/tennpipes-init/generators/components/orms/ripple.rb +75 -0
  27. data/lib/tennpipes-init/generators/components/orms/sequel.rb +99 -0
  28. data/lib/tennpipes-init/generators/components/renderers/erb.rb +3 -0
  29. data/lib/tennpipes-init/generators/components/renderers/haml.rb +3 -0
  30. data/lib/tennpipes-init/generators/components/renderers/liquid.rb +4 -0
  31. data/lib/tennpipes-init/generators/components/renderers/slim.rb +3 -0
  32. data/lib/tennpipes-init/generators/components/scripts/dojo.rb +10 -0
  33. data/lib/tennpipes-init/generators/components/scripts/extcore.rb +10 -0
  34. data/lib/tennpipes-init/generators/components/scripts/jquery.rb +10 -0
  35. data/lib/tennpipes-init/generators/components/scripts/mootools.rb +10 -0
  36. data/lib/tennpipes-init/generators/components/scripts/prototype.rb +12 -0
  37. data/lib/tennpipes-init/generators/components/scripts/rightjs.rb +10 -0
  38. data/lib/tennpipes-init/generators/components/stylesheets/compass.rb +39 -0
  39. data/lib/tennpipes-init/generators/components/stylesheets/compass/application.scss +43 -0
  40. data/lib/tennpipes-init/generators/components/stylesheets/compass/partials/_base.scss +12 -0
  41. data/lib/tennpipes-init/generators/components/stylesheets/less.rb +25 -0
  42. data/lib/tennpipes-init/generators/components/stylesheets/sass.rb +15 -0
  43. data/lib/tennpipes-init/generators/components/stylesheets/scss.rb +16 -0
  44. data/lib/tennpipes-init/generators/components/tests/bacon.rb +103 -0
  45. data/lib/tennpipes-init/generators/components/tests/cucumber.rb +86 -0
  46. data/lib/tennpipes-init/generators/components/tests/minitest.rb +110 -0
  47. data/lib/tennpipes-init/generators/components/tests/riot.rb +117 -0
  48. data/lib/tennpipes-init/generators/components/tests/rspec.rb +111 -0
  49. data/lib/tennpipes-init/generators/components/tests/shoulda.rb +114 -0
  50. data/lib/tennpipes-init/generators/components/tests/steak.rb +114 -0
  51. data/lib/tennpipes-init/generators/controller.rb +77 -0
  52. data/lib/tennpipes-init/generators/helper.rb +50 -0
  53. data/lib/tennpipes-init/generators/mailer.rb +52 -0
  54. data/lib/tennpipes-init/generators/migration.rb +43 -0
  55. data/lib/tennpipes-init/generators/model.rb +113 -0
  56. data/lib/tennpipes-init/generators/plugin.rb +67 -0
  57. data/lib/tennpipes-init/generators/project.rb +160 -0
  58. data/lib/tennpipes-init/generators/project/config.ru +9 -0
  59. data/lib/tennpipes-init/generators/project/config/apps.rb.tt +35 -0
  60. data/lib/tennpipes-init/generators/project/config/boot.rb +49 -0
  61. data/lib/tennpipes-init/generators/project/public/favicon.ico +0 -0
  62. data/lib/tennpipes-init/generators/project/public/images/booking.com.png +0 -0
  63. data/lib/tennpipes-init/generators/project/public/images/causes.png +0 -0
  64. data/lib/tennpipes-init/generators/project/public/images/ennkeypee_bg.jpg +0 -0
  65. data/lib/tennpipes-init/generators/project/public/images/ennkeypee_bluelogo.png +0 -0
  66. data/lib/tennpipes-init/generators/project/public/images/ennkeypee_bluelogo.svg +68 -0
  67. data/lib/tennpipes-init/generators/project/public/images/ennkeypee_whitelogo.png +0 -0
  68. data/lib/tennpipes-init/generators/project/public/images/ennkeypee_whitelogo.svg +65 -0
  69. data/lib/tennpipes-init/generators/project/public/images/forever21.png +0 -0
  70. data/lib/tennpipes-init/generators/project/public/images/icons/foundation-icons.eot +0 -0
  71. data/lib/tennpipes-init/generators/project/public/images/icons/foundation-icons.svg +970 -0
  72. data/lib/tennpipes-init/generators/project/public/images/icons/foundation-icons.ttf +0 -0
  73. data/lib/tennpipes-init/generators/project/public/images/icons/foundation-icons.woff +0 -0
  74. data/lib/tennpipes-init/generators/project/public/images/icons/tennpipes-icons.css +598 -0
  75. data/lib/tennpipes-init/generators/project/public/images/image1.jpg +0 -0
  76. data/lib/tennpipes-init/generators/project/public/images/image11.jpg +0 -0
  77. data/lib/tennpipes-init/generators/project/public/images/image2.jpg +0 -0
  78. data/lib/tennpipes-init/generators/project/public/images/image3.jpg +0 -0
  79. data/lib/tennpipes-init/generators/project/public/images/intuit.png +0 -0
  80. data/lib/tennpipes-init/generators/project/public/images/krispykreme.png +0 -0
  81. data/lib/tennpipes-init/generators/project/public/images/placeholders/README.md +302 -0
  82. data/lib/tennpipes-init/generators/project/public/images/placeholders/bower.json +4 -0
  83. data/lib/tennpipes-init/generators/project/public/images/placeholders/composer.json +34 -0
  84. data/lib/tennpipes-init/generators/project/public/images/placeholders/gulpfile.js +92 -0
  85. data/lib/tennpipes-init/generators/project/public/images/placeholders/holder.js +1920 -0
  86. data/lib/tennpipes-init/generators/project/public/images/placeholders/holder.min.js +12 -0
  87. data/lib/tennpipes-init/generators/project/public/images/placeholders/package.json +46 -0
  88. data/lib/tennpipes-init/generators/project/public/images/placeholders/src/holder.js +1411 -0
  89. data/lib/tennpipes-init/generators/project/public/images/placeholders/src/lib/augment.js +27 -0
  90. data/lib/tennpipes-init/generators/project/public/images/placeholders/src/lib/ondomready.js +155 -0
  91. data/lib/tennpipes-init/generators/project/public/images/placeholders/src/lib/polyfills.js +177 -0
  92. data/lib/tennpipes-init/generators/project/public/images/placeholders/src/scenegraph.js +101 -0
  93. data/lib/tennpipes-init/generators/project/public/images/placeholders/src/utils.js +129 -0
  94. data/lib/tennpipes-init/generators/project/public/images/priceline.com.png +0 -0
  95. data/lib/tennpipes-init/generators/project/public/images/stripe.png +0 -0
  96. data/lib/tennpipes-init/generators/project/public/javascripts/tennpipes.min.js +6081 -0
  97. data/lib/tennpipes-init/generators/project/public/javascripts/tennpipes/tennpipes.abide.js +340 -0
  98. data/lib/tennpipes-init/generators/project/public/javascripts/tennpipes/tennpipes.accordion.js +67 -0
  99. data/lib/tennpipes-init/generators/project/public/javascripts/tennpipes/tennpipes.alert.js +43 -0
  100. data/lib/tennpipes-init/generators/project/public/javascripts/tennpipes/tennpipes.clearing.js +556 -0
  101. data/lib/tennpipes-init/generators/project/public/javascripts/tennpipes/tennpipes.dropdown.js +448 -0
  102. data/lib/tennpipes-init/generators/project/public/javascripts/tennpipes/tennpipes.equalizer.js +77 -0
  103. data/lib/tennpipes-init/generators/project/public/javascripts/tennpipes/tennpipes.interchange.js +354 -0
  104. data/lib/tennpipes-init/generators/project/public/javascripts/tennpipes/tennpipes.joyride.js +932 -0
  105. data/lib/tennpipes-init/generators/project/public/javascripts/tennpipes/tennpipes.js +703 -0
  106. data/lib/tennpipes-init/generators/project/public/javascripts/tennpipes/tennpipes.magellan.js +203 -0
  107. data/lib/tennpipes-init/generators/project/public/javascripts/tennpipes/tennpipes.offcanvas.js +152 -0
  108. data/lib/tennpipes-init/generators/project/public/javascripts/tennpipes/tennpipes.orbit.js +476 -0
  109. data/lib/tennpipes-init/generators/project/public/javascripts/tennpipes/tennpipes.reveal.js +471 -0
  110. data/lib/tennpipes-init/generators/project/public/javascripts/tennpipes/tennpipes.slider.js +263 -0
  111. data/lib/tennpipes-init/generators/project/public/javascripts/tennpipes/tennpipes.tab.js +237 -0
  112. data/lib/tennpipes-init/generators/project/public/javascripts/tennpipes/tennpipes.tooltip.js +307 -0
  113. data/lib/tennpipes-init/generators/project/public/javascripts/tennpipes/tennpipes.topbar.js +452 -0
  114. data/lib/tennpipes-init/generators/project/public/javascripts/vendor/fastclick.js +8 -0
  115. data/lib/tennpipes-init/generators/project/public/javascripts/vendor/jquery.cookie.js +8 -0
  116. data/lib/tennpipes-init/generators/project/public/javascripts/vendor/jquery.js +26 -0
  117. data/lib/tennpipes-init/generators/project/public/javascripts/vendor/modernizr.js +8 -0
  118. data/lib/tennpipes-init/generators/project/public/javascripts/vendor/placeholder.js +2 -0
  119. data/lib/tennpipes-init/generators/project/public/stylesheets/app.css~ +178 -0
  120. data/lib/tennpipes-init/generators/project/public/stylesheets/app1.css~ +177 -0
  121. data/lib/tennpipes-init/generators/project/public/stylesheets/ennkeypee.css +214 -0
  122. data/lib/tennpipes-init/generators/project/public/stylesheets/ennkeypee.css~ +214 -0
  123. data/lib/tennpipes-init/generators/project/public/stylesheets/normalize.css +427 -0
  124. data/lib/tennpipes-init/generators/project/public/stylesheets/tennpipes.css +6201 -0
  125. data/lib/tennpipes-init/generators/project/public/stylesheets/tennpipes.css~ +6201 -0
  126. data/lib/tennpipes-init/generators/project/public/stylesheets/tennpipes.min.css +1 -0
  127. data/lib/tennpipes-init/generators/runner.rb +139 -0
  128. data/lib/tennpipes-init/generators/task.rb +45 -0
  129. data/lib/tennpipes-init/generators/templates/Gemfile.tt +32 -0
  130. data/lib/tennpipes-init/generators/templates/Rakefile.tt +8 -0
  131. data/lib/tennpipes-init/generators/templates/controller.rb.tt +22 -0
  132. data/lib/tennpipes-init/generators/templates/gem/README.md.tt +29 -0
  133. data/lib/tennpipes-init/generators/templates/gem/gemspec.tt +19 -0
  134. data/lib/tennpipes-init/generators/templates/gem/lib/libname.tt +6 -0
  135. data/lib/tennpipes-init/generators/templates/gem/lib/libname/version.tt +3 -0
  136. data/lib/tennpipes-init/generators/templates/helper.rb.tt +13 -0
  137. data/lib/tennpipes-init/generators/templates/initializer.rb.tt +5 -0
  138. data/lib/tennpipes-init/generators/templates/mailer.rb.tt +54 -0
  139. data/lib/tennpipes-init/generators/templates/project_bin.tt +14 -0
  140. data/lib/tennpipes-init/generators/templates/task.rb.tt +7 -0
  141. data/lib/tennpipes-init/tennpipes-tasks/activerecord.rb +377 -0
  142. data/lib/tennpipes-init/tennpipes-tasks/database.rb +12 -0
  143. data/lib/tennpipes-init/tennpipes-tasks/datamapper.rb +94 -0
  144. data/lib/tennpipes-init/tennpipes-tasks/minirecord.rb +19 -0
  145. data/lib/tennpipes-init/tennpipes-tasks/mongoid.rb +215 -0
  146. data/lib/tennpipes-init/tennpipes-tasks/mongomapper.rb +55 -0
  147. data/lib/tennpipes-init/tennpipes-tasks/sequel.rb +85 -0
  148. data/lib/tennpipes-init/tennpipes-tasks/sql-helpers.rb +72 -0
  149. data/test/fixtures/admin_template.rb +7 -0
  150. data/test/fixtures/example_template.rb +15 -0
  151. data/test/fixtures/git_template.rb +4 -0
  152. data/test/fixtures/plugin_template.rb +13 -0
  153. data/test/fixtures/rake_template.rb +9 -0
  154. data/test/helper.rb +103 -0
  155. data/test/test_app_generator.rb +142 -0
  156. data/test/test_cli.rb +27 -0
  157. data/test/test_component_generator.rb +98 -0
  158. data/test/test_controller_generator.rb +272 -0
  159. data/test/test_generator.rb +13 -0
  160. data/test/test_helper_generator.rb +133 -0
  161. data/test/test_mailer_generator.rb +69 -0
  162. data/test/test_migration_generator.rb +222 -0
  163. data/test/test_model_generator.rb +553 -0
  164. data/test/test_plugin_generator.rb +152 -0
  165. data/test/test_project_generator.rb +757 -0
  166. data/test/test_task_generator.rb +53 -0
  167. metadata +285 -0
@@ -0,0 +1,72 @@
1
+ require 'fileutils'
2
+
3
+ module Tennpipes
4
+ module Generators
5
+ module SqlHelpers
6
+ def self.create_db(adapter, user, password, host, database, charset, collation)
7
+ case adapter
8
+ when 'postgres'
9
+ environment = {}
10
+ environment['PGPASSWORD'] = password unless password.blank?
11
+
12
+ arguments = []
13
+ arguments << "--encoding=#{charset}" if charset
14
+ arguments << "--host=#{host}" if host
15
+ arguments << "--username=#{user}" if user
16
+ arguments << database
17
+
18
+ Process.wait Process.spawn(environment, 'createdb', *arguments)
19
+ when 'mysql', 'mysql2'
20
+ environment = {}
21
+ environment['MYSQL_PWD'] = password unless password.blank?
22
+
23
+ arguments = []
24
+ arguments << "--user=#{user}" if user
25
+ arguments << "--host=#{host}" unless %w[127.0.0.1 localhost].include?(host)
26
+
27
+ arguments << '-e'
28
+ arguments << "CREATE DATABASE #{database} DEFAULT CHARACTER SET #{charset} DEFAULT COLLATE #{collation}"
29
+
30
+ Process.wait Process.spawn(environment, 'mysql', *arguments)
31
+ when 'sqlite', 'sqlite3'
32
+ fail "Database #{database} already exists" if File.file?(database)
33
+ FileUtils.mkdir_p(File.dirname(database))
34
+ File.open(database, 'a') {}
35
+ else
36
+ raise "Adapter #{adapter} not supported for creating databases yet."
37
+ end
38
+ end
39
+
40
+ def self.drop_db(adapter, user, password, host, database)
41
+ case adapter
42
+ when 'postgres'
43
+ environment = {}
44
+ environment['PGPASSWORD'] = password unless password.blank?
45
+
46
+ arguments = []
47
+ arguments << "--host=#{host}" if host
48
+ arguments << "--username=#{user}" if user
49
+ arguments << database
50
+
51
+ Process.wait Process.spawn(environment, 'dropdb', *arguments)
52
+ when 'mysql', 'mysql2'
53
+ environment = {}
54
+ environment['MYSQL_PWD'] = password unless password.blank?
55
+
56
+ arguments = []
57
+ arguments << "--user=#{user}" if user
58
+ arguments << "--host=#{host}" unless %w[127.0.0.1 localhost].include?(host)
59
+
60
+ arguments << '-e'
61
+ arguments << "DROP DATABASE IF EXISTS #{database}"
62
+
63
+ Process.wait Process.spawn(environment, 'mysql', *arguments)
64
+ when 'sqlite', 'sqlite3'
65
+ File.delete(database) if File.file?(database)
66
+ else
67
+ raise "Adapter #{adapter} not supported for dropping databases yet."
68
+ end
69
+ end
70
+ end
71
+ end
72
+ end
@@ -0,0 +1,7 @@
1
+ project :test => :shoulda, :orm => :activerecord
2
+
3
+ generate :model, "post title:string body:text"
4
+ rake "ar:create"
5
+ generate :admin
6
+ rake "ar:migrate"
7
+ generate :admin_page, "post"
@@ -0,0 +1,15 @@
1
+ project :test => :shoulda, :orm => :activerecord, :template => 'mongochist', :dev => true
2
+
3
+ generate :model, "post title:string body:text"
4
+ generate :controller, "posts get:index get:new post:new"
5
+ generate :migration, "AddEmailToUser email:string"
6
+ generate :fake, "foo bar"
7
+ generate :plugin, "carrierwave"
8
+
9
+ require_dependencies 'nokogiri'
10
+
11
+ initializer :test, "# Example"
12
+
13
+ app :testapp do
14
+ generate :controller, "users get:index"
15
+ end
@@ -0,0 +1,4 @@
1
+ project :test => :rspec, :orm => :activerecord
2
+ git :init
3
+ git :add, "."
4
+ git :commit, "-m 'hello'"
@@ -0,0 +1,13 @@
1
+ # Template to get Hoptoad on Tennpipes
2
+ # prereqs:
3
+ # sudo gem install rack_hoptoad
4
+ # http://github.com/atmos/rack_hoptoad
5
+ HOPTOAD = <<-HOPTOAD
6
+ app.use Rack::Hoptoad, 'API_KEY_HERE' do |notifier|
7
+ #notifier.report_under << 'custom'
8
+ #notifier.environment_filters << %w(MY_SECRET_KEY MY_SECRET_TOKEN)
9
+ end
10
+ HOPTOAD
11
+ require_dependencies 'rack_hoptoad', :require => 'rack/hoptoad'
12
+ initializer :hoptoad,HOPTOAD
13
+ inject_into_file destination_root('/app/app.rb')," enable :raise_errors\n", :after => "configure do\n"
@@ -0,0 +1,9 @@
1
+ project :test => :shoulda, :orm => :activerecord
2
+ # create_file "lib/tasks/test.rake", <<-RAKE
3
+ # task :custom do
4
+ # File.open('#{destination_root("/tmp/custom.txt")}', 'w') { |f|
5
+ # f.puts('Completed custom rake test')
6
+ # }
7
+ # end
8
+ # RAKE
9
+ rake "custom"
data/test/helper.rb ADDED
@@ -0,0 +1,103 @@
1
+ require 'minitest/autorun'
2
+ require 'minitest/pride'
3
+ require 'mocha/setup'
4
+ require 'rack/test'
5
+ require 'webrat'
6
+ require 'fakeweb'
7
+ require 'thor/group'
8
+ require 'tennpipes-init'
9
+ require 'tennpipes-base'
10
+ require 'tennpipes-mail'
11
+ require 'tennpipes-helper'
12
+
13
+ require 'ext/minitest-spec'
14
+
15
+ Tennpipes::Generators.load_components!
16
+
17
+ class MiniTest::Spec
18
+ include Webrat::Methods
19
+ include Webrat::Matchers
20
+
21
+ Webrat.configure do |config|
22
+ config.mode = :rack
23
+ end
24
+
25
+ def stop_time_for_test
26
+ time = Time.now
27
+ Time.stubs(:now).returns(time)
28
+ return time
29
+ end
30
+
31
+ # generate(:controller, 'DemoItems', '-r=/tmp/sample_project')
32
+ def generate(name, *params)
33
+ "Tennpipes::Generators::#{name.to_s.camelize}".constantize.start(params)
34
+ end
35
+
36
+ # generate_with_parts(:app, "demo", "--root=/tmp/sample_project", :apps => "subapp")
37
+ # This method is intended to reproduce the real environment.
38
+ def generate_with_parts(name, *params)
39
+ features, constants = [$", Object.constants].map{|x| Marshal.load(Marshal.dump(x)) }
40
+
41
+ if root = params.find{|x| x.index(/\-r=|\-\-root=/) }
42
+ root = root.split(/=/)[1]
43
+ options, model_path = {}, File.expand_path(File.join(root, "/models/**/*.rb"))
44
+ options = params.pop if params.last.is_a?(Hash)
45
+ Dir[model_path].each{|path| require path }
46
+ Array(options[:apps]).each do |app_name|
47
+ path = File.expand_path(File.join(root, "/#{app_name}/app.rb"))
48
+ require path if File.exist?(path)
49
+ end if options[:apps]
50
+ end
51
+ "Tennpipes::Generators::#{name.to_s.camelize}".constantize.start(params)
52
+ ($" - features).each{|x| $".delete(x) }
53
+ (Object.constants - constants).each{|constant| Object.instance_eval{ remove_const(constant) }}
54
+ end
55
+
56
+ # expects_generated :model, "post title:string body:text"
57
+ def expects_generated(generator, params="")
58
+ Tennpipes.expects(:bin_gen).with(generator, *params.split(' ')).returns(true)
59
+ end
60
+
61
+ # expects_generated_project :test => :shoulda, :orm => :activerecord, :dev => true
62
+ def expects_generated_project(options={})
63
+ project_root = options[:root]
64
+ project_name = options[:name]
65
+ settings = options.slice!(:name, :root)
66
+ components = settings.sort_by { |k, v| k.to_s }.map { |component, value| "--#{component}=#{value}" }
67
+ params = [project_name, *components].push("-r=#{project_root}")
68
+ Tennpipes.expects(:bin_gen).with(*params.unshift('project')).returns(true)
69
+ end
70
+
71
+ # expects_dependencies 'nokogiri'
72
+ def expects_dependencies(name)
73
+ instance = mock
74
+ instance.expects(:invoke!).once
75
+ include_text = "gem '#{name}'\n"
76
+ Thor::Actions::InjectIntoFile.expects(:new).with(anything,'Gemfile', include_text, anything).returns(instance)
77
+ end
78
+
79
+ # expects_initializer :test, "# Example"
80
+ def expects_initializer(name, body,options={})
81
+ #options.reverse_merge!(:root => "/tmp/sample_project")
82
+ path = File.join(options[:root],'lib',"#{name}_initializer.rb")
83
+ instance = mock
84
+ instance.expects(:invoke!).at_least_once
85
+ include_text = " register #{name.to_s.camelize}Initializer\n"
86
+ Thor::Actions::InjectIntoFile.expects(:new).with(anything,anything, include_text, anything).returns(instance)
87
+ Thor::Actions::CreateFile.expects(:new).with(anything, path, kind_of(Proc), anything).returns(instance)
88
+ end
89
+
90
+ # expects_rake "custom"
91
+ def expects_rake(command,options={})
92
+ #options.reverse_merge!(:root => '/tmp')
93
+ Tennpipes.expects(:bin).with("rake", command, "-c=#{options[:root]}").returns(true)
94
+ end
95
+ end
96
+
97
+ module Webrat
98
+ module Logging
99
+ def logger # # @private
100
+ @logger = nil
101
+ end
102
+ end
103
+ end
@@ -0,0 +1,142 @@
1
+ require File.expand_path(File.dirname(__FILE__) + '/helper')
2
+
3
+ describe "AppGenerator" do
4
+ def setup
5
+ @apptmp = "#{Dir.tmpdir}/tennpipes-tests/#{SecureRandom.hex}"
6
+ `mkdir -p #{@apptmp}`
7
+ end
8
+
9
+ def teardown
10
+ `rm -rf #{@apptmp}`
11
+ end
12
+
13
+ describe 'the app generator' do
14
+ it 'should fail outside app root' do
15
+ out, err = capture_io { generate(:app, 'demo_root', "-r=#{@apptmp}") }
16
+ assert_match(/not at the root/, out)
17
+ assert_no_file_exists("#{@apptmp}/demo_root")
18
+ end
19
+
20
+ it 'should create correctly a new tennpipes application' do
21
+ capture_io { generate(:project, 'sample_project', "--root=#{@apptmp}") }
22
+ capture_io { generate(:app, 'demo', "--root=#{@apptmp}/sample_project") }
23
+ assert_dir_exists("#{@apptmp}/sample_project")
24
+ assert_dir_exists("#{@apptmp}/sample_project/demo")
25
+ assert_file_exists("#{@apptmp}/sample_project/demo/app.rb")
26
+ assert_dir_exists("#{@apptmp}/sample_project/demo/controllers")
27
+ assert_dir_exists("#{@apptmp}/sample_project/demo/helpers")
28
+ assert_dir_exists("#{@apptmp}/sample_project/demo/views")
29
+ assert_dir_exists("#{@apptmp}/sample_project/demo/views/layouts")
30
+ assert_dir_exists("#{@apptmp}/sample_project/public/demo")
31
+ assert_match_in_file("Tennpipes.mount('SampleProject::Demo', :app_file => Tennpipes.root('demo/app.rb')).to('/demo')", "#{@apptmp}/sample_project/config/apps.rb")
32
+ assert_match_in_file('module SampleProject', "#{@apptmp}/sample_project/demo/app.rb")
33
+ assert_match_in_file('class Demo < Tennpipes::Application', "#{@apptmp}/sample_project/demo/app.rb")
34
+ assert_match_in_file(/Tennpipes.configure_apps do/, "#{@apptmp}/sample_project/config/apps.rb")
35
+ assert_match_in_file(/set :session_secret, '[0-9A-z]*'/, "#{@apptmp}/sample_project/config/apps.rb")
36
+ end
37
+
38
+ it 'should create correctly a new tennpipes application with an underscore name' do
39
+ capture_io { generate(:project, 'sample_project', "--root=#{@apptmp}") }
40
+ capture_io { generate(:app, 'demo_app', "--root=#{@apptmp}/sample_project") }
41
+ assert_dir_exists("#{@apptmp}/sample_project")
42
+ assert_dir_exists("#{@apptmp}/sample_project/demo_app")
43
+ assert_file_exists("#{@apptmp}/sample_project/demo_app/app.rb")
44
+ assert_dir_exists("#{@apptmp}/sample_project/demo_app/controllers")
45
+ assert_dir_exists("#{@apptmp}/sample_project/demo_app/helpers")
46
+ assert_dir_exists("#{@apptmp}/sample_project/demo_app/views")
47
+ assert_dir_exists("#{@apptmp}/sample_project/demo_app/views/layouts")
48
+ assert_dir_exists("#{@apptmp}/sample_project/public/demo_app")
49
+ assert_match_in_file("Tennpipes.mount('SampleProject::DemoApp', :app_file => Tennpipes.root('demo_app/app.rb')).to('/demo_app')", "#{@apptmp}/sample_project/config/apps.rb")
50
+ assert_match_in_file('module SampleProject', "#{@apptmp}/sample_project/demo_app/app.rb")
51
+ assert_match_in_file('class DemoApp < Tennpipes::Application', "#{@apptmp}/sample_project/demo_app/app.rb")
52
+ assert_match_in_file(/Tennpipes.configure_apps do/, "#{@apptmp}/sample_project/config/apps.rb")
53
+ assert_match_in_file(/set :session_secret, '[0-9A-z]*'/, "#{@apptmp}/sample_project/config/apps.rb")
54
+ end
55
+
56
+ it 'should generate tiny app skeleton' do
57
+ capture_io { generate(:project, 'sample_project', "--root=#{@apptmp}") }
58
+ capture_io { generate(:app, 'demo','--tiny',"--root=#{@apptmp}/sample_project") }
59
+ assert_dir_exists("#{@apptmp}/sample_project")
60
+ assert_dir_exists("#{@apptmp}/sample_project/demo")
61
+ assert_file_exists("#{@apptmp}/sample_project/demo/helpers.rb")
62
+ assert_file_exists("#{@apptmp}/sample_project/demo/controllers.rb")
63
+ assert_file_exists("#{@apptmp}/sample_project/demo/mailers.rb")
64
+ assert_dir_exists("#{@apptmp}/sample_project/public/demo")
65
+ assert_match_in_file(/:notifier/,"#{@apptmp}/sample_project/demo/mailers.rb")
66
+ assert_match_in_file(/module Helper/, "#{@apptmp}/sample_project/demo/helpers.rb")
67
+ assert_match_in_file(/helpers Helper/, "#{@apptmp}/sample_project/demo/helpers.rb")
68
+ assert_no_file_exists("#{@apptmp}/sample_project/demo/helpers")
69
+ assert_no_file_exists("#{@apptmp}/sample_project/demo/controllers")
70
+ end
71
+
72
+ it 'should correctly create a new controller inside a tennpipes application' do
73
+ capture_io { generate(:project, 'sample_project', "--root=#{@apptmp}") }
74
+ capture_io { generate(:app, 'demo', "--root=#{@apptmp}/sample_project") }
75
+ capture_io { generate(:controller, 'demo_items', "-r=#{@apptmp}/sample_project", '-a=demo') }
76
+ assert_match_in_file(/SampleProject::Demo.controllers :demo_items do/m, "#{@apptmp}/sample_project/demo/controllers/demo_items.rb")
77
+ assert_match_in_file(/helpers DemoItemsHelper/m, "#{@apptmp}/sample_project/demo/helpers/demo_items_helper.rb")
78
+ assert_dir_exists("#{@apptmp}/sample_project/demo/views/demo_items")
79
+ end
80
+
81
+ it 'should correctly create a new mailer inside a tennpipes application' do
82
+ capture_io { generate(:project, 'sample_project', "--root=#{@apptmp}", '--script=none', '-t=bacon') }
83
+ capture_io { generate(:app, 'demo_app', "--root=#{@apptmp}/sample_project") }
84
+ capture_io { generate(:mailer, 'demo', "-r=#{@apptmp}/sample_project", '-a=demo_app') }
85
+ end
86
+
87
+ # only destroys what it generated.
88
+ # hence, the folder will still exists if other changes were made to it.
89
+ it 'should destroys itself' do
90
+ capture_io { generate(:project, 'sample_project', "--root=#{@apptmp}") }
91
+ capture_io { generate(:app, 'demo', "--root=#{@apptmp}/sample_project") }
92
+ out, err = capture_io { generate_with_parts(:app, 'demo', "--root=#{@apptmp}/sample_project", '-d', :apps => "demo") }
93
+ refute_match(/has been mounted/, out)
94
+ assert_no_dir_exists("#{@apptmp}/sample_project/public/demo")
95
+ assert_no_file_exists("#{@apptmp}/sample_project/demo/app.rb")
96
+ assert_no_dir_exists("#{@apptmp}/sample_project/demo/controllers")
97
+ assert_no_dir_exists("#{@apptmp}/sample_project/demo/helpers")
98
+ assert_no_dir_exists("#{@apptmp}/sample_project/demo/views")
99
+ assert_no_match_in_file(/Tennpipes\.mount\("Demo"\).to\("\/demo"\)/,"#{@apptmp}/sample_project/config/apps.rb")
100
+ end
101
+
102
+ it 'should abort if app name already exists' do
103
+ capture_io { generate(:project, 'sample_project', "--root=#{@apptmp}") }
104
+ out, err = capture_io { generate(:app, 'kernel', "--root=#{@apptmp}/sample_project") }
105
+ assert_match(/Kernel already exists/, out)
106
+ assert_no_dir_exists("#{@apptmp}/sample_project/public/kernel")
107
+ assert_no_dir_exists("#{@apptmp}/sample_project/kernel/controllers")
108
+ assert_no_dir_exists("#{@apptmp}/sample_project/kernel/helpers")
109
+ assert_no_file_exists("#{@apptmp}/sample_project/kernel/app.rb")
110
+ end
111
+
112
+ it 'should abort if app name already exists in root' do
113
+ capture_io { generate(:project, 'sample_project', "--root=#{@apptmp}") }
114
+ capture_io { generate(:app, 'subapp', "--root=#{@apptmp}/sample_project") }
115
+ out, err = capture_io { generate_with_parts(:app, 'subapp', "--root=#{@apptmp}/sample_project", :apps => "subapp") }
116
+ assert_dir_exists("#{@apptmp}/sample_project/public/subapp")
117
+ assert_dir_exists("#{@apptmp}/sample_project/subapp/controllers")
118
+ assert_dir_exists("#{@apptmp}/sample_project/subapp/helpers")
119
+ assert_file_exists("#{@apptmp}/sample_project/subapp/app.rb")
120
+ assert_match(/Subapp already exists/, out)
121
+ end
122
+
123
+ it 'should generate app files if :force option is specified' do
124
+ capture_io { generate(:project, 'sample_project', "--root=#{@apptmp}") }
125
+ out, err = capture_io { generate(:app, 'kernel', "--root=#{@apptmp}/sample_project", "--force") }
126
+ assert_dir_exists("#{@apptmp}/sample_project/public/kernel")
127
+ assert_dir_exists("#{@apptmp}/sample_project/kernel/controllers")
128
+ assert_dir_exists("#{@apptmp}/sample_project/kernel/helpers")
129
+ assert_file_exists("#{@apptmp}/sample_project/kernel/app.rb")
130
+ end
131
+
132
+ it 'should allow to pass upcased name as the app name' do
133
+ capture_io { generate(:project, 'sample_project', "--root=#{@apptmp}") }
134
+ out, err = capture_io { generate(:app, 'API', "--root=#{@apptmp}/sample_project", "--force") }
135
+ assert_dir_exists("#{@apptmp}/sample_project/public/api")
136
+ assert_dir_exists("#{@apptmp}/sample_project/api/controllers")
137
+ assert_dir_exists("#{@apptmp}/sample_project/api/helpers")
138
+ assert_file_exists("#{@apptmp}/sample_project/api/app.rb")
139
+ assert_match_in_file(/class API < Tennpipes::Application/, "#{@apptmp}/sample_project/api/app.rb")
140
+ end
141
+ end
142
+ end
data/test/test_cli.rb ADDED
@@ -0,0 +1,27 @@
1
+ require File.expand_path(File.dirname(__FILE__) + '/helper')
2
+ require 'tennpipes-init/generators/cli'
3
+
4
+ describe "Cli" do
5
+ def setup
6
+ @apptmp = "#{Dir.tmpdir}/tennpipes-tests/#{SecureRandom.hex}"
7
+ `mkdir -p #{@apptmp}`
8
+ end
9
+
10
+ def teardown
11
+ `rm -rf #{@apptmp}`
12
+ end
13
+
14
+ describe 'the cli' do
15
+
16
+ it 'should fail without arguments' do
17
+ out, err = capture_io { generate(:cli) }
18
+ assert_match(/Please specify generator to use/, out)
19
+ end
20
+
21
+ it 'should work correctly if we have a project' do
22
+ capture_io { generate(:project, 'sample_project', "--root=#{@apptmp}") }
23
+ capture_io { generate(:cli, "--root=#{@apptmp}/sample_project") }
24
+ skip "Make a great asserition"
25
+ end
26
+ end
27
+ end
@@ -0,0 +1,98 @@
1
+ require File.expand_path(File.dirname(__FILE__) + '/helper')
2
+
3
+ describe "ComponentGenerator" do
4
+ def setup
5
+ @apptmp = "#{Dir.tmpdir}/tennpipes-tests/#{SecureRandom.hex}"
6
+ `mkdir -p #{@apptmp}`
7
+ end
8
+
9
+ def teardown
10
+ `rm -rf #{@apptmp}`
11
+ end
12
+
13
+ describe 'the controller generator' do
14
+ it 'should fail outside app root' do
15
+ out, err = capture_io { generate(:component, 'demo', "-r=#{@apptmp}") }
16
+ assert_match(/not at the root/, out)
17
+ end
18
+ end
19
+
20
+ describe "add components" do
21
+ it 'should properly generate default' do
22
+ capture_io { generate(:project, 'sample_project', "--root=#{@apptmp}") }
23
+ out, err = capture_io { generate(:component, '--orm=activerecord', "-r=#{@apptmp}/sample_project") }
24
+ assert_match(/applying.*?activerecord.*?orm/, out)
25
+ assert_match_in_file(/gem 'activerecord', '>= 3.1', :require => 'active_record'/, "#{@apptmp}/sample_project/Gemfile")
26
+ assert_match_in_file(/gem 'sqlite3'/, "#{@apptmp}/sample_project/Gemfile")
27
+ refute_match(/Switch renderer to/, out)
28
+ components_chosen = YAML.load_file("#{@apptmp}/sample_project/.components")
29
+ assert_equal 'activerecord', components_chosen[:orm]
30
+ end
31
+
32
+ it 'should properly generate with adapter' do
33
+ capture_io { generate(:project, 'sample_project', "--root=#{@apptmp}") }
34
+ out, err = capture_io { generate(:component, '--orm=sequel', '--adapter=postgres', "-r=#{@apptmp}/sample_project") }
35
+ assert_match_in_file(/gem 'pg'/, "#{@apptmp}/sample_project/Gemfile")
36
+ refute_match(/Switch renderer to/, out)
37
+ components_chosen = YAML.load_file("#{@apptmp}/sample_project/.components")
38
+ assert_equal 'sequel', components_chosen[:orm]
39
+ end
40
+
41
+ it 'should enable @app_name value' do
42
+ capture_io { generate(:project, 'sample_project', "--root=#{@apptmp}") }
43
+ out, err = capture_io { generate_with_parts(:component, '--test=cucumber', "-r=#{@apptmp}/sample_project", :apps => "app") }
44
+ assert_match_in_file(/SampleProject::App\.tap \{ \|app\| \}/, "#{@apptmp}/sample_project/features/support/env.rb")
45
+ end
46
+
47
+ it 'should generate component in specified app' do
48
+ capture_io { generate(:project, 'sample_project', "--root=#{@apptmp}") }
49
+ capture_io { generate(:app, 'compo', "-r=#{@apptmp}/sample_project") }
50
+ out, err = capture_io { generate_with_parts(:component, '--test=cucumber', "--app=compo", "-r=#{@apptmp}/sample_project", :apps => "compo") }
51
+ assert_match_in_file(/SampleProject::Compo\.tap \{ \|app\| \}/, "#{@apptmp}/sample_project/features/support/env.rb")
52
+ end
53
+
54
+ it 'should not generate component in specified app if the app does not exist' do
55
+ capture_io { generate(:project, 'sample_project', "--root=#{@apptmp}") }
56
+ out, err = capture_io { generate_with_parts(:component, '--test=cucumber', "--app=compo", "-r=#{@apptmp}/sample_project", :apps => "compo") }
57
+ assert_match(/SampleProject::Compo does not exist./, out)
58
+ assert_no_file_exists("#{@apptmp}/sample_project/features")
59
+ end
60
+ end
61
+
62
+ describe "specified of same the component" do
63
+ it 'should does not change' do
64
+ capture_io { generate(:project, 'sample_project', '--script=jquery', "--root=#{@apptmp}") }
65
+ components_chosen = YAML.load_file("#{@apptmp}/sample_project/.components")
66
+ assert_equal 'jquery', components_chosen[:script]
67
+ out, err = capture_io { generate(:component, '--script=jquery', "-r=#{@apptmp}/sample_project") }
68
+ assert_match(/applying.*?jquery.*?script/, out)
69
+ refute_match(/Switch renderer to/, out)
70
+ components_chosen = YAML.load_file("#{@apptmp}/sample_project/.components")
71
+ assert_equal 'jquery', components_chosen[:script]
72
+ end
73
+ end
74
+
75
+ describe "component changes" do
76
+ it 'should when allow changes, will be applied' do
77
+ capture_io { generate(:project, 'sample_project', '--renderer=slim', "--root=#{@apptmp}") }
78
+ components_chosen = YAML.load_file("#{@apptmp}/sample_project/.components")
79
+ assert_equal 'slim', components_chosen[:renderer]
80
+ Readline.stubs(:readline).returns('yes').once
81
+ out, err = capture_io { generate(:component, '--renderer=haml', "-r=#{@apptmp}/sample_project") }
82
+ assert_match(/applying.*?haml.*?renderer/, out)
83
+ components_chosen = YAML.load_file("#{@apptmp}/sample_project/.components")
84
+ assert_equal 'haml', components_chosen[:renderer]
85
+ end
86
+
87
+ it 'should when deny changes, will not be applied' do
88
+ capture_io { generate(:project, 'sample_project', '--renderer=slim', "--root=#{@apptmp}") }
89
+ components_chosen = YAML.load_file("#{@apptmp}/sample_project/.components")
90
+ assert_equal 'slim', components_chosen[:renderer]
91
+ Readline.stubs(:readline).returns('no').once
92
+ out, err = capture_io { generate(:component, '--renderer=haml', "-r=#{@apptmp}/sample_project") }
93
+ refute_match(/applying.*?haml.*?renderer/, out)
94
+ components_chosen = YAML.load_file("#{@apptmp}/sample_project/.components")
95
+ assert_equal 'slim', components_chosen[:renderer]
96
+ end
97
+ end
98
+ end