tennpipes-init 3.6.6

Sign up to get free protection for your applications and to get access to all the features.
Files changed (167) hide show
  1. checksums.yaml +7 -0
  2. data/LICENSE.txt +20 -0
  3. data/README.rdoc +163 -0
  4. data/Rakefile +1 -0
  5. data/bin/tennpipes-init +16 -0
  6. data/lib/tennpipes-init.rb +73 -0
  7. data/lib/tennpipes-init/command.rb +18 -0
  8. data/lib/tennpipes-init/generators/actions.rb +630 -0
  9. data/lib/tennpipes-init/generators/app.rb +75 -0
  10. data/lib/tennpipes-init/generators/app/app.rb.tt +72 -0
  11. data/lib/tennpipes-init/generators/app/app.rb.tt~ +72 -0
  12. data/lib/tennpipes-init/generators/cli.rb +57 -0
  13. data/lib/tennpipes-init/generators/component.rb +73 -0
  14. data/lib/tennpipes-init/generators/components/actions.rb +208 -0
  15. data/lib/tennpipes-init/generators/components/mocks/mocha.rb +10 -0
  16. data/lib/tennpipes-init/generators/components/mocks/rr.rb +13 -0
  17. data/lib/tennpipes-init/generators/components/orms/activerecord.rb +201 -0
  18. data/lib/tennpipes-init/generators/components/orms/couchrest.rb +55 -0
  19. data/lib/tennpipes-init/generators/components/orms/datamapper.rb +140 -0
  20. data/lib/tennpipes-init/generators/components/orms/dynamoid.rb +67 -0
  21. data/lib/tennpipes-init/generators/components/orms/minirecord.rb +165 -0
  22. data/lib/tennpipes-init/generators/components/orms/mongoid.rb +113 -0
  23. data/lib/tennpipes-init/generators/components/orms/mongomapper.rb +43 -0
  24. data/lib/tennpipes-init/generators/components/orms/mongomatic.rb +84 -0
  25. data/lib/tennpipes-init/generators/components/orms/ohm.rb +65 -0
  26. data/lib/tennpipes-init/generators/components/orms/ripple.rb +75 -0
  27. data/lib/tennpipes-init/generators/components/orms/sequel.rb +99 -0
  28. data/lib/tennpipes-init/generators/components/renderers/erb.rb +3 -0
  29. data/lib/tennpipes-init/generators/components/renderers/haml.rb +3 -0
  30. data/lib/tennpipes-init/generators/components/renderers/liquid.rb +4 -0
  31. data/lib/tennpipes-init/generators/components/renderers/slim.rb +3 -0
  32. data/lib/tennpipes-init/generators/components/scripts/dojo.rb +10 -0
  33. data/lib/tennpipes-init/generators/components/scripts/extcore.rb +10 -0
  34. data/lib/tennpipes-init/generators/components/scripts/jquery.rb +10 -0
  35. data/lib/tennpipes-init/generators/components/scripts/mootools.rb +10 -0
  36. data/lib/tennpipes-init/generators/components/scripts/prototype.rb +12 -0
  37. data/lib/tennpipes-init/generators/components/scripts/rightjs.rb +10 -0
  38. data/lib/tennpipes-init/generators/components/stylesheets/compass.rb +39 -0
  39. data/lib/tennpipes-init/generators/components/stylesheets/compass/application.scss +43 -0
  40. data/lib/tennpipes-init/generators/components/stylesheets/compass/partials/_base.scss +12 -0
  41. data/lib/tennpipes-init/generators/components/stylesheets/less.rb +25 -0
  42. data/lib/tennpipes-init/generators/components/stylesheets/sass.rb +15 -0
  43. data/lib/tennpipes-init/generators/components/stylesheets/scss.rb +16 -0
  44. data/lib/tennpipes-init/generators/components/tests/bacon.rb +103 -0
  45. data/lib/tennpipes-init/generators/components/tests/cucumber.rb +86 -0
  46. data/lib/tennpipes-init/generators/components/tests/minitest.rb +110 -0
  47. data/lib/tennpipes-init/generators/components/tests/riot.rb +117 -0
  48. data/lib/tennpipes-init/generators/components/tests/rspec.rb +111 -0
  49. data/lib/tennpipes-init/generators/components/tests/shoulda.rb +114 -0
  50. data/lib/tennpipes-init/generators/components/tests/steak.rb +114 -0
  51. data/lib/tennpipes-init/generators/controller.rb +77 -0
  52. data/lib/tennpipes-init/generators/helper.rb +50 -0
  53. data/lib/tennpipes-init/generators/mailer.rb +52 -0
  54. data/lib/tennpipes-init/generators/migration.rb +43 -0
  55. data/lib/tennpipes-init/generators/model.rb +113 -0
  56. data/lib/tennpipes-init/generators/plugin.rb +67 -0
  57. data/lib/tennpipes-init/generators/project.rb +160 -0
  58. data/lib/tennpipes-init/generators/project/config.ru +9 -0
  59. data/lib/tennpipes-init/generators/project/config/apps.rb.tt +35 -0
  60. data/lib/tennpipes-init/generators/project/config/boot.rb +49 -0
  61. data/lib/tennpipes-init/generators/project/public/favicon.ico +0 -0
  62. data/lib/tennpipes-init/generators/project/public/images/booking.com.png +0 -0
  63. data/lib/tennpipes-init/generators/project/public/images/causes.png +0 -0
  64. data/lib/tennpipes-init/generators/project/public/images/ennkeypee_bg.jpg +0 -0
  65. data/lib/tennpipes-init/generators/project/public/images/ennkeypee_bluelogo.png +0 -0
  66. data/lib/tennpipes-init/generators/project/public/images/ennkeypee_bluelogo.svg +68 -0
  67. data/lib/tennpipes-init/generators/project/public/images/ennkeypee_whitelogo.png +0 -0
  68. data/lib/tennpipes-init/generators/project/public/images/ennkeypee_whitelogo.svg +65 -0
  69. data/lib/tennpipes-init/generators/project/public/images/forever21.png +0 -0
  70. data/lib/tennpipes-init/generators/project/public/images/icons/foundation-icons.eot +0 -0
  71. data/lib/tennpipes-init/generators/project/public/images/icons/foundation-icons.svg +970 -0
  72. data/lib/tennpipes-init/generators/project/public/images/icons/foundation-icons.ttf +0 -0
  73. data/lib/tennpipes-init/generators/project/public/images/icons/foundation-icons.woff +0 -0
  74. data/lib/tennpipes-init/generators/project/public/images/icons/tennpipes-icons.css +598 -0
  75. data/lib/tennpipes-init/generators/project/public/images/image1.jpg +0 -0
  76. data/lib/tennpipes-init/generators/project/public/images/image11.jpg +0 -0
  77. data/lib/tennpipes-init/generators/project/public/images/image2.jpg +0 -0
  78. data/lib/tennpipes-init/generators/project/public/images/image3.jpg +0 -0
  79. data/lib/tennpipes-init/generators/project/public/images/intuit.png +0 -0
  80. data/lib/tennpipes-init/generators/project/public/images/krispykreme.png +0 -0
  81. data/lib/tennpipes-init/generators/project/public/images/placeholders/README.md +302 -0
  82. data/lib/tennpipes-init/generators/project/public/images/placeholders/bower.json +4 -0
  83. data/lib/tennpipes-init/generators/project/public/images/placeholders/composer.json +34 -0
  84. data/lib/tennpipes-init/generators/project/public/images/placeholders/gulpfile.js +92 -0
  85. data/lib/tennpipes-init/generators/project/public/images/placeholders/holder.js +1920 -0
  86. data/lib/tennpipes-init/generators/project/public/images/placeholders/holder.min.js +12 -0
  87. data/lib/tennpipes-init/generators/project/public/images/placeholders/package.json +46 -0
  88. data/lib/tennpipes-init/generators/project/public/images/placeholders/src/holder.js +1411 -0
  89. data/lib/tennpipes-init/generators/project/public/images/placeholders/src/lib/augment.js +27 -0
  90. data/lib/tennpipes-init/generators/project/public/images/placeholders/src/lib/ondomready.js +155 -0
  91. data/lib/tennpipes-init/generators/project/public/images/placeholders/src/lib/polyfills.js +177 -0
  92. data/lib/tennpipes-init/generators/project/public/images/placeholders/src/scenegraph.js +101 -0
  93. data/lib/tennpipes-init/generators/project/public/images/placeholders/src/utils.js +129 -0
  94. data/lib/tennpipes-init/generators/project/public/images/priceline.com.png +0 -0
  95. data/lib/tennpipes-init/generators/project/public/images/stripe.png +0 -0
  96. data/lib/tennpipes-init/generators/project/public/javascripts/tennpipes.min.js +6081 -0
  97. data/lib/tennpipes-init/generators/project/public/javascripts/tennpipes/tennpipes.abide.js +340 -0
  98. data/lib/tennpipes-init/generators/project/public/javascripts/tennpipes/tennpipes.accordion.js +67 -0
  99. data/lib/tennpipes-init/generators/project/public/javascripts/tennpipes/tennpipes.alert.js +43 -0
  100. data/lib/tennpipes-init/generators/project/public/javascripts/tennpipes/tennpipes.clearing.js +556 -0
  101. data/lib/tennpipes-init/generators/project/public/javascripts/tennpipes/tennpipes.dropdown.js +448 -0
  102. data/lib/tennpipes-init/generators/project/public/javascripts/tennpipes/tennpipes.equalizer.js +77 -0
  103. data/lib/tennpipes-init/generators/project/public/javascripts/tennpipes/tennpipes.interchange.js +354 -0
  104. data/lib/tennpipes-init/generators/project/public/javascripts/tennpipes/tennpipes.joyride.js +932 -0
  105. data/lib/tennpipes-init/generators/project/public/javascripts/tennpipes/tennpipes.js +703 -0
  106. data/lib/tennpipes-init/generators/project/public/javascripts/tennpipes/tennpipes.magellan.js +203 -0
  107. data/lib/tennpipes-init/generators/project/public/javascripts/tennpipes/tennpipes.offcanvas.js +152 -0
  108. data/lib/tennpipes-init/generators/project/public/javascripts/tennpipes/tennpipes.orbit.js +476 -0
  109. data/lib/tennpipes-init/generators/project/public/javascripts/tennpipes/tennpipes.reveal.js +471 -0
  110. data/lib/tennpipes-init/generators/project/public/javascripts/tennpipes/tennpipes.slider.js +263 -0
  111. data/lib/tennpipes-init/generators/project/public/javascripts/tennpipes/tennpipes.tab.js +237 -0
  112. data/lib/tennpipes-init/generators/project/public/javascripts/tennpipes/tennpipes.tooltip.js +307 -0
  113. data/lib/tennpipes-init/generators/project/public/javascripts/tennpipes/tennpipes.topbar.js +452 -0
  114. data/lib/tennpipes-init/generators/project/public/javascripts/vendor/fastclick.js +8 -0
  115. data/lib/tennpipes-init/generators/project/public/javascripts/vendor/jquery.cookie.js +8 -0
  116. data/lib/tennpipes-init/generators/project/public/javascripts/vendor/jquery.js +26 -0
  117. data/lib/tennpipes-init/generators/project/public/javascripts/vendor/modernizr.js +8 -0
  118. data/lib/tennpipes-init/generators/project/public/javascripts/vendor/placeholder.js +2 -0
  119. data/lib/tennpipes-init/generators/project/public/stylesheets/app.css~ +178 -0
  120. data/lib/tennpipes-init/generators/project/public/stylesheets/app1.css~ +177 -0
  121. data/lib/tennpipes-init/generators/project/public/stylesheets/ennkeypee.css +214 -0
  122. data/lib/tennpipes-init/generators/project/public/stylesheets/ennkeypee.css~ +214 -0
  123. data/lib/tennpipes-init/generators/project/public/stylesheets/normalize.css +427 -0
  124. data/lib/tennpipes-init/generators/project/public/stylesheets/tennpipes.css +6201 -0
  125. data/lib/tennpipes-init/generators/project/public/stylesheets/tennpipes.css~ +6201 -0
  126. data/lib/tennpipes-init/generators/project/public/stylesheets/tennpipes.min.css +1 -0
  127. data/lib/tennpipes-init/generators/runner.rb +139 -0
  128. data/lib/tennpipes-init/generators/task.rb +45 -0
  129. data/lib/tennpipes-init/generators/templates/Gemfile.tt +32 -0
  130. data/lib/tennpipes-init/generators/templates/Rakefile.tt +8 -0
  131. data/lib/tennpipes-init/generators/templates/controller.rb.tt +22 -0
  132. data/lib/tennpipes-init/generators/templates/gem/README.md.tt +29 -0
  133. data/lib/tennpipes-init/generators/templates/gem/gemspec.tt +19 -0
  134. data/lib/tennpipes-init/generators/templates/gem/lib/libname.tt +6 -0
  135. data/lib/tennpipes-init/generators/templates/gem/lib/libname/version.tt +3 -0
  136. data/lib/tennpipes-init/generators/templates/helper.rb.tt +13 -0
  137. data/lib/tennpipes-init/generators/templates/initializer.rb.tt +5 -0
  138. data/lib/tennpipes-init/generators/templates/mailer.rb.tt +54 -0
  139. data/lib/tennpipes-init/generators/templates/project_bin.tt +14 -0
  140. data/lib/tennpipes-init/generators/templates/task.rb.tt +7 -0
  141. data/lib/tennpipes-init/tennpipes-tasks/activerecord.rb +377 -0
  142. data/lib/tennpipes-init/tennpipes-tasks/database.rb +12 -0
  143. data/lib/tennpipes-init/tennpipes-tasks/datamapper.rb +94 -0
  144. data/lib/tennpipes-init/tennpipes-tasks/minirecord.rb +19 -0
  145. data/lib/tennpipes-init/tennpipes-tasks/mongoid.rb +215 -0
  146. data/lib/tennpipes-init/tennpipes-tasks/mongomapper.rb +55 -0
  147. data/lib/tennpipes-init/tennpipes-tasks/sequel.rb +85 -0
  148. data/lib/tennpipes-init/tennpipes-tasks/sql-helpers.rb +72 -0
  149. data/test/fixtures/admin_template.rb +7 -0
  150. data/test/fixtures/example_template.rb +15 -0
  151. data/test/fixtures/git_template.rb +4 -0
  152. data/test/fixtures/plugin_template.rb +13 -0
  153. data/test/fixtures/rake_template.rb +9 -0
  154. data/test/helper.rb +103 -0
  155. data/test/test_app_generator.rb +142 -0
  156. data/test/test_cli.rb +27 -0
  157. data/test/test_component_generator.rb +98 -0
  158. data/test/test_controller_generator.rb +272 -0
  159. data/test/test_generator.rb +13 -0
  160. data/test/test_helper_generator.rb +133 -0
  161. data/test/test_mailer_generator.rb +69 -0
  162. data/test/test_migration_generator.rb +222 -0
  163. data/test/test_model_generator.rb +553 -0
  164. data/test/test_plugin_generator.rb +152 -0
  165. data/test/test_project_generator.rb +757 -0
  166. data/test/test_task_generator.rb +53 -0
  167. metadata +285 -0
@@ -0,0 +1,165 @@
1
+ MR = (<<-MR) unless defined?(MR)
2
+ ##
3
+ # You can use other adapters like:
4
+ #
5
+ # ActiveRecord::Base.configurations[:development] = {
6
+ # :adapter => 'mysql2',
7
+ # :encoding => 'utf8',
8
+ # :reconnect => true,
9
+ # :database => 'your_database',
10
+ # :pool => 5,
11
+ # :username => 'root',
12
+ # :password => '',
13
+ # :host => 'localhost',
14
+ # :socket => '/tmp/mysql.sock'
15
+ # }
16
+ #
17
+ ActiveRecord::Base.configurations[:development] = {
18
+ !DB_DEVELOPMENT!
19
+ }
20
+
21
+ ActiveRecord::Base.configurations[:production] = {
22
+ !DB_PRODUCTION!
23
+ }
24
+
25
+ ActiveRecord::Base.configurations[:test] = {
26
+ !DB_TEST!
27
+ }
28
+
29
+ # Setup our logger.
30
+ ActiveRecord::Base.logger = logger
31
+
32
+ if ActiveRecord::VERSION::MAJOR.to_i < 4
33
+ # Raise exception on mass assignment protection for Active Record models.
34
+ ActiveRecord::Base.mass_assignment_sanitizer = :strict
35
+
36
+ # Log the query plan for queries taking more than this (works
37
+ # with SQLite, MySQL, and PostgreSQL).
38
+ ActiveRecord::Base.auto_explain_threshold_in_seconds = 0.5
39
+ end
40
+
41
+ # Doesn't include Active Record class name as root for JSON serialized output.
42
+ ActiveRecord::Base.include_root_in_json = false
43
+
44
+ # Store the full class name (including module namespace) in STI type column.
45
+ ActiveRecord::Base.store_full_sti_class = true
46
+
47
+ # Use ISO 8601 format for JSON serialized times and dates.
48
+ ActiveSupport.use_standard_json_time_format = true
49
+
50
+ # Don't escape HTML entities in JSON, leave that for the #json_escape helper
51
+ # if you're including raw JSON in an HTML page.
52
+ ActiveSupport.escape_html_entities_in_json = false
53
+
54
+ # Now we can establish connection with our db.
55
+ ActiveRecord::Base.establish_connection(ActiveRecord::Base.configurations[Tennpipes.env])
56
+
57
+ # Timestamps are in the utc by default.
58
+ ActiveRecord::Base.default_timezone = :utc
59
+ MR
60
+
61
+ MYSQL = (<<-MYSQL) unless defined?(MYSQL)
62
+ :adapter => 'mysql',
63
+ :encoding => 'utf8',
64
+ :reconnect => true,
65
+ :database => !DB_NAME!,
66
+ :pool => 5,
67
+ :username => 'root',
68
+ :password => '',
69
+ :host => 'localhost',
70
+ :socket => '/tmp/mysql.sock'
71
+ MYSQL
72
+
73
+ MYSQL2 = (<<-MYSQL2) unless defined?(MYSQL2)
74
+ :adapter => 'mysql2',
75
+ :encoding => 'utf8',
76
+ :reconnect => true,
77
+ :database => !DB_NAME!,
78
+ :pool => 5,
79
+ :username => 'root',
80
+ :password => '',
81
+ :host => 'localhost',
82
+ :socket => '/tmp/mysql.sock'
83
+ MYSQL2
84
+
85
+ POSTGRES = (<<-POSTGRES) unless defined?(POSTGRES)
86
+ :adapter => 'postgresql',
87
+ :database => !DB_NAME!,
88
+ :username => 'root',
89
+ :password => '',
90
+ :host => 'localhost',
91
+ :port => 5432
92
+ POSTGRES
93
+
94
+ SQLITE = (<<-SQLITE) unless defined?(SQLITE)
95
+ :adapter => 'sqlite3',
96
+ :database => !DB_NAME!
97
+ SQLITE
98
+
99
+ CONNECTION_POOL_MIDDLEWARE = <<-MIDDLEWARE
100
+ class ConnectionPoolManagement
101
+ def initialize(app)
102
+ @app = app
103
+ end
104
+
105
+ def call(env)
106
+ ActiveRecord::Base.connection_pool.with_connection { @app.call(env) }
107
+ end
108
+ end
109
+ MIDDLEWARE
110
+
111
+ def setup_orm
112
+ ar = MR
113
+ db = @project_name.underscore
114
+ case options[:adapter]
115
+ when 'mysql-gem'
116
+ ar.gsub! /!DB_DEVELOPMENT!/, MYSQL.gsub(/!DB_NAME!/,"'#{db}_development'")
117
+ ar.gsub! /!DB_PRODUCTION!/, MYSQL.gsub(/!DB_NAME!/,"'#{db}_production'")
118
+ ar.gsub! /!DB_TEST!/, MYSQL.gsub(/!DB_NAME!/,"'#{db}_test'")
119
+ require_dependencies 'mysql', :version => "~> 2.8.1"
120
+ when 'mysql', 'mysql2'
121
+ ar.gsub! /!DB_DEVELOPMENT!/, MYSQL2.gsub(/!DB_NAME!/,"'#{db}_development'")
122
+ ar.gsub! /!DB_PRODUCTION!/, MYSQL2.gsub(/!DB_NAME!/,"'#{db}_production'")
123
+ ar.gsub! /!DB_TEST!/, MYSQL2.gsub(/!DB_NAME!/,"'#{db}_test'")
124
+ require_dependencies 'mysql2'
125
+ when 'postgres'
126
+ ar.gsub! /!DB_DEVELOPMENT!/, POSTGRES.gsub(/!DB_NAME!/,"'#{db}_development'")
127
+ ar.gsub! /!DB_PRODUCTION!/, POSTGRES.gsub(/!DB_NAME!/,"'#{db}_production'")
128
+ ar.gsub! /!DB_TEST!/, POSTGRES.gsub(/!DB_NAME!/,"'#{db}_test'")
129
+ require_dependencies 'pg'
130
+ else
131
+ ar.gsub! /!DB_DEVELOPMENT!/, SQLITE.gsub(/!DB_NAME!/,"Tennpipes.root('db', '#{db}_development.db')")
132
+ ar.gsub! /!DB_PRODUCTION!/, SQLITE.gsub(/!DB_NAME!/,"Tennpipes.root('db', '#{db}_production.db')")
133
+ ar.gsub! /!DB_TEST!/, SQLITE.gsub(/!DB_NAME!/,"Tennpipes.root('db', '#{db}_test.db')")
134
+ require_dependencies 'sqlite3'
135
+ end
136
+ require_dependencies 'mini_record'
137
+ create_file('config/database.rb', ar)
138
+ insert_hook('ActiveRecord::Base.auto_upgrade!', :after_load)
139
+ middleware :connection_pool_management, CONNECTION_POOL_MIDDLEWARE
140
+ end
141
+
142
+ MR_MODEL = (<<-MODEL) unless defined?(MR_MODEL)
143
+ class !NAME! < ActiveRecord::Base
144
+ # Fields
145
+ !FIELDS!
146
+ end
147
+ MODEL
148
+
149
+ # options => { :fields => ["title:string", "body:string"], :app => 'app' }
150
+ def create_model_file(name, options={})
151
+ model_path = destination_root(options[:app], 'models', "#{name.to_s.underscore}.rb")
152
+ field_tuples = options[:fields].map { |value| value.split(":") }
153
+ column_declarations = field_tuples.map { |field, kind| "field :#{field}, :as => :#{kind}" }.join("\n ")
154
+ model_contents = MR_MODEL.gsub(/!NAME!/, name.to_s.underscore.camelize)
155
+ model_contents.gsub!(/!FIELDS!/, column_declarations)
156
+ create_file(model_path, model_contents)
157
+ end
158
+
159
+ def create_model_migration(migration_name, name, columns)
160
+ # NO MIGRATION NEEDED
161
+ end
162
+
163
+ def create_migration_file(migration_name, name, columns)
164
+ # NO MIGRATION NEEDED
165
+ end
@@ -0,0 +1,113 @@
1
+ MONGOID = (<<-MONGO) unless defined?(MONGOID)
2
+ # Connection.new takes host and port
3
+ host = 'localhost'
4
+ port = Mongo::Connection::DEFAULT_PORT
5
+
6
+ database_name = case Tennpipes.env
7
+ when :development then '!NAME!_development'
8
+ when :production then '!NAME!_production'
9
+ when :test then '!NAME!_test'
10
+ end
11
+
12
+ Mongoid.database = Mongo::Connection.new(host, port).db(database_name)
13
+
14
+ # You can also configure Mongoid this way:
15
+ # Mongoid.configure do |config|
16
+ # name = @settings["database"]
17
+ # host = @settings["host"]
18
+ # config.master = Mongo::Connection.new.db(name)
19
+ # config.slaves = [
20
+ # Mongo::Connection.new(host, @settings["slave_one"]["port"], :slave_ok => true).db(name),
21
+ # Mongo::Connection.new(host, @settings["slave_two"]["port"], :slave_ok => true).db(name)
22
+ # ]
23
+ # end
24
+ #
25
+ # More installation and setup notes are on http://mongoid.org/.
26
+ MONGO
27
+
28
+ MONGOID3 = (<<-MONGO) unless defined?(MONGOID3)
29
+ # Connection.new takes host and port.
30
+
31
+ host = 'localhost'
32
+ port = 27017
33
+
34
+ database_name = case Tennpipes.env
35
+ when :development then '!NAME!_development'
36
+ when :production then '!NAME!_production'
37
+ when :test then '!NAME!_test'
38
+ end
39
+
40
+ # Use MONGO_URI if it's set as an environmental variable.
41
+ Mongoid::Config.sessions =
42
+ if ENV['MONGO_URI']
43
+ {default: {uri: ENV['MONGO_URI'] }}
44
+ else
45
+ {default: {hosts: ["#\{host\}:#\{port\}"], database: database_name}}
46
+ end
47
+
48
+ # If you want to use a YML file for config, use this instead:
49
+ #
50
+ # Mongoid.load!(File.join(Tennpipes.root, 'config', 'database.yml'), Tennpipes.env)
51
+ #
52
+ # And add a config/database.yml file like this:
53
+ # development:
54
+ # sessions:
55
+ # default:
56
+ # database: !NAME!_development
57
+ # hosts:
58
+ # - localhost:27017
59
+ # production:
60
+ # sessions:
61
+ # default:
62
+ # database: !NAME!_production
63
+ # hosts:
64
+ # - localhost:27017
65
+ # test:
66
+ # sessions:
67
+ # default:
68
+ # database: !NAME!_test
69
+ # hosts:
70
+ # - localhost:27017
71
+ #
72
+ #
73
+ # More installation and setup notes are on http://mongoid.org/en/mongoid/docs/installation.html#configuration
74
+ MONGO
75
+
76
+ def setup_orm
77
+ require_dependencies 'mongoid', :version => '>= 3.0.0'
78
+ create_file('config/database.rb', MONGOID3.gsub(/!NAME!/, @project_name.underscore))
79
+ end
80
+
81
+ MONGOID_MODEL = (<<-MODEL) unless defined?(MONGOID_MODEL)
82
+ class !NAME!
83
+ include Mongoid::Document
84
+ include Mongoid::Timestamps # adds created_at and updated_at fields
85
+
86
+ # field <name>, :type => <type>, :default => <value>
87
+ !FIELDS!
88
+
89
+ # You can define indexes on documents using the index macro:
90
+ # index :field <, :unique => true>
91
+
92
+ # You can create a composite key in mongoid to replace the default id using the key macro:
93
+ # key :field <, :another_field, :one_more ....>
94
+ end
95
+ MODEL
96
+
97
+ # options => { :fields => ["title:string", "body:string"], :app => 'app' }
98
+ def create_model_file(name, options={})
99
+ model_path = destination_root(options[:app], 'models', "#{name.to_s.underscore}.rb")
100
+ field_tuples = options[:fields].map { |value| value.split(":") }
101
+ column_declarations = field_tuples.map { |field, kind| "field :#{field}, :type => #{kind.underscore.camelize}" }.join("\n ")
102
+ model_contents = MONGOID_MODEL.gsub(/!NAME!/, name.to_s.underscore.camelize)
103
+ model_contents.gsub!(/!FIELDS!/, column_declarations)
104
+ create_file(model_path, model_contents)
105
+ end
106
+
107
+ def create_model_migration(filename, name, fields)
108
+ # NO MIGRATION NEEDED
109
+ end
110
+
111
+ def create_migration_file(migration_name, name, columns)
112
+ # NO MIGRATION NEEDED
113
+ end
@@ -0,0 +1,43 @@
1
+ MONGO = (<<-MONGO) unless defined?(MONGO)
2
+ MongoMapper.connection = Mongo::Connection.new('localhost', nil, :logger => logger)
3
+
4
+ case Tennpipes.env
5
+ when :development then MongoMapper.database = '!NAME!_development'
6
+ when :production then MongoMapper.database = '!NAME!_production'
7
+ when :test then MongoMapper.database = '!NAME!_test'
8
+ end
9
+ MONGO
10
+
11
+ def setup_orm
12
+ require_dependencies 'mongo_mapper'
13
+ require_dependencies 'bson_ext', :require => 'mongo'
14
+ create_file("config/database.rb", MONGO.gsub(/!NAME!/, @project_name.underscore))
15
+ end
16
+
17
+ MM_MODEL = (<<-MODEL) unless defined?(MM_MODEL)
18
+ class !NAME!
19
+ include MongoMapper::Document
20
+
21
+ # key <name>, <type>
22
+ !FIELDS!
23
+ timestamps!
24
+ end
25
+ MODEL
26
+
27
+ # options => { :fields => ["title:string", "body:string"], :app => 'app' }
28
+ def create_model_file(name, options={})
29
+ model_path = destination_root(options[:app], 'models', "#{name.to_s.underscore}.rb")
30
+ field_tuples = options[:fields].map { |value| value.split(":") }
31
+ column_declarations = field_tuples.map { |field, kind| "key :#{field}, #{kind.underscore.camelize}" }.join("\n ")
32
+ model_contents = MM_MODEL.gsub(/!NAME!/, name.to_s.underscore.camelize)
33
+ model_contents.gsub!(/!FIELDS!/, column_declarations)
34
+ create_file(model_path, model_contents)
35
+ end
36
+
37
+ def create_model_migration(filename, name, fields)
38
+ # NO MIGRATION NEEDED
39
+ end
40
+
41
+ def create_migration_file(migration_name, name, columns)
42
+ # NO MIGRATION NEEDED
43
+ end
@@ -0,0 +1,84 @@
1
+ MONGOMATIC = (<<-MONGO) unless defined?(MONGOMATIC)
2
+
3
+ case Tennpipes.env
4
+ when :development then Mongomatic.db = Mongo::Connection.new.db("!NAME!_development")
5
+ when :production then Mongomatic.db = Mongo::Connection.new.db("!NAME!_production")
6
+ when :test then Mongomatic.db = Mongo::Connection.new.db("!NAME!_test")
7
+ end
8
+ MONGO
9
+
10
+ def setup_orm
11
+ mongomatic = MONGOMATIC
12
+ require_dependencies 'mongomatic'
13
+ require_dependencies 'bson_ext', :require => 'mongo'
14
+ create_file("config/database.rb", MONGOMATIC.gsub(/!NAME!/, @project_name.underscore))
15
+ end
16
+
17
+ MONGOMATIC_MODEL = (<<-MODEL) unless defined?(MONGOMATIC_MODEL)
18
+ class !NAME! < Mongomatic::Base
19
+ include Mongomatic::Expectations::Helper
20
+
21
+ # Mongomatic does not have the traditional
22
+ # model definition that AR/MM/DM et. al. have.
23
+ # Staying true to the "ad-hoc" nature of MongoDB,
24
+ # there are no explicit column definitions in the
25
+ # model file.
26
+
27
+ # However you can "fake it" by making a column
28
+ # required using expectations
29
+ # For the sake of tennpipes g model,
30
+ # we'll assume that any property defined
31
+ # on the command-line is required
32
+ # In the case of Integer types, we'll add
33
+ # the expectation: be_a_number
34
+ # Future enhancement may allow a regex for
35
+ # String datatypes
36
+
37
+
38
+ # Examples:
39
+ # def validate
40
+ # expectations do
41
+ # be_present self['name'], "Name cannot be blank"
42
+ # be_present self['email'], "Email cannot be blank"
43
+ # be_present self['age'], "Age cannot be blank"
44
+ # be_present self['password'], "Password cannot be blank"
45
+ # be_a_number self['age'], "Age must be a number"
46
+ # be_of_length self['password'], "Password must be at least 8 characters", :minimum => 8
47
+ # end
48
+ # end
49
+
50
+ # def create_indexes
51
+ # self.collection.create_index('name', :unique => true)
52
+ # self.collection.create_index('email', :unique => true)
53
+ # self.collection.create_index('age')
54
+ # end
55
+ def validate
56
+ expectations do
57
+ !FIELDS!
58
+ !INTEGERS!
59
+ end
60
+ end
61
+
62
+ end
63
+ MODEL
64
+
65
+ # options => { :fields => ["title:string", "body:string"], :app => 'app' }
66
+ def create_model_file(name, options={})
67
+ model_path = destination_root(options[:app], 'models', "#{name.to_s.underscore}.rb")
68
+ field_tuples = options[:fields].map { |value| value.split(":") }
69
+ column_declarations = field_tuples.map { |field, kind| "be_present self['#{field}'], '#{field} cannot be blank'" }.join("\n ")
70
+ # Really ugly oneliner
71
+ integers = field_tuples.select { |col, type| type =~ /[Ii]nteger/ }.map { |field, kind| "be_a_number self['#{field}'], '#{field} must be a number'" }.join("\n ")
72
+ model_contents = MONGOMATIC_MODEL.gsub(/!NAME!/, name.to_s.underscore.camelize)
73
+ model_contents.gsub!(/!FIELDS!/, column_declarations)
74
+ model_contents.gsub!(/!INTEGERS!/, integers)
75
+ create_file(model_path, model_contents)
76
+ end
77
+
78
+ def create_model_migration(filename, name, fields)
79
+ # NO MIGRATION NEEDED
80
+ end
81
+
82
+ def create_migration_file(migration_name, name, columns)
83
+ # NO MIGRATION NEEDED
84
+ end
@@ -0,0 +1,65 @@
1
+ OHM = (<<-OHM) unless defined?(OHM)
2
+ # Ohm does not have the concept of namespaces.
3
+ # This means that you will not be able to have
4
+ # a distinct test, development, or production database.
5
+ #
6
+ # You can, however, run multiple redis servers on the same host
7
+ # and point to them based on the environment:
8
+ #
9
+ # case Tennpipes.env
10
+ # when :development then Ohm.connect(:port => 6379)
11
+ # when :production then Ohm.connect(:port => 6380)
12
+ # when :test then Ohm.connect(:port => 6381)
13
+ # end
14
+
15
+ # Alternatively, you can try specifying a difference :db
16
+ # which, outside of confirmation, appears to provide distinct
17
+ # namespaces from testing:
18
+ # case Tennpipes.env
19
+ # when :development then Ohm.connect(:db => 0)
20
+ # when :production then Ohm.connect(:db => 1)
21
+ # when :test then Ohm.connect(:db => 2)
22
+ # end
23
+ OHM
24
+
25
+ def setup_orm
26
+ require_dependencies 'ohm', :version => "~> 1.3.0"
27
+ create_file("config/database.rb", OHM)
28
+ end
29
+
30
+ OHM_MODEL = (<<-MODEL) unless defined?(OHM_MODEL)
31
+ class !NAME! < Ohm::Model
32
+ # Examples:
33
+ # attribute :name
34
+ # attribute :email
35
+ # reference :venue, Venue
36
+ # set :participants, Person
37
+ # counter :votes
38
+ #
39
+ # index :name
40
+ #
41
+ # def validate
42
+ # assert_present :name
43
+ # end
44
+
45
+ !FIELDS!
46
+ end
47
+ MODEL
48
+
49
+ # options => { :fields => ["title:string", "body:string"], :app => 'app' }
50
+ def create_model_file(name, options={})
51
+ model_path = destination_root(options[:app], 'models', "#{name.to_s.underscore}.rb")
52
+ field_tuples = options[:fields].map { |value| value.split(":") }
53
+ column_declarations = field_tuples.map { |field, kind| "attribute :#{field}" }.join("\n ")
54
+ model_contents = OHM_MODEL.gsub(/!NAME!/, name.to_s.underscore.camelize)
55
+ model_contents.gsub!(/!FIELDS!/, column_declarations)
56
+ create_file(model_path, model_contents)
57
+ end
58
+
59
+ def create_model_migration(filename, name, fields)
60
+ # NO MIGRATION NEEDED
61
+ end
62
+
63
+ def create_migration_file(migration_name, name, columns)
64
+ # NO MIGRATION NEEDED
65
+ end