tennpipes-init 3.6.6
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +7 -0
- data/LICENSE.txt +20 -0
- data/README.rdoc +163 -0
- data/Rakefile +1 -0
- data/bin/tennpipes-init +16 -0
- data/lib/tennpipes-init.rb +73 -0
- data/lib/tennpipes-init/command.rb +18 -0
- data/lib/tennpipes-init/generators/actions.rb +630 -0
- data/lib/tennpipes-init/generators/app.rb +75 -0
- data/lib/tennpipes-init/generators/app/app.rb.tt +72 -0
- data/lib/tennpipes-init/generators/app/app.rb.tt~ +72 -0
- data/lib/tennpipes-init/generators/cli.rb +57 -0
- data/lib/tennpipes-init/generators/component.rb +73 -0
- data/lib/tennpipes-init/generators/components/actions.rb +208 -0
- data/lib/tennpipes-init/generators/components/mocks/mocha.rb +10 -0
- data/lib/tennpipes-init/generators/components/mocks/rr.rb +13 -0
- data/lib/tennpipes-init/generators/components/orms/activerecord.rb +201 -0
- data/lib/tennpipes-init/generators/components/orms/couchrest.rb +55 -0
- data/lib/tennpipes-init/generators/components/orms/datamapper.rb +140 -0
- data/lib/tennpipes-init/generators/components/orms/dynamoid.rb +67 -0
- data/lib/tennpipes-init/generators/components/orms/minirecord.rb +165 -0
- data/lib/tennpipes-init/generators/components/orms/mongoid.rb +113 -0
- data/lib/tennpipes-init/generators/components/orms/mongomapper.rb +43 -0
- data/lib/tennpipes-init/generators/components/orms/mongomatic.rb +84 -0
- data/lib/tennpipes-init/generators/components/orms/ohm.rb +65 -0
- data/lib/tennpipes-init/generators/components/orms/ripple.rb +75 -0
- data/lib/tennpipes-init/generators/components/orms/sequel.rb +99 -0
- data/lib/tennpipes-init/generators/components/renderers/erb.rb +3 -0
- data/lib/tennpipes-init/generators/components/renderers/haml.rb +3 -0
- data/lib/tennpipes-init/generators/components/renderers/liquid.rb +4 -0
- data/lib/tennpipes-init/generators/components/renderers/slim.rb +3 -0
- data/lib/tennpipes-init/generators/components/scripts/dojo.rb +10 -0
- data/lib/tennpipes-init/generators/components/scripts/extcore.rb +10 -0
- data/lib/tennpipes-init/generators/components/scripts/jquery.rb +10 -0
- data/lib/tennpipes-init/generators/components/scripts/mootools.rb +10 -0
- data/lib/tennpipes-init/generators/components/scripts/prototype.rb +12 -0
- data/lib/tennpipes-init/generators/components/scripts/rightjs.rb +10 -0
- data/lib/tennpipes-init/generators/components/stylesheets/compass.rb +39 -0
- data/lib/tennpipes-init/generators/components/stylesheets/compass/application.scss +43 -0
- data/lib/tennpipes-init/generators/components/stylesheets/compass/partials/_base.scss +12 -0
- data/lib/tennpipes-init/generators/components/stylesheets/less.rb +25 -0
- data/lib/tennpipes-init/generators/components/stylesheets/sass.rb +15 -0
- data/lib/tennpipes-init/generators/components/stylesheets/scss.rb +16 -0
- data/lib/tennpipes-init/generators/components/tests/bacon.rb +103 -0
- data/lib/tennpipes-init/generators/components/tests/cucumber.rb +86 -0
- data/lib/tennpipes-init/generators/components/tests/minitest.rb +110 -0
- data/lib/tennpipes-init/generators/components/tests/riot.rb +117 -0
- data/lib/tennpipes-init/generators/components/tests/rspec.rb +111 -0
- data/lib/tennpipes-init/generators/components/tests/shoulda.rb +114 -0
- data/lib/tennpipes-init/generators/components/tests/steak.rb +114 -0
- data/lib/tennpipes-init/generators/controller.rb +77 -0
- data/lib/tennpipes-init/generators/helper.rb +50 -0
- data/lib/tennpipes-init/generators/mailer.rb +52 -0
- data/lib/tennpipes-init/generators/migration.rb +43 -0
- data/lib/tennpipes-init/generators/model.rb +113 -0
- data/lib/tennpipes-init/generators/plugin.rb +67 -0
- data/lib/tennpipes-init/generators/project.rb +160 -0
- data/lib/tennpipes-init/generators/project/config.ru +9 -0
- data/lib/tennpipes-init/generators/project/config/apps.rb.tt +35 -0
- data/lib/tennpipes-init/generators/project/config/boot.rb +49 -0
- data/lib/tennpipes-init/generators/project/public/favicon.ico +0 -0
- data/lib/tennpipes-init/generators/project/public/images/booking.com.png +0 -0
- data/lib/tennpipes-init/generators/project/public/images/causes.png +0 -0
- data/lib/tennpipes-init/generators/project/public/images/ennkeypee_bg.jpg +0 -0
- data/lib/tennpipes-init/generators/project/public/images/ennkeypee_bluelogo.png +0 -0
- data/lib/tennpipes-init/generators/project/public/images/ennkeypee_bluelogo.svg +68 -0
- data/lib/tennpipes-init/generators/project/public/images/ennkeypee_whitelogo.png +0 -0
- data/lib/tennpipes-init/generators/project/public/images/ennkeypee_whitelogo.svg +65 -0
- data/lib/tennpipes-init/generators/project/public/images/forever21.png +0 -0
- data/lib/tennpipes-init/generators/project/public/images/icons/foundation-icons.eot +0 -0
- data/lib/tennpipes-init/generators/project/public/images/icons/foundation-icons.svg +970 -0
- data/lib/tennpipes-init/generators/project/public/images/icons/foundation-icons.ttf +0 -0
- data/lib/tennpipes-init/generators/project/public/images/icons/foundation-icons.woff +0 -0
- data/lib/tennpipes-init/generators/project/public/images/icons/tennpipes-icons.css +598 -0
- data/lib/tennpipes-init/generators/project/public/images/image1.jpg +0 -0
- data/lib/tennpipes-init/generators/project/public/images/image11.jpg +0 -0
- data/lib/tennpipes-init/generators/project/public/images/image2.jpg +0 -0
- data/lib/tennpipes-init/generators/project/public/images/image3.jpg +0 -0
- data/lib/tennpipes-init/generators/project/public/images/intuit.png +0 -0
- data/lib/tennpipes-init/generators/project/public/images/krispykreme.png +0 -0
- data/lib/tennpipes-init/generators/project/public/images/placeholders/README.md +302 -0
- data/lib/tennpipes-init/generators/project/public/images/placeholders/bower.json +4 -0
- data/lib/tennpipes-init/generators/project/public/images/placeholders/composer.json +34 -0
- data/lib/tennpipes-init/generators/project/public/images/placeholders/gulpfile.js +92 -0
- data/lib/tennpipes-init/generators/project/public/images/placeholders/holder.js +1920 -0
- data/lib/tennpipes-init/generators/project/public/images/placeholders/holder.min.js +12 -0
- data/lib/tennpipes-init/generators/project/public/images/placeholders/package.json +46 -0
- data/lib/tennpipes-init/generators/project/public/images/placeholders/src/holder.js +1411 -0
- data/lib/tennpipes-init/generators/project/public/images/placeholders/src/lib/augment.js +27 -0
- data/lib/tennpipes-init/generators/project/public/images/placeholders/src/lib/ondomready.js +155 -0
- data/lib/tennpipes-init/generators/project/public/images/placeholders/src/lib/polyfills.js +177 -0
- data/lib/tennpipes-init/generators/project/public/images/placeholders/src/scenegraph.js +101 -0
- data/lib/tennpipes-init/generators/project/public/images/placeholders/src/utils.js +129 -0
- data/lib/tennpipes-init/generators/project/public/images/priceline.com.png +0 -0
- data/lib/tennpipes-init/generators/project/public/images/stripe.png +0 -0
- data/lib/tennpipes-init/generators/project/public/javascripts/tennpipes.min.js +6081 -0
- data/lib/tennpipes-init/generators/project/public/javascripts/tennpipes/tennpipes.abide.js +340 -0
- data/lib/tennpipes-init/generators/project/public/javascripts/tennpipes/tennpipes.accordion.js +67 -0
- data/lib/tennpipes-init/generators/project/public/javascripts/tennpipes/tennpipes.alert.js +43 -0
- data/lib/tennpipes-init/generators/project/public/javascripts/tennpipes/tennpipes.clearing.js +556 -0
- data/lib/tennpipes-init/generators/project/public/javascripts/tennpipes/tennpipes.dropdown.js +448 -0
- data/lib/tennpipes-init/generators/project/public/javascripts/tennpipes/tennpipes.equalizer.js +77 -0
- data/lib/tennpipes-init/generators/project/public/javascripts/tennpipes/tennpipes.interchange.js +354 -0
- data/lib/tennpipes-init/generators/project/public/javascripts/tennpipes/tennpipes.joyride.js +932 -0
- data/lib/tennpipes-init/generators/project/public/javascripts/tennpipes/tennpipes.js +703 -0
- data/lib/tennpipes-init/generators/project/public/javascripts/tennpipes/tennpipes.magellan.js +203 -0
- data/lib/tennpipes-init/generators/project/public/javascripts/tennpipes/tennpipes.offcanvas.js +152 -0
- data/lib/tennpipes-init/generators/project/public/javascripts/tennpipes/tennpipes.orbit.js +476 -0
- data/lib/tennpipes-init/generators/project/public/javascripts/tennpipes/tennpipes.reveal.js +471 -0
- data/lib/tennpipes-init/generators/project/public/javascripts/tennpipes/tennpipes.slider.js +263 -0
- data/lib/tennpipes-init/generators/project/public/javascripts/tennpipes/tennpipes.tab.js +237 -0
- data/lib/tennpipes-init/generators/project/public/javascripts/tennpipes/tennpipes.tooltip.js +307 -0
- data/lib/tennpipes-init/generators/project/public/javascripts/tennpipes/tennpipes.topbar.js +452 -0
- data/lib/tennpipes-init/generators/project/public/javascripts/vendor/fastclick.js +8 -0
- data/lib/tennpipes-init/generators/project/public/javascripts/vendor/jquery.cookie.js +8 -0
- data/lib/tennpipes-init/generators/project/public/javascripts/vendor/jquery.js +26 -0
- data/lib/tennpipes-init/generators/project/public/javascripts/vendor/modernizr.js +8 -0
- data/lib/tennpipes-init/generators/project/public/javascripts/vendor/placeholder.js +2 -0
- data/lib/tennpipes-init/generators/project/public/stylesheets/app.css~ +178 -0
- data/lib/tennpipes-init/generators/project/public/stylesheets/app1.css~ +177 -0
- data/lib/tennpipes-init/generators/project/public/stylesheets/ennkeypee.css +214 -0
- data/lib/tennpipes-init/generators/project/public/stylesheets/ennkeypee.css~ +214 -0
- data/lib/tennpipes-init/generators/project/public/stylesheets/normalize.css +427 -0
- data/lib/tennpipes-init/generators/project/public/stylesheets/tennpipes.css +6201 -0
- data/lib/tennpipes-init/generators/project/public/stylesheets/tennpipes.css~ +6201 -0
- data/lib/tennpipes-init/generators/project/public/stylesheets/tennpipes.min.css +1 -0
- data/lib/tennpipes-init/generators/runner.rb +139 -0
- data/lib/tennpipes-init/generators/task.rb +45 -0
- data/lib/tennpipes-init/generators/templates/Gemfile.tt +32 -0
- data/lib/tennpipes-init/generators/templates/Rakefile.tt +8 -0
- data/lib/tennpipes-init/generators/templates/controller.rb.tt +22 -0
- data/lib/tennpipes-init/generators/templates/gem/README.md.tt +29 -0
- data/lib/tennpipes-init/generators/templates/gem/gemspec.tt +19 -0
- data/lib/tennpipes-init/generators/templates/gem/lib/libname.tt +6 -0
- data/lib/tennpipes-init/generators/templates/gem/lib/libname/version.tt +3 -0
- data/lib/tennpipes-init/generators/templates/helper.rb.tt +13 -0
- data/lib/tennpipes-init/generators/templates/initializer.rb.tt +5 -0
- data/lib/tennpipes-init/generators/templates/mailer.rb.tt +54 -0
- data/lib/tennpipes-init/generators/templates/project_bin.tt +14 -0
- data/lib/tennpipes-init/generators/templates/task.rb.tt +7 -0
- data/lib/tennpipes-init/tennpipes-tasks/activerecord.rb +377 -0
- data/lib/tennpipes-init/tennpipes-tasks/database.rb +12 -0
- data/lib/tennpipes-init/tennpipes-tasks/datamapper.rb +94 -0
- data/lib/tennpipes-init/tennpipes-tasks/minirecord.rb +19 -0
- data/lib/tennpipes-init/tennpipes-tasks/mongoid.rb +215 -0
- data/lib/tennpipes-init/tennpipes-tasks/mongomapper.rb +55 -0
- data/lib/tennpipes-init/tennpipes-tasks/sequel.rb +85 -0
- data/lib/tennpipes-init/tennpipes-tasks/sql-helpers.rb +72 -0
- data/test/fixtures/admin_template.rb +7 -0
- data/test/fixtures/example_template.rb +15 -0
- data/test/fixtures/git_template.rb +4 -0
- data/test/fixtures/plugin_template.rb +13 -0
- data/test/fixtures/rake_template.rb +9 -0
- data/test/helper.rb +103 -0
- data/test/test_app_generator.rb +142 -0
- data/test/test_cli.rb +27 -0
- data/test/test_component_generator.rb +98 -0
- data/test/test_controller_generator.rb +272 -0
- data/test/test_generator.rb +13 -0
- data/test/test_helper_generator.rb +133 -0
- data/test/test_mailer_generator.rb +69 -0
- data/test/test_migration_generator.rb +222 -0
- data/test/test_model_generator.rb +553 -0
- data/test/test_plugin_generator.rb +152 -0
- data/test/test_project_generator.rb +757 -0
- data/test/test_task_generator.rb +53 -0
- metadata +285 -0
@@ -0,0 +1,10 @@
|
|
1
|
+
def setup_mock
|
2
|
+
require_dependencies 'mocha', :group => 'test', :require => false
|
3
|
+
case options[:test].to_s
|
4
|
+
when 'rspec'
|
5
|
+
inject_into_file 'spec/spec_helper.rb', " conf.mock_with :mocha\n", :after => "RSpec.configure do |conf|\n"
|
6
|
+
else
|
7
|
+
inject_into_file 'test/test_config.rb', "require 'mocha/api'", :after => "require File.expand_path(File.dirname(__FILE__) + \"/../config/boot\")\n"
|
8
|
+
insert_mocking_include "Mocha::API"
|
9
|
+
end
|
10
|
+
end
|
@@ -0,0 +1,13 @@
|
|
1
|
+
def setup_mock
|
2
|
+
require_dependencies 'rr', :require => false, :group => 'test'
|
3
|
+
case options[:test].to_s
|
4
|
+
when 'rspec'
|
5
|
+
inject_into_file 'spec/spec_helper.rb', "require 'rr'\n", :after => "\"/../config/boot\")\n"
|
6
|
+
when 'riot'
|
7
|
+
inject_into_file "test/test_config.rb","require 'riot/rr'\n", :after => "\"/../config/boot\")\n"
|
8
|
+
when 'minitest'
|
9
|
+
insert_mocking_include "RR::Adapters::MiniTest", :path => "test/test_config.rb"
|
10
|
+
else
|
11
|
+
insert_mocking_include "RR::Adapters::TestUnit", :path => "test/test_config.rb"
|
12
|
+
end
|
13
|
+
end
|
@@ -0,0 +1,201 @@
|
|
1
|
+
AR = (<<-AR) unless defined?(AR)
|
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
|
+
AR
|
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 = AR
|
113
|
+
db = @project_name.underscore
|
114
|
+
# We're now defaulting to mysql2 since mysql is deprecated
|
115
|
+
case options[:adapter]
|
116
|
+
when 'mysql-gem'
|
117
|
+
ar.sub! /!DB_DEVELOPMENT!/, MYSQL.sub(/!DB_NAME!/,"'#{db}_development'")
|
118
|
+
ar.sub! /!DB_PRODUCTION!/, MYSQL.sub(/!DB_NAME!/,"'#{db}_production'")
|
119
|
+
ar.sub! /!DB_TEST!/, MYSQL.sub(/!DB_NAME!/,"'#{db}_test'")
|
120
|
+
require_dependencies 'mysql', :version => "~> 2.8.1"
|
121
|
+
when 'mysql', 'mysql2'
|
122
|
+
ar.sub! /!DB_DEVELOPMENT!/, MYSQL2.sub(/!DB_NAME!/,"'#{db}_development'")
|
123
|
+
ar.sub! /!DB_PRODUCTION!/, MYSQL2.sub(/!DB_NAME!/,"'#{db}_production'")
|
124
|
+
ar.sub! /!DB_TEST!/, MYSQL2.sub(/!DB_NAME!/,"'#{db}_test'")
|
125
|
+
require_dependencies 'mysql2'
|
126
|
+
when 'postgres'
|
127
|
+
ar.sub! /!DB_DEVELOPMENT!/, POSTGRES.sub(/!DB_NAME!/,"'#{db}_development'")
|
128
|
+
ar.sub! /!DB_PRODUCTION!/, POSTGRES.sub(/!DB_NAME!/,"'#{db}_production'")
|
129
|
+
ar.sub! /!DB_TEST!/, POSTGRES.sub(/!DB_NAME!/,"'#{db}_test'")
|
130
|
+
require_dependencies 'pg'
|
131
|
+
else
|
132
|
+
ar.sub! /!DB_DEVELOPMENT!/, SQLITE.sub(/!DB_NAME!/,"Tennpipes.root('db', '#{db}_development.db')")
|
133
|
+
ar.sub! /!DB_PRODUCTION!/, SQLITE.sub(/!DB_NAME!/,"Tennpipes.root('db', '#{db}_production.db')")
|
134
|
+
ar.sub! /!DB_TEST!/, SQLITE.sub(/!DB_NAME!/,"Tennpipes.root('db', '#{db}_test.db')")
|
135
|
+
require_dependencies 'sqlite3'
|
136
|
+
end
|
137
|
+
require_dependencies 'activerecord', :require => 'active_record', :version => ">= 3.1"
|
138
|
+
create_file("config/database.rb", ar)
|
139
|
+
middleware :connection_pool_management, CONNECTION_POOL_MIDDLEWARE
|
140
|
+
end
|
141
|
+
|
142
|
+
AR_MODEL = (<<-MODEL) unless defined?(AR_MODEL)
|
143
|
+
class !NAME! < ActiveRecord::Base
|
144
|
+
|
145
|
+
end
|
146
|
+
MODEL
|
147
|
+
|
148
|
+
# options => { :fields => ["title:string", "body:string"], :app => 'app' }
|
149
|
+
def create_model_file(name, options={})
|
150
|
+
model_path = destination_root(options[:app], 'models', "#{name.to_s.underscore}.rb")
|
151
|
+
model_contents = AR_MODEL.sub(/!NAME!/, name.to_s.underscore.camelize)
|
152
|
+
create_file(model_path, model_contents,:skip => true)
|
153
|
+
end
|
154
|
+
|
155
|
+
|
156
|
+
AR_MIGRATION = (<<-MIGRATION) unless defined?(AR_MIGRATION)
|
157
|
+
class !FILECLASS! < ActiveRecord::Migration
|
158
|
+
def self.up
|
159
|
+
!UP!
|
160
|
+
end
|
161
|
+
|
162
|
+
def self.down
|
163
|
+
!DOWN!
|
164
|
+
end
|
165
|
+
end
|
166
|
+
MIGRATION
|
167
|
+
|
168
|
+
AR_MODEL_UP_MG = (<<-MIGRATION).gsub(/^/,' ') unless defined?(AR_MODEL_UP_MG)
|
169
|
+
create_table :!TABLE! do |t|
|
170
|
+
!FIELDS!
|
171
|
+
t.timestamps
|
172
|
+
end
|
173
|
+
MIGRATION
|
174
|
+
|
175
|
+
AR_MODEL_DOWN_MG = (<<-MIGRATION) unless defined?(AR_MODEL_DOWN_MG)
|
176
|
+
drop_table :!TABLE!
|
177
|
+
MIGRATION
|
178
|
+
|
179
|
+
def create_model_migration(migration_name, name, columns)
|
180
|
+
output_model_migration(migration_name, name, columns,
|
181
|
+
:base => AR_MIGRATION,
|
182
|
+
:column_format => Proc.new { |field, kind| "t.#{kind.underscore.gsub(/_/, '')} :#{field}" },
|
183
|
+
:up => AR_MODEL_UP_MG,
|
184
|
+
:down => AR_MODEL_DOWN_MG
|
185
|
+
)
|
186
|
+
end
|
187
|
+
|
188
|
+
AR_CHANGE_MG = (<<-MIGRATION).gsub(/^/, ' ') unless defined?(AR_CHANGE_MG)
|
189
|
+
change_table :!TABLE! do |t|
|
190
|
+
!COLUMNS!
|
191
|
+
end
|
192
|
+
MIGRATION
|
193
|
+
|
194
|
+
def create_migration_file(migration_name, name, columns)
|
195
|
+
output_migration_file(migration_name, name, columns,
|
196
|
+
:base => AR_MIGRATION,
|
197
|
+
:change_format => AR_CHANGE_MG,
|
198
|
+
:add => Proc.new { |field, kind| "t.#{kind.underscore.gsub(/_/, '')} :#{field}" },
|
199
|
+
:remove => Proc.new { |field, kind| "t.remove :#{field}" }
|
200
|
+
)
|
201
|
+
end
|
@@ -0,0 +1,55 @@
|
|
1
|
+
COUCHREST = (<<-COUCHREST) unless defined?(COUCHREST)
|
2
|
+
case Tennpipes.env
|
3
|
+
when :development then db_name = '!NAME!_development'
|
4
|
+
when :production then db_name = '!NAME!_production'
|
5
|
+
when :test then db_name = '!NAME!_test'
|
6
|
+
end
|
7
|
+
|
8
|
+
CouchRest::Model::Base.configure do |conf|
|
9
|
+
conf.model_type_key = 'type' # compatibility with CouchModel 1.1
|
10
|
+
conf.database = CouchRest.database!(db_name)
|
11
|
+
conf.environment = Tennpipes.env
|
12
|
+
# conf.connection = {
|
13
|
+
# :protocol => 'http',
|
14
|
+
# :host => 'localhost',
|
15
|
+
# :port => '5984',
|
16
|
+
# :prefix => 'tennpipes',
|
17
|
+
# :suffix => nil,
|
18
|
+
# :join => '_',
|
19
|
+
# :username => nil,
|
20
|
+
# :password => nil
|
21
|
+
# }
|
22
|
+
end
|
23
|
+
COUCHREST
|
24
|
+
|
25
|
+
def setup_orm
|
26
|
+
require_dependencies 'couchrest_model', :version => '~>1.1.0'
|
27
|
+
require_dependencies 'json_pure'
|
28
|
+
create_file("config/database.rb", COUCHREST.gsub(/!NAME!/, @project_name.underscore))
|
29
|
+
end
|
30
|
+
|
31
|
+
CR_MODEL = (<<-MODEL) unless defined?(CR_MODEL)
|
32
|
+
class !NAME! < CouchRest::Model::Base
|
33
|
+
unique_id :id
|
34
|
+
# property <name>
|
35
|
+
!FIELDS!
|
36
|
+
end
|
37
|
+
MODEL
|
38
|
+
|
39
|
+
# options => { :fields => ["title:string", "body:string"], :app => 'app' }
|
40
|
+
def create_model_file(name, options={})
|
41
|
+
model_path = destination_root(options[:app], 'models', "#{name.to_s.underscore}.rb")
|
42
|
+
field_tuples = options[:fields].map { |value| value.split(":") }
|
43
|
+
column_declarations = field_tuples.map { |field, kind| "property :#{field}" }.join("\n ")
|
44
|
+
model_contents = CR_MODEL.gsub(/!NAME!/, name.to_s.underscore.camelize)
|
45
|
+
model_contents.gsub!(/!FIELDS!/, column_declarations)
|
46
|
+
create_file(model_path, model_contents)
|
47
|
+
end
|
48
|
+
|
49
|
+
def create_model_migration(filename, name, fields)
|
50
|
+
# NO MIGRATION NEEDED
|
51
|
+
end
|
52
|
+
|
53
|
+
def create_migration_file(migration_name, name, columns)
|
54
|
+
# NO MIGRATION NEEDED
|
55
|
+
end
|
@@ -0,0 +1,140 @@
|
|
1
|
+
DM = (<<-DM) unless defined?(DM)
|
2
|
+
##
|
3
|
+
# A MySQL connection:
|
4
|
+
# DataMapper.setup(:default, 'mysql://user:password@localhost/the_database_name')
|
5
|
+
#
|
6
|
+
# # A Postgres connection:
|
7
|
+
# DataMapper.setup(:default, 'postgres://user:password@localhost/the_database_name')
|
8
|
+
#
|
9
|
+
# # A Sqlite3 connection
|
10
|
+
# DataMapper.setup(:default, "sqlite3://" + Tennpipes.root('db', "development.db"))
|
11
|
+
#
|
12
|
+
# # Setup DataMapper using config/database.yml
|
13
|
+
# DataMapper.setup(:default, YAML.load_file(Tennpipes.root('config/database.yml'))[RACK_ENV])
|
14
|
+
#
|
15
|
+
# config/database.yml file:
|
16
|
+
#
|
17
|
+
# ---
|
18
|
+
# development: &defaults
|
19
|
+
# adapter: mysql
|
20
|
+
# database: example_development
|
21
|
+
# username: user
|
22
|
+
# password: Pa55w0rd
|
23
|
+
# host: 127.0.0.1
|
24
|
+
#
|
25
|
+
# test:
|
26
|
+
# <<: *defaults
|
27
|
+
# database: example_test
|
28
|
+
#
|
29
|
+
# production:
|
30
|
+
# <<: *defaults
|
31
|
+
# database: example_production
|
32
|
+
#
|
33
|
+
|
34
|
+
DataMapper.logger = logger
|
35
|
+
DataMapper::Property::String.length(255)
|
36
|
+
|
37
|
+
case Tennpipes.env
|
38
|
+
when :development then DataMapper.setup(:default, !DB_DEVELOPMENT!)
|
39
|
+
when :production then DataMapper.setup(:default, !DB_PRODUCTION!)
|
40
|
+
when :test then DataMapper.setup(:default, !DB_TEST!)
|
41
|
+
end
|
42
|
+
DM
|
43
|
+
|
44
|
+
def setup_orm
|
45
|
+
dm = DM
|
46
|
+
db = @project_name.underscore
|
47
|
+
%w(
|
48
|
+
dm-core
|
49
|
+
dm-types
|
50
|
+
dm-aggregates
|
51
|
+
dm-constraints
|
52
|
+
dm-migrations
|
53
|
+
dm-timestamps
|
54
|
+
dm-validations
|
55
|
+
).each { |dep| require_dependencies dep }
|
56
|
+
require_dependencies case options[:adapter]
|
57
|
+
when 'mysql', 'mysql2'
|
58
|
+
dm.gsub!(/!DB_DEVELOPMENT!/,"\"mysql://root@localhost/#{db}_development\"")
|
59
|
+
dm.gsub!(/!DB_PRODUCTION!/,"\"mysql://root@localhost/#{db}_production\"")
|
60
|
+
dm.gsub!(/!DB_TEST!/,"\"mysql://root@localhost/#{db}_test\"")
|
61
|
+
'dm-mysql-adapter'
|
62
|
+
when 'postgres'
|
63
|
+
dm.gsub!(/!DB_DEVELOPMENT!/,"\"postgres://root@localhost/#{db}_development\"")
|
64
|
+
dm.gsub!(/!DB_PRODUCTION!/,"\"postgres://root@localhost/#{db}_production\"")
|
65
|
+
dm.gsub!(/!DB_TEST!/,"\"postgres://root@localhost/#{db}_test\"")
|
66
|
+
'dm-postgres-adapter'
|
67
|
+
else
|
68
|
+
dm.gsub!(/!DB_DEVELOPMENT!/,"\"sqlite3://\" + Tennpipes.root('db', \"#{db}_development.db\")")
|
69
|
+
dm.gsub!(/!DB_PRODUCTION!/,"\"sqlite3://\" + Tennpipes.root('db', \"#{db}_production.db\")")
|
70
|
+
dm.gsub!(/!DB_TEST!/,"\"sqlite3://\" + Tennpipes.root('db', \"#{db}_test.db\")")
|
71
|
+
'dm-sqlite-adapter'
|
72
|
+
end
|
73
|
+
|
74
|
+
create_file("config/database.rb", dm)
|
75
|
+
insert_hook("DataMapper.finalize", :after_load)
|
76
|
+
end
|
77
|
+
|
78
|
+
DM_MODEL = (<<-MODEL) unless defined?(DM_MODEL)
|
79
|
+
class !NAME!
|
80
|
+
include DataMapper::Resource
|
81
|
+
|
82
|
+
# property <name>, <type>
|
83
|
+
property :id, Serial
|
84
|
+
!FIELDS!
|
85
|
+
end
|
86
|
+
MODEL
|
87
|
+
|
88
|
+
# options => { :fields => ["title:string", "body:string"], :app => 'app' }
|
89
|
+
def create_model_file(name, options={})
|
90
|
+
model_path = destination_root(options[:app], 'models', "#{name.to_s.underscore}.rb")
|
91
|
+
model_contents = DM_MODEL.gsub(/!NAME!/, name.to_s.underscore.camelize)
|
92
|
+
field_tuples = options[:fields].map { |value| value.split(":") }
|
93
|
+
field_tuples.map! { |field, kind| kind =~ /datetime/i ? [field, 'DateTime'] : [field, kind] } # fix datetime
|
94
|
+
column_declarations = field_tuples.map { |field, kind|"property :#{field}, #{kind.underscore.camelize}" }.join("\n ")
|
95
|
+
model_contents.gsub!(/!FIELDS!/, column_declarations)
|
96
|
+
create_file(model_path, model_contents)
|
97
|
+
end
|
98
|
+
|
99
|
+
DM_MIGRATION = (<<-MIGRATION) unless defined?(DM_MIGRATION)
|
100
|
+
migration !VERSION!, :!FILENAME! do
|
101
|
+
up do
|
102
|
+
!UP!
|
103
|
+
end
|
104
|
+
|
105
|
+
down do
|
106
|
+
!DOWN!
|
107
|
+
end
|
108
|
+
end
|
109
|
+
MIGRATION
|
110
|
+
|
111
|
+
DM_MODEL_UP_MG = (<<-MIGRATION).gsub(/^/, ' ') unless defined?(DM_MODEL_UP_MG)
|
112
|
+
create_table :!TABLE! do
|
113
|
+
column :id, Integer, :serial => true
|
114
|
+
!FIELDS!
|
115
|
+
end
|
116
|
+
MIGRATION
|
117
|
+
|
118
|
+
DM_MODEL_DOWN_MG = (<<-MIGRATION) unless defined?(DM_MODEL_DOWN_MG)
|
119
|
+
drop_table :!TABLE!
|
120
|
+
MIGRATION
|
121
|
+
|
122
|
+
def create_model_migration(migration_name, name, columns)
|
123
|
+
output_model_migration(migration_name, name, columns,
|
124
|
+
:column_format => Proc.new { |field, kind| "column :#{field}, DataMapper::Property::#{kind.classify}#{', :length => 255' if kind =~ /string/i}" },
|
125
|
+
:base => DM_MIGRATION, :up => DM_MODEL_UP_MG, :down => DM_MODEL_DOWN_MG)
|
126
|
+
end
|
127
|
+
|
128
|
+
DM_CHANGE_MG = (<<-MIGRATION).gsub(/^/, ' ') unless defined?(DM_CHANGE_MG)
|
129
|
+
modify_table :!TABLE! do
|
130
|
+
!COLUMNS!
|
131
|
+
end
|
132
|
+
MIGRATION
|
133
|
+
|
134
|
+
def create_migration_file(migration_name, name, columns)
|
135
|
+
output_migration_file(migration_name, name, columns,
|
136
|
+
:base => DM_MIGRATION, :change_format => DM_CHANGE_MG,
|
137
|
+
:add => Proc.new { |field, kind| "add_column :#{field}, #{kind.classify}" },
|
138
|
+
:remove => Proc.new { |field, kind| "drop_column :#{field}" }
|
139
|
+
)
|
140
|
+
end
|
@@ -0,0 +1,67 @@
|
|
1
|
+
DYNAMOID = (<<-DYNAMOID) unless defined?(DYNAMOID)
|
2
|
+
|
3
|
+
AWS.config({
|
4
|
+
:access_key_id => ENV['AWS_ACCESS_KEY'],
|
5
|
+
:secret_access_key => ENV['AWS_SECRET_KEY'],
|
6
|
+
:dynamo_db_endpoint => 'dynamodb.ap-southeast-1.amazonaws.com'
|
7
|
+
})
|
8
|
+
|
9
|
+
Dynamoid.configure do |config|
|
10
|
+
config.adapter = 'aws_sdk' # This adapter establishes a connection to the DynamoDB servers using Amazon's own AWS gem.
|
11
|
+
config.read_capacity = 100 # Read capacity for your tables
|
12
|
+
config.write_capacity = 20 # Write capacity for your tables
|
13
|
+
end
|
14
|
+
|
15
|
+
# If you use mock in testing [for example in case of using fake_dynamo],
|
16
|
+
# the way is as following:
|
17
|
+
#
|
18
|
+
# - install fake_dynamo
|
19
|
+
# gem install fake_dynamo --version 0.1.3
|
20
|
+
# - run
|
21
|
+
# fake_dynamo --port 4567
|
22
|
+
#
|
23
|
+
# And then setting for AWS.config is as following:
|
24
|
+
#
|
25
|
+
# AWS.config({
|
26
|
+
# :access_key_id => 'xxx', # everything is ok
|
27
|
+
# :secret_access_key => 'xxx', # everything is ok
|
28
|
+
# :dynamo_db_endpoint => 'localhost', # fake_dynamo runs hostname
|
29
|
+
# :dynamo_db_port => 4567, # fake_dynamo listens port
|
30
|
+
# :use_ssl => false # fake_dynamo don't speak ssl
|
31
|
+
# })
|
32
|
+
#
|
33
|
+
# Additional information on https://github.com/ananthakumaran/fake_dynamo
|
34
|
+
DYNAMOID
|
35
|
+
|
36
|
+
def setup_orm
|
37
|
+
require_dependencies 'aws-sdk'
|
38
|
+
require_dependencies 'dynamoid', :version => '~>0.7.1'
|
39
|
+
create_file("config/database.rb", DYNAMOID.gsub(/!NAME!/, @project_name.underscore))
|
40
|
+
end
|
41
|
+
|
42
|
+
DYNAMOID_MODEL = (<<-MODEL) unless defined?(DYNAMOID_MODEL)
|
43
|
+
class !NAME!
|
44
|
+
include Dynamoid::Document
|
45
|
+
|
46
|
+
!FIELDS!
|
47
|
+
|
48
|
+
end
|
49
|
+
MODEL
|
50
|
+
|
51
|
+
# options => { :fields => ["title:string", "body:string"], :app => 'app' }
|
52
|
+
def create_model_file(name, options={})
|
53
|
+
model_path = destination_root(options[:app], 'models', "#{name.to_s.underscore}.rb")
|
54
|
+
field_tuples = options[:fields].map { |value| value.split(":") }
|
55
|
+
column_declarations = field_tuples.map { |field, kind| "field :#{field}, :#{kind}" }.join("\n ")
|
56
|
+
model_contents = DYNAMOID_MODEL.gsub(/!NAME!/, name.to_s.underscore.camelize)
|
57
|
+
model_contents.gsub!(/!FIELDS!/, column_declarations)
|
58
|
+
create_file(model_path, model_contents)
|
59
|
+
end
|
60
|
+
|
61
|
+
def create_model_migration(filename, name, fields)
|
62
|
+
# NO MIGRATION NEEDED
|
63
|
+
end
|
64
|
+
|
65
|
+
def create_migration_file(migration_name, name, columns)
|
66
|
+
# NO MIGRATION NEEDED
|
67
|
+
end
|