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,222 @@
1
+ require File.expand_path(File.dirname(__FILE__) + '/helper')
2
+
3
+ describe "MigrationGenerator" 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 migration generator' do
14
+ it 'should fail outside app root' do
15
+ out, err = capture_io { generate(:migration, 'add_email_to_users', '-r=/tmp') }
16
+ assert_match(/not at the root/, out)
17
+ assert_no_file_exists("#{@apptmp}/db/migrate")
18
+ end
19
+
20
+ it 'should fail if we do not use an adapter' do
21
+ capture_io { generate(:project, 'sample_project', "--root=#{@apptmp}", '--script=none', '-t=bacon') }
22
+ assert_raises(SystemExit) { capture_io { generate(:migration, 'AddEmailToUsers', "-r=#{@apptmp}/sample_project") } }
23
+ end
24
+
25
+ it 'should generate migration inside app root' do
26
+ capture_io { generate(:project, 'sample_project', "--root=#{@apptmp}", '--script=none', '-t=bacon', '-d=activerecord') }
27
+ response_success = capture_io { generate(:migration, 'AddEmailToUsers', "-r=#{@apptmp}/sample_project") }
28
+ migration_file_path = "#{@apptmp}/sample_project/db/migrate/001_add_email_to_users.rb"
29
+ assert_match_in_file(/class AddEmailToUser/m, migration_file_path)
30
+ end
31
+
32
+ it 'should generate migration inside app root with lowercase migration argument' do
33
+ capture_io { generate(:project, 'sample_project', "--root=#{@apptmp}", '--script=none', '-t=bacon', '-d=activerecord') }
34
+ response_success = capture_io { generate(:migration, 'add_email_to_users', "-r=#{@apptmp}/sample_project") }
35
+ migration_file_path = "#{@apptmp}/sample_project/db/migrate/001_add_email_to_users.rb"
36
+ assert_match_in_file(/class AddEmailToUsers/m, migration_file_path)
37
+ end
38
+
39
+ it 'should generate migration inside app root with singular table' do
40
+ capture_io { generate(:project, 'sample_project', "--root=#{@apptmp}", '--script=none', '-t=bacon', '-d=activerecord') }
41
+ capture_io { generate(:migration, 'add_email_to_user', "email:string", "-r=#{@apptmp}/sample_project") }
42
+ migration_file_path = "#{@apptmp}/sample_project/db/migrate/001_add_email_to_user.rb"
43
+ assert_match_in_file(/class AddEmailToUser/m, migration_file_path)
44
+ assert_match_in_file(/t.string :email/, migration_file_path)
45
+ assert_match_in_file(/t.remove :email/, migration_file_path)
46
+ end
47
+
48
+ describe "the default migration numbering" do
49
+ it 'should properly calculate version number' do
50
+ capture_io { generate(:project, 'sample_project', "--migration_format=number", "--root=#{@apptmp}", '--script=none', '-t=bacon', '-d=sequel') }
51
+ capture_io { generate(:migration, 'add_email_to_person', "email:string", "-r=#{@apptmp}/sample_project") }
52
+ capture_io { generate(:migration, 'add_name_to_person', "email:string", "-r=#{@apptmp}/sample_project") }
53
+ capture_io { generate(:migration, 'add_age_to_user', "email:string", "-r=#{@apptmp}/sample_project") }
54
+ assert_match_in_file(/Sequel\.migration do/m, "#{@apptmp}/sample_project/db/migrate/001_add_email_to_person.rb")
55
+ assert_match_in_file(/Sequel\.migration do/m, "#{@apptmp}/sample_project/db/migrate/002_add_name_to_person.rb")
56
+ assert_match_in_file(/Sequel\.migration do/m, "#{@apptmp}/sample_project/db/migrate/003_add_age_to_user.rb")
57
+ end
58
+ end
59
+
60
+ describe "the timestamped migration numbering" do
61
+ it 'should properly calculate version number' do
62
+ capture_io { generate(:project, 'sample_project', "--migration_format=timestamp", "--root=#{@apptmp}", '--script=none', '-t=bacon', '-d=sequel') }
63
+
64
+ time = stop_time_for_test.utc.strftime("%Y%m%d%H%M%S")
65
+
66
+ capture_io { generate(:migration, 'add_gender_to_person', "gender:string", "-r=#{@apptmp}/sample_project") }
67
+ assert_match_in_file(/Sequel\.migration do/m, "#{@apptmp}/sample_project/db/migrate/#{time}_add_gender_to_person.rb")
68
+ end
69
+ end
70
+
71
+ describe 'the migration argument' do
72
+ it 'should properly extract a table name from argument' do
73
+ capture_io { generate(:project, 'sample_project', "--root=#{@apptmp}", '--script=none', '-t=bacon', '-d=activerecord') }
74
+ capture_io { generate(:migration, 'AddAuthenticityTokenFieldsToUsers', 'authentity_token:string', "-r=#{@apptmp}/sample_project") }
75
+ capture_io { generate(:migration, 'AddEmailToTokyo', 'email:string', "-r=#{@apptmp}/sample_project") }
76
+ capture_io { generate(:migration, 'AddLocationTofoo', 'location:string', "-r=#{@apptmp}/sample_project") }
77
+ migration_file_path1 = "#{@apptmp}/sample_project/db/migrate/001_add_authenticity_token_fields_to_users.rb"
78
+ migration_file_path2 = "#{@apptmp}/sample_project/db/migrate/002_add_email_to_tokyo.rb"
79
+ migration_file_path3 = "#{@apptmp}/sample_project/db/migrate/003_add_location_tofoo.rb"
80
+ assert_match_in_file(/change_table :users/, migration_file_path1)
81
+ assert_match_in_file(/change_table :tokyo/, migration_file_path2)
82
+ assert_match_in_file(/change_table :foos/, migration_file_path3)
83
+ end
84
+ end
85
+ end
86
+
87
+ describe 'the migration generator for activerecord' do
88
+ it 'should generate migration for generic needs' do
89
+ capture_io { generate(:project, 'sample_project', "--root=#{@apptmp}", '--script=none', '-t=bacon', '-d=activerecord') }
90
+ response_success = capture_io { generate(:migration, 'ModifyUserFields', "-r=#{@apptmp}/sample_project") }
91
+ migration_file_path = "#{@apptmp}/sample_project/db/migrate/001_modify_user_fields.rb"
92
+ assert_match_in_file(/class ModifyUserFields/m, migration_file_path)
93
+ assert_match_in_file(/def self\.up\s+end/m, migration_file_path)
94
+ assert_match_in_file(/def self\.down\s+end/m, migration_file_path)
95
+ end
96
+
97
+ it 'should generate migration for adding columns' do
98
+ capture_io { generate(:project, 'sample_project', "--root=#{@apptmp}", '--script=none', '-t=bacon', '-d=activerecord') }
99
+ migration_params = ['AddEmailToUsers', "email:string", "age:integer", "-r=#{@apptmp}/sample_project"]
100
+ response_success = capture_io { generate(:migration, *migration_params) }
101
+ migration_file_path = "#{@apptmp}/sample_project/db/migrate/001_add_email_to_users.rb"
102
+ assert_match_in_file(/class AddEmailToUsers/m, migration_file_path)
103
+ assert_match_in_file(/change_table :users.*?t\.string :email/m, migration_file_path)
104
+ assert_match_in_file(/t\.integer :age/m, migration_file_path)
105
+ assert_match_in_file(/change_table :users.*?t\.remove :email/m, migration_file_path)
106
+ assert_match_in_file(/t\.remove :age/m, migration_file_path)
107
+ end
108
+
109
+ it 'should generate migration for removing columns' do
110
+ capture_io { generate(:project, 'sample_project', "--root=#{@apptmp}", '--script=none', '-t=bacon', '-d=activerecord') }
111
+ migration_params = ['RemoveEmailFromUsers', "email:string", "age:integer", "-r=#{@apptmp}/sample_project"]
112
+ response_success = capture_io { generate(:migration, *migration_params) }
113
+ migration_file_path = "#{@apptmp}/sample_project/db/migrate/001_remove_email_from_users.rb"
114
+ assert_match_in_file(/class RemoveEmailFromUsers/m, migration_file_path)
115
+ assert_match_in_file(/change_table :users.*?t\.remove :email/m, migration_file_path)
116
+ assert_match_in_file(/t\.remove :age/m, migration_file_path)
117
+ assert_match_in_file(/change_table :users.*?t\.string :email/m, migration_file_path)
118
+ assert_match_in_file(/t\.integer :age/m, migration_file_path)
119
+ end
120
+ end
121
+
122
+ describe 'the migration generator for datamapper' do
123
+ it 'should generate migration for generic needs' do
124
+ capture_io { generate(:project, 'sample_project', "--root=#{@apptmp}", '--script=none', '-t=bacon', '-d=datamapper') }
125
+ response_success = capture_io { generate(:migration, 'ModifyUserFields', "-r=#{@apptmp}/sample_project") }
126
+ migration_file_path = "#{@apptmp}/sample_project/db/migrate/001_modify_user_fields.rb"
127
+ assert_match_in_file(/migration\s1.*?:modify_user_fields/m, migration_file_path)
128
+ assert_match_in_file(/up\sdo\s+end/m, migration_file_path)
129
+ assert_match_in_file(/down\sdo\s+end/m, migration_file_path)
130
+ end
131
+
132
+ it 'should generate migration for adding columns' do
133
+ capture_io { generate(:project, 'sample_project', "--root=#{@apptmp}", '--script=none', '-t=bacon', '-d=datamapper') }
134
+ migration_params = ['AddEmailToUsers', "email:string", "age:integer", "-r=#{@apptmp}/sample_project"]
135
+ response_success = capture_io { generate(:migration, *migration_params) }
136
+ migration_file_path = "#{@apptmp}/sample_project/db/migrate/001_add_email_to_users.rb"
137
+ assert_match_in_file(/migration\s1.*?:add_email_to_users/m, migration_file_path)
138
+ assert_match_in_file(/modify_table :users.*?add_column :email, String/m, migration_file_path)
139
+ assert_match_in_file(/add_column :age, Integer/m, migration_file_path)
140
+ assert_match_in_file(/modify_table :users.*?drop_column :email/m, migration_file_path)
141
+ assert_match_in_file(/drop_column :age/m, migration_file_path)
142
+ end
143
+
144
+ it 'should generate migration for removing columns' do
145
+ capture_io { generate(:project, 'sample_project', "--root=#{@apptmp}", '--script=none', '-t=bacon', '-d=datamapper') }
146
+ migration_params = ['RemoveEmailFromUsers', "email:string", "age:integer", "-r=#{@apptmp}/sample_project"]
147
+ response_success = capture_io { generate(:migration, *migration_params) }
148
+ migration_file_path = "#{@apptmp}/sample_project/db/migrate/001_remove_email_from_users.rb"
149
+ assert_match_in_file(/migration\s1.*?:remove_email_from_users/m, migration_file_path)
150
+ assert_match_in_file(/modify_table :users.*?drop_column :email/m, migration_file_path)
151
+ assert_match_in_file(/drop_column :age/m, migration_file_path)
152
+ assert_match_in_file(/modify_table :users.*?add_column :email, String/m, migration_file_path)
153
+ assert_match_in_file(/add_column :age, Integer/m, migration_file_path)
154
+ end
155
+
156
+ it 'should properly version migration files' do
157
+ capture_io { generate(:project, 'sample_project', "--root=#{@apptmp}", '--script=none', '-t=bacon', '-d=datamapper') }
158
+ response_success = capture_io { generate(:migration, 'ModifyUserFields', "-r=#{@apptmp}/sample_project") }
159
+ response_success = capture_io { generate(:migration, 'ModifyUserFields2', "-r=#{@apptmp}/sample_project") }
160
+ response_success = capture_io { generate(:migration, 'ModifyUserFields3', "-r=#{@apptmp}/sample_project") }
161
+ assert_match_in_file(/migration\s1.*?:modify_user_fields/m, "#{@apptmp}/sample_project/db/migrate/001_modify_user_fields.rb")
162
+ assert_match_in_file(/migration\s2.*?:modify_user_fields2/m, "#{@apptmp}/sample_project/db/migrate/002_modify_user_fields2.rb")
163
+ assert_match_in_file(/migration\s3.*?:modify_user_fields3/m, "#{@apptmp}/sample_project/db/migrate/003_modify_user_fields3.rb")
164
+ end
165
+ end
166
+
167
+ describe 'the migration generator for sequel' do
168
+ it 'should generate migration for generic needs' do
169
+ capture_io { generate(:project, 'sample_project', "--root=#{@apptmp}", '--script=none', '-t=bacon', '-d=sequel') }
170
+ response_success = capture_io { generate(:migration, 'ModifyUserFields', "-r=#{@apptmp}/sample_project") }
171
+ migration_file_path = "#{@apptmp}/sample_project/db/migrate/001_modify_user_fields.rb"
172
+ assert_match_in_file(/Sequel\.migration/m, migration_file_path)
173
+ assert_match_in_file(/up do\s+end/m, migration_file_path)
174
+ assert_match_in_file(/down do\s+end/m, migration_file_path)
175
+ end
176
+
177
+ it 'should generate migration for adding columns' do
178
+ capture_io { generate(:project, 'sample_project', "--root=#{@apptmp}", '--script=none', '-t=bacon', '-d=sequel') }
179
+ migration_params = ['AddEmailToUsers', "email:string", "age:integer", "-r=#{@apptmp}/sample_project"]
180
+ response_success = capture_io { generate(:migration, *migration_params) }
181
+ migration_file_path = "#{@apptmp}/sample_project/db/migrate/001_add_email_to_users.rb"
182
+ assert_match_in_file(/Sequel\.migration/m, migration_file_path)
183
+ assert_match_in_file(/alter_table :users.*?add_column :email, String/m, migration_file_path)
184
+ assert_match_in_file(/add_column :age, Integer/m, migration_file_path)
185
+ assert_match_in_file(/alter_table :users.*?drop_column :email/m, migration_file_path)
186
+ assert_match_in_file(/drop_column :age/m, migration_file_path)
187
+ end
188
+
189
+ it 'should generate migration for removing columns' do
190
+ capture_io { generate(:project, 'sample_project', "--root=#{@apptmp}", '--script=none', '-t=bacon', '-d=sequel') }
191
+ migration_params = ['RemoveEmailFromUsers', "email:string", "age:integer", "-r=#{@apptmp}/sample_project"]
192
+ response_success = capture_io { generate(:migration, *migration_params) }
193
+ migration_file_path = "#{@apptmp}/sample_project/db/migrate/001_remove_email_from_users.rb"
194
+ assert_match_in_file(/Sequel\.migration/m, migration_file_path)
195
+ assert_match_in_file(/alter_table :users.*?drop_column :email/m, migration_file_path)
196
+ assert_match_in_file(/drop_column :age/m, migration_file_path)
197
+ assert_match_in_file(/alter_table :users.*?add_column :email, String/m, migration_file_path)
198
+ assert_match_in_file(/add_column :age, Integer/m, migration_file_path)
199
+ end
200
+ end
201
+
202
+ describe "the migration destroy option" do
203
+
204
+ it 'should destroy the migration files' do
205
+ capture_io { generate(:project, 'sample_project', "--root=#{@apptmp}", '--script=none', '-t=bacon', '-d=sequel') }
206
+ migration_params = ['RemoveEmailFromUsers', "email:string", "age:integer", "-r=#{@apptmp}/sample_project"]
207
+ capture_io { generate(:migration, *migration_params) }
208
+ capture_io { generate(:migration, 'RemoveEmailFromUsers', "-r=#{@apptmp}/sample_project",'-d') }
209
+ assert_no_file_exists("#{@apptmp}/sample_project/db/migrate/001_remove_email_from_users.rb")
210
+ end
211
+
212
+ it 'should destroy the migration file regardless of number' do
213
+ capture_io { generate(:project, 'sample_project', "--root=#{@apptmp}", '--script=none', '-t=bacon', '-d=sequel') }
214
+ migration_params = ['RemoveEmailFromUsers', "email:string", "age:integer", "-r=#{@apptmp}/sample_project"]
215
+ migration_param2 = ['AddEmailFromUsers', "email:string", "age:integer", "-r=#{@apptmp}/sample_project"]
216
+ capture_io { generate(:migration, *migration_param2) }
217
+ capture_io { generate(:migration, *migration_params) }
218
+ capture_io { generate(:migration, 'RemoveEmailFromUsers', "-r=#{@apptmp}/sample_project",'-d') }
219
+ assert_no_file_exists("#{@apptmp}/sample_project/db/migrate/002_remove_email_from_users.rb")
220
+ end
221
+ end
222
+ end
@@ -0,0 +1,553 @@
1
+ require File.expand_path(File.dirname(__FILE__) + '/helper')
2
+
3
+ describe "ModelGenerator" 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 model generator' do
14
+ it 'should fail outside app root' do
15
+ out, err = capture_io { generate(:model, 'user', "-r=#{@apptmp}") }
16
+ assert_match(/not at the root/, out)
17
+ assert_no_file_exists('/tmp/models/user.rb')
18
+ end
19
+
20
+ it 'should generate filename properly' do
21
+ capture_io { generate(:project, 'sample_project', "--root=#{@apptmp}", '--script=none', '-t=bacon', '-d=couchrest') }
22
+ capture_io { generate(:model, 'DemoItem', "name:string", "age", "email:string", "-r=#{@apptmp}/sample_project") }
23
+ assert_file_exists("#{@apptmp}/sample_project/models/demo_item.rb")
24
+ end
25
+
26
+ it 'should fail if field name is not acceptable' do
27
+ capture_io { generate(:project, 'sample_project', "--root=#{@apptmp}", '--script=none', '-t=bacon', '-d=couchrest') }
28
+ out, err = capture_io { generate(:model, 'DemoItem', "re@l$ly:string","display-name:string", "age&year:datetime", "email_two:string", "-r=#{@apptmp}/sample_project") }
29
+ assert_match(/Invalid field name:/, out)
30
+ assert_match(/display-name:string/, out)
31
+ assert_match(/age&year:datetime/, out)
32
+ assert_match(/re@l\$ly:string/, out)
33
+ refute_match(/email_two:string/, out)
34
+ refute_match(/apply/, out)
35
+ assert_no_file_exists("#{@apptmp}/sample_project/models/demo_item.rb")
36
+ end
37
+
38
+ it 'should fail if we do not use an adapter' do
39
+ capture_io { generate(:project, 'sample_project', "--root=#{@apptmp}", '--script=none', '-t=bacon') }
40
+ assert_raises(SystemExit) { capture_io { generate(:model, 'user', "-r=#{@apptmp}/sample_project") } }
41
+ end
42
+
43
+ it 'should not fail if we do not have test component' do
44
+ capture_io { generate(:project, 'sample_project', "--root=#{@apptmp}", '--test=none', '-d=activerecord') }
45
+ response_success = capture_io { generate(:model, 'user', "-r=#{@apptmp}/sample_project") }
46
+ assert_match_in_file(/class User < ActiveRecord::Base/m, "#{@apptmp}/sample_project/models/user.rb")
47
+ assert_no_file_exists("#{@apptmp}/sample_project/test")
48
+ end
49
+
50
+ it 'should generate model in specified app' do
51
+ capture_io { generate(:project, 'sample_project', "--root=#{@apptmp}", '-d=datamapper', '--script=none', '-t=bacon') }
52
+ capture_io { generate(:app, 'subby', "-r=#{@apptmp}/sample_project") }
53
+ capture_io { generate(:model, 'Post', "body:string", '-a=/subby', "-r=#{@apptmp}/sample_project") }
54
+ assert_match_in_file(/class Post\n\s+include DataMapper::Resource/m, "#{@apptmp}/sample_project/subby/models/post.rb")
55
+ assert_match_in_file(/property :body, String/m, "#{@apptmp}/sample_project/subby/models/post.rb")
56
+ assert_match_in_file(/migration 1, :create_posts do/m, "#{@apptmp}/sample_project/db/migrate/001_create_posts.rb")
57
+ assert_match_in_file(/DataMapper.finalize/m,"#{@apptmp}/sample_project/config/boot.rb")
58
+ end
59
+
60
+ it 'should generate migration file versions properly' do
61
+ capture_io { generate(:project, 'sample_project', "--migration_format=number", "--root=#{@apptmp}", '--script=none', '-t=bacon', '-d=activerecord') }
62
+ capture_io { generate(:model, 'user', "-r=#{@apptmp}/sample_project") }
63
+ capture_io { generate(:model, 'account', "-r=#{@apptmp}/sample_project") }
64
+ capture_io { generate(:model, 'bank', "-r=#{@apptmp}/sample_project") }
65
+ assert_file_exists("#{@apptmp}/sample_project/db/migrate/001_create_users.rb")
66
+ assert_file_exists("#{@apptmp}/sample_project/db/migrate/002_create_accounts.rb")
67
+ assert_file_exists("#{@apptmp}/sample_project/db/migrate/003_create_banks.rb")
68
+ end
69
+
70
+ it 'should generate migration file versions properly when timestamped' do
71
+ capture_io { generate(:project, 'sample_project', "--migration_format=timestamp", "--root=#{@apptmp}", '--script=none', '-t=bacon', '-d=activerecord') }
72
+
73
+ time = stop_time_for_test.utc.strftime("%Y%m%d%H%M%S")
74
+
75
+ capture_io { generate(:model, 'user', "-r=#{@apptmp}/sample_project") }
76
+ assert_file_exists("#{@apptmp}/sample_project/db/migrate/#{time}_create_users.rb")
77
+ end
78
+
79
+ it 'should generate a default type value for fields' do
80
+ current_time = stop_time_for_test.strftime("%Y%m%d%H%M%S")
81
+ capture_io { generate(:project, 'sample_project', "--root=#{@apptmp}", '--script=none', '-t=bacon', '-d=activerecord') }
82
+ capture_io { generate(:model, 'person', "name", "age:integer", "email", "-r=#{@apptmp}/sample_project") }
83
+ migration_file_path = "#{@apptmp}/sample_project/db/migrate/001_create_people.rb"
84
+ assert_match_in_file(/class CreatePeople < ActiveRecord::Migration/m, migration_file_path)
85
+ assert_match_in_file(/ create_table :people/m, migration_file_path)
86
+ assert_match_in_file(/ t.string :name/m, migration_file_path)
87
+ assert_match_in_file(/ t.integer :age/m, migration_file_path)
88
+ assert_match_in_file(/ t.string :email/m, migration_file_path)
89
+ assert_match_in_file(/ drop_table :people/m, migration_file_path)
90
+ end
91
+
92
+ it 'should abort if model name already exists' do
93
+ capture_io { generate(:project, 'sample_project', "--root=#{@apptmp}", "-d=activerecord") }
94
+ out, err = capture_io { generate(:model, 'kernel', "--root=#{@apptmp}/sample_project") }
95
+ assert_match(/Kernel already exists/, out)
96
+ assert_no_file_exists("#{@apptmp}/sample_project/db/migrate/001_create_kernel.rb")
97
+ assert_no_file_exists("#{@apptmp}/sample_project/models/kernel.rb")
98
+ end
99
+
100
+ it 'should abort if model name already exists in root' do
101
+ capture_io { generate(:project, 'sample_project', "--root=#{@apptmp}", "-d=activerecord") }
102
+ capture_io { generate(:app, 'user', "--root=#{@apptmp}/sample_project") }
103
+ out, err = capture_io { generate_with_parts(:model, 'user', "--root=#{@apptmp}/sample_project", :apps => "user") }
104
+ assert_file_exists("#{@apptmp}/sample_project/user/app.rb")
105
+ assert_no_file_exists("#{@apptmp}/sample_project/models/user.rb")
106
+ assert_match(/User already exists/, out)
107
+ end
108
+
109
+ it 'should generate model files if :force option is specified' do
110
+ capture_io { generate(:project, 'sample_project', "--root=#{@apptmp}", "-d=activerecord") }
111
+ capture_io { generate(:app, 'user', "--root=#{@apptmp}/sample_project") }
112
+ out, err = capture_io { generate_with_parts(:model, 'user', "--root=#{@apptmp}/sample_project", "--force", :apps => "user") }
113
+ assert_file_exists("#{@apptmp}/sample_project/user/app.rb")
114
+ assert_file_exists("#{@apptmp}/sample_project/models/user.rb")
115
+ end
116
+ end
117
+
118
+ # ACTIVERECORD
119
+ describe "model generator using activerecord" do
120
+ it 'should add activerecord middleware' do
121
+ capture_io { generate(:project, 'sample_project', "--root=#{@apptmp}", '--script=none', '-d=activerecord') }
122
+ assert_match_in_file(/ use ConnectionPoolManagement/m, "#{@apptmp}/sample_project/app/app.rb")
123
+ assert_file_exists("#{@apptmp}/sample_project/lib/connection_pool_management_middleware.rb")
124
+ end
125
+
126
+ it 'should generate model file' do
127
+ capture_io { generate(:project, 'sample_project', "--root=#{@apptmp}", '--script=none', '-t=bacon', '-d=activerecord') }
128
+ capture_io { generate(:model, 'user', "-r=#{@apptmp}/sample_project") }
129
+ assert_match_in_file(/class User < ActiveRecord::Base/m, "#{@apptmp}/sample_project/models/user.rb")
130
+ end
131
+
132
+ it 'should generate model file with camelized name' do
133
+ capture_io { generate(:project, 'sample_project', "--root=#{@apptmp}", '--script=none', '-t=bacon', '-d=activerecord') }
134
+ capture_io { generate(:model, 'ChunkyBacon', "-r=#{@apptmp}/sample_project") }
135
+ assert_match_in_file(/class ChunkyBacon < ActiveRecord::Base/m, "#{@apptmp}/sample_project/models/chunky_bacon.rb")
136
+ assert_match_in_file(/ChunkyBacon Model/, "#{@apptmp}/sample_project/test/models/chunky_bacon_test.rb")
137
+ end
138
+
139
+ it 'should generate migration file with no fields' do
140
+ current_time = stop_time_for_test.strftime("%Y%m%d%H%M%S")
141
+ capture_io { generate(:project, 'sample_project', "--root=#{@apptmp}", '--script=none', '-t=bacon', '-d=activerecord') }
142
+ capture_io { generate(:model, 'user', "-r=#{@apptmp}/sample_project") }
143
+ migration_file_path = "#{@apptmp}/sample_project/db/migrate/001_create_users.rb"
144
+ assert_match_in_file(/class CreateUsers < ActiveRecord::Migration/m, migration_file_path)
145
+ assert_match_in_file(/ create_table :users/m, migration_file_path)
146
+ assert_match_in_file(/ drop_table :users/m, migration_file_path)
147
+ end
148
+
149
+ it 'should generate migration file with given fields' do
150
+ current_time = stop_time_for_test.strftime("%Y%m%d%H%M%S")
151
+ capture_io { generate(:project, 'sample_project', "--root=#{@apptmp}", '--script=none', '-t=bacon', '-d=activerecord') }
152
+ capture_io { generate(:model, 'person', "name:string", "age:integer", "email:string", "-r=#{@apptmp}/sample_project") }
153
+ migration_file_path = "#{@apptmp}/sample_project/db/migrate/001_create_people.rb"
154
+ assert_match_in_file(/class CreatePeople < ActiveRecord::Migration/m, migration_file_path)
155
+ assert_match_in_file(/ create_table :people/m, migration_file_path)
156
+ assert_match_in_file(/ t.string :name/m, migration_file_path)
157
+ assert_match_in_file(/ t.integer :age/m, migration_file_path)
158
+ assert_match_in_file(/ t.string :email/m, migration_file_path)
159
+ assert_match_in_file(/ drop_table :people/m, migration_file_path)
160
+ end
161
+ end
162
+
163
+ # MINIRECORD
164
+ describe "model generator using minirecord" do
165
+ it 'should generate hooks for auto upgrade' do
166
+ capture_io { generate(:project, 'sample_project', "--root=#{@apptmp}", '--script=none', '-t=bacon', '-d=minirecord') }
167
+ assert_match_in_file(
168
+ "Tennpipes.after_load do\n ActiveRecord::Base.auto_upgrade!",
169
+ "#{@apptmp}/sample_project/config/boot.rb"
170
+ )
171
+ end
172
+
173
+ it 'should add activerecord middleware' do
174
+ capture_io { generate(:project, 'sample_project', "--root=#{@apptmp}", '--script=none', '-d=minirecord') }
175
+ assert_match_in_file(/ use ConnectionPoolManagement/m, "#{@apptmp}/sample_project/app/app.rb")
176
+ assert_file_exists("#{@apptmp}/sample_project/lib/connection_pool_management_middleware.rb")
177
+ end
178
+
179
+ it 'should generate model file' do
180
+ capture_io { generate(:project, 'sample_project', "--root=#{@apptmp}", '--script=none', '-t=bacon', '-d=minirecord') }
181
+ capture_io { generate(:model, 'user', 'name:string', 'surname:string', 'age:integer', "-r=#{@apptmp}/sample_project") }
182
+ assert_match_in_file(/class User < ActiveRecord::Base/m, "#{@apptmp}/sample_project/models/user.rb")
183
+ assert_match_in_file(/field :name, :as => :string/m, "#{@apptmp}/sample_project/models/user.rb")
184
+ assert_match_in_file(/field :surname, :as => :string/m, "#{@apptmp}/sample_project/models/user.rb")
185
+ assert_match_in_file(/field :age, :as => :integer/m, "#{@apptmp}/sample_project/models/user.rb")
186
+ end
187
+
188
+ it 'should generate model file with camelized name' do
189
+ capture_io { generate(:project, 'sample_project', "--root=#{@apptmp}", '--script=none', '-t=bacon', '-d=minirecord') }
190
+ capture_io { generate(:model, 'ChunkyBacon', "-r=#{@apptmp}/sample_project") }
191
+ assert_match_in_file(/class ChunkyBacon < ActiveRecord::Base/m, "#{@apptmp}/sample_project/models/chunky_bacon.rb")
192
+ assert_match_in_file(/ChunkyBacon Model/, "#{@apptmp}/sample_project/test/models/chunky_bacon_test.rb")
193
+ end
194
+ end
195
+
196
+ # COUCHREST
197
+ describe "model generator using couchrest" do
198
+ it 'should generate model file with no properties' do
199
+ capture_io { generate(:project, 'sample_project', "--root=#{@apptmp}", '--script=none', '-t=bacon', '-d=couchrest') }
200
+ capture_io { generate(:model, 'user', "-r=#{@apptmp}/sample_project") }
201
+ assert_match_in_file(/class User < CouchRest::Model::Base/m, "#{@apptmp}/sample_project/models/user.rb")
202
+ assert_match_in_file(/# property <name>[\s\n]+?end/m, "#{@apptmp}/sample_project/models/user.rb")
203
+ end
204
+
205
+ it 'should generate model file with given fields' do
206
+ capture_io { generate(:project, 'sample_project', "--root=#{@apptmp}", '--script=none', '-t=bacon', '-d=couchrest') }
207
+ capture_io { generate(:model, 'person', "name:string", "age", "email:string", "-r=#{@apptmp}/sample_project") }
208
+ assert_match_in_file(/class Person < CouchRest::Model::Base/m, "#{@apptmp}/sample_project/models/person.rb")
209
+ assert_match_in_file(/property :name/m, "#{@apptmp}/sample_project/models/person.rb")
210
+ assert_match_in_file(/property :age/m, "#{@apptmp}/sample_project/models/person.rb")
211
+ assert_match_in_file(/property :email/m, "#{@apptmp}/sample_project/models/person.rb")
212
+ end
213
+ end
214
+
215
+ # DATAMAPPER
216
+ describe "model generator using datamapper" do
217
+ it 'should generate model file with camelized name' do
218
+ capture_io { generate(:project, 'sample_project', "--root=#{@apptmp}", '--script=none', '-t=bacon', '-d=datamapper') }
219
+ capture_io { generate(:model, 'ChunkyBacon', "-r=#{@apptmp}/sample_project") }
220
+ assert_match_in_file(/class ChunkyBacon\n\s+include DataMapper::Resource/m, "#{@apptmp}/sample_project/models/chunky_bacon.rb")
221
+ assert_match_in_file(/ChunkyBacon Model/, "#{@apptmp}/sample_project/test/models/chunky_bacon_test.rb")
222
+ end
223
+
224
+ it 'should generate model file with fields' do
225
+ capture_io { generate(:project, 'sample_project', "--root=#{@apptmp}", '--script=none', '-d=datamapper') }
226
+ capture_io { generate(:model, 'user', "name:string", "age:integer", "created_at:datetime", "-r=#{@apptmp}/sample_project") }
227
+ assert_match_in_file(/class User\n\s+include DataMapper::Resource/m, "#{@apptmp}/sample_project/models/user.rb")
228
+ assert_match_in_file(/property :name, String/m, "#{@apptmp}/sample_project/models/user.rb")
229
+ assert_match_in_file(/property :age, Integer/m, "#{@apptmp}/sample_project/models/user.rb")
230
+ assert_match_in_file(/property :created_at, DateTime/m, "#{@apptmp}/sample_project/models/user.rb")
231
+ end
232
+
233
+ it 'should properly generate version numbers' do
234
+ capture_io { generate(:project, 'sample_project', "--root=#{@apptmp}", '--script=none', '-d=datamapper') }
235
+ capture_io { generate(:model, 'user', "name:string", "age:integer", "created_at:datetime", "-r=#{@apptmp}/sample_project") }
236
+ capture_io { generate(:model, 'person', "name:string", "age:integer", "created_at:datetime", "-r=#{@apptmp}/sample_project") }
237
+ capture_io { generate(:model, 'account', "name:string", "age:integer", "created_at:datetime", "-r=#{@apptmp}/sample_project") }
238
+ assert_match_in_file(/class User\n\s+include DataMapper::Resource/m, "#{@apptmp}/sample_project/models/user.rb")
239
+ assert_match_in_file(/migration 1, :create_users do/m, "#{@apptmp}/sample_project/db/migrate/001_create_users.rb")
240
+ assert_match_in_file(/class Person\n\s+include DataMapper::Resource/m, "#{@apptmp}/sample_project/models/person.rb")
241
+ assert_match_in_file(/migration 2, :create_people do/m, "#{@apptmp}/sample_project/db/migrate/002_create_people.rb")
242
+ assert_match_in_file(/class Account\n\s+include DataMapper::Resource/m, "#{@apptmp}/sample_project/models/account.rb")
243
+ assert_match_in_file(/migration 3, :create_accounts do/m, "#{@apptmp}/sample_project/db/migrate/003_create_accounts.rb")
244
+ end
245
+
246
+ it 'should generate migration with given fields' do
247
+ current_time = stop_time_for_test.strftime("%Y%m%d%H%M%S")
248
+ capture_io { generate(:project, 'sample_project', "--root=#{@apptmp}", '--script=none', '-d=datamapper') }
249
+ capture_io { generate(:model, 'person', "name:string", "created_at:date_time", "email:string", "-r=#{@apptmp}/sample_project") }
250
+ assert_match_in_file(/class Person\n\s+include DataMapper::Resource/m, "#{@apptmp}/sample_project/models/person.rb")
251
+ migration_file_path = "#{@apptmp}/sample_project/db/migrate/001_create_people.rb"
252
+ assert_match_in_file(/migration 1, :create_people do/m, migration_file_path)
253
+ assert_match_in_file(/create_table :people do/m, migration_file_path)
254
+ assert_match_in_file(/column :name, DataMapper::Property::String/m, migration_file_path)
255
+ assert_match_in_file(/column :created_at, DataMapper::Property::DateTime/m, migration_file_path)
256
+ assert_match_in_file(/column :email, DataMapper::Property::String/m, migration_file_path)
257
+ assert_match_in_file(/drop_table :people/m, migration_file_path)
258
+ end
259
+ end
260
+
261
+ # SEQUEL
262
+ describe "model generator using sequel" do
263
+ it 'should generate model file with given properties' do
264
+ capture_io { generate(:project, 'sample_project', "--root=#{@apptmp}", '--script=none', '-d=sequel') }
265
+ capture_io { generate(:model, 'user', "name:string", "age:integer", "created:datetime", "-r=#{@apptmp}/sample_project") }
266
+ assert_match_in_file(/class User < Sequel::Model/m, "#{@apptmp}/sample_project/models/user.rb")
267
+ end
268
+
269
+ it 'should generate model file with camelized name' do
270
+ capture_io { generate(:project, 'sample_project', "--root=#{@apptmp}", '--script=none', '-t=bacon', '-d=sequel') }
271
+ capture_io { generate(:model, 'ChunkyBacon', "-r=#{@apptmp}/sample_project") }
272
+ assert_match_in_file(/class ChunkyBacon < Sequel::Model/m, "#{@apptmp}/sample_project/models/chunky_bacon.rb")
273
+ assert_match_in_file(/ChunkyBacon Model/, "#{@apptmp}/sample_project/test/models/chunky_bacon_test.rb")
274
+ end
275
+
276
+ it 'should generate migration file with given properties' do
277
+ current_time = stop_time_for_test.strftime("%Y%m%d%H%M%S")
278
+ capture_io { generate(:project, 'sample_project', "--root=#{@apptmp}", '--script=none', '-d=sequel') }
279
+ capture_io { generate(:model, 'person', "name:string", "age:integer", "created:datetime", "-r=#{@apptmp}/sample_project") }
280
+ migration_file_path = "#{@apptmp}/sample_project/db/migrate/001_create_people.rb"
281
+ assert_match_in_file(/class Person < Sequel::Model/m, "#{@apptmp}/sample_project/models/person.rb")
282
+ assert_match_in_file(/Sequel\.migration do/m, migration_file_path)
283
+ assert_match_in_file(/create_table :people/m, migration_file_path)
284
+ assert_match_in_file(/String :name/m, migration_file_path)
285
+ assert_match_in_file(/Integer :age/m, migration_file_path)
286
+ assert_match_in_file(/DateTime :created/m, migration_file_path)
287
+ assert_match_in_file(/drop_table :people/m, migration_file_path)
288
+ end
289
+ end
290
+
291
+ # MONGODB
292
+ describe "model generator using mongomapper" do
293
+ it 'should generate model file with no properties' do
294
+ capture_io { generate(:project, 'sample_project', "--root=#{@apptmp}", '--script=none', '-d=mongomapper') }
295
+ capture_io { generate(:model, 'person', "-r=#{@apptmp}/sample_project") }
296
+ assert_match_in_file(/class Person\n\s+include MongoMapper::Document/m, "#{@apptmp}/sample_project/models/person.rb")
297
+ assert_match_in_file(/# key <name>, <type>/m, "#{@apptmp}/sample_project/models/person.rb")
298
+ assert_match_in_file(/timestamps![\n\s]+end/m, "#{@apptmp}/sample_project/models/person.rb")
299
+ end
300
+
301
+ it 'should generate model file with given fields' do
302
+ capture_io { generate(:project, 'sample_project', "--root=#{@apptmp}", '--script=none', '-d=mongomapper') }
303
+ capture_io { generate(:model, 'user', "name:string", "age:integer", "email:string", "-r=#{@apptmp}/sample_project") }
304
+ assert_match_in_file(/class User\n\s+include MongoMapper::Document/m, "#{@apptmp}/sample_project/models/user.rb")
305
+ assert_match_in_file(/key :name, String/m, "#{@apptmp}/sample_project/models/user.rb")
306
+ assert_match_in_file(/key :age, Integer/m, "#{@apptmp}/sample_project/models/user.rb")
307
+ assert_match_in_file(/key :email, String/m, "#{@apptmp}/sample_project/models/user.rb")
308
+ assert_match_in_file(/timestamps!/m, "#{@apptmp}/sample_project/models/user.rb")
309
+ end
310
+ end
311
+
312
+ describe "model generator using mongoid" do
313
+ it 'should generate model file with no properties' do
314
+ capture_io { generate(:project, 'sample_project', "--root=#{@apptmp}", '--script=none', '-d=mongoid') }
315
+ capture_io { generate(:model, 'person', "-r=#{@apptmp}/sample_project") }
316
+ assert_match_in_file(/class Person\n\s+include Mongoid::Document/m, "#{@apptmp}/sample_project/models/person.rb")
317
+ assert_match_in_file(/# field <name>, :type => <type>, :default => <value>/m, "#{@apptmp}/sample_project/models/person.rb")
318
+ end
319
+
320
+ it 'should generate model file with given fields' do
321
+ capture_io { generate(:project, 'sample_project', "--root=#{@apptmp}", '--script=none', '-d=mongoid') }
322
+ capture_io { generate(:model, 'user', "name:string", "age:integer", "email:string", "-r=#{@apptmp}/sample_project") }
323
+ assert_match_in_file(/class User\n\s+include Mongoid::Document/m, "#{@apptmp}/sample_project/models/user.rb")
324
+ assert_match_in_file(/field :name, :type => String/m, "#{@apptmp}/sample_project/models/user.rb")
325
+ assert_match_in_file(/field :age, :type => Integer/m, "#{@apptmp}/sample_project/models/user.rb")
326
+ assert_match_in_file(/field :email, :type => String/m, "#{@apptmp}/sample_project/models/user.rb")
327
+ end
328
+ end
329
+
330
+ # REDIS
331
+ describe "model generator using ohm" do
332
+ it 'should generate model file with no properties' do
333
+ capture_io { generate(:project, 'sample_project', "--root=#{@apptmp}", '--script=none', '-d=ohm') }
334
+ capture_io { generate(:model, 'person', "-r=#{@apptmp}/sample_project") }
335
+ assert_match_in_file(/class Person < Ohm::Model/, "#{@apptmp}/sample_project/models/person.rb")
336
+ assert_match_in_file(/# attribute :name/m, "#{@apptmp}/sample_project/models/person.rb")
337
+ assert_match_in_file(/# reference :venue, Venue/m, "#{@apptmp}/sample_project/models/person.rb")
338
+ end
339
+
340
+ it 'should generate model file with given fields' do
341
+ capture_io { generate(:project, 'sample_project', "--root=#{@apptmp}", '--script=none', '-d=ohm') }
342
+ capture_io { generate(:model, 'user', "name:string", "age:integer", "email:string", "-r=#{@apptmp}/sample_project") }
343
+ assert_match_in_file(/class User < Ohm::Model/, "#{@apptmp}/sample_project/models/user.rb")
344
+ assert_match_in_file(/attribute :name/m, "#{@apptmp}/sample_project/models/user.rb")
345
+ assert_match_in_file(/attribute :age/m, "#{@apptmp}/sample_project/models/user.rb")
346
+ assert_match_in_file(/attribute :email/m, "#{@apptmp}/sample_project/models/user.rb")
347
+ end
348
+ end
349
+
350
+ # MONGOMATIC
351
+ describe "model generator using mongomatic" do
352
+ it 'should generate model file with no properties' do
353
+ capture_io { generate(:project, 'sample_project', "--root=#{@apptmp}", '--script=none', '-d=mongomatic') }
354
+ capture_io { generate(:model, 'person', "-r=#{@apptmp}/sample_project") }
355
+ assert_match_in_file(/class Person < Mongomatic::Base/, "#{@apptmp}/sample_project/models/person.rb")
356
+ assert_match_in_file(/include Mongomatic::Expectations::Helper/m, "#{@apptmp}/sample_project/models/person.rb")
357
+ end
358
+
359
+ it 'should generate model file with given fields' do
360
+ capture_io { generate(:project, 'sample_project', "--root=#{@apptmp}", '--script=none', '-d=mongomatic') }
361
+ capture_io { generate(:model, 'user', "name:string", "age:integer", "email:string", "-r=#{@apptmp}/sample_project") }
362
+ assert_match_in_file(/class User < Mongomatic::Base/, "#{@apptmp}/sample_project/models/user.rb")
363
+ assert_match_in_file(/include Mongomatic::Expectations::Helper/, "#{@apptmp}/sample_project/models/user.rb")
364
+ assert_match_in_file(/be_present self\['name'\]/m, "#{@apptmp}/sample_project/models/user.rb")
365
+ assert_match_in_file(/be_present self\['age'\]/m, "#{@apptmp}/sample_project/models/user.rb")
366
+ assert_match_in_file(/be_present self\['email'\]/m, "#{@apptmp}/sample_project/models/user.rb")
367
+ assert_match_in_file(/be_a_number self\['age'\]/m, "#{@apptmp}/sample_project/models/user.rb")
368
+ end
369
+ end
370
+
371
+ # RIPPLE
372
+ describe "model generator using ripple" do
373
+ it 'should generate model file with no properties' do
374
+ capture_io { generate(:project, 'sample_project', "--root=#{@apptmp}", '--script=none', '-d=ripple') }
375
+ capture_io { generate(:model, 'person', "name:string", "-r=#{@apptmp}/sample_project") }
376
+ assert_match_in_file(/class Person\n\s+include Ripple::Document/m, "#{@apptmp}/sample_project/models/person.rb")
377
+ assert_match_in_file(/# property :name, String/m, "#{@apptmp}/sample_project/models/person.rb")
378
+ assert_match_in_file(/# many :addresses/m, "#{@apptmp}/sample_project/models/person.rb")
379
+ assert_match_in_file(/# one :account/m, "#{@apptmp}/sample_project/models/person.rb")
380
+ end
381
+
382
+ it 'should generate model file with given fields' do
383
+ capture_io { generate(:project, 'sample_project', "--root=#{@apptmp}", '--script=none', '-d=ripple') }
384
+ capture_io { generate(:model, 'user', "name:string", "age:integer", "email:string", "-r=#{@apptmp}/sample_project") }
385
+ assert_match_in_file(/class User\n\s+include Ripple::Document/m, "#{@apptmp}/sample_project/models/user.rb")
386
+ assert_match_in_file(/property :name, String/m, "#{@apptmp}/sample_project/models/user.rb")
387
+ assert_match_in_file(/property :age, Integer/m, "#{@apptmp}/sample_project/models/user.rb")
388
+ assert_match_in_file(/property :email, String/m, "#{@apptmp}/sample_project/models/user.rb")
389
+ end
390
+ end
391
+
392
+ # DYNAMOID
393
+ describe "model generator using dynamoid" do
394
+ it 'should generate model file with no properties' do
395
+ capture_io { generate(:project, 'sample_project', "--root=#{@apptmp}", '--script=none', '-d=dynamoid') }
396
+ capture_io { generate(:model, 'person', "name:string", "-r=#{@apptmp}/sample_project") }
397
+ assert_match_in_file(/class Person\n\s+include Dynamoid::Document/m, "#{@apptmp}/sample_project/models/person.rb")
398
+ end
399
+
400
+ it 'should generate model file with given fields' do
401
+ capture_io { generate(:project, 'sample_project', "--root=#{@apptmp}", '--script=none', '-d=dynamoid') }
402
+ capture_io { generate(:model, 'user', "name:string", "age:integer", "email:string", "-r=#{@apptmp}/sample_project") }
403
+ assert_match_in_file(/class User\n\s+include Dynamoid::Document/m, "#{@apptmp}/sample_project/models/user.rb")
404
+ assert_match_in_file(/field :name, :string/m, "#{@apptmp}/sample_project/models/user.rb")
405
+ assert_match_in_file(/field :age, :integer/m, "#{@apptmp}/sample_project/models/user.rb")
406
+ assert_match_in_file(/field :email, :string/m, "#{@apptmp}/sample_project/models/user.rb")
407
+ end
408
+ end
409
+
410
+ describe "model generator testing files" do
411
+ # BACON
412
+ it 'should generate test file for bacon' do
413
+ capture_io { generate(:project, 'sample_project', "--root=#{@apptmp}", '--script=none', '-t=bacon', '-d=activerecord') }
414
+ capture_io { generate(:app, 'subby', "-r=#{@apptmp}/sample_project") }
415
+ capture_io { generate(:model, 'SomeUser', "-r=#{@apptmp}/sample_project") }
416
+ assert_match_in_file(/describe "SomeUser Model"/m, "#{@apptmp}/sample_project/test/models/some_user_test.rb")
417
+ assert_match_in_file(/@some_user = SomeUser.new/m, "#{@apptmp}/sample_project/test/models/some_user_test.rb")
418
+ assert_match_in_file(/@some_user\.should\.not\.be\.nil/m, "#{@apptmp}/sample_project/test/models/some_user_test.rb")
419
+ assert_match_in_file(/'(\/\.\.){1}\/test/m, "#{@apptmp}/sample_project/test/models/some_user_test.rb")
420
+ end
421
+
422
+ it 'should generate test file for bacon in specified app' do
423
+ capture_io { generate(:project, 'sample_project', "--root=#{@apptmp}", '--script=none', '-t=bacon', '-d=activerecord') }
424
+ capture_io { generate(:app, 'subby', "-r=#{@apptmp}/sample_project") }
425
+ capture_io { generate(:model, 'SomeUser', "-a=/subby", "-r=#{@apptmp}/sample_project") }
426
+ assert_match_in_file(/describe "SomeUser Model"/m, "#{@apptmp}/sample_project/test/subby/models/some_user_test.rb")
427
+ assert_match_in_file(/@some_user = SomeUser.new/m, "#{@apptmp}/sample_project/test/subby/models/some_user_test.rb")
428
+ assert_match_in_file(/@some_user\.should\.not\.be\.nil/m, "#{@apptmp}/sample_project/test/subby/models/some_user_test.rb")
429
+ assert_match_in_file(/'(\/\.\.){2}\/test/m, "#{@apptmp}/sample_project/test/subby/models/some_user_test.rb")
430
+ end
431
+
432
+ # RIOT
433
+ it 'should generate test file for riot' do
434
+ capture_io { generate(:project, 'sample_project', "--root=#{@apptmp}", '--script=none', '-t=riot', '-d=activerecord') }
435
+ capture_io { generate(:app, 'subby', "-r=#{@apptmp}/sample_project") }
436
+ capture_io { generate(:model, 'SomeUser', "-r=#{@apptmp}/sample_project") }
437
+ assert_match_in_file(/context "SomeUser Model" do/m, "#{@apptmp}/sample_project/test/models/some_user_test.rb")
438
+ assert_match_in_file(/SomeUser.new/m, "#{@apptmp}/sample_project/test/models/some_user_test.rb")
439
+ assert_match_in_file(/asserts\("that record is not nil"\) \{ \!topic.nil\? \}/m, "#{@apptmp}/sample_project/test/models/some_user_test.rb")
440
+ assert_match_in_file(/'(\/\.\.){1}\/test/m, "#{@apptmp}/sample_project/test/models/some_user_test.rb")
441
+ end
442
+
443
+ it 'should generate test file for riot in specified app' do
444
+ capture_io { generate(:project, 'sample_project', "--root=#{@apptmp}", '--script=none', '-t=riot', '-d=activerecord') }
445
+ capture_io { generate(:app, 'subby', "-r=#{@apptmp}/sample_project") }
446
+ capture_io { generate(:model, 'SomeUser', "-a=/subby", "-r=#{@apptmp}/sample_project") }
447
+ assert_match_in_file(/context "SomeUser Model" do/m, "#{@apptmp}/sample_project/test/subby/models/some_user_test.rb")
448
+ assert_match_in_file(/SomeUser.new/m, "#{@apptmp}/sample_project/test/subby/models/some_user_test.rb")
449
+ assert_match_in_file(/asserts\("that record is not nil"\) \{ \!topic.nil\? \}/m, "#{@apptmp}/sample_project/test/subby/models/some_user_test.rb")
450
+ assert_match_in_file(/'(\/\.\.){2}\/test/m, "#{@apptmp}/sample_project/test/subby/models/some_user_test.rb")
451
+ end
452
+
453
+ # MINITEST
454
+ it 'should generate test file for minitest' do
455
+ capture_io { generate(:project, 'sample_project', "--root=#{@apptmp}", '--script=none', '-t=minitest', '-d=activerecord') }
456
+ capture_io { generate(:app, 'subby', "-r=#{@apptmp}/sample_project") }
457
+ capture_io { generate(:model, 'SomeUser', "-r=#{@apptmp}/sample_project") }
458
+ assert_match_in_file(/describe "SomeUser Model"/m, "#{@apptmp}/sample_project/test/models/some_user_test.rb")
459
+ assert_match_in_file(/refute_nil @some_user/m, "#{@apptmp}/sample_project/test/models/some_user_test.rb")
460
+ end
461
+
462
+ it 'should generate test file for minitest in specified app' do
463
+ capture_io { generate(:project, 'sample_project', "--root=#{@apptmp}", '--script=none', '-t=minitest', '-d=activerecord') }
464
+ capture_io { generate(:app, 'subby', "-r=#{@apptmp}/sample_project") }
465
+ capture_io { generate(:model, 'SomeUser', "-a=/subby", "-r=#{@apptmp}/sample_project") }
466
+ assert_match_in_file(/describe "SomeUser Model"/m, "#{@apptmp}/sample_project/test/subby/models/some_user_test.rb")
467
+ assert_match_in_file(/refute_nil @some_user/m, "#{@apptmp}/sample_project/test/subby/models/some_user_test.rb")
468
+ end
469
+
470
+ # RSPEC
471
+ it 'should generate test file for rspec' do
472
+ capture_io { generate(:project, 'sample_project', "--root=#{@apptmp}", '--script=none', '-t=rspec', '-d=activerecord') }
473
+ capture_io { generate(:app, 'subby', "-r=#{@apptmp}/sample_project") }
474
+ capture_io { generate(:model, 'SomeUser', "-r=#{@apptmp}/sample_project") }
475
+ assert_match_in_file(/describe SomeUser do/m, "#{@apptmp}/sample_project/spec/models/some_user_spec.rb")
476
+ # assert_match_in_file(/let\(:some_user\) \{ SomeUser.new \}/m, "#{@apptmp}/sample_project/spec/models/some_user_spec.rb")
477
+ # assert_match_in_file(/some_user\.should_not be_nil/m, "#{@apptmp}/sample_project/spec/models/some_user_spec.rb")
478
+ end
479
+
480
+ it 'should generate test file for rspec in specified app' do
481
+ capture_io { generate(:project, 'sample_project', "--root=#{@apptmp}", '--script=none', '-t=rspec', '-d=activerecord') }
482
+ capture_io { generate(:app, 'subby', "-r=#{@apptmp}/sample_project") }
483
+ capture_io { generate(:model, 'SomeUser', "-a=/subby", "-r=#{@apptmp}/sample_project") }
484
+ assert_match_in_file(/describe SomeUser do/m, "#{@apptmp}/sample_project/spec/subby/models/some_user_spec.rb")
485
+ # assert_match_in_file(/let\(:some_user\) \{ SomeUser.new \}/m, "#{@apptmp}/sample_project/spec/subby/models/some_user_spec.rb")
486
+ # assert_match_in_file(/some_user\.should_not be_nil/m, "#{@apptmp}/sample_project/spec/subby/models/some_user_spec.rb")
487
+ end
488
+
489
+ # SHOULDA
490
+ it 'should generate test file for shoulda' do
491
+ capture_io { generate(:project, 'sample_project', "--root=#{@apptmp}", '--script=none', '-t=shoulda', '-d=activerecord') }
492
+ capture_io { generate(:app, 'subby', "-r=#{@apptmp}/sample_project") }
493
+ capture_io { generate(:model, 'SomePerson', "-r=#{@apptmp}/sample_project") }
494
+ assert_match_in_file(/class SomePersonTest < Test::Unit::TestCase/m, "#{@apptmp}/sample_project/test/models/some_person_test.rb")
495
+ assert_match_in_file(/context "SomePerson Model"/m, "#{@apptmp}/sample_project/test/models/some_person_test.rb")
496
+ assert_match_in_file(/@some_person = SomePerson.new/m, "#{@apptmp}/sample_project/test/models/some_person_test.rb")
497
+ assert_match_in_file(/assert_not_nil @some_person/m, "#{@apptmp}/sample_project/test/models/some_person_test.rb")
498
+ assert_match_in_file(/'(\/\.\.){1}\/test/m, "#{@apptmp}/sample_project/test/models/some_person_test.rb")
499
+ end
500
+
501
+ it 'should generate test file for shoulda in specified app' do
502
+ capture_io { generate(:project, 'sample_project', "--root=#{@apptmp}", '--script=none', '-t=shoulda', '-d=activerecord') }
503
+ capture_io { generate(:app, 'subby', "-r=#{@apptmp}/sample_project") }
504
+ capture_io { generate(:model, 'SomePerson', "-a=/subby", "-r=#{@apptmp}/sample_project") }
505
+ assert_match_in_file(/class SomePersonTest < Test::Unit::TestCase/m, "#{@apptmp}/sample_project/test/subby/models/some_person_test.rb")
506
+ assert_match_in_file(/context "SomePerson Model"/m, "#{@apptmp}/sample_project/test/subby/models/some_person_test.rb")
507
+ assert_match_in_file(/@some_person = SomePerson.new/m, "#{@apptmp}/sample_project/test/subby/models/some_person_test.rb")
508
+ assert_match_in_file(/assert_not_nil @some_person/m, "#{@apptmp}/sample_project/test/subby/models/some_person_test.rb")
509
+ assert_match_in_file(/'(\/\.\.){2}\/test/m, "#{@apptmp}/sample_project/test/subby/models/some_person_test.rb")
510
+ end
511
+ end
512
+
513
+ describe "the model destroy option" do
514
+ module ActiveRecord
515
+ Base = Class.new
516
+ end
517
+
518
+ it 'should destroy the model file' do
519
+ capture_io { generate(:project, 'sample_project', "--root=#{@apptmp}", '--script=none', '-t=bacon', '-d=activerecord') }
520
+ capture_io { generate(:model, 'User', "-r=#{@apptmp}/sample_project") }
521
+ capture_io { generate_with_parts(:model, 'User', "-r=#{@apptmp}/sample_project", '-d') }
522
+ assert_no_file_exists("#{@apptmp}/sample_project/models/user.rb")
523
+ assert_no_file_exists("#{@apptmp}/sample_project/test/models/user_test.rb")
524
+ assert_no_file_exists("#{@apptmp}/sample_project/db/migrate/001_create_users.rb")
525
+ end
526
+
527
+ it 'should destroy the model test file with rspec' do
528
+ capture_io { generate(:project, 'sample_project', "--root=#{@apptmp}", '--script=none', '-t=rspec', '-d=activerecord') }
529
+ capture_io { generate(:model, 'User', "-r=#{@apptmp}/sample_project") }
530
+ capture_io { generate_with_parts(:model, 'User', "-r=#{@apptmp}/sample_project", '-d') }
531
+ assert_no_file_exists("#{@apptmp}/sample_project/spec/models/user_spec.rb")
532
+ end
533
+
534
+ it 'should destroy the model test file in a sub app' do
535
+ capture_io { generate(:project, 'sample_project', "--root=#{@apptmp}", '--script=none', '-t=bacon', '-d=activerecord') }
536
+ capture_io { generate(:app, 'subby', "-r=#{@apptmp}/sample_project") }
537
+ capture_io { generate(:model, 'User', "-a=/subby","-r=#{@apptmp}/sample_project") }
538
+ capture_io { generate_with_parts(:model, 'User', "-a=/subby","-r=#{@apptmp}/sample_project", '-d', :apps => "subby") }
539
+ assert_no_file_exists("#{@apptmp}/sample_project/subby/models/user.rb")
540
+ assert_no_file_exists("#{@apptmp}/sample_project/test/subby/models/user_test.rb")
541
+ assert_no_file_exists("#{@apptmp}/sample_project/db/migrate/001_create_users.rb")
542
+ end
543
+
544
+ it 'should destroy the right model migration' do
545
+ capture_io { generate(:project, 'sample_project', "--root=#{@apptmp}", '--script=none', '-t=rspec', '-d=activerecord') }
546
+ capture_io { generate(:model, 'bar_foo', "-r=#{@apptmp}/sample_project") }
547
+ capture_io { generate(:model, 'foo', "-r=#{@apptmp}/sample_project") }
548
+ capture_io { generate_with_parts(:model, 'foo', "-r=#{@apptmp}/sample_project", '-d') }
549
+ assert_no_file_exists("#{@apptmp}/sample_project/db/migrate/002_create_foos.rb")
550
+ assert_file_exists("#{@apptmp}/sample_project/db/migrate/001_create_bar_foos.rb")
551
+ end
552
+ end
553
+ end