jrun-couchrest 0.2.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.
Files changed (90) hide show
  1. data/LICENSE +176 -0
  2. data/README.md +93 -0
  3. data/Rakefile +69 -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/commands/generate.rb +71 -0
  17. data/lib/couchrest/commands/push.rb +103 -0
  18. data/lib/couchrest/core/database.rb +313 -0
  19. data/lib/couchrest/core/design.rb +89 -0
  20. data/lib/couchrest/core/document.rb +96 -0
  21. data/lib/couchrest/core/response.rb +16 -0
  22. data/lib/couchrest/core/server.rb +88 -0
  23. data/lib/couchrest/core/view.rb +4 -0
  24. data/lib/couchrest/helper/pager.rb +103 -0
  25. data/lib/couchrest/helper/streamer.rb +44 -0
  26. data/lib/couchrest/mixins/attachments.rb +31 -0
  27. data/lib/couchrest/mixins/callbacks.rb +483 -0
  28. data/lib/couchrest/mixins/design_doc.rb +64 -0
  29. data/lib/couchrest/mixins/document_queries.rb +48 -0
  30. data/lib/couchrest/mixins/extended_attachments.rb +68 -0
  31. data/lib/couchrest/mixins/extended_document_mixins.rb +6 -0
  32. data/lib/couchrest/mixins/properties.rb +125 -0
  33. data/lib/couchrest/mixins/validation.rb +234 -0
  34. data/lib/couchrest/mixins/views.rb +168 -0
  35. data/lib/couchrest/mixins.rb +4 -0
  36. data/lib/couchrest/monkeypatches.rb +119 -0
  37. data/lib/couchrest/more/casted_model.rb +28 -0
  38. data/lib/couchrest/more/extended_document.rb +217 -0
  39. data/lib/couchrest/more/property.rb +40 -0
  40. data/lib/couchrest/support/blank.rb +42 -0
  41. data/lib/couchrest/support/class.rb +191 -0
  42. data/lib/couchrest/validation/auto_validate.rb +163 -0
  43. data/lib/couchrest/validation/contextual_validators.rb +78 -0
  44. data/lib/couchrest/validation/validation_errors.rb +118 -0
  45. data/lib/couchrest/validation/validators/absent_field_validator.rb +74 -0
  46. data/lib/couchrest/validation/validators/confirmation_validator.rb +99 -0
  47. data/lib/couchrest/validation/validators/format_validator.rb +117 -0
  48. data/lib/couchrest/validation/validators/formats/email.rb +66 -0
  49. data/lib/couchrest/validation/validators/formats/url.rb +43 -0
  50. data/lib/couchrest/validation/validators/generic_validator.rb +120 -0
  51. data/lib/couchrest/validation/validators/length_validator.rb +134 -0
  52. data/lib/couchrest/validation/validators/method_validator.rb +89 -0
  53. data/lib/couchrest/validation/validators/numeric_validator.rb +104 -0
  54. data/lib/couchrest/validation/validators/required_field_validator.rb +109 -0
  55. data/lib/couchrest.rb +189 -0
  56. data/spec/couchrest/core/couchrest_spec.rb +201 -0
  57. data/spec/couchrest/core/database_spec.rb +750 -0
  58. data/spec/couchrest/core/design_spec.rb +131 -0
  59. data/spec/couchrest/core/document_spec.rb +311 -0
  60. data/spec/couchrest/core/server_spec.rb +35 -0
  61. data/spec/couchrest/helpers/pager_spec.rb +122 -0
  62. data/spec/couchrest/helpers/streamer_spec.rb +23 -0
  63. data/spec/couchrest/more/casted_extended_doc_spec.rb +40 -0
  64. data/spec/couchrest/more/casted_model_spec.rb +97 -0
  65. data/spec/couchrest/more/extended_doc_attachment_spec.rb +129 -0
  66. data/spec/couchrest/more/extended_doc_spec.rb +509 -0
  67. data/spec/couchrest/more/extended_doc_view_spec.rb +206 -0
  68. data/spec/couchrest/more/property_spec.rb +129 -0
  69. data/spec/couchrest/support/class_spec.rb +59 -0
  70. data/spec/fixtures/attachments/README +3 -0
  71. data/spec/fixtures/attachments/couchdb.png +0 -0
  72. data/spec/fixtures/attachments/test.html +11 -0
  73. data/spec/fixtures/more/article.rb +34 -0
  74. data/spec/fixtures/more/card.rb +20 -0
  75. data/spec/fixtures/more/course.rb +14 -0
  76. data/spec/fixtures/more/event.rb +6 -0
  77. data/spec/fixtures/more/invoice.rb +17 -0
  78. data/spec/fixtures/more/person.rb +8 -0
  79. data/spec/fixtures/more/question.rb +6 -0
  80. data/spec/fixtures/more/service.rb +12 -0
  81. data/spec/fixtures/views/lib.js +3 -0
  82. data/spec/fixtures/views/test_view/lib.js +3 -0
  83. data/spec/fixtures/views/test_view/only-map.js +4 -0
  84. data/spec/fixtures/views/test_view/test-map.js +3 -0
  85. data/spec/fixtures/views/test_view/test-reduce.js +3 -0
  86. data/spec/spec.opts +6 -0
  87. data/spec/spec_helper.rb +26 -0
  88. data/utils/remap.rb +27 -0
  89. data/utils/subset.rb +30 -0
  90. metadata +219 -0
@@ -0,0 +1,129 @@
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
+ @card = Card.new(:first_name => "matt")
12
+ end
13
+
14
+ it "should be accessible from the object" do
15
+ @card.properties.should be_an_instance_of(Array)
16
+ @card.properties.map{|p| p.name}.should include("first_name")
17
+ end
18
+
19
+ it "should let you access a property value (getter)" do
20
+ @card.first_name.should == "matt"
21
+ end
22
+
23
+ it "should let you set a property value (setter)" do
24
+ @card.last_name = "Aimonetti"
25
+ @card.last_name.should == "Aimonetti"
26
+ end
27
+
28
+ it "should not let you set a property value if it's read only" do
29
+ lambda{@card.read_only_value = "test"}.should raise_error
30
+ end
31
+
32
+ it "should let you use an alias for an attribute" do
33
+ @card.last_name = "Aimonetti"
34
+ @card.family_name.should == "Aimonetti"
35
+ @card.family_name.should == @card.last_name
36
+ end
37
+
38
+ it "should be auto timestamped" do
39
+ @card.created_at.should be_nil
40
+ @card.updated_at.should be_nil
41
+ @card.save.should be_true
42
+ @card.created_at.should_not be_nil
43
+ @card.updated_at.should_not be_nil
44
+ end
45
+
46
+ describe "validation" do
47
+ before(:each) do
48
+ @invoice = Invoice.new(:client_name => "matt", :employee_name => "Chris", :location => "San Diego, CA")
49
+ end
50
+
51
+ it "should be able to be validated" do
52
+ @card.valid?.should == true
53
+ end
54
+
55
+ it "should let you validate the presence of an attribute" do
56
+ @card.first_name = nil
57
+ @card.should_not be_valid
58
+ @card.errors.should_not be_empty
59
+ @card.errors.on(:first_name).should == ["First name must not be blank"]
60
+ end
61
+
62
+ it "should validate the presence of 2 attributes" do
63
+ @invoice.clear
64
+ @invoice.should_not be_valid
65
+ @invoice.errors.should_not be_empty
66
+ @invoice.errors.on(:client_name).first.should == "Client name must not be blank"
67
+ @invoice.errors.on(:employee_name).should_not be_empty
68
+ end
69
+
70
+ it "should let you set an error message" do
71
+ @invoice.location = nil
72
+ @invoice.valid?
73
+ @invoice.errors.on(:location).should == ["Hey stupid!, you forgot the location"]
74
+ end
75
+
76
+ it "should validate before saving" do
77
+ @invoice.location = nil
78
+ @invoice.should_not be_valid
79
+ @invoice.save.should be_false
80
+ @invoice.should be_new_document
81
+ end
82
+ end
83
+
84
+ describe "autovalidation" do
85
+ before(:each) do
86
+ @service = Service.new(:name => "Coumpound analysis", :price => 3_000)
87
+ end
88
+
89
+ it "should be valid" do
90
+ @service.should be_valid
91
+ end
92
+
93
+ it "should not respond to properties not setup" do
94
+ @service.respond_to?(:client_name).should be_false
95
+ end
96
+
97
+ describe "property :name, :length => 4...20" do
98
+
99
+ it "should autovalidate the presence when length is set" do
100
+ @service.name = nil
101
+ @service.should_not be_valid
102
+ @service.errors.should_not be_nil
103
+ @service.errors.on(:name).first.should == "Name must be between 4 and 19 characters long"
104
+ end
105
+
106
+ it "should autovalidate the correct length" do
107
+ @service.name = "a"
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
+ end
113
+ end
114
+
115
+ describe "casting" do
116
+ describe "cast keys to any type" do
117
+ before(:all) do
118
+ event_doc = { :subject => "Some event", :occurs_at => Time.now }
119
+ e = Event.database.save_doc event_doc
120
+
121
+ @event = Event.get e['id']
122
+ end
123
+ it "should cast created_at to Time" do
124
+ @event['occurs_at'].should be_an_instance_of(Time)
125
+ end
126
+ end
127
+ end
128
+
129
+ end
@@ -0,0 +1,59 @@
1
+ require File.join(File.dirname(__FILE__), '..', '..', 'spec_helper')
2
+ require File.join(File.dirname(__FILE__), '..', '..', '..', 'lib', 'couchrest', 'support', 'class')
3
+
4
+ describe CouchRest::ClassExtension do
5
+
6
+ before :all do
7
+ class FullyDefinedClassExtensions
8
+ def self.respond_to?(method)
9
+ if CouchRest::ClassExtension::InstanceMethods.instance_methods.include?(method)
10
+ true
11
+ else
12
+ super
13
+ end
14
+ end
15
+ end
16
+
17
+ class PartDefinedClassExtensions
18
+ def self.respond_to?(method)
19
+ methods = CouchRest::ClassExtension::InstanceMethods.instance_methods
20
+ methods.delete('cattr_reader')
21
+
22
+ if methods.include?(method)
23
+ false
24
+ else
25
+ super
26
+ end
27
+ end
28
+ end
29
+
30
+ class NoClassExtensions
31
+ def self.respond_to?(method)
32
+ if CouchRest::ClassExtension::InstanceMethods.instance_methods.include?(method)
33
+ false
34
+ else
35
+ super
36
+ end
37
+ end
38
+ end
39
+
40
+
41
+ end
42
+
43
+ it "should not include InstanceMethods if the class extensions are already defined" do
44
+ FullyDefinedClassExtensions.send(:include, CouchRest::ClassExtension)
45
+ FullyDefinedClassExtensions.ancestors.should_not include(CouchRest::ClassExtension::InstanceMethods)
46
+ end
47
+
48
+ it "should raise RuntimeError if the class extensions are only partially defined" do
49
+ lambda {
50
+ PartDefinedClassExtensions.send(:include, CouchRest::ClassExtension)
51
+ }.should raise_error(RuntimeError)
52
+ end
53
+
54
+ it "should include class extensions if they are not already defined" do
55
+ NoClassExtensions.send(:include, CouchRest::ClassExtension)
56
+ NoClassExtensions.ancestors.should include(CouchRest::ClassExtension::InstanceMethods)
57
+ end
58
+
59
+ 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,219 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: jrun-couchrest
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.2.1
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: json
18
+ type: :runtime
19
+ version_requirement:
20
+ version_requirements: !ruby/object:Gem::Requirement
21
+ requirements:
22
+ - - ">="
23
+ - !ruby/object:Gem::Version
24
+ version: 1.1.2
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/mixins
93
+ - lib/couchrest/mixins/attachments.rb
94
+ - lib/couchrest/mixins/callbacks.rb
95
+ - lib/couchrest/mixins/design_doc.rb
96
+ - lib/couchrest/mixins/document_queries.rb
97
+ - lib/couchrest/mixins/extended_attachments.rb
98
+ - lib/couchrest/mixins/extended_document_mixins.rb
99
+ - lib/couchrest/mixins/properties.rb
100
+ - lib/couchrest/mixins/validation.rb
101
+ - lib/couchrest/mixins/views.rb
102
+ - lib/couchrest/mixins.rb
103
+ - lib/couchrest/monkeypatches.rb
104
+ - lib/couchrest/more
105
+ - lib/couchrest/more/casted_model.rb
106
+ - lib/couchrest/more/extended_document.rb
107
+ - lib/couchrest/more/property.rb
108
+ - lib/couchrest/support
109
+ - lib/couchrest/support/blank.rb
110
+ - lib/couchrest/support/class.rb
111
+ - lib/couchrest/validation
112
+ - lib/couchrest/validation/auto_validate.rb
113
+ - lib/couchrest/validation/contextual_validators.rb
114
+ - lib/couchrest/validation/validation_errors.rb
115
+ - lib/couchrest/validation/validators
116
+ - lib/couchrest/validation/validators/absent_field_validator.rb
117
+ - lib/couchrest/validation/validators/confirmation_validator.rb
118
+ - lib/couchrest/validation/validators/format_validator.rb
119
+ - lib/couchrest/validation/validators/formats
120
+ - lib/couchrest/validation/validators/formats/email.rb
121
+ - lib/couchrest/validation/validators/formats/url.rb
122
+ - lib/couchrest/validation/validators/generic_validator.rb
123
+ - lib/couchrest/validation/validators/length_validator.rb
124
+ - lib/couchrest/validation/validators/method_validator.rb
125
+ - lib/couchrest/validation/validators/numeric_validator.rb
126
+ - lib/couchrest/validation/validators/required_field_validator.rb
127
+ - lib/couchrest.rb
128
+ - spec/couchrest
129
+ - spec/couchrest/core
130
+ - spec/couchrest/core/couchrest_spec.rb
131
+ - spec/couchrest/core/database_spec.rb
132
+ - spec/couchrest/core/design_spec.rb
133
+ - spec/couchrest/core/document_spec.rb
134
+ - spec/couchrest/core/server_spec.rb
135
+ - spec/couchrest/helpers
136
+ - spec/couchrest/helpers/pager_spec.rb
137
+ - spec/couchrest/helpers/streamer_spec.rb
138
+ - spec/couchrest/more
139
+ - spec/couchrest/more/casted_extended_doc_spec.rb
140
+ - spec/couchrest/more/casted_model_spec.rb
141
+ - spec/couchrest/more/extended_doc_attachment_spec.rb
142
+ - spec/couchrest/more/extended_doc_spec.rb
143
+ - spec/couchrest/more/extended_doc_view_spec.rb
144
+ - spec/couchrest/more/property_spec.rb
145
+ - spec/couchrest/support
146
+ - spec/couchrest/support/class_spec.rb
147
+ - spec/fixtures
148
+ - spec/fixtures/attachments
149
+ - spec/fixtures/attachments/couchdb.png
150
+ - spec/fixtures/attachments/README
151
+ - spec/fixtures/attachments/test.html
152
+ - spec/fixtures/couchapp
153
+ - spec/fixtures/couchapp/_attachments
154
+ - spec/fixtures/couchapp/_attachments/index.html
155
+ - spec/fixtures/couchapp/doc.json
156
+ - spec/fixtures/couchapp/foo
157
+ - spec/fixtures/couchapp/foo/bar.txt
158
+ - spec/fixtures/couchapp/foo/test.json
159
+ - spec/fixtures/couchapp/test.json
160
+ - spec/fixtures/couchapp/views
161
+ - spec/fixtures/couchapp/views/example-map.js
162
+ - spec/fixtures/couchapp/views/example-reduce.js
163
+ - spec/fixtures/couchapp-test
164
+ - spec/fixtures/couchapp-test/my-app
165
+ - spec/fixtures/couchapp-test/my-app/_attachments
166
+ - spec/fixtures/couchapp-test/my-app/_attachments/index.html
167
+ - spec/fixtures/couchapp-test/my-app/foo
168
+ - spec/fixtures/couchapp-test/my-app/foo/bar.txt
169
+ - spec/fixtures/couchapp-test/my-app/views
170
+ - spec/fixtures/couchapp-test/my-app/views/example-map.js
171
+ - spec/fixtures/couchapp-test/my-app/views/example-reduce.js
172
+ - spec/fixtures/more
173
+ - spec/fixtures/more/article.rb
174
+ - spec/fixtures/more/card.rb
175
+ - spec/fixtures/more/course.rb
176
+ - spec/fixtures/more/event.rb
177
+ - spec/fixtures/more/invoice.rb
178
+ - spec/fixtures/more/person.rb
179
+ - spec/fixtures/more/question.rb
180
+ - spec/fixtures/more/service.rb
181
+ - spec/fixtures/views
182
+ - spec/fixtures/views/lib.js
183
+ - spec/fixtures/views/test_view
184
+ - spec/fixtures/views/test_view/lib.js
185
+ - spec/fixtures/views/test_view/only-map.js
186
+ - spec/fixtures/views/test_view/test-map.js
187
+ - spec/fixtures/views/test_view/test-reduce.js
188
+ - spec/spec.opts
189
+ - spec/spec_helper.rb
190
+ - utils/remap.rb
191
+ - utils/subset.rb
192
+ has_rdoc: true
193
+ homepage: http://github.com/jchris/couchrest
194
+ post_install_message:
195
+ rdoc_options: []
196
+
197
+ require_paths:
198
+ - lib
199
+ required_ruby_version: !ruby/object:Gem::Requirement
200
+ requirements:
201
+ - - ">="
202
+ - !ruby/object:Gem::Version
203
+ version: "0"
204
+ version:
205
+ required_rubygems_version: !ruby/object:Gem::Requirement
206
+ requirements:
207
+ - - ">="
208
+ - !ruby/object:Gem::Version
209
+ version: "0"
210
+ version:
211
+ requirements: []
212
+
213
+ rubyforge_project:
214
+ rubygems_version: 1.2.0
215
+ signing_key:
216
+ specification_version: 2
217
+ summary: Lean and RESTful interface to CouchDB.
218
+ test_files: []
219
+