From e7a8b49ae30bce36846a5ab8f1fa2bb981100224 Mon Sep 17 00:00:00 2001 From: Azul Date: Tue, 19 Nov 2013 11:51:42 +0100 Subject: add dump_design_docs to CouchRest::Model::Utils:Migrate This is similar to the migrations but instead of uploading the design documents to couch it stores them in tmp/database/design.json within the rails directory. database is the supposed database name without prefixes or suffixes design is the name of the design doc CouchRest model would have created The files also contain a couchrest checksum so couchrest can detect they are up to date. This commit also cleans up a few redundant things in the extension to CouchRest::Model:Utils::Migrate that we used to have. There's no need to loop through the 'normal' models in load_all_models_with_engines since load_all_models_without_engines already does that. We were also overwriting all_models_and_proxies with exactly the same code as in the original. --- core/lib/extensions/couchrest.rb | 35 ++++++++++++++++++++++++++--------- 1 file changed, 26 insertions(+), 9 deletions(-) (limited to 'core/lib/extensions/couchrest.rb') diff --git a/core/lib/extensions/couchrest.rb b/core/lib/extensions/couchrest.rb index 91dfc1c..84cfbb3 100644 --- a/core/lib/extensions/couchrest.rb +++ b/core/lib/extensions/couchrest.rb @@ -47,28 +47,45 @@ module CouchRest def self.load_all_models_with_engines self.load_all_models_without_engines return unless defined?(Rails) - Dir[Rails.root + 'app/models/**/*.rb'].each do |path| - require path - end Dir[Rails.root + '*/app/models/**/*.rb'].each do |path| require path end end - def self.all_models_and_proxies - callbacks = migrate_each_model(find_models) - callbacks += migrate_each_proxying_model(find_proxying_models) - cleanup(callbacks) + class << self + alias_method_chain :load_all_models, :engines + end + + def dump_all_models + prepare_directory + find_models.each do |model| + model.design_docs.each do |design| + dump_design(model, design) + end + end end + protected + def dump_design(model, design) + dir = prepare_directory model.name.tableize + filename = design.id.sub('_design/','') + '.json' + puts dir + filename + design.checksum + File.open(dir + filename, "w") do |file| + file.write(JSON.pretty_generate(design.to_hash)) + end + end - class << self - alias_method_chain :load_all_models, :engines + def prepare_directory(dir = '') + dir = Rails.root + 'tmp' + 'designs' + dir + Dir.mkdir(dir) unless Dir.exists?(dir) + return dir end end end + end class ModelRailtie -- cgit v1.2.3