ripple 0.5.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (75) hide show
  1. data/.document +5 -0
  2. data/.gitignore +26 -0
  3. data/LICENSE +13 -0
  4. data/README.textile +126 -0
  5. data/RELEASE_NOTES.textile +24 -0
  6. data/Rakefile +61 -0
  7. data/VERSION +1 -0
  8. data/lib/riak.rb +45 -0
  9. data/lib/riak/bucket.rb +105 -0
  10. data/lib/riak/client.rb +138 -0
  11. data/lib/riak/client/curb_backend.rb +63 -0
  12. data/lib/riak/client/http_backend.rb +209 -0
  13. data/lib/riak/client/net_http_backend.rb +49 -0
  14. data/lib/riak/failed_request.rb +37 -0
  15. data/lib/riak/i18n.rb +15 -0
  16. data/lib/riak/invalid_response.rb +25 -0
  17. data/lib/riak/link.rb +54 -0
  18. data/lib/riak/locale/en.yml +37 -0
  19. data/lib/riak/map_reduce.rb +240 -0
  20. data/lib/riak/map_reduce_error.rb +20 -0
  21. data/lib/riak/robject.rb +234 -0
  22. data/lib/riak/util/headers.rb +44 -0
  23. data/lib/riak/util/multipart.rb +52 -0
  24. data/lib/riak/util/translation.rb +29 -0
  25. data/lib/riak/walk_spec.rb +113 -0
  26. data/lib/ripple.rb +48 -0
  27. data/lib/ripple/core_ext/casting.rb +96 -0
  28. data/lib/ripple/document.rb +60 -0
  29. data/lib/ripple/document/attribute_methods.rb +111 -0
  30. data/lib/ripple/document/attribute_methods/dirty.rb +52 -0
  31. data/lib/ripple/document/attribute_methods/query.rb +49 -0
  32. data/lib/ripple/document/attribute_methods/read.rb +38 -0
  33. data/lib/ripple/document/attribute_methods/write.rb +36 -0
  34. data/lib/ripple/document/bucket_access.rb +38 -0
  35. data/lib/ripple/document/finders.rb +84 -0
  36. data/lib/ripple/document/persistence.rb +93 -0
  37. data/lib/ripple/document/persistence/callbacks.rb +48 -0
  38. data/lib/ripple/document/properties.rb +85 -0
  39. data/lib/ripple/document/validations.rb +44 -0
  40. data/lib/ripple/embedded_document.rb +38 -0
  41. data/lib/ripple/embedded_document/persistence.rb +46 -0
  42. data/lib/ripple/i18n.rb +15 -0
  43. data/lib/ripple/locale/en.yml +16 -0
  44. data/lib/ripple/property_type_mismatch.rb +23 -0
  45. data/lib/ripple/translation.rb +24 -0
  46. data/ripple.gemspec +159 -0
  47. data/spec/fixtures/cat.jpg +0 -0
  48. data/spec/fixtures/multipart-blank.txt +7 -0
  49. data/spec/fixtures/multipart-with-body.txt +16 -0
  50. data/spec/riak/bucket_spec.rb +141 -0
  51. data/spec/riak/client_spec.rb +169 -0
  52. data/spec/riak/curb_backend_spec.rb +50 -0
  53. data/spec/riak/headers_spec.rb +34 -0
  54. data/spec/riak/http_backend_spec.rb +136 -0
  55. data/spec/riak/link_spec.rb +50 -0
  56. data/spec/riak/map_reduce_spec.rb +347 -0
  57. data/spec/riak/multipart_spec.rb +36 -0
  58. data/spec/riak/net_http_backend_spec.rb +28 -0
  59. data/spec/riak/object_spec.rb +444 -0
  60. data/spec/riak/walk_spec_spec.rb +208 -0
  61. data/spec/ripple/attribute_methods_spec.rb +149 -0
  62. data/spec/ripple/bucket_access_spec.rb +48 -0
  63. data/spec/ripple/callbacks_spec.rb +86 -0
  64. data/spec/ripple/document_spec.rb +35 -0
  65. data/spec/ripple/embedded_document_spec.rb +52 -0
  66. data/spec/ripple/finders_spec.rb +146 -0
  67. data/spec/ripple/persistence_spec.rb +89 -0
  68. data/spec/ripple/properties_spec.rb +195 -0
  69. data/spec/ripple/ripple_spec.rb +43 -0
  70. data/spec/ripple/validations_spec.rb +64 -0
  71. data/spec/spec.opts +1 -0
  72. data/spec/spec_helper.rb +32 -0
  73. data/spec/support/http_backend_implementation_examples.rb +215 -0
  74. data/spec/support/mock_server.rb +58 -0
  75. metadata +221 -0
@@ -0,0 +1,48 @@
1
+ # Copyright 2010 Sean Cribbs, Sonian Inc., and Basho Technologies, Inc.
2
+ #
3
+ # Licensed under the Apache License, Version 2.0 (the "License");
4
+ # you may not use this file except in compliance with the License.
5
+ # You may obtain a copy of the License at
6
+ #
7
+ # http://www.apache.org/licenses/LICENSE-2.0
8
+ #
9
+ # Unless required by applicable law or agreed to in writing, software
10
+ # distributed under the License is distributed on an "AS IS" BASIS,
11
+ # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12
+ # See the License for the specific language governing permissions and
13
+ # limitations under the License.
14
+ require 'ripple'
15
+
16
+ module Ripple
17
+ module Document
18
+ module Persistence
19
+ module Callbacks
20
+ extend ActiveSupport::Concern
21
+
22
+ included do
23
+ extend ActiveModel::Callbacks
24
+ define_model_callbacks :create, :update, :save, :destroy
25
+ end
26
+
27
+ module InstanceMethods
28
+ # @private
29
+ def save
30
+ state = new? ? :create : :update
31
+ run_callbacks(:save) do
32
+ run_callbacks(state) do
33
+ super
34
+ end
35
+ end
36
+ end
37
+
38
+ # @private
39
+ def destroy
40
+ run_callbacks(:destroy) do
41
+ super
42
+ end
43
+ end
44
+ end
45
+ end
46
+ end
47
+ end
48
+ end
@@ -0,0 +1,85 @@
1
+ # Copyright 2010 Sean Cribbs, Sonian Inc., and Basho Technologies, Inc.
2
+ #
3
+ # Licensed under the Apache License, Version 2.0 (the "License");
4
+ # you may not use this file except in compliance with the License.
5
+ # You may obtain a copy of the License at
6
+ #
7
+ # http://www.apache.org/licenses/LICENSE-2.0
8
+ #
9
+ # Unless required by applicable law or agreed to in writing, software
10
+ # distributed under the License is distributed on an "AS IS" BASIS,
11
+ # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12
+ # See the License for the specific language governing permissions and
13
+ # limitations under the License.
14
+ require 'ripple'
15
+ require 'ripple/core_ext/casting'
16
+
17
+ module Ripple
18
+ module Document
19
+ # Adds the ability to declare properties on your Ripple::Document class.
20
+ # Properties will automatically generate accessor (get/set/query) methods and
21
+ # handle type-casting between your Ruby type and JSON-compatible types.
22
+ module Properties
23
+ # @private
24
+ def inherited(subclass)
25
+ super
26
+ subclass.properties.merge!(properties)
27
+ end
28
+
29
+ # @return [Hash] the properties defined on the document
30
+ def properties
31
+ @properties ||= {}.with_indifferent_access
32
+ end
33
+
34
+ def property(key, type, options={})
35
+ prop = Property.new(key, type, options)
36
+ properties[prop.key] = prop
37
+ end
38
+ end
39
+
40
+ # Encapsulates a single property on your Ripple::Document class.
41
+ class Property
42
+ # @return [Symbol] the key of this property in the Document
43
+ attr_reader :key
44
+ # @return [Class] the Ruby type of property.
45
+ attr_reader :type
46
+ # @return [Hash] configuration options
47
+ attr_reader :options
48
+
49
+ # Create a new document property.
50
+ # @param [String, Symbol] key the key of the property
51
+ # @param [Class] type the Ruby type of the property. Use {Boolean} for true or false types.
52
+ # @param [Hash] options configuration options
53
+ # @option options [Object, Proc] :default (nil) a default value for the property, or a lambda to evaluate when providing the default.
54
+ def initialize(key, type, options={})
55
+ @options = options.to_options
56
+ @key = key.to_sym
57
+ @type = type
58
+ end
59
+
60
+ # @return [Object] The default value for this property if defined, or nil.
61
+ def default
62
+ if default = options[:default]
63
+ type_cast(default.respond_to?(:call) ? default.call : default)
64
+ end
65
+ end
66
+
67
+ # @return [Hash] options appropriate for the validates class method
68
+ def validation_options
69
+ @options.dup.except(:default)
70
+ end
71
+
72
+ # Attempt to coerce the passed value into this property's type
73
+ # @param [Object] value the value to coerce
74
+ # @return [Object] the value coerced into this property's type
75
+ # @raise [PropertyTypeMismatch] if the value cannot be coerced into the property's type
76
+ def type_cast(value)
77
+ if @type.respond_to?(:ripple_cast)
78
+ @type.ripple_cast(value)
79
+ else
80
+ value
81
+ end
82
+ end
83
+ end
84
+ end
85
+ end
@@ -0,0 +1,44 @@
1
+ # Copyright 2010 Sean Cribbs, Sonian Inc., and Basho Technologies, Inc.
2
+ #
3
+ # Licensed under the Apache License, Version 2.0 (the "License");
4
+ # you may not use this file except in compliance with the License.
5
+ # You may obtain a copy of the License at
6
+ #
7
+ # http://www.apache.org/licenses/LICENSE-2.0
8
+ #
9
+ # Unless required by applicable law or agreed to in writing, software
10
+ # distributed under the License is distributed on an "AS IS" BASIS,
11
+ # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12
+ # See the License for the specific language governing permissions and
13
+ # limitations under the License.
14
+ require 'ripple'
15
+
16
+ module Ripple
17
+ module Document
18
+ module Validations
19
+ extend ActiveSupport::Concern
20
+ include ActiveModel::Validations
21
+
22
+ module ClassMethods
23
+ # @private
24
+ def property(key, type, options={})
25
+ prop = super
26
+ validates key, prop.validation_options unless prop.validation_options.blank?
27
+ end
28
+ end
29
+
30
+ module InstanceMethods
31
+ # @private
32
+ def save
33
+ valid? && super
34
+ end
35
+
36
+ # @private
37
+ def valid?
38
+ @_on_validate = new? ? :create : :update
39
+ super
40
+ end
41
+ end
42
+ end
43
+ end
44
+ end
@@ -0,0 +1,38 @@
1
+ # Copyright 2010 Sean Cribbs, Sonian Inc., and Basho Technologies, Inc.
2
+ #
3
+ # Licensed under the Apache License, Version 2.0 (the "License");
4
+ # you may not use this file except in compliance with the License.
5
+ # You may obtain a copy of the License at
6
+ #
7
+ # http://www.apache.org/licenses/LICENSE-2.0
8
+ #
9
+ # Unless required by applicable law or agreed to in writing, software
10
+ # distributed under the License is distributed on an "AS IS" BASIS,
11
+ # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12
+ # See the License for the specific language governing permissions and
13
+ # limitations under the License.
14
+ require 'ripple'
15
+
16
+ module Ripple
17
+ module EmbeddedDocument
18
+ extend ActiveSupport::Concern
19
+ extend ActiveSupport::Autoload
20
+
21
+ autoload :Persistence
22
+ include Translation
23
+
24
+ included do
25
+ extend ActiveModel::Naming
26
+ extend Document::Properties
27
+ include Persistence
28
+ include Document::AttributeMethods
29
+ include Document::Validations
30
+ end
31
+
32
+ module ClassMethods
33
+ def embeddable?
34
+ !included_modules.include?(Document)
35
+ end
36
+ end
37
+ end
38
+ end
@@ -0,0 +1,46 @@
1
+ # Copyright 2010 Sean Cribbs, Sonian Inc., and Basho Technologies, Inc.
2
+ #
3
+ # Licensed under the Apache License, Version 2.0 (the "License");
4
+ # you may not use this file except in compliance with the License.
5
+ # You may obtain a copy of the License at
6
+ #
7
+ # http://www.apache.org/licenses/LICENSE-2.0
8
+ #
9
+ # Unless required by applicable law or agreed to in writing, software
10
+ # distributed under the License is distributed on an "AS IS" BASIS,
11
+ # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12
+ # See the License for the specific language governing permissions and
13
+ # limitations under the License.
14
+ require 'ripple'
15
+
16
+ module Ripple
17
+ module EmbeddedDocument
18
+ module Persistence
19
+ extend ActiveSupport::Concern
20
+
21
+ included do
22
+ attr_accessor :_root_document
23
+ end
24
+
25
+ module InstanceMethods
26
+ # Delegates to the root document
27
+ def new?
28
+ if @_root_document
29
+ @_root_document.new?
30
+ else
31
+ super
32
+ end
33
+ end
34
+
35
+ # Delegates to the root document
36
+ def save
37
+ if @_root_document
38
+ @_root_document.save
39
+ else
40
+ super
41
+ end
42
+ end
43
+ end
44
+ end
45
+ end
46
+ end
@@ -0,0 +1,15 @@
1
+ # Copyright 2010 Sean Cribbs, Sonian Inc., and Basho Technologies, Inc.
2
+ #
3
+ # Licensed under the Apache License, Version 2.0 (the "License");
4
+ # you may not use this file except in compliance with the License.
5
+ # You may obtain a copy of the License at
6
+ #
7
+ # http://www.apache.org/licenses/LICENSE-2.0
8
+ #
9
+ # Unless required by applicable law or agreed to in writing, software
10
+ # distributed under the License is distributed on an "AS IS" BASIS,
11
+ # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12
+ # See the License for the specific language governing permissions and
13
+ # limitations under the License.
14
+ require 'active_support/i18n'
15
+ I18n.load_path << File.expand_path("../locale/en.yml", __FILE__)
@@ -0,0 +1,16 @@
1
+ # Copyright 2010 Sean Cribbs, Sonian Inc., and Basho Technologies, Inc.
2
+ #
3
+ # Licensed under the Apache License, Version 2.0 (the "License");
4
+ # you may not use this file except in compliance with the License.
5
+ # You may obtain a copy of the License at
6
+ #
7
+ # http://www.apache.org/licenses/LICENSE-2.0
8
+ #
9
+ # Unless required by applicable law or agreed to in writing, software
10
+ # distributed under the License is distributed on an "AS IS" BASIS,
11
+ # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12
+ # See the License for the specific language governing permissions and
13
+ # limitations under the License.
14
+ en:
15
+ ripple:
16
+ property_type_mismatch: "Cannot cast {{value}} into a {{class}}"
@@ -0,0 +1,23 @@
1
+ # Copyright 2010 Sean Cribbs, Sonian Inc., and Basho Technologies, Inc.
2
+ #
3
+ # Licensed under the Apache License, Version 2.0 (the "License");
4
+ # you may not use this file except in compliance with the License.
5
+ # You may obtain a copy of the License at
6
+ #
7
+ # http://www.apache.org/licenses/LICENSE-2.0
8
+ #
9
+ # Unless required by applicable law or agreed to in writing, software
10
+ # distributed under the License is distributed on an "AS IS" BASIS,
11
+ # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12
+ # See the License for the specific language governing permissions and
13
+ # limitations under the License.
14
+ require 'ripple'
15
+
16
+ module Ripple
17
+ class PropertyTypeMismatch < StandardError
18
+ include Translation
19
+ def initialize(klass, value)
20
+ super t("property_type_mismatch", :class => klass, :value => value.inspect)
21
+ end
22
+ end
23
+ end
@@ -0,0 +1,24 @@
1
+ # Copyright 2010 Sean Cribbs, Sonian Inc., and Basho Technologies, Inc.
2
+ #
3
+ # Licensed under the Apache License, Version 2.0 (the "License");
4
+ # you may not use this file except in compliance with the License.
5
+ # You may obtain a copy of the License at
6
+ #
7
+ # http://www.apache.org/licenses/LICENSE-2.0
8
+ #
9
+ # Unless required by applicable law or agreed to in writing, software
10
+ # distributed under the License is distributed on an "AS IS" BASIS,
11
+ # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12
+ # See the License for the specific language governing permissions and
13
+ # limitations under the License.
14
+ require 'ripple'
15
+
16
+ module Ripple
17
+ module Translation
18
+ include Riak::Util::Translation
19
+
20
+ def i18n_scope
21
+ :ripple
22
+ end
23
+ end
24
+ end
@@ -0,0 +1,159 @@
1
+ # Generated by jeweler
2
+ # DO NOT EDIT THIS FILE DIRECTLY
3
+ # Instead, edit Jeweler::Tasks in Rakefile, and run the gemspec command
4
+ # -*- encoding: utf-8 -*-
5
+
6
+ Gem::Specification.new do |s|
7
+ s.name = %q{ripple}
8
+ s.version = "0.5.0"
9
+
10
+ s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
11
+ s.authors = ["Sean Cribbs"]
12
+ s.date = %q{2010-02-10}
13
+ s.description = %q{ripple is a rich Ruby client for Riak, Basho's distributed database. It includes all the basics of accessing and manipulating Riak buckets and objects, and an object mapper library for building a rich domain on top of Riak.}
14
+ s.email = %q{seancribbs@gmail.com}
15
+ s.extra_rdoc_files = [
16
+ "LICENSE",
17
+ "README.textile"
18
+ ]
19
+ s.files = [
20
+ ".document",
21
+ ".gitignore",
22
+ "LICENSE",
23
+ "README.textile",
24
+ "RELEASE_NOTES.textile",
25
+ "Rakefile",
26
+ "VERSION",
27
+ "lib/riak.rb",
28
+ "lib/riak/bucket.rb",
29
+ "lib/riak/client.rb",
30
+ "lib/riak/client/curb_backend.rb",
31
+ "lib/riak/client/http_backend.rb",
32
+ "lib/riak/client/net_http_backend.rb",
33
+ "lib/riak/failed_request.rb",
34
+ "lib/riak/i18n.rb",
35
+ "lib/riak/invalid_response.rb",
36
+ "lib/riak/link.rb",
37
+ "lib/riak/locale/en.yml",
38
+ "lib/riak/map_reduce.rb",
39
+ "lib/riak/map_reduce_error.rb",
40
+ "lib/riak/robject.rb",
41
+ "lib/riak/util/headers.rb",
42
+ "lib/riak/util/multipart.rb",
43
+ "lib/riak/util/translation.rb",
44
+ "lib/riak/walk_spec.rb",
45
+ "lib/ripple.rb",
46
+ "lib/ripple/core_ext/casting.rb",
47
+ "lib/ripple/document.rb",
48
+ "lib/ripple/document/attribute_methods.rb",
49
+ "lib/ripple/document/attribute_methods/dirty.rb",
50
+ "lib/ripple/document/attribute_methods/query.rb",
51
+ "lib/ripple/document/attribute_methods/read.rb",
52
+ "lib/ripple/document/attribute_methods/write.rb",
53
+ "lib/ripple/document/bucket_access.rb",
54
+ "lib/ripple/document/finders.rb",
55
+ "lib/ripple/document/persistence.rb",
56
+ "lib/ripple/document/persistence/callbacks.rb",
57
+ "lib/ripple/document/properties.rb",
58
+ "lib/ripple/document/validations.rb",
59
+ "lib/ripple/embedded_document.rb",
60
+ "lib/ripple/embedded_document/persistence.rb",
61
+ "lib/ripple/i18n.rb",
62
+ "lib/ripple/locale/en.yml",
63
+ "lib/ripple/property_type_mismatch.rb",
64
+ "lib/ripple/translation.rb",
65
+ "ripple.gemspec",
66
+ "spec/fixtures/cat.jpg",
67
+ "spec/fixtures/multipart-blank.txt",
68
+ "spec/fixtures/multipart-with-body.txt",
69
+ "spec/riak/bucket_spec.rb",
70
+ "spec/riak/client_spec.rb",
71
+ "spec/riak/curb_backend_spec.rb",
72
+ "spec/riak/headers_spec.rb",
73
+ "spec/riak/http_backend_spec.rb",
74
+ "spec/riak/link_spec.rb",
75
+ "spec/riak/map_reduce_spec.rb",
76
+ "spec/riak/multipart_spec.rb",
77
+ "spec/riak/net_http_backend_spec.rb",
78
+ "spec/riak/object_spec.rb",
79
+ "spec/riak/walk_spec_spec.rb",
80
+ "spec/ripple/attribute_methods_spec.rb",
81
+ "spec/ripple/bucket_access_spec.rb",
82
+ "spec/ripple/callbacks_spec.rb",
83
+ "spec/ripple/document_spec.rb",
84
+ "spec/ripple/embedded_document_spec.rb",
85
+ "spec/ripple/finders_spec.rb",
86
+ "spec/ripple/persistence_spec.rb",
87
+ "spec/ripple/properties_spec.rb",
88
+ "spec/ripple/ripple_spec.rb",
89
+ "spec/ripple/validations_spec.rb",
90
+ "spec/spec.opts",
91
+ "spec/spec_helper.rb",
92
+ "spec/support/http_backend_implementation_examples.rb",
93
+ "spec/support/mock_server.rb"
94
+ ]
95
+ s.homepage = %q{http://seancribbs.github.com/ripple}
96
+ s.rdoc_options = ["--charset=UTF-8"]
97
+ s.require_paths = ["lib"]
98
+ s.requirements = ["`gem install curb` for better HTTP performance"]
99
+ s.rubygems_version = %q{1.3.5}
100
+ s.summary = %q{ripple is a rich Ruby client for Riak, Basho's distributed database.}
101
+ s.test_files = [
102
+ "spec/riak/bucket_spec.rb",
103
+ "spec/riak/client_spec.rb",
104
+ "spec/riak/curb_backend_spec.rb",
105
+ "spec/riak/headers_spec.rb",
106
+ "spec/riak/http_backend_spec.rb",
107
+ "spec/riak/link_spec.rb",
108
+ "spec/riak/map_reduce_spec.rb",
109
+ "spec/riak/multipart_spec.rb",
110
+ "spec/riak/net_http_backend_spec.rb",
111
+ "spec/riak/object_spec.rb",
112
+ "spec/riak/walk_spec_spec.rb",
113
+ "spec/ripple/attribute_methods_spec.rb",
114
+ "spec/ripple/bucket_access_spec.rb",
115
+ "spec/ripple/callbacks_spec.rb",
116
+ "spec/ripple/document_spec.rb",
117
+ "spec/ripple/embedded_document_spec.rb",
118
+ "spec/ripple/finders_spec.rb",
119
+ "spec/ripple/persistence_spec.rb",
120
+ "spec/ripple/properties_spec.rb",
121
+ "spec/ripple/ripple_spec.rb",
122
+ "spec/ripple/validations_spec.rb",
123
+ "spec/spec_helper.rb",
124
+ "spec/support/http_backend_implementation_examples.rb",
125
+ "spec/support/mock_server.rb"
126
+ ]
127
+
128
+ if s.respond_to? :specification_version then
129
+ current_version = Gem::Specification::CURRENT_SPECIFICATION_VERSION
130
+ s.specification_version = 3
131
+
132
+ if Gem::Version.new(Gem::RubyGemsVersion) >= Gem::Version.new('1.2.0') then
133
+ s.add_development_dependency(%q<rspec>, [">= 1.3"])
134
+ s.add_development_dependency(%q<fakeweb>, [">= 1.2"])
135
+ s.add_development_dependency(%q<rack>, [">= 1.0"])
136
+ s.add_development_dependency(%q<yard>, [">= 0.5.2"])
137
+ s.add_development_dependency(%q<curb>, [">= 0.6"])
138
+ s.add_runtime_dependency(%q<activesupport>, ["= 3.0.0.beta"])
139
+ s.add_runtime_dependency(%q<activemodel>, ["= 3.0.0.beta"])
140
+ else
141
+ s.add_dependency(%q<rspec>, [">= 1.3"])
142
+ s.add_dependency(%q<fakeweb>, [">= 1.2"])
143
+ s.add_dependency(%q<rack>, [">= 1.0"])
144
+ s.add_dependency(%q<yard>, [">= 0.5.2"])
145
+ s.add_dependency(%q<curb>, [">= 0.6"])
146
+ s.add_dependency(%q<activesupport>, ["= 3.0.0.beta"])
147
+ s.add_dependency(%q<activemodel>, ["= 3.0.0.beta"])
148
+ end
149
+ else
150
+ s.add_dependency(%q<rspec>, [">= 1.3"])
151
+ s.add_dependency(%q<fakeweb>, [">= 1.2"])
152
+ s.add_dependency(%q<rack>, [">= 1.0"])
153
+ s.add_dependency(%q<yard>, [">= 0.5.2"])
154
+ s.add_dependency(%q<curb>, [">= 0.6"])
155
+ s.add_dependency(%q<activesupport>, ["= 3.0.0.beta"])
156
+ s.add_dependency(%q<activemodel>, ["= 3.0.0.beta"])
157
+ end
158
+ end
159
+