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,12 @@
|
|
1
|
+
has_seeds = File.file?('db/seeds.rb')
|
2
|
+
if TennpipesTasks.load?(:database, has_seeds)
|
3
|
+
namespace :db do
|
4
|
+
desc 'Load the seed data from db/seeds.rb'
|
5
|
+
task :seed => :environment do
|
6
|
+
seed_file = Tennpipes.root('db', 'seeds.rb')
|
7
|
+
load(seed_file) if File.exist?(seed_file)
|
8
|
+
end
|
9
|
+
end
|
10
|
+
|
11
|
+
task :seed => 'db:seed'
|
12
|
+
end
|
@@ -0,0 +1,94 @@
|
|
1
|
+
if TennpipesTasks.load?(:datamapper, defined?(DataMapper))
|
2
|
+
namespace :dm do
|
3
|
+
namespace :auto do
|
4
|
+
desc "Perform auto migration (reset your db data)"
|
5
|
+
task :migrate => :environment do
|
6
|
+
::DataMapper.repository.auto_migrate!
|
7
|
+
puts "<= dm:auto:migrate executed"
|
8
|
+
end
|
9
|
+
|
10
|
+
desc "Perform non destructive auto migration"
|
11
|
+
task :upgrade => :environment do
|
12
|
+
::DataMapper.repository.auto_upgrade!
|
13
|
+
puts "<= dm:auto:upgrade executed"
|
14
|
+
end
|
15
|
+
end
|
16
|
+
|
17
|
+
namespace :migrate do
|
18
|
+
task :load => :environment do
|
19
|
+
require 'dm-migrations/migration_runner'
|
20
|
+
FileList["db/migrate/*.rb"].each do |migration|
|
21
|
+
load migration
|
22
|
+
end
|
23
|
+
end
|
24
|
+
|
25
|
+
desc "Migrate up using migrations"
|
26
|
+
task :up, [:version] => :load do |t, args|
|
27
|
+
version = args[:version] || env_migration_version
|
28
|
+
migrate_up!(version)
|
29
|
+
puts "<= dm:migrate:up #{version} executed"
|
30
|
+
end
|
31
|
+
|
32
|
+
desc "Migrate down using migrations"
|
33
|
+
task :down, [:version] => :load do |t, args|
|
34
|
+
version = args[:version] || env_migration_version
|
35
|
+
migrate_down!(version)
|
36
|
+
puts "<= dm:migrate:down #{version} executed"
|
37
|
+
end
|
38
|
+
end
|
39
|
+
|
40
|
+
desc "Migrate the database to the latest version"
|
41
|
+
task :migrate do
|
42
|
+
migrate_task = if Dir['db/migrate/*.rb'].empty?
|
43
|
+
'dm:auto:upgrade'
|
44
|
+
else
|
45
|
+
'dm:migrate:up'
|
46
|
+
end
|
47
|
+
|
48
|
+
Rake::Task[migrate_task].invoke
|
49
|
+
end
|
50
|
+
|
51
|
+
desc "Create the database"
|
52
|
+
task :create => :environment do
|
53
|
+
config = DataMapper.repository.adapter.options.symbolize_keys
|
54
|
+
adapter = config[:adapter]
|
55
|
+
user, password, host = config[:user], config[:password], config[:host]
|
56
|
+
|
57
|
+
database = config[:database] || config[:path]
|
58
|
+
database.sub!(/^\//,'') unless adapter.start_with?('sqlite')
|
59
|
+
|
60
|
+
charset = config[:charset] || ENV['CHARSET'] || 'utf8'
|
61
|
+
collation = config[:collation] || ENV['COLLATION'] || 'utf8_unicode_ci'
|
62
|
+
|
63
|
+
puts "=> Creating database '#{database}'"
|
64
|
+
Tennpipes::Generators::SqlHelpers.create_db(adapter, user, password, host, database, charset, collation)
|
65
|
+
puts "<= dm:create executed"
|
66
|
+
end
|
67
|
+
|
68
|
+
desc "Drop the database (postgres and mysql only)"
|
69
|
+
task :drop => :environment do
|
70
|
+
config = DataMapper.repository.adapter.options.symbolize_keys
|
71
|
+
adapter = config[:adapter]
|
72
|
+
user, password, host = config[:user], config[:password], config[:host]
|
73
|
+
|
74
|
+
database = config[:database] || config[:path]
|
75
|
+
database.sub!(/^\//,'') unless adapter.start_with?('sqlite')
|
76
|
+
|
77
|
+
puts "=> Dropping database '#{database}'"
|
78
|
+
Tennpipes::Generators::SqlHelpers.drop_db(adapter, user, password, host, database)
|
79
|
+
puts "<= dm:drop executed"
|
80
|
+
end
|
81
|
+
|
82
|
+
desc "Drop the database, migrate from scratch and initialize with the seed data"
|
83
|
+
task :reset => [:drop, :setup]
|
84
|
+
|
85
|
+
desc "Create the database migrate and initialize with the seed data"
|
86
|
+
task :setup => [:create, :migrate, :seed]
|
87
|
+
end
|
88
|
+
|
89
|
+
task 'db:migrate' => 'dm:migrate'
|
90
|
+
task 'db:create' => 'dm:create'
|
91
|
+
task 'db:drop' => 'dm:drop'
|
92
|
+
task 'db:reset' => 'dm:reset'
|
93
|
+
task 'db:setup' => 'dm:setup'
|
94
|
+
end
|
@@ -0,0 +1,19 @@
|
|
1
|
+
if TennpipesTasks.load?(:minirecord, defined?(MiniRecord))
|
2
|
+
namespace :mr do
|
3
|
+
desc 'Auto migration of database'
|
4
|
+
task :migrate => :environment do
|
5
|
+
Dir["models/*.rb"].each do |file_path|
|
6
|
+
basename = File.basename(file_path, File.extname(file_path))
|
7
|
+
clazz = basename.camelize.constantize
|
8
|
+
clazz.auto_upgrade! if clazz.ancestors.include?(ActiveRecord::Base)
|
9
|
+
end
|
10
|
+
puts "<= mr:migrate executed"
|
11
|
+
end
|
12
|
+
end
|
13
|
+
|
14
|
+
task 'db:migrate' => 'mr:migrate'
|
15
|
+
# task 'db:create' => 'mr:create'
|
16
|
+
# task 'db:drop' => 'mr:drop'
|
17
|
+
# task 'db:reset' => 'mr:reset'
|
18
|
+
# task 'db:setup' => 'mr:setup'
|
19
|
+
end
|
@@ -0,0 +1,215 @@
|
|
1
|
+
if TennpipesTasks.load?(:mongoid, defined?(Mongoid))
|
2
|
+
require 'mongoid'
|
3
|
+
|
4
|
+
namespace :mi do
|
5
|
+
|
6
|
+
if Mongoid::VERSION =~ /^[012]\./
|
7
|
+
# Mongoid 2 API
|
8
|
+
def mongoid_collections
|
9
|
+
Mongoid.master.collections
|
10
|
+
end
|
11
|
+
|
12
|
+
def mongoid_collection(name)
|
13
|
+
Mongoid.master.collection(name)
|
14
|
+
end
|
15
|
+
|
16
|
+
def mongoid_new_collection(collection, name)
|
17
|
+
collection.db.collection(name)
|
18
|
+
end
|
19
|
+
|
20
|
+
def enum_mongoid_documents(collection)
|
21
|
+
collection.find({}, :timeout => false, :sort => "_id") do |cursor|
|
22
|
+
cursor.each do |doc|
|
23
|
+
yield doc
|
24
|
+
end
|
25
|
+
end
|
26
|
+
end
|
27
|
+
|
28
|
+
def rename_mongoid_collection(collection, new_name)
|
29
|
+
collection.rename(new_name)
|
30
|
+
end
|
31
|
+
else
|
32
|
+
# Mongoid 3+ API
|
33
|
+
def mongoid_collections
|
34
|
+
Mongoid.default_session.collections
|
35
|
+
end
|
36
|
+
|
37
|
+
def mongoid_collection(name)
|
38
|
+
Mongoid.default_session[name]
|
39
|
+
end
|
40
|
+
|
41
|
+
def mongoid_new_collection(collection, name)
|
42
|
+
Mongoid.default_session[name]
|
43
|
+
end
|
44
|
+
|
45
|
+
def enum_mongoid_documents(collection)
|
46
|
+
collection.find.sort(:_id => 1).each do |doc|
|
47
|
+
yield doc
|
48
|
+
end
|
49
|
+
end
|
50
|
+
|
51
|
+
def rename_mongoid_collection(collection, new_name)
|
52
|
+
db_name = collection.database.name
|
53
|
+
collection.database.session.with(:database => :admin) do |admin|
|
54
|
+
admin.command(
|
55
|
+
:renameCollection => "#{db_name}.#{collection.name}",
|
56
|
+
:to => "#{db_name}.#{new_name}",
|
57
|
+
:dropTarget => true)
|
58
|
+
end
|
59
|
+
end
|
60
|
+
end
|
61
|
+
|
62
|
+
desc 'Drops all the collections for the database for the current Tennpipes.env'
|
63
|
+
task :drop => :environment do
|
64
|
+
mongoid_collections.select {|c| c.name !~ /system/ }.each(&:drop)
|
65
|
+
end
|
66
|
+
|
67
|
+
# Helper to retrieve a list of models.
|
68
|
+
def get_mongoid_models
|
69
|
+
documents = []
|
70
|
+
Dir['{app,.}/models/**/*.rb'].sort.each do |file|
|
71
|
+
model_path = file[0..-4].split('/')[2..-1]
|
72
|
+
|
73
|
+
begin
|
74
|
+
klass = model_path.map(&:classify).join('::').constantize
|
75
|
+
if klass.ancestors.include?(Mongoid::Document) && !klass.embedded
|
76
|
+
documents << klass
|
77
|
+
end
|
78
|
+
rescue => e
|
79
|
+
# Just for non-mongoid objects that don't have the embedded
|
80
|
+
# attribute at the class level.
|
81
|
+
end
|
82
|
+
end
|
83
|
+
|
84
|
+
documents
|
85
|
+
end
|
86
|
+
|
87
|
+
desc 'Create the indexes defined on your mongoid models'
|
88
|
+
task :create_indexes => :environment do
|
89
|
+
get_mongoid_models.each(&:create_indexes)
|
90
|
+
end
|
91
|
+
|
92
|
+
def convert_ids(obj)
|
93
|
+
if obj.is_a?(String) && obj =~ /^[a-f0-9]{24}$/
|
94
|
+
defined?(Moped) ? Moped::BSON::ObjectId.from_string(obj) : BSON::ObjectId(obj)
|
95
|
+
elsif obj.is_a?(Array)
|
96
|
+
obj.map do |v|
|
97
|
+
convert_ids(v)
|
98
|
+
end
|
99
|
+
elsif obj.is_a?(Hash)
|
100
|
+
obj.each do |k, v|
|
101
|
+
obj[k] = convert_ids(v)
|
102
|
+
end
|
103
|
+
else
|
104
|
+
obj
|
105
|
+
end
|
106
|
+
end
|
107
|
+
|
108
|
+
def collection_names
|
109
|
+
@collection_names ||= get_mongoid_models.map{ |d| d.collection.name }.uniq
|
110
|
+
end
|
111
|
+
|
112
|
+
desc "Convert string objectids in mongo database to ObjectID type"
|
113
|
+
task :objectid_convert => :environment do
|
114
|
+
collection_names.each do |collection_name|
|
115
|
+
puts "Converting #{collection_name} to use ObjectIDs"
|
116
|
+
|
117
|
+
# Get old collection.
|
118
|
+
collection = mongoid_collection(collection_name)
|
119
|
+
|
120
|
+
# Get new collection (a clean one).
|
121
|
+
mongoid_collection("#{collection_name}_new").drop
|
122
|
+
new_collection = mongoid_new_collection(collection, "#{collection_name}_new")
|
123
|
+
|
124
|
+
# Convert collection documents.
|
125
|
+
enum_mongoid_documents(collection) do |doc|
|
126
|
+
new_doc = convert_ids(doc)
|
127
|
+
new_collection.insert(new_doc, :safe => true)
|
128
|
+
end
|
129
|
+
|
130
|
+
puts "Done! Converted collection is in #{new_collection.name}\n\n"
|
131
|
+
end
|
132
|
+
|
133
|
+
# No errors. great! now rename _new to collection_name.
|
134
|
+
collection_names.each do |collection_name|
|
135
|
+
collection = mongoid_collection(collection_name)
|
136
|
+
new_collection = mongoid_new_collection(collection, "#{collection_name}_new")
|
137
|
+
|
138
|
+
# Swap collection to _old.
|
139
|
+
puts "Moving #{collection.name} to #{collection_name}_old"
|
140
|
+
mongoid_new_collection(collection, "#{collection_name}_old").drop
|
141
|
+
|
142
|
+
begin
|
143
|
+
rename_mongoid_collection(collection, "#{collection_name}_old")
|
144
|
+
rescue StandardError => e
|
145
|
+
puts "Unable to rename database #{collection_name} to #{collection_name}_old"
|
146
|
+
puts "reason: #{e.message}\n\n"
|
147
|
+
end
|
148
|
+
|
149
|
+
# Swap _new to collection.
|
150
|
+
puts "Moving #{new_collection.name} to #{collection_name}\n\n"
|
151
|
+
|
152
|
+
begin
|
153
|
+
rename_mongoid_collection(new_collection, collection_name)
|
154
|
+
rescue StandardError => e
|
155
|
+
puts "Unable to rename database #{new_collection.name} to #{collection_name}"
|
156
|
+
puts "reason: #{e.message}\n\n"
|
157
|
+
end
|
158
|
+
end
|
159
|
+
|
160
|
+
puts "DONE! Run `tennpipes rake mi:cleanup_old_collections` to remove old collections"
|
161
|
+
end
|
162
|
+
|
163
|
+
desc "Clean up old collections backed up by objectid_convert"
|
164
|
+
task :cleanup_old_collections => :environment do
|
165
|
+
collection_names.each do |collection_name|
|
166
|
+
collection = mongoid_collection(collection_name)
|
167
|
+
mongoid_new_collection(collection, "#{collection.name}_old").drop
|
168
|
+
end
|
169
|
+
end
|
170
|
+
|
171
|
+
desc "Generates .yml files for I18n translations"
|
172
|
+
task :translate => :environment do
|
173
|
+
models = Dir["#{Tennpipes.root}/{app,}/models/**/*.rb"].map { |m| File.basename(m, ".rb") }
|
174
|
+
|
175
|
+
models.each do |m|
|
176
|
+
# Get the model class.
|
177
|
+
klass = m.camelize.constantize
|
178
|
+
|
179
|
+
# Avoid non Mongoid models.
|
180
|
+
next unless klass.ancestors.include?(Mongoid::Document)
|
181
|
+
|
182
|
+
# Init the processing.
|
183
|
+
print "Processing #{m.humanize}: "
|
184
|
+
FileUtils.mkdir_p("#{Tennpipes.root}/app/locale/models/#{m}")
|
185
|
+
langs = Array(I18n.locale)
|
186
|
+
|
187
|
+
# Create models for it and en locales.
|
188
|
+
langs.each do |lang|
|
189
|
+
filename = "#{Tennpipes.root}/app/locale/models/#{m}/#{lang}.yml"
|
190
|
+
columns = klass.fields.values.map(&:name).reject { |name| name =~ /id/i }
|
191
|
+
# If the lang file already exist we need to check it.
|
192
|
+
if File.exist?(filename)
|
193
|
+
locale = File.open(filename).read
|
194
|
+
columns.each do |c|
|
195
|
+
locale += "\n #{c}: #{c.humanize}" unless locale.include?("#{c}:")
|
196
|
+
end
|
197
|
+
print "Lang #{lang.to_s.upcase} already exist ... "; $stdout.flush
|
198
|
+
else
|
199
|
+
locale = "#{lang}:" + "\n" +
|
200
|
+
" models:" + "\n" +
|
201
|
+
" #{m}:" + "\n" +
|
202
|
+
" name: #{klass.name}" + "\n" +
|
203
|
+
" attributes:" + "\n" +
|
204
|
+
columns.map { |c| " #{c}: #{c.humanize}" }.join("\n")
|
205
|
+
print "created a new for #{lang.to_s.upcase} Lang ... "; $stdout.flush
|
206
|
+
end
|
207
|
+
File.open(filename, "w") { |f| f.puts locale }
|
208
|
+
end
|
209
|
+
puts
|
210
|
+
end
|
211
|
+
end
|
212
|
+
end
|
213
|
+
|
214
|
+
task 'db:drop' => 'mi:drop'
|
215
|
+
end
|
@@ -0,0 +1,55 @@
|
|
1
|
+
if defined?(MongoMapper)
|
2
|
+
begin
|
3
|
+
require 'i18n'
|
4
|
+
rescue LoadError
|
5
|
+
# Only do this for I18n check later.
|
6
|
+
end
|
7
|
+
|
8
|
+
namespace :mm do
|
9
|
+
desc 'Drops all the collections for the database for the current Tennpipes.env'
|
10
|
+
task :drop => :environment do
|
11
|
+
MongoMapper.database.collections.select {|c| c.name !~ /system/ }.each(&:drop)
|
12
|
+
end
|
13
|
+
|
14
|
+
desc "Generates .yml files for I18n translations"
|
15
|
+
task :translate => :environment do
|
16
|
+
models = Dir["#{Tennpipes.root}/{app,}/models/**/*.rb"].map { |m| File.basename(m, ".rb") }
|
17
|
+
|
18
|
+
models.each do |m|
|
19
|
+
# Get the model class.
|
20
|
+
klass = m.camelize.constantize
|
21
|
+
|
22
|
+
# Init the processing
|
23
|
+
print "Processing #{m.humanize}: "
|
24
|
+
FileUtils.mkdir_p("#{Tennpipes.root}/app/locale/models/#{m}")
|
25
|
+
langs = Array(I18n.locale)
|
26
|
+
|
27
|
+
# Create models for it and en locales.
|
28
|
+
langs.each do |lang|
|
29
|
+
filename = "#{Tennpipes.root}/app/locale/models/#{m}/#{lang}.yml"
|
30
|
+
columns = klass.keys.values.map(&:name).reject { |name| name =~ /id/i }
|
31
|
+
# If the lang file already exist we need to check it
|
32
|
+
if File.exist?(filename)
|
33
|
+
locale = File.open(filename).read
|
34
|
+
columns.each do |c|
|
35
|
+
locale += "\n #{c}: #{c.humanize}" unless locale.include?("#{c}:")
|
36
|
+
end
|
37
|
+
print "Lang #{lang.to_s.upcase} already exist ... "; $stdout.flush
|
38
|
+
else
|
39
|
+
locale = "#{lang}:" + "\n" +
|
40
|
+
" models:" + "\n" +
|
41
|
+
" #{m}:" + "\n" +
|
42
|
+
" name: #{klass.human_name}" + "\n" +
|
43
|
+
" attributes:" + "\n" +
|
44
|
+
columns.map { |c| " #{c}: #{c.humanize}" }.join("\n")
|
45
|
+
print "created a new for #{lang.to_s.upcase} Lang ... "; $stdout.flush
|
46
|
+
end
|
47
|
+
File.open(filename, "w") { |f| f.puts locale }
|
48
|
+
end
|
49
|
+
puts
|
50
|
+
end
|
51
|
+
end
|
52
|
+
end
|
53
|
+
|
54
|
+
task 'db:drop' => 'mm:drop'
|
55
|
+
end
|
@@ -0,0 +1,85 @@
|
|
1
|
+
if TennpipesTasks.load?(:sequel, defined?(Sequel))
|
2
|
+
namespace :sq do
|
3
|
+
namespace :migrate do
|
4
|
+
desc "Perform automigration (reset your db data)"
|
5
|
+
task :auto => :skeleton do
|
6
|
+
::Sequel.extension :migration
|
7
|
+
::Sequel::Migrator.run Sequel::Model.db, "db/migrate", :target => 0
|
8
|
+
::Sequel::Migrator.run Sequel::Model.db, "db/migrate"
|
9
|
+
puts "<= sq:migrate:auto executed"
|
10
|
+
end
|
11
|
+
|
12
|
+
desc "Perform migration up/down to MIGRATION_VERSION"
|
13
|
+
task :to, [:version] => :skeleton do |t, args|
|
14
|
+
version = (args[:version] || env_migration_version).to_s.strip
|
15
|
+
::Sequel.extension :migration
|
16
|
+
fail "No MIGRATION_VERSION was provided" if version.empty?
|
17
|
+
::Sequel::Migrator.apply(Sequel::Model.db, "db/migrate", version.to_i)
|
18
|
+
puts "<= sq:migrate:to[#{version}] executed"
|
19
|
+
end
|
20
|
+
|
21
|
+
desc "Perform migration up to latest migration available"
|
22
|
+
task :up => :skeleton do
|
23
|
+
::Sequel.extension :migration
|
24
|
+
::Sequel::Migrator.run Sequel::Model.db, "db/migrate"
|
25
|
+
puts "<= sq:migrate:up executed"
|
26
|
+
end
|
27
|
+
|
28
|
+
desc "Perform migration down (erase all data)"
|
29
|
+
task :down => :skeleton do
|
30
|
+
::Sequel.extension :migration
|
31
|
+
::Sequel::Migrator.run Sequel::Model.db, "db/migrate", :target => 0
|
32
|
+
puts "<= sq:migrate:down executed"
|
33
|
+
end
|
34
|
+
end
|
35
|
+
|
36
|
+
desc "Perform migration up to latest migration available"
|
37
|
+
task :migrate => 'sq:migrate:up'
|
38
|
+
|
39
|
+
desc "Create the database"
|
40
|
+
task :create => :skeleton do
|
41
|
+
config = Sequel::Model.db.opts
|
42
|
+
user, password, host = config[:user], config[:password], config[:host]
|
43
|
+
database = config[:database]
|
44
|
+
charset = config[:charset] || ENV['CHARSET'] || 'utf8'
|
45
|
+
collation = config[:collation] || ENV['COLLATION'] || 'utf8_unicode_ci'
|
46
|
+
|
47
|
+
puts "=> Creating database '#{database}'"
|
48
|
+
if config[:adapter] == 'sqlite3'
|
49
|
+
::Sequel.sqlite(database)
|
50
|
+
else
|
51
|
+
require 'tennpipes-init/tennpipes-tasks/sql-helpers'
|
52
|
+
Tennpipes::Generators::SqlHelpers.create_db(config[:adapter], user, password, host, database, charset, collation)
|
53
|
+
end
|
54
|
+
puts "<= sq:create executed"
|
55
|
+
end
|
56
|
+
|
57
|
+
desc "Drop the database (postgres and mysql only)"
|
58
|
+
task :drop => :skeleton do
|
59
|
+
config = ::Sequel::Model.db.opts
|
60
|
+
user, password, host, database = config[:user], config[:password], config[:host], config[:database]
|
61
|
+
|
62
|
+
::Sequel::Model.db.disconnect
|
63
|
+
|
64
|
+
puts "=> Dropping database '#{database}'"
|
65
|
+
if config[:adapter] == 'sqlite3'
|
66
|
+
File.delete(database) if File.exist?(database)
|
67
|
+
else
|
68
|
+
Tennpipes::Generators::SqlHelpers.drop_db(config[:adapter], user, password, host, database)
|
69
|
+
end
|
70
|
+
puts "<= sq:drop executed"
|
71
|
+
end
|
72
|
+
|
73
|
+
desc 'Drop the database, migrate from scratch and initialize with the seed data'
|
74
|
+
task :reset => ['drop', 'create', 'migrate', 'seed']
|
75
|
+
|
76
|
+
task :seed => :environment do
|
77
|
+
missing_model_features = Tennpipes.send(:default_dependency_paths) - Tennpipes.send(:dependency_paths)
|
78
|
+
Tennpipes.require_dependencies(missing_model_features)
|
79
|
+
Rake::Task['db:seed'].invoke
|
80
|
+
end
|
81
|
+
end
|
82
|
+
|
83
|
+
task 'db:migrate' => 'sq:migrate'
|
84
|
+
task 'db:reset' => 'sq:reset'
|
85
|
+
end
|