brianmario-couchrest 0.23

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.
Files changed (92) hide show
  1. data/LICENSE +176 -0
  2. data/README.md +95 -0
  3. data/Rakefile +75 -0
  4. data/THANKS.md +18 -0
  5. data/examples/model/example.rb +144 -0
  6. data/examples/word_count/markov +38 -0
  7. data/examples/word_count/views/books/chunked-map.js +3 -0
  8. data/examples/word_count/views/books/united-map.js +1 -0
  9. data/examples/word_count/views/markov/chain-map.js +6 -0
  10. data/examples/word_count/views/markov/chain-reduce.js +7 -0
  11. data/examples/word_count/views/word_count/count-map.js +6 -0
  12. data/examples/word_count/views/word_count/count-reduce.js +3 -0
  13. data/examples/word_count/word_count.rb +46 -0
  14. data/examples/word_count/word_count_query.rb +40 -0
  15. data/examples/word_count/word_count_views.rb +26 -0
  16. data/lib/couchrest.rb +198 -0
  17. data/lib/couchrest/commands/generate.rb +71 -0
  18. data/lib/couchrest/commands/push.rb +103 -0
  19. data/lib/couchrest/core/database.rb +303 -0
  20. data/lib/couchrest/core/design.rb +79 -0
  21. data/lib/couchrest/core/document.rb +87 -0
  22. data/lib/couchrest/core/response.rb +16 -0
  23. data/lib/couchrest/core/server.rb +88 -0
  24. data/lib/couchrest/core/view.rb +4 -0
  25. data/lib/couchrest/helper/pager.rb +103 -0
  26. data/lib/couchrest/helper/streamer.rb +44 -0
  27. data/lib/couchrest/helper/upgrade.rb +51 -0
  28. data/lib/couchrest/mixins.rb +4 -0
  29. data/lib/couchrest/mixins/attachments.rb +31 -0
  30. data/lib/couchrest/mixins/callbacks.rb +483 -0
  31. data/lib/couchrest/mixins/class_proxy.rb +108 -0
  32. data/lib/couchrest/mixins/design_doc.rb +90 -0
  33. data/lib/couchrest/mixins/document_queries.rb +44 -0
  34. data/lib/couchrest/mixins/extended_attachments.rb +68 -0
  35. data/lib/couchrest/mixins/extended_document_mixins.rb +7 -0
  36. data/lib/couchrest/mixins/properties.rb +129 -0
  37. data/lib/couchrest/mixins/validation.rb +242 -0
  38. data/lib/couchrest/mixins/views.rb +169 -0
  39. data/lib/couchrest/monkeypatches.rb +113 -0
  40. data/lib/couchrest/more/casted_model.rb +28 -0
  41. data/lib/couchrest/more/extended_document.rb +215 -0
  42. data/lib/couchrest/more/property.rb +40 -0
  43. data/lib/couchrest/support/blank.rb +42 -0
  44. data/lib/couchrest/support/class.rb +176 -0
  45. data/lib/couchrest/validation/auto_validate.rb +163 -0
  46. data/lib/couchrest/validation/contextual_validators.rb +78 -0
  47. data/lib/couchrest/validation/validation_errors.rb +118 -0
  48. data/lib/couchrest/validation/validators/absent_field_validator.rb +74 -0
  49. data/lib/couchrest/validation/validators/confirmation_validator.rb +99 -0
  50. data/lib/couchrest/validation/validators/format_validator.rb +117 -0
  51. data/lib/couchrest/validation/validators/formats/email.rb +66 -0
  52. data/lib/couchrest/validation/validators/formats/url.rb +43 -0
  53. data/lib/couchrest/validation/validators/generic_validator.rb +120 -0
  54. data/lib/couchrest/validation/validators/length_validator.rb +134 -0
  55. data/lib/couchrest/validation/validators/method_validator.rb +89 -0
  56. data/lib/couchrest/validation/validators/numeric_validator.rb +104 -0
  57. data/lib/couchrest/validation/validators/required_field_validator.rb +109 -0
  58. data/spec/couchrest/core/couchrest_spec.rb +201 -0
  59. data/spec/couchrest/core/database_spec.rb +699 -0
  60. data/spec/couchrest/core/design_spec.rb +138 -0
  61. data/spec/couchrest/core/document_spec.rb +267 -0
  62. data/spec/couchrest/core/server_spec.rb +35 -0
  63. data/spec/couchrest/helpers/pager_spec.rb +122 -0
  64. data/spec/couchrest/helpers/streamer_spec.rb +23 -0
  65. data/spec/couchrest/more/casted_extended_doc_spec.rb +40 -0
  66. data/spec/couchrest/more/casted_model_spec.rb +98 -0
  67. data/spec/couchrest/more/extended_doc_attachment_spec.rb +130 -0
  68. data/spec/couchrest/more/extended_doc_spec.rb +509 -0
  69. data/spec/couchrest/more/extended_doc_subclass_spec.rb +98 -0
  70. data/spec/couchrest/more/extended_doc_view_spec.rb +355 -0
  71. data/spec/couchrest/more/property_spec.rb +136 -0
  72. data/spec/fixtures/attachments/README +3 -0
  73. data/spec/fixtures/attachments/couchdb.png +0 -0
  74. data/spec/fixtures/attachments/test.html +11 -0
  75. data/spec/fixtures/more/article.rb +34 -0
  76. data/spec/fixtures/more/card.rb +20 -0
  77. data/spec/fixtures/more/course.rb +14 -0
  78. data/spec/fixtures/more/event.rb +6 -0
  79. data/spec/fixtures/more/invoice.rb +17 -0
  80. data/spec/fixtures/more/person.rb +8 -0
  81. data/spec/fixtures/more/question.rb +6 -0
  82. data/spec/fixtures/more/service.rb +12 -0
  83. data/spec/fixtures/views/lib.js +3 -0
  84. data/spec/fixtures/views/test_view/lib.js +3 -0
  85. data/spec/fixtures/views/test_view/only-map.js +4 -0
  86. data/spec/fixtures/views/test_view/test-map.js +3 -0
  87. data/spec/fixtures/views/test_view/test-reduce.js +3 -0
  88. data/spec/spec.opts +6 -0
  89. data/spec/spec_helper.rb +26 -0
  90. data/utils/remap.rb +27 -0
  91. data/utils/subset.rb +30 -0
  92. metadata +200 -0
@@ -0,0 +1,136 @@
1
+ require File.join(File.dirname(__FILE__), '..', '..', 'spec_helper')
2
+ require File.join(FIXTURE_PATH, 'more', 'card')
3
+ require File.join(FIXTURE_PATH, 'more', 'invoice')
4
+ require File.join(FIXTURE_PATH, 'more', 'service')
5
+ require File.join(FIXTURE_PATH, 'more', 'event')
6
+
7
+
8
+ describe "ExtendedDocument properties" do
9
+
10
+ before(:each) do
11
+ reset_test_db!
12
+ @card = Card.new(:first_name => "matt")
13
+ end
14
+
15
+ it "should be accessible from the object" do
16
+ @card.properties.should be_an_instance_of(Array)
17
+ @card.properties.map{|p| p.name}.should include("first_name")
18
+ end
19
+
20
+ it "should let you access a property value (getter)" do
21
+ @card.first_name.should == "matt"
22
+ end
23
+
24
+ it "should let you set a property value (setter)" do
25
+ @card.last_name = "Aimonetti"
26
+ @card.last_name.should == "Aimonetti"
27
+ end
28
+
29
+ it "should not let you set a property value if it's read only" do
30
+ lambda{@card.read_only_value = "test"}.should raise_error
31
+ end
32
+
33
+ it "should let you use an alias for an attribute" do
34
+ @card.last_name = "Aimonetti"
35
+ @card.family_name.should == "Aimonetti"
36
+ @card.family_name.should == @card.last_name
37
+ end
38
+
39
+ it "should be auto timestamped" do
40
+ @card.created_at.should be_nil
41
+ @card.updated_at.should be_nil
42
+ @card.save.should be_true
43
+ @card.created_at.should_not be_nil
44
+ @card.updated_at.should_not be_nil
45
+ end
46
+
47
+ describe "validation" do
48
+ before(:each) do
49
+ @invoice = Invoice.new(:client_name => "matt", :employee_name => "Chris", :location => "San Diego, CA")
50
+ end
51
+
52
+ it "should be able to be validated" do
53
+ @card.valid?.should == true
54
+ end
55
+
56
+ it "should let you validate the presence of an attribute" do
57
+ @card.first_name = nil
58
+ @card.should_not be_valid
59
+ @card.errors.should_not be_empty
60
+ @card.errors.on(:first_name).should == ["First name must not be blank"]
61
+ end
62
+
63
+ it "should let you look up errors for a field by a string name" do
64
+ @card.first_name = nil
65
+ @card.should_not be_valid
66
+ @card.errors.on('first_name').should == ["First name must not be blank"]
67
+ end
68
+
69
+ it "should validate the presence of 2 attributes" do
70
+ @invoice.clear
71
+ @invoice.should_not be_valid
72
+ @invoice.errors.should_not be_empty
73
+ @invoice.errors.on(:client_name).first.should == "Client name must not be blank"
74
+ @invoice.errors.on(:employee_name).should_not be_empty
75
+ end
76
+
77
+ it "should let you set an error message" do
78
+ @invoice.location = nil
79
+ @invoice.valid?
80
+ @invoice.errors.on(:location).should == ["Hey stupid!, you forgot the location"]
81
+ end
82
+
83
+ it "should validate before saving" do
84
+ @invoice.location = nil
85
+ @invoice.should_not be_valid
86
+ @invoice.save.should be_false
87
+ @invoice.should be_new_document
88
+ end
89
+ end
90
+
91
+ describe "autovalidation" do
92
+ before(:each) do
93
+ @service = Service.new(:name => "Coumpound analysis", :price => 3_000)
94
+ end
95
+
96
+ it "should be valid" do
97
+ @service.should be_valid
98
+ end
99
+
100
+ it "should not respond to properties not setup" do
101
+ @service.respond_to?(:client_name).should be_false
102
+ end
103
+
104
+ describe "property :name, :length => 4...20" do
105
+
106
+ it "should autovalidate the presence when length is set" do
107
+ @service.name = nil
108
+ @service.should_not be_valid
109
+ @service.errors.should_not be_nil
110
+ @service.errors.on(:name).first.should == "Name must be between 4 and 19 characters long"
111
+ end
112
+
113
+ it "should autovalidate the correct length" do
114
+ @service.name = "a"
115
+ @service.should_not be_valid
116
+ @service.errors.should_not be_nil
117
+ @service.errors.on(:name).first.should == "Name must be between 4 and 19 characters long"
118
+ end
119
+ end
120
+ end
121
+
122
+ describe "casting" do
123
+ describe "cast keys to any type" do
124
+ before(:all) do
125
+ event_doc = { :subject => "Some event", :occurs_at => Time.now }
126
+ e = Event.database.save_doc event_doc
127
+
128
+ @event = Event.get e['id']
129
+ end
130
+ it "should cast created_at to Time" do
131
+ @event['occurs_at'].should be_an_instance_of(Time)
132
+ end
133
+ end
134
+ end
135
+
136
+ end
@@ -0,0 +1,3 @@
1
+ This is an example README file.
2
+
3
+ More of the README, whee.
@@ -0,0 +1,11 @@
1
+ <!DOCTYPE html>
2
+ <html>
3
+ <head>
4
+ <title>Test</title>
5
+ </head>
6
+ <body>
7
+ <p>
8
+ Test
9
+ </p>
10
+ </body>
11
+ </html>
@@ -0,0 +1,34 @@
1
+ class Article < CouchRest::ExtendedDocument
2
+ use_database TEST_SERVER.default_database
3
+ unique_id :slug
4
+
5
+ view_by :date, :descending => true
6
+ view_by :user_id, :date
7
+
8
+ view_by :tags,
9
+ :map =>
10
+ "function(doc) {
11
+ if (doc['couchrest-type'] == 'Article' && doc.tags) {
12
+ doc.tags.forEach(function(tag){
13
+ emit(tag, 1);
14
+ });
15
+ }
16
+ }",
17
+ :reduce =>
18
+ "function(keys, values, rereduce) {
19
+ return sum(values);
20
+ }"
21
+
22
+ property :date
23
+ property :slug, :read_only => true
24
+ property :title
25
+ property :tags
26
+
27
+ timestamps!
28
+
29
+ save_callback :before, :generate_slug_from_title
30
+
31
+ def generate_slug_from_title
32
+ self['slug'] = title.downcase.gsub(/[^a-z0-9]/,'-').squeeze('-').gsub(/^\-|\-$/,'') if new_document?
33
+ end
34
+ end
@@ -0,0 +1,20 @@
1
+ class Card < CouchRest::ExtendedDocument
2
+ # Include the validation module to get access to the validation methods
3
+ include CouchRest::Validation
4
+ # set the auto_validation before defining the properties
5
+ auto_validate!
6
+
7
+ # Set the default database to use
8
+ use_database TEST_SERVER.default_database
9
+
10
+ # Official Schema
11
+ property :first_name
12
+ property :last_name, :alias => :family_name
13
+ property :read_only_value, :read_only => true
14
+
15
+ timestamps!
16
+
17
+ # Validation
18
+ validates_present :first_name
19
+
20
+ end
@@ -0,0 +1,14 @@
1
+ require File.join(FIXTURE_PATH, 'more', 'question')
2
+ require File.join(FIXTURE_PATH, 'more', 'person')
3
+
4
+ class Course < CouchRest::ExtendedDocument
5
+ use_database TEST_SERVER.default_database
6
+
7
+ property :title
8
+ property :questions, :cast_as => ['Question']
9
+ property :professor, :cast_as => 'Person'
10
+ property :final_test_at, :cast_as => 'Time'
11
+
12
+ view_by :title
13
+ view_by :dept, :ducktype => true
14
+ end
@@ -0,0 +1,6 @@
1
+ class Event < CouchRest::ExtendedDocument
2
+ use_database TEST_SERVER.default_database
3
+
4
+ property :subject
5
+ property :occurs_at, :cast_as => 'Time', :send => 'parse'
6
+ end
@@ -0,0 +1,17 @@
1
+ class Invoice < CouchRest::ExtendedDocument
2
+ # Include the validation module to get access to the validation methods
3
+ include CouchRest::Validation
4
+
5
+ # Set the default database to use
6
+ use_database TEST_SERVER.default_database
7
+
8
+ # Official Schema
9
+ property :client_name
10
+ property :employee_name
11
+ property :location
12
+
13
+ # Validation
14
+ validates_present :client_name, :employee_name
15
+ validates_present :location, :message => "Hey stupid!, you forgot the location"
16
+
17
+ end
@@ -0,0 +1,8 @@
1
+ class Person < Hash
2
+ include ::CouchRest::CastedModel
3
+ property :name
4
+
5
+ def last_name
6
+ name.last
7
+ end
8
+ end
@@ -0,0 +1,6 @@
1
+ class Question < Hash
2
+ include ::CouchRest::CastedModel
3
+
4
+ property :q
5
+ property :a
6
+ end
@@ -0,0 +1,12 @@
1
+ class Service < CouchRest::ExtendedDocument
2
+ # Include the validation module to get access to the validation methods
3
+ include CouchRest::Validation
4
+ auto_validate!
5
+ # Set the default database to use
6
+ use_database TEST_SERVER.default_database
7
+
8
+ # Official Schema
9
+ property :name, :length => 4...20
10
+ property :price, :type => Integer
11
+
12
+ end
@@ -0,0 +1,3 @@
1
+ function globalLib() {
2
+ return "fixture";
3
+ };
@@ -0,0 +1,3 @@
1
+ function justThisView() {
2
+ return "fixture";
3
+ };
@@ -0,0 +1,4 @@
1
+ function(doc) {
2
+ //include-lib
3
+ emit(null, null);
4
+ };
@@ -0,0 +1,3 @@
1
+ function(doc) {
2
+ emit(null, null);
3
+ };
@@ -0,0 +1,3 @@
1
+ function(ks,vs,co) {
2
+ return vs.length;
3
+ };
data/spec/spec.opts ADDED
@@ -0,0 +1,6 @@
1
+ --colour
2
+ --format
3
+ progress
4
+ --loadby
5
+ mtime
6
+ --reverse
@@ -0,0 +1,26 @@
1
+ require "rubygems"
2
+ require "spec" # Satisfies Autotest and anyone else not using the Rake tasks
3
+
4
+ require File.join(File.dirname(__FILE__), '..','lib','couchrest')
5
+ # check the following file to see how to use the spec'd features.
6
+
7
+ unless defined?(FIXTURE_PATH)
8
+ FIXTURE_PATH = File.join(File.dirname(__FILE__), '/fixtures')
9
+ SCRATCH_PATH = File.join(File.dirname(__FILE__), '/tmp')
10
+
11
+ COUCHHOST = "http://127.0.0.1:5984"
12
+ TESTDB = 'couchrest-test'
13
+ TEST_SERVER = CouchRest.new
14
+ TEST_SERVER.default_database = TESTDB
15
+ end
16
+
17
+ class Basic < CouchRest::ExtendedDocument
18
+ use_database TEST_SERVER.default_database
19
+ end
20
+
21
+ def reset_test_db!
22
+ cr = TEST_SERVER
23
+ db = cr.database(TESTDB)
24
+ db.recreate! rescue nil
25
+ db
26
+ end
data/utils/remap.rb ADDED
@@ -0,0 +1,27 @@
1
+ require 'rubygems'
2
+ require 'couchrest'
3
+
4
+ # set the source db and map view
5
+ source = CouchRest.new("http://127.0.0.1:5984").database('source-db')
6
+ source_view = 'mydesign/view-map'
7
+
8
+ # set the target db
9
+ target = CouchRest.new("http://127.0.0.1:5984").database('target-db')
10
+
11
+
12
+ pager = CouchRest::Pager.new(source)
13
+
14
+ # pager will yield once per uniq key in the source view
15
+
16
+ pager.key_reduce(source_view, 10000) do |key, values|
17
+ # create a doc from the key and the values
18
+ example_doc = {
19
+ :key => key,
20
+ :values => values.uniq
21
+ }
22
+
23
+ target.save(example_doc)
24
+
25
+ # keep us up to date with progress
26
+ puts k if (rand > 0.9)
27
+ end
data/utils/subset.rb ADDED
@@ -0,0 +1,30 @@
1
+ require 'rubygems'
2
+ require 'couchrest'
3
+
4
+ # subset.rb replicates a percentage of a database to a fresh database.
5
+ # use it to create a smaller dataset on which to prototype views.
6
+
7
+ # specify the source database
8
+ source = CouchRest.new("http://127.0.0.1:5984").database('source-db')
9
+
10
+ # specify the target database
11
+ target = CouchRest.new("http://127.0.0.1:5984").database('target-db')
12
+
13
+ # pager efficiently yields all view rows
14
+ pager = CouchRest::Pager.new(source)
15
+
16
+ pager.all_docs(1000) do |rows|
17
+ docs = rows.collect do |r|
18
+ # the percentage of docs to clone
19
+ next if rand > 0.1
20
+ doc = source.get(r['id'])
21
+ doc.delete('_rev')
22
+ doc
23
+ end.compact
24
+ puts docs.length
25
+ next if docs.empty?
26
+
27
+ puts docs.first['_id']
28
+ target.bulk_save(docs)
29
+ end
30
+
metadata ADDED
@@ -0,0 +1,200 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: brianmario-couchrest
3
+ version: !ruby/object:Gem::Version
4
+ version: "0.23"
5
+ platform: ruby
6
+ authors:
7
+ - J. Chris Anderson
8
+ - Matt Aimonetti
9
+ autorequire:
10
+ bindir: bin
11
+ cert_chain: []
12
+
13
+ date: 2008-11-22 00:00:00 -08:00
14
+ default_executable:
15
+ dependencies:
16
+ - !ruby/object:Gem::Dependency
17
+ name: yajl-ruby
18
+ type: :runtime
19
+ version_requirement:
20
+ version_requirements: !ruby/object:Gem::Requirement
21
+ requirements:
22
+ - - ">="
23
+ - !ruby/object:Gem::Version
24
+ version: 0.5.5
25
+ version:
26
+ - !ruby/object:Gem::Dependency
27
+ name: rest-client
28
+ type: :runtime
29
+ version_requirement:
30
+ version_requirements: !ruby/object:Gem::Requirement
31
+ requirements:
32
+ - - ">="
33
+ - !ruby/object:Gem::Version
34
+ version: "0.5"
35
+ version:
36
+ - !ruby/object:Gem::Dependency
37
+ name: mime-types
38
+ type: :runtime
39
+ version_requirement:
40
+ version_requirements: !ruby/object:Gem::Requirement
41
+ requirements:
42
+ - - ">="
43
+ - !ruby/object:Gem::Version
44
+ version: "1.15"
45
+ version:
46
+ description: CouchRest provides a simple interface on top of CouchDB's RESTful HTTP API, as well as including some utility scripts for managing views and attachments.
47
+ email: jchris@apache.org
48
+ executables: []
49
+
50
+ extensions: []
51
+
52
+ extra_rdoc_files:
53
+ - README.md
54
+ - LICENSE
55
+ - THANKS.md
56
+ files:
57
+ - LICENSE
58
+ - README.md
59
+ - Rakefile
60
+ - THANKS.md
61
+ - examples/model
62
+ - examples/model/example.rb
63
+ - examples/word_count
64
+ - examples/word_count/markov
65
+ - examples/word_count/views
66
+ - examples/word_count/views/books
67
+ - examples/word_count/views/books/chunked-map.js
68
+ - examples/word_count/views/books/united-map.js
69
+ - examples/word_count/views/markov
70
+ - examples/word_count/views/markov/chain-map.js
71
+ - examples/word_count/views/markov/chain-reduce.js
72
+ - examples/word_count/views/word_count
73
+ - examples/word_count/views/word_count/count-map.js
74
+ - examples/word_count/views/word_count/count-reduce.js
75
+ - examples/word_count/word_count.rb
76
+ - examples/word_count/word_count_query.rb
77
+ - examples/word_count/word_count_views.rb
78
+ - lib/couchrest
79
+ - lib/couchrest/commands
80
+ - lib/couchrest/commands/generate.rb
81
+ - lib/couchrest/commands/push.rb
82
+ - lib/couchrest/core
83
+ - lib/couchrest/core/database.rb
84
+ - lib/couchrest/core/design.rb
85
+ - lib/couchrest/core/document.rb
86
+ - lib/couchrest/core/response.rb
87
+ - lib/couchrest/core/server.rb
88
+ - lib/couchrest/core/view.rb
89
+ - lib/couchrest/helper
90
+ - lib/couchrest/helper/pager.rb
91
+ - lib/couchrest/helper/streamer.rb
92
+ - lib/couchrest/helper/upgrade.rb
93
+ - lib/couchrest/mixins
94
+ - lib/couchrest/mixins/attachments.rb
95
+ - lib/couchrest/mixins/callbacks.rb
96
+ - lib/couchrest/mixins/class_proxy.rb
97
+ - lib/couchrest/mixins/design_doc.rb
98
+ - lib/couchrest/mixins/document_queries.rb
99
+ - lib/couchrest/mixins/extended_attachments.rb
100
+ - lib/couchrest/mixins/extended_document_mixins.rb
101
+ - lib/couchrest/mixins/properties.rb
102
+ - lib/couchrest/mixins/validation.rb
103
+ - lib/couchrest/mixins/views.rb
104
+ - lib/couchrest/mixins.rb
105
+ - lib/couchrest/monkeypatches.rb
106
+ - lib/couchrest/more
107
+ - lib/couchrest/more/casted_model.rb
108
+ - lib/couchrest/more/extended_document.rb
109
+ - lib/couchrest/more/property.rb
110
+ - lib/couchrest/support
111
+ - lib/couchrest/support/blank.rb
112
+ - lib/couchrest/support/class.rb
113
+ - lib/couchrest/validation
114
+ - lib/couchrest/validation/auto_validate.rb
115
+ - lib/couchrest/validation/contextual_validators.rb
116
+ - lib/couchrest/validation/validation_errors.rb
117
+ - lib/couchrest/validation/validators
118
+ - lib/couchrest/validation/validators/absent_field_validator.rb
119
+ - lib/couchrest/validation/validators/confirmation_validator.rb
120
+ - lib/couchrest/validation/validators/format_validator.rb
121
+ - lib/couchrest/validation/validators/formats
122
+ - lib/couchrest/validation/validators/formats/email.rb
123
+ - lib/couchrest/validation/validators/formats/url.rb
124
+ - lib/couchrest/validation/validators/generic_validator.rb
125
+ - lib/couchrest/validation/validators/length_validator.rb
126
+ - lib/couchrest/validation/validators/method_validator.rb
127
+ - lib/couchrest/validation/validators/numeric_validator.rb
128
+ - lib/couchrest/validation/validators/required_field_validator.rb
129
+ - lib/couchrest.rb
130
+ - spec/couchrest
131
+ - spec/couchrest/core
132
+ - spec/couchrest/core/couchrest_spec.rb
133
+ - spec/couchrest/core/database_spec.rb
134
+ - spec/couchrest/core/design_spec.rb
135
+ - spec/couchrest/core/document_spec.rb
136
+ - spec/couchrest/core/server_spec.rb
137
+ - spec/couchrest/helpers
138
+ - spec/couchrest/helpers/pager_spec.rb
139
+ - spec/couchrest/helpers/streamer_spec.rb
140
+ - spec/couchrest/more
141
+ - spec/couchrest/more/casted_extended_doc_spec.rb
142
+ - spec/couchrest/more/casted_model_spec.rb
143
+ - spec/couchrest/more/extended_doc_attachment_spec.rb
144
+ - spec/couchrest/more/extended_doc_spec.rb
145
+ - spec/couchrest/more/extended_doc_subclass_spec.rb
146
+ - spec/couchrest/more/extended_doc_view_spec.rb
147
+ - spec/couchrest/more/property_spec.rb
148
+ - spec/fixtures
149
+ - spec/fixtures/attachments
150
+ - spec/fixtures/attachments/couchdb.png
151
+ - spec/fixtures/attachments/README
152
+ - spec/fixtures/attachments/test.html
153
+ - spec/fixtures/more
154
+ - spec/fixtures/more/article.rb
155
+ - spec/fixtures/more/card.rb
156
+ - spec/fixtures/more/course.rb
157
+ - spec/fixtures/more/event.rb
158
+ - spec/fixtures/more/invoice.rb
159
+ - spec/fixtures/more/person.rb
160
+ - spec/fixtures/more/question.rb
161
+ - spec/fixtures/more/service.rb
162
+ - spec/fixtures/views
163
+ - spec/fixtures/views/lib.js
164
+ - spec/fixtures/views/test_view
165
+ - spec/fixtures/views/test_view/lib.js
166
+ - spec/fixtures/views/test_view/only-map.js
167
+ - spec/fixtures/views/test_view/test-map.js
168
+ - spec/fixtures/views/test_view/test-reduce.js
169
+ - spec/spec.opts
170
+ - spec/spec_helper.rb
171
+ - utils/remap.rb
172
+ - utils/subset.rb
173
+ has_rdoc: true
174
+ homepage: http://github.com/jchris/couchrest
175
+ post_install_message:
176
+ rdoc_options: []
177
+
178
+ require_paths:
179
+ - lib
180
+ required_ruby_version: !ruby/object:Gem::Requirement
181
+ requirements:
182
+ - - ">="
183
+ - !ruby/object:Gem::Version
184
+ version: "0"
185
+ version:
186
+ required_rubygems_version: !ruby/object:Gem::Requirement
187
+ requirements:
188
+ - - ">="
189
+ - !ruby/object:Gem::Version
190
+ version: "0"
191
+ version:
192
+ requirements: []
193
+
194
+ rubyforge_project:
195
+ rubygems_version: 1.2.0
196
+ signing_key:
197
+ specification_version: 2
198
+ summary: Lean and RESTful interface to CouchDB.
199
+ test_files: []
200
+