mattetti-couchrest 0.2

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 (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,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: mattetti-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
+