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