tennpipes-init 3.6.6

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.
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