caster 0.9.5 → 0.9.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.
- 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
|