zdzolton-cambric 0.7.0 → 0.7.1

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/README.rdoc CHANGED
@@ -104,7 +104,7 @@ by the application.
104
104
 
105
105
  * Install gems:
106
106
 
107
- $ sudo gem install jchris-couchrest zdzolton-cambric
107
+ $ sudo gem install mattetti-couchrest zdzolton-cambric
108
108
 
109
109
  * Configure Rails:
110
110
  * create a config/initializers/cambric.rb file as follows:
data/VERSION CHANGED
@@ -1 +1 @@
1
- 0.7.0
1
+ 0.7.1
data/cambric.gemspec CHANGED
@@ -2,11 +2,11 @@
2
2
 
3
3
  Gem::Specification.new do |s|
4
4
  s.name = %q{cambric}
5
- s.version = "0.7.0"
5
+ s.version = "0.7.1"
6
6
 
7
7
  s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
8
8
  s.authors = ["Zachary Zolton", "Geoff Buesing"]
9
- s.date = %q{2009-08-27}
9
+ s.date = %q{2009-09-01}
10
10
  s.email = %q{zachary.zolton@gmail.com}
11
11
  s.extra_rdoc_files = [
12
12
  "LICENSE",
@@ -29,6 +29,11 @@ Gem::Specification.new do |s|
29
29
  "spec/cambric/cambric_spec.rb",
30
30
  "spec/cambric/configurator_spec.rb",
31
31
  "spec/cambric/test_helpers_spec.rb",
32
+ "spec/fixtures/twitter-clone-modified/tweets/views/by_follower_and_created_at/map.js",
33
+ "spec/fixtures/twitter-clone-modified/users/views/bad/map.js",
34
+ "spec/fixtures/twitter-clone-modified/users/views/bad/reduce.js",
35
+ "spec/fixtures/twitter-clone-modified/users/views/followers/map.js",
36
+ "spec/fixtures/twitter-clone-modified/users/views/followers/reduce.js",
32
37
  "spec/fixtures/twitter-clone/tweets/views/by_follower_and_created_at/map.js",
33
38
  "spec/fixtures/twitter-clone/users/views/bad/map.js",
34
39
  "spec/fixtures/twitter-clone/users/views/bad/reduce.js",
data/lib/cambric.rb CHANGED
@@ -46,12 +46,12 @@ module Cambric
46
46
  @databases.each_pair{ |name,db| db.server.create_db db.name rescue nil }
47
47
  end
48
48
 
49
- def self.[](database)
50
- @databases[database.to_sym]
49
+ def self.[](database_name)
50
+ @databases[database_name.to_sym]
51
51
  end
52
52
 
53
- def self.push_design_docs
54
- @databases.keys.each{ |db_sym| push_design_doc_for db_sym.to_s }
53
+ def self.push_design_docs ddoc_name=nil
54
+ @databases.keys.each{ |db_sym| push_design_doc_for db_sym, ddoc_name }
55
55
  end
56
56
 
57
57
  def self.prepare_databases
@@ -63,14 +63,32 @@ module Cambric
63
63
  create_databases!
64
64
  push_design_docs
65
65
  end
66
-
66
+
67
+ def self.prime_view_changes_in_temp
68
+ ddoc_name = "#{@design_doc_name}-temp"
69
+ push_design_docs ddoc_name
70
+ @databases.keys.map do |db_name|
71
+ Thread.new{ prime_views_for @databases[db_name], ddoc_name }
72
+ end.each{ |t| t.join }
73
+ end
74
+
67
75
  private
68
76
 
69
- def self.push_design_doc_for database
77
+ def self.prime_views_for database, ddoc_name=nil
78
+ ddoc = database.get "_design/#{ddoc_name}"
79
+ view_name, view_def = ddoc['views'].first
80
+ opts = { :limit => 1 }
81
+ opts[:reduce] = false if view_def['reduce']
82
+ view_url = "#{database.root}/_design/#{ddoc_name}/_view/#{view_name}"
83
+ %x[curl --silent '#{CouchRest.paramify_url view_url, opts}']
84
+ end
85
+
86
+ def self.push_design_doc_for database_name, ddoc_name=nil
87
+ database = database_name.to_s
70
88
  design_doc_path = File.join @db_dir, database
71
89
  if File.exist?(design_doc_path)
72
90
  fm = FileManager.new self[database].name, self[database].host
73
- fm.push_app design_doc_path, @design_doc_name
91
+ fm.push_app design_doc_path, ddoc_name || @design_doc_name
74
92
  end
75
93
  end
76
94
 
@@ -131,6 +131,28 @@ describe Cambric do
131
131
  design_doc = Cambric[:tweets].get("_design/twitter-clone")
132
132
  design_doc['views']['by_follower_and_created_at'].should_not be_nil
133
133
  end
134
+
135
+ describe "after priming modified views in a temp design doc" do
136
+ before :all do
137
+ Cambric[:tweets].save_doc :message => 'ohai!',
138
+ :author => 'zach',
139
+ :followers => %w(trevor geoff),
140
+ :created_at => '2009/09/01T12:51:42Z'
141
+ reconfigure_twitter_clone_to_modified_code
142
+ Cambric.prime_view_changes_in_temp
143
+ end
144
+
145
+ it "should be able to hit new views on temp design doc" do
146
+ db = CouchRest.database('http://127.0.0.1:5984/tweets-testing')
147
+ result = db.view 'twitter-clone-temp/by_follower_and_created_at', :limit => 1
148
+ result['rows'].first['key'].should be_a(String)
149
+ end
150
+
151
+ it "should be able to hit old views on original design doc" do
152
+ result = Cambric[:tweets].view :by_follower_and_created_at, :limit => 1
153
+ result['rows'].first['key'].should be_an(Array)
154
+ end
155
+ end
134
156
  end
135
157
 
136
158
  describe "when the design doc already exists" do
@@ -0,0 +1,7 @@
1
+ function(doc) {
2
+ var outdoc = { message: doc.message, author: doc.author };
3
+ doc.followers.push(doc.author);
4
+ doc.followers.forEach(function(f) {
5
+ emit('TESTING', outdoc);
6
+ });
7
+ };
@@ -0,0 +1,7 @@
1
+ function(doc) {
2
+ // This should be returned:
3
+ emit(4, 5);
4
+
5
+ // This should not:
6
+ emit(doc['some_non_existant_property'].length, null);
7
+ }
@@ -0,0 +1,4 @@
1
+ function(key, values) {
2
+ // This should throw an error:
3
+ return values[0]['some_non_existant_property'].length;
4
+ }
@@ -0,0 +1,6 @@
1
+ function(doc) {
2
+ // FYI: This example assumes we're using usernames as the doc ID.
3
+ doc['following'].forEach(function(user) {
4
+ emit(user, doc['_id']);
5
+ });
6
+ }
@@ -0,0 +1,7 @@
1
+ function(keys, values, rereduce) {
2
+ if (rereduce) {
3
+ return sum(values);
4
+ } else {
5
+ return values.length;
6
+ }
7
+ }
data/spec/spec_helper.rb CHANGED
@@ -34,6 +34,15 @@ def configure_twitter_clone
34
34
  end
35
35
  end
36
36
 
37
+ def reconfigure_twitter_clone_to_modified_code
38
+ Cambric.configure do |config|
39
+ config.design_doc_name = 'twitter-clone'
40
+ config.db_dir = 'spec/fixtures/twitter-clone-modified'
41
+ config.environment = 'test'
42
+ config.databases = TWITTER_CLONE_DATABASES
43
+ end
44
+ end
45
+
37
46
  def delete_twitter_clone_databases
38
47
  %w(users tweets).each{ |db| Cambric[db].delete! rescue nil }
39
48
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: zdzolton-cambric
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.7.0
4
+ version: 0.7.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Zachary Zolton
@@ -10,7 +10,7 @@ autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
12
 
13
- date: 2009-08-27 00:00:00 -07:00
13
+ date: 2009-09-01 00:00:00 -07:00
14
14
  default_executable:
15
15
  dependencies:
16
16
  - !ruby/object:Gem::Dependency
@@ -49,6 +49,11 @@ files:
49
49
  - spec/cambric/cambric_spec.rb
50
50
  - spec/cambric/configurator_spec.rb
51
51
  - spec/cambric/test_helpers_spec.rb
52
+ - spec/fixtures/twitter-clone-modified/tweets/views/by_follower_and_created_at/map.js
53
+ - spec/fixtures/twitter-clone-modified/users/views/bad/map.js
54
+ - spec/fixtures/twitter-clone-modified/users/views/bad/reduce.js
55
+ - spec/fixtures/twitter-clone-modified/users/views/followers/map.js
56
+ - spec/fixtures/twitter-clone-modified/users/views/followers/reduce.js
52
57
  - spec/fixtures/twitter-clone/tweets/views/by_follower_and_created_at/map.js
53
58
  - spec/fixtures/twitter-clone/users/views/bad/map.js
54
59
  - spec/fixtures/twitter-clone/users/views/bad/reduce.js
@@ -58,7 +63,6 @@ files:
58
63
  - spec/spec_helper.rb
59
64
  has_rdoc: false
60
65
  homepage: http://github.com/zdzolton/cambric
61
- licenses:
62
66
  post_install_message:
63
67
  rdoc_options:
64
68
  - --charset=UTF-8
@@ -79,7 +83,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
79
83
  requirements: []
80
84
 
81
85
  rubyforge_project:
82
- rubygems_version: 1.3.5
86
+ rubygems_version: 1.2.0
83
87
  signing_key:
84
88
  specification_version: 3
85
89
  summary: Opinionated management and usage of CouchDB from your Ruby apps.