caster 0.9.5 → 0.9.6
Sign up to get free protection for your applications and to get access to all the features.
- data/bin/cast +3 -8
- data/lib/caster.rb +12 -9
- data/lib/caster/execution.rb +4 -4
- data/lib/caster/metadata/metadata_database.rb +12 -10
- data/lib/caster/metadata/metadata_document.rb +8 -18
- data/lib/caster/metadata/metadata_store.rb +26 -0
- data/lib/caster/migration.rb +2 -2
- data/lib/caster/migrator.rb +2 -1
- metadata +5 -4
data/bin/cast
CHANGED
@@ -10,21 +10,16 @@ class Cast < Thor
|
|
10
10
|
desc 'version', 'prints the current version of your database'
|
11
11
|
method_option :db, :aliases => '-d', :required => true
|
12
12
|
def version
|
13
|
-
|
14
|
-
|
15
|
-
puts db.get("#{Caster.config[:metadata][:id_prefix]}_#{Caster.config[:metadata][:database] || database}")['version']
|
16
|
-
rescue
|
17
|
-
puts "No version information available."
|
18
|
-
end
|
13
|
+
metadata = (Caster.config['metadata']['database'] != nil)? MetadataDatabase.new : MetadataDocument.new
|
14
|
+
puts metadata.get_db_version(options[:db]) || 'No version information available.'
|
19
15
|
end
|
20
16
|
|
21
17
|
desc 'up', 'executes migrations defined in cast files in the current directory'
|
22
18
|
method_option :db, :aliases => '-d'
|
23
19
|
method_option :version, :aliases => '-v'
|
24
20
|
def up path = '.'
|
25
|
-
metadata = (Caster.config[
|
21
|
+
metadata = (Caster.config['metadata']['database'] != nil)? MetadataDatabase.new : MetadataDocument.new
|
26
22
|
Migrator.new(metadata).migrate_in_dir path, options[:db], options[:version]
|
27
|
-
puts 'Done.'
|
28
23
|
end
|
29
24
|
end
|
30
25
|
|
data/lib/caster.rb
CHANGED
@@ -7,20 +7,23 @@ include Caster
|
|
7
7
|
module Caster
|
8
8
|
|
9
9
|
@config = {
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
10
|
+
'host' => '127.0.0.1',
|
11
|
+
'port' => '5984',
|
12
|
+
'metadata' => {
|
13
|
+
'database' => nil,
|
14
|
+
'design_doc_id' => 'caster_meta',
|
15
|
+
'key' => {
|
16
|
+
'type' => 'caster_metadoc'
|
17
|
+
},
|
16
18
|
},
|
17
|
-
|
19
|
+
'batch_size' => 2000,
|
20
|
+
'log_level' => 'info',
|
18
21
|
}
|
19
22
|
|
20
23
|
@valid_config_keys = @config.keys
|
21
24
|
|
22
25
|
@logger = Logger.new STDOUT
|
23
|
-
@logger.level = Logger.const_get((@config.has_key?(
|
26
|
+
@logger.level = Logger.const_get((@config.has_key?('log_level'))? @config['log_level'].upcase : 'INFO')
|
24
27
|
|
25
28
|
def self.config
|
26
29
|
@config
|
@@ -32,7 +35,7 @@ module Caster
|
|
32
35
|
|
33
36
|
def self.configure opts = {}
|
34
37
|
opts.each do |k, v|
|
35
|
-
@config[k
|
38
|
+
@config[k] = v if @valid_config_keys.include? k
|
36
39
|
end
|
37
40
|
end
|
38
41
|
|
data/lib/caster/execution.rb
CHANGED
@@ -52,7 +52,7 @@ module Caster
|
|
52
52
|
db = @db
|
53
53
|
else
|
54
54
|
database_name, view = scope.split('/', 2)
|
55
|
-
db = CouchRest.database "http://#{Caster.config[
|
55
|
+
db = CouchRest.database "http://#{Caster.config['host']}:#{Caster.config['port']}/#{database_name}"
|
56
56
|
end
|
57
57
|
key = [scope, query]
|
58
58
|
@ref_docs_cache[key] = db_query(db, view, query)['rows'].map { |rdoc| rdoc['doc'] || rdoc['value'] } unless @ref_docs_cache.has_key? key
|
@@ -61,12 +61,12 @@ module Caster
|
|
61
61
|
|
62
62
|
def execute
|
63
63
|
limit = @query['limit'] || 1.0/0.0
|
64
|
-
if Caster.config[
|
64
|
+
if Caster.config['batch_size'] == nil or limit < Caster.config['batch_size']
|
65
65
|
execute_batch db_query(@db, @view, @query)['rows']
|
66
66
|
return
|
67
67
|
end
|
68
68
|
|
69
|
-
@query['limit'] = Caster.config[
|
69
|
+
@query['limit'] = Caster.config['batch_size'] + 1
|
70
70
|
saved_docs = 0
|
71
71
|
while saved_docs < limit do
|
72
72
|
docs = db_query(@db, @view, @query)['rows']
|
@@ -75,7 +75,7 @@ module Caster
|
|
75
75
|
@query['startkey_docid'] = docs.last['id']
|
76
76
|
@query['startkey'] = docs.last['key']
|
77
77
|
|
78
|
-
if docs.length <= Caster.config[
|
78
|
+
if docs.length <= Caster.config['batch_size']
|
79
79
|
execute_batch docs
|
80
80
|
return
|
81
81
|
elsif saved_docs + docs.length - 1 > limit
|
@@ -1,26 +1,28 @@
|
|
1
|
+
require 'caster/metadata/metadata_store'
|
1
2
|
require 'couchrest'
|
3
|
+
|
2
4
|
module Caster
|
3
5
|
|
4
6
|
class MetadataDatabase
|
5
7
|
|
8
|
+
include Caster::MetadataStore
|
9
|
+
|
10
|
+
def initialize
|
11
|
+
@metadb = CouchRest.database! "http://#{Caster.config['host']}:#{Caster.config['port']}/#{Caster.config['metadata']['database']}"
|
12
|
+
end
|
13
|
+
|
6
14
|
def desc
|
7
15
|
'external database'
|
8
16
|
end
|
9
17
|
|
10
18
|
def get_db_version database
|
11
|
-
|
12
|
-
begin
|
13
|
-
return db.get(database)[:version]
|
14
|
-
rescue
|
15
|
-
# ignored
|
16
|
-
end
|
19
|
+
get_metadoc(@metadb)[database] rescue nil
|
17
20
|
end
|
18
21
|
|
19
22
|
def save_db_version database, version
|
20
|
-
|
21
|
-
metadoc =
|
22
|
-
metadoc
|
23
|
-
db.save_doc metadoc
|
23
|
+
metadoc = get_metadoc(@metadb)
|
24
|
+
metadoc[database] = version
|
25
|
+
@metadb.save_doc metadoc
|
24
26
|
end
|
25
27
|
end
|
26
28
|
end
|
@@ -1,36 +1,26 @@
|
|
1
|
+
require 'caster/metadata/metadata_store'
|
1
2
|
require 'couchrest'
|
2
3
|
|
3
4
|
module Caster
|
4
5
|
|
5
6
|
class MetadataDocument
|
6
7
|
|
8
|
+
include Caster::MetadataStore
|
9
|
+
|
7
10
|
def desc
|
8
11
|
'source database'
|
9
12
|
end
|
10
13
|
|
11
14
|
def get_db_version database
|
12
|
-
db = CouchRest.database! "http://#{Caster.config[
|
13
|
-
|
14
|
-
return db.get("#{Caster.config[:metadata][:id_prefix]}_#{database}")['version']
|
15
|
-
rescue
|
16
|
-
# ignored
|
17
|
-
end
|
15
|
+
db = CouchRest.database! "http://#{Caster.config['host']}:#{Caster.config['port']}/#{database}"
|
16
|
+
get_metadoc(db)[db.name] rescue nil
|
18
17
|
end
|
19
18
|
|
20
19
|
def save_db_version database, version
|
21
|
-
db = CouchRest.database! "http://#{Caster.config[
|
22
|
-
metadoc =
|
23
|
-
|
24
|
-
metadoc = db.get "#{Caster.config[:metadata][:id_prefix]}_#{database}"
|
25
|
-
rescue
|
26
|
-
metadoc = {
|
27
|
-
'_id' => "#{Caster.config[:metadata][:id_prefix]}_#{database}",
|
28
|
-
'type' => "#{Caster.config[:metadata][:type]}"
|
29
|
-
}
|
30
|
-
end
|
31
|
-
metadoc['version'] = version
|
20
|
+
db = CouchRest.database! "http://#{Caster.config['host']}:#{Caster.config['port']}/#{database}"
|
21
|
+
metadoc = get_metadoc(db)
|
22
|
+
metadoc[database] = version
|
32
23
|
db.save_doc metadoc
|
33
24
|
end
|
34
25
|
end
|
35
|
-
|
36
26
|
end
|
@@ -0,0 +1,26 @@
|
|
1
|
+
require 'couchrest'
|
2
|
+
|
3
|
+
module Caster
|
4
|
+
|
5
|
+
module MetadataStore
|
6
|
+
|
7
|
+
private
|
8
|
+
def init_design_doc db
|
9
|
+
db.save_doc({
|
10
|
+
'_id' => "_design/#{Caster.config['metadata']['design_doc_id']}",
|
11
|
+
:views => {
|
12
|
+
:meta_doc => {
|
13
|
+
:map => "function(doc) { if (doc.#{Caster.config['metadata']['key'].first[0]} == '#{Caster.config['metadata']['key'].first[1]}') emit (doc._id, doc); }"
|
14
|
+
}
|
15
|
+
}
|
16
|
+
}) rescue nil
|
17
|
+
end
|
18
|
+
|
19
|
+
def get_metadoc db
|
20
|
+
init_design_doc db
|
21
|
+
db.view("#{Caster.config['metadata']['design_doc_id']}/meta_doc")['rows'][0]['value']
|
22
|
+
rescue
|
23
|
+
db.save_doc({ Caster.config['metadata']['key'].first[0] => Caster.config['metadata']['key'].first[1] })['id']
|
24
|
+
end
|
25
|
+
end
|
26
|
+
end
|
data/lib/caster/migration.rb
CHANGED
@@ -3,7 +3,7 @@ require 'caster/execution'
|
|
3
3
|
module Caster
|
4
4
|
|
5
5
|
def migrate database_name, &block
|
6
|
-
@db = CouchRest.database "http://#{Caster.config[
|
6
|
+
@db = CouchRest.database "http://#{Caster.config['host']}:#{Caster.config['port']}/#{database_name}"
|
7
7
|
yield
|
8
8
|
@db = nil
|
9
9
|
end
|
@@ -16,7 +16,7 @@ module Caster
|
|
16
16
|
|
17
17
|
def over scope, query = {}, &block
|
18
18
|
database_name, view = split_view_accessor(scope)
|
19
|
-
db = CouchRest.database "http://#{Caster.config[
|
19
|
+
db = CouchRest.database "http://#{Caster.config['host']}:#{Caster.config['port']}/#{database_name}" if @db == nil
|
20
20
|
Execution.new(db || @db, view, query, &block).execute
|
21
21
|
end
|
22
22
|
|
data/lib/caster/migrator.rb
CHANGED
@@ -1,5 +1,6 @@
|
|
1
1
|
require 'caster/migration'
|
2
2
|
require 'caster/metadata/metadata_document'
|
3
|
+
require 'caster/metadata/metadata_database'
|
3
4
|
require 'couchrest'
|
4
5
|
|
5
6
|
module Caster
|
@@ -23,7 +24,7 @@ module Caster
|
|
23
24
|
cast_files.map do |file|
|
24
25
|
migration_version, database = File.basename(file, '.cast').split '.'
|
25
26
|
|
26
|
-
@dbs[database] = CouchRest.database! "http://#{Caster.config[
|
27
|
+
@dbs[database] = CouchRest.database! "http://#{Caster.config['host']}:#{Caster.config['port']}/#{database}" if @dbs[database] == nil
|
27
28
|
|
28
29
|
all_migrations[database] = [] if all_migrations[database] == nil
|
29
30
|
|
metadata
CHANGED
@@ -1,13 +1,13 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: caster
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
hash:
|
4
|
+
hash: 55
|
5
5
|
prerelease:
|
6
6
|
segments:
|
7
7
|
- 0
|
8
8
|
- 9
|
9
|
-
-
|
10
|
-
version: 0.9.
|
9
|
+
- 6
|
10
|
+
version: 0.9.6
|
11
11
|
platform: ruby
|
12
12
|
authors:
|
13
13
|
- Manohar Akula
|
@@ -15,7 +15,7 @@ autorequire:
|
|
15
15
|
bindir: bin
|
16
16
|
cert_chain: []
|
17
17
|
|
18
|
-
date: 2013-01-
|
18
|
+
date: 2013-01-15 00:00:00 Z
|
19
19
|
dependencies:
|
20
20
|
- !ruby/object:Gem::Dependency
|
21
21
|
name: couchrest
|
@@ -59,6 +59,7 @@ files:
|
|
59
59
|
- lib/caster/execution.rb
|
60
60
|
- lib/caster/metadata/metadata_database.rb
|
61
61
|
- lib/caster/metadata/metadata_document.rb
|
62
|
+
- lib/caster/metadata/metadata_store.rb
|
62
63
|
- lib/caster/migration.rb
|
63
64
|
- lib/caster/migrator.rb
|
64
65
|
- lib/caster/operation.rb
|