ripple 0.5.0

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 (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
+