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 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
- db = CouchRest.database! "http://#{Caster.config[:host]}:#{Caster.config[:port]}/#{options[:db]}"
14
- begin
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[:metadata][:database] != nil)? MetadataDatabase.new : MetadataDocument.new
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
 
@@ -7,20 +7,23 @@ include Caster
7
7
  module Caster
8
8
 
9
9
  @config = {
10
- :host => '127.0.0.1',
11
- :port => '5984',
12
- :metadata => {
13
- :database => nil,
14
- :id_prefix => 'caster',
15
- :type => 'caster_metadoc'
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
- :batch_size => 2000,
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?(:log_level))? @config[:log_level].upcase : 'INFO')
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.to_sym] = v if @valid_config_keys.include? k.to_sym
38
+ @config[k] = v if @valid_config_keys.include? k
36
39
  end
37
40
  end
38
41
 
@@ -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[:host]}:#{Caster.config[:port]}/#{database_name}"
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[:batch_size] == nil or limit < Caster.config[:batch_size]
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[:batch_size] + 1
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[:batch_size]
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
- db = CouchRest.database! "http://#{Caster.config[:host]}:#{Caster.config[:port]}/#{Caster.config[:metadata][:database]}"
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
- db = CouchRest.database! "http://#{Caster.config[:host]}:#{Caster.config[:port]}/#{Caster.config[:metadata][:database]}"
21
- metadoc = db.get(database)
22
- metadoc['version'] = version
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[:host]}:#{Caster.config[:port]}/#{(Caster.config[:metadata][:database] || database)}"
13
- begin
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[:host]}:#{Caster.config[:port]}/#{(Caster.config[:metadata][:database] || database)}"
22
- metadoc = nil
23
- begin
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
@@ -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[:host]}:#{Caster.config[:port]}/#{database_name}"
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[:host]}:#{Caster.config[:port]}/#{database_name}" if @db == nil
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
 
@@ -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[:host]}:#{Caster.config[:port]}/#{database}" if @dbs[database] == nil
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: 49
4
+ hash: 55
5
5
  prerelease:
6
6
  segments:
7
7
  - 0
8
8
  - 9
9
- - 5
10
- version: 0.9.5
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-14 00:00:00 Z
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