jchris-couchrest 0.2

Sign up to get free protection for your applications and to get access to all the features.
Files changed (89) hide show
  1. data/LICENSE +176 -0
  2. data/README.md +93 -0
  3. data/Rakefile +66 -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 +442 -0
  28. data/lib/couchrest/mixins/design_doc.rb +63 -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 +169 -0
  35. data/lib/couchrest/mixins.rb +4 -0
  36. data/lib/couchrest/monkeypatches.rb +113 -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 +175 -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 +745 -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 +207 -0
  68. data/spec/couchrest/more/property_spec.rb +129 -0
  69. data/spec/fixtures/attachments/README +3 -0
  70. data/spec/fixtures/attachments/couchdb.png +0 -0
  71. data/spec/fixtures/attachments/test.html +11 -0
  72. data/spec/fixtures/more/article.rb +34 -0
  73. data/spec/fixtures/more/card.rb +20 -0
  74. data/spec/fixtures/more/course.rb +14 -0
  75. data/spec/fixtures/more/event.rb +6 -0
  76. data/spec/fixtures/more/invoice.rb +17 -0
  77. data/spec/fixtures/more/person.rb +8 -0
  78. data/spec/fixtures/more/question.rb +6 -0
  79. data/spec/fixtures/more/service.rb +12 -0
  80. data/spec/fixtures/views/lib.js +3 -0
  81. data/spec/fixtures/views/test_view/lib.js +3 -0
  82. data/spec/fixtures/views/test_view/only-map.js +4 -0
  83. data/spec/fixtures/views/test_view/test-map.js +3 -0
  84. data/spec/fixtures/views/test_view/test-reduce.js +3 -0
  85. data/spec/spec.opts +6 -0
  86. data/spec/spec_helper.rb +26 -0
  87. data/utils/remap.rb +27 -0
  88. data/utils/subset.rb +30 -0
  89. metadata +217 -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,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,217 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: jchris-couchrest
3
+ version: !ruby/object:Gem::Version
4
+ version: "0.2"
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/fixtures
146
+ - spec/fixtures/attachments
147
+ - spec/fixtures/attachments/couchdb.png
148
+ - spec/fixtures/attachments/README
149
+ - spec/fixtures/attachments/test.html
150
+ - spec/fixtures/couchapp
151
+ - spec/fixtures/couchapp/_attachments
152
+ - spec/fixtures/couchapp/_attachments/index.html
153
+ - spec/fixtures/couchapp/doc.json
154
+ - spec/fixtures/couchapp/foo
155
+ - spec/fixtures/couchapp/foo/bar.txt
156
+ - spec/fixtures/couchapp/foo/test.json
157
+ - spec/fixtures/couchapp/test.json
158
+ - spec/fixtures/couchapp/views
159
+ - spec/fixtures/couchapp/views/example-map.js
160
+ - spec/fixtures/couchapp/views/example-reduce.js
161
+ - spec/fixtures/couchapp-test
162
+ - spec/fixtures/couchapp-test/my-app
163
+ - spec/fixtures/couchapp-test/my-app/_attachments
164
+ - spec/fixtures/couchapp-test/my-app/_attachments/index.html
165
+ - spec/fixtures/couchapp-test/my-app/foo
166
+ - spec/fixtures/couchapp-test/my-app/foo/bar.txt
167
+ - spec/fixtures/couchapp-test/my-app/views
168
+ - spec/fixtures/couchapp-test/my-app/views/example-map.js
169
+ - spec/fixtures/couchapp-test/my-app/views/example-reduce.js
170
+ - spec/fixtures/more
171
+ - spec/fixtures/more/article.rb
172
+ - spec/fixtures/more/card.rb
173
+ - spec/fixtures/more/course.rb
174
+ - spec/fixtures/more/event.rb
175
+ - spec/fixtures/more/invoice.rb
176
+ - spec/fixtures/more/person.rb
177
+ - spec/fixtures/more/question.rb
178
+ - spec/fixtures/more/service.rb
179
+ - spec/fixtures/views
180
+ - spec/fixtures/views/lib.js
181
+ - spec/fixtures/views/test_view
182
+ - spec/fixtures/views/test_view/lib.js
183
+ - spec/fixtures/views/test_view/only-map.js
184
+ - spec/fixtures/views/test_view/test-map.js
185
+ - spec/fixtures/views/test_view/test-reduce.js
186
+ - spec/spec.opts
187
+ - spec/spec_helper.rb
188
+ - utils/remap.rb
189
+ - utils/subset.rb
190
+ has_rdoc: true
191
+ homepage: http://github.com/jchris/couchrest
192
+ post_install_message:
193
+ rdoc_options: []
194
+
195
+ require_paths:
196
+ - lib
197
+ required_ruby_version: !ruby/object:Gem::Requirement
198
+ requirements:
199
+ - - ">="
200
+ - !ruby/object:Gem::Version
201
+ version: "0"
202
+ version:
203
+ required_rubygems_version: !ruby/object:Gem::Requirement
204
+ requirements:
205
+ - - ">="
206
+ - !ruby/object:Gem::Version
207
+ version: "0"
208
+ version:
209
+ requirements: []
210
+
211
+ rubyforge_project:
212
+ rubygems_version: 1.2.0
213
+ signing_key:
214
+ specification_version: 2
215
+ summary: Lean and RESTful interface to CouchDB.
216
+ test_files: []
217
+