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 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