couch_potato 0.5.4 → 0.5.5
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/.gitignore +3 -1
- data/.travis.yml +5 -0
- data/CHANGES.md +6 -0
- data/README.md +11 -6
- data/couch_potato.gemspec +1 -0
- data/lib/couch_potato/persistence/active_model_compliance.rb +1 -1
- data/lib/couch_potato/railtie.rb +3 -2
- data/lib/couch_potato/version.rb +1 -1
- data/lib/couch_potato/view/base_view_spec.rb +10 -4
- data/lib/couch_potato.rb +2 -1
- data/spec/railtie_spec.rb +4 -2
- data/spec/spec_helper.rb +1 -7
- data/spec/unit/base_view_spec_spec.rb +35 -7
- metadata +14 -2
data/.gitignore
CHANGED
data/.travis.yml
ADDED
data/CHANGES.md
CHANGED
|
@@ -1,5 +1,11 @@
|
|
|
1
1
|
## Changes
|
|
2
2
|
|
|
3
|
+
### 0.5.5
|
|
4
|
+
|
|
5
|
+
* support for split_design_documents_per_view (jweiss)
|
|
6
|
+
* errors now returns a Hash instead of an Array (bterkuile)
|
|
7
|
+
* support passing in list names as symbols in view specs (langalex)
|
|
8
|
+
|
|
3
9
|
### 0.5.4
|
|
4
10
|
* cast 'false' to false for boolean properties (langalex)
|
|
5
11
|
|
data/README.md
CHANGED
|
@@ -20,8 +20,8 @@ Lastly Couch Potato aims to provide a seamless integration with Ruby on Rails, e
|
|
|
20
20
|
|
|
21
21
|
### Supported Environments
|
|
22
22
|
|
|
23
|
-
* Ruby 1.8.7, 1.9.
|
|
24
|
-
* CouchDB 1.0.
|
|
23
|
+
* Ruby 1.8.7, 1.9.2
|
|
24
|
+
* CouchDB 1.0.2
|
|
25
25
|
|
|
26
26
|
(Supported means I run the specs against those before releasing a new gem.)
|
|
27
27
|
|
|
@@ -51,13 +51,18 @@ Or with authentication
|
|
|
51
51
|
Optionally you can configure which framework you want to use for validations (either validatable or ActiveModel (default))
|
|
52
52
|
|
|
53
53
|
CouchPotato::Config.validation_framework = :validatable | :active_model
|
|
54
|
+
|
|
55
|
+
Another switch allows you to store each CouchDB view in its own design document. Otherwise views are grouped by model.
|
|
56
|
+
|
|
57
|
+
CouchPotato::Config.split_design_documents_per_view = true
|
|
54
58
|
|
|
55
59
|
#### Using with Rails
|
|
56
60
|
|
|
57
61
|
Create a config/couchdb.yml:
|
|
58
62
|
|
|
59
63
|
default: &default
|
|
60
|
-
validation_framework: :active_model #optional
|
|
64
|
+
validation_framework: :active_model # optional
|
|
65
|
+
split_design_documents_per_view: true # optional
|
|
61
66
|
|
|
62
67
|
development:
|
|
63
68
|
<<: *default
|
|
@@ -262,9 +267,9 @@ If you have larger structures and you only want to load some attributes you can
|
|
|
262
267
|
|
|
263
268
|
If you want Rails to automatically show a 404 page when `CouchPotato::NotFound` is raised add this to your `ApplicationController`:
|
|
264
269
|
|
|
265
|
-
rescue_from CouchPotato::NotFound
|
|
266
|
-
render(:file => '404.html', :status => :not_found, :layout => false)
|
|
267
|
-
|
|
270
|
+
rescue_from CouchPotato::NotFound do
|
|
271
|
+
render(:file => 'public/404.html', :status => :not_found, :layout => false)
|
|
272
|
+
end
|
|
268
273
|
|
|
269
274
|
You can also pass in custom map/reduce functions with the custom view spec:
|
|
270
275
|
|
data/couch_potato.gemspec
CHANGED
|
@@ -19,6 +19,7 @@ Gem::Specification.new do |s|
|
|
|
19
19
|
s.add_development_dependency 'rspec', '>=2.0'
|
|
20
20
|
s.add_development_dependency 'timecop'
|
|
21
21
|
s.add_development_dependency 'tzinfo'
|
|
22
|
+
s.add_development_dependency 'rake'
|
|
22
23
|
|
|
23
24
|
s.files = `git ls-files`.split("\n")
|
|
24
25
|
s.test_files = `git ls-files -- {test,spec,features}/*`.split("\n")
|
data/lib/couch_potato/railtie.rb
CHANGED
|
@@ -3,12 +3,13 @@ require 'erb'
|
|
|
3
3
|
|
|
4
4
|
module CouchPotato
|
|
5
5
|
def self.rails_init
|
|
6
|
-
config = YAML::load(ERB.new(File.read(Rails.root.join('config/couchdb.yml'))).result)[
|
|
6
|
+
config = YAML::load(ERB.new(File.read(Rails.root.join('config/couchdb.yml'))).result)[Rails.env]
|
|
7
7
|
if config.is_a?(String)
|
|
8
8
|
CouchPotato::Config.database_name = config
|
|
9
9
|
else
|
|
10
10
|
CouchPotato::Config.database_name = config['database']
|
|
11
|
-
CouchPotato::Config.validation_framework = config['validation_framework']
|
|
11
|
+
CouchPotato::Config.validation_framework = config['validation_framework'] if config['validation_framework']
|
|
12
|
+
CouchPotato::Config.split_design_documents_per_view = config['split_design_documents_per_view'] if config['split_design_documents_per_view']
|
|
12
13
|
end
|
|
13
14
|
end
|
|
14
15
|
|
data/lib/couch_potato/version.rb
CHANGED
|
@@ -11,7 +11,7 @@ module CouchPotato
|
|
|
11
11
|
|
|
12
12
|
assert_valid_view_parameters normalized_view_parameters
|
|
13
13
|
@klass = klass
|
|
14
|
-
@design_document = translate_to_design_doc_name(klass.to_s)
|
|
14
|
+
@design_document = translate_to_design_doc_name(klass.to_s, view_name, @list_name)
|
|
15
15
|
@view_name = view_name
|
|
16
16
|
@options = options
|
|
17
17
|
|
|
@@ -62,13 +62,19 @@ module CouchPotato
|
|
|
62
62
|
%w(key keys startkey startkey_docid endkey endkey_docid limit stale descending skip group group_level reduce include_docs inclusive_end)
|
|
63
63
|
end
|
|
64
64
|
|
|
65
|
-
def translate_to_design_doc_name(klass_name)
|
|
65
|
+
def translate_to_design_doc_name(klass_name, view_name, list_name)
|
|
66
66
|
klass_name = klass_name.dup
|
|
67
67
|
klass_name.gsub!(/([A-Z]+)([A-Z][a-z])/,'\1_\2')
|
|
68
68
|
klass_name.gsub!(/([a-z\d])([A-Z])/,'\1_\2')
|
|
69
69
|
klass_name.tr!("-", "_")
|
|
70
|
-
klass_name.downcase
|
|
70
|
+
doc_name = klass_name.downcase
|
|
71
|
+
|
|
72
|
+
if CouchPotato::Config.split_design_documents_per_view
|
|
73
|
+
doc_name += "_view_#{view_name}" if view_name.present?
|
|
74
|
+
doc_name += "_list_#{list_name}" if list_name.present?
|
|
75
|
+
end
|
|
76
|
+
doc_name
|
|
71
77
|
end
|
|
72
78
|
end
|
|
73
79
|
end
|
|
74
|
-
end
|
|
80
|
+
end
|
data/lib/couch_potato.rb
CHANGED
|
@@ -8,8 +8,9 @@ require 'ostruct'
|
|
|
8
8
|
JSON.create_id = 'ruby_class'
|
|
9
9
|
|
|
10
10
|
module CouchPotato
|
|
11
|
-
Config = Struct.new(:database_name, :validation_framework).new
|
|
11
|
+
Config = Struct.new(:database_name, :validation_framework, :split_design_documents_per_view).new
|
|
12
12
|
Config.validation_framework = :active_model
|
|
13
|
+
Config.split_design_documents_per_view = false
|
|
13
14
|
|
|
14
15
|
class NotFound < StandardError; end
|
|
15
16
|
|
data/spec/railtie_spec.rb
CHANGED
|
@@ -2,8 +2,10 @@ require 'spec_helper'
|
|
|
2
2
|
require 'yaml'
|
|
3
3
|
require 'spec/mocks'
|
|
4
4
|
|
|
5
|
-
RAILS_ENV = 'test'
|
|
6
5
|
module Rails
|
|
6
|
+
def self.env
|
|
7
|
+
'test'
|
|
8
|
+
end
|
|
7
9
|
class Railtie
|
|
8
10
|
def self.initializer(*args)
|
|
9
11
|
end
|
|
@@ -60,4 +62,4 @@ describe "railtie" do
|
|
|
60
62
|
|
|
61
63
|
CouchPotato.rails_init
|
|
62
64
|
end
|
|
63
|
-
end
|
|
65
|
+
end
|
data/spec/spec_helper.rb
CHANGED
|
@@ -8,13 +8,7 @@ $:.unshift(File.dirname(__FILE__) + '/../lib')
|
|
|
8
8
|
|
|
9
9
|
require 'couch_potato'
|
|
10
10
|
|
|
11
|
-
|
|
12
|
-
CouchPotato::Config.database_name = 'http://langalex.couch.io/couch_potato_test'
|
|
13
|
-
else
|
|
14
|
-
CouchPotato::Config.database_name = 'couch_potato_test'
|
|
15
|
-
end
|
|
16
|
-
|
|
17
|
-
|
|
11
|
+
CouchPotato::Config.database_name = ENV['DATABASE'] || 'couch_potato_test'
|
|
18
12
|
CouchPotato::Config.validation_framework = ENV['VALIDATION_FRAMEWORK'].to_sym unless ENV['VALIDATION_FRAMEWORK'].blank?
|
|
19
13
|
|
|
20
14
|
# silence deprecation warnings from ActiveModel as the Spec uses Errors#on
|
|
@@ -2,6 +2,10 @@ require 'spec_helper'
|
|
|
2
2
|
|
|
3
3
|
describe CouchPotato::View::BaseViewSpec, 'initialize' do
|
|
4
4
|
describe "view parameters" do
|
|
5
|
+
before(:each) do
|
|
6
|
+
CouchPotato::Config.split_design_documents_per_view = false
|
|
7
|
+
end
|
|
8
|
+
|
|
5
9
|
it "should raise an error when passing invalid view parameters" do
|
|
6
10
|
lambda {
|
|
7
11
|
CouchPotato::View::BaseViewSpec.new Object, 'all', {}, {:start_key => '1'}
|
|
@@ -43,20 +47,44 @@ describe CouchPotato::View::BaseViewSpec, 'initialize' do
|
|
|
43
47
|
spec = CouchPotato::View::BaseViewSpec.new 'Foo::BarBaz', '', {}, ''
|
|
44
48
|
spec.design_document.should == 'foo::bar_baz'
|
|
45
49
|
end
|
|
46
|
-
|
|
50
|
+
|
|
51
|
+
it "should generate the design document independent of the view name by default" do
|
|
52
|
+
CouchPotato::Config.split_design_documents_per_view = false
|
|
53
|
+
spec = CouchPotato::View::BaseViewSpec.new 'User', 'by_login_and_email', {}, ''
|
|
54
|
+
spec.design_document.should == 'user'
|
|
55
|
+
end
|
|
56
|
+
|
|
57
|
+
it "should generate the design document per view if configured to" do
|
|
58
|
+
CouchPotato::Config.split_design_documents_per_view = true
|
|
59
|
+
spec = CouchPotato::View::BaseViewSpec.new 'User', 'by_login_and_email', {}, ''
|
|
60
|
+
spec.design_document.should == 'user_view_by_login_and_email'
|
|
61
|
+
end
|
|
62
|
+
|
|
63
|
+
it "should generate the design document independent of the list name by default" do
|
|
64
|
+
CouchPotato::Config.split_design_documents_per_view = false
|
|
65
|
+
spec = CouchPotato::View::BaseViewSpec.new stub(:lists => nil, :to_s => 'User'), '', {:list => 'test_list'}, {}
|
|
66
|
+
spec.design_document.should == 'user'
|
|
67
|
+
end
|
|
68
|
+
|
|
69
|
+
it "should generate the design document per view if configured to" do
|
|
70
|
+
CouchPotato::Config.split_design_documents_per_view = true
|
|
71
|
+
spec = CouchPotato::View::BaseViewSpec.new stub(:lists => nil, :to_s => 'User'), '', {:list => :test_list}, {}
|
|
72
|
+
spec.design_document.should == 'user_list_test_list'
|
|
73
|
+
end
|
|
74
|
+
|
|
47
75
|
it "should extract the list name from the options" do
|
|
48
|
-
spec = CouchPotato::View::BaseViewSpec.new stub(:lists => nil), 'all', {:list =>
|
|
49
|
-
spec.list_name.should ==
|
|
76
|
+
spec = CouchPotato::View::BaseViewSpec.new stub(:lists => nil), 'all', {:list => :test_list}, {}
|
|
77
|
+
spec.list_name.should == :test_list
|
|
50
78
|
end
|
|
51
79
|
|
|
52
80
|
it "should extract the list from the view parameters" do
|
|
53
|
-
spec = CouchPotato::View::BaseViewSpec.new stub(:lists => nil), 'all', {}, {:list =>
|
|
54
|
-
spec.list_name.should ==
|
|
81
|
+
spec = CouchPotato::View::BaseViewSpec.new stub(:lists => nil), 'all', {}, {:list => :test_list}
|
|
82
|
+
spec.list_name.should == :test_list
|
|
55
83
|
end
|
|
56
84
|
|
|
57
85
|
it "should prefer the list name from the view parameters over the one from the options" do
|
|
58
|
-
spec = CouchPotato::View::BaseViewSpec.new stub(:lists => nil), 'all', {:list => 'my_list'}, {:list =>
|
|
59
|
-
spec.list_name.should ==
|
|
86
|
+
spec = CouchPotato::View::BaseViewSpec.new stub(:lists => nil), 'all', {:list => 'my_list'}, {:list => :test_list}
|
|
87
|
+
spec.list_name.should == :test_list
|
|
60
88
|
end
|
|
61
89
|
|
|
62
90
|
it "should return the list function" do
|
metadata
CHANGED
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
name: couch_potato
|
|
3
3
|
version: !ruby/object:Gem::Version
|
|
4
4
|
prerelease:
|
|
5
|
-
version: 0.5.
|
|
5
|
+
version: 0.5.5
|
|
6
6
|
platform: ruby
|
|
7
7
|
authors:
|
|
8
8
|
- Alexander Lang
|
|
@@ -10,7 +10,7 @@ autorequire:
|
|
|
10
10
|
bindir: bin
|
|
11
11
|
cert_chain: []
|
|
12
12
|
|
|
13
|
-
date: 2011-
|
|
13
|
+
date: 2011-07-12 00:00:00 +02:00
|
|
14
14
|
default_executable:
|
|
15
15
|
dependencies:
|
|
16
16
|
- !ruby/object:Gem::Dependency
|
|
@@ -79,6 +79,17 @@ dependencies:
|
|
|
79
79
|
version: "0"
|
|
80
80
|
type: :development
|
|
81
81
|
version_requirements: *id006
|
|
82
|
+
- !ruby/object:Gem::Dependency
|
|
83
|
+
name: rake
|
|
84
|
+
prerelease: false
|
|
85
|
+
requirement: &id007 !ruby/object:Gem::Requirement
|
|
86
|
+
none: false
|
|
87
|
+
requirements:
|
|
88
|
+
- - ">="
|
|
89
|
+
- !ruby/object:Gem::Version
|
|
90
|
+
version: "0"
|
|
91
|
+
type: :development
|
|
92
|
+
version_requirements: *id007
|
|
82
93
|
description: Ruby persistence layer for CouchDB
|
|
83
94
|
email: alex@upstre.am
|
|
84
95
|
executables: []
|
|
@@ -90,6 +101,7 @@ extra_rdoc_files: []
|
|
|
90
101
|
files:
|
|
91
102
|
- .gitignore
|
|
92
103
|
- .rvmrc
|
|
104
|
+
- .travis.yml
|
|
93
105
|
- CHANGES.md
|
|
94
106
|
- CREDITS
|
|
95
107
|
- Gemfile
|