ripple 0.6.1 → 0.7.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 (110) hide show
  1. data/Rakefile +61 -48
  2. data/lib/ripple.rb +5 -1
  3. data/lib/ripple/core_ext/casting.rb +3 -0
  4. data/lib/ripple/document.rb +6 -2
  5. data/lib/ripple/document/associations.rb +154 -0
  6. data/lib/ripple/document/{persistence/callbacks.rb → associations/embedded.rb} +20 -24
  7. data/lib/ripple/document/associations/instantiators.rb +41 -0
  8. data/lib/{riak/util/translation.rb → ripple/document/associations/linked.rb} +14 -11
  9. data/lib/ripple/document/associations/many.rb +52 -0
  10. data/lib/ripple/document/associations/many_embedded_proxy.rb +49 -0
  11. data/lib/{riak/i18n.rb → ripple/document/associations/one.rb} +18 -2
  12. data/lib/ripple/document/associations/one_embedded_proxy.rb +41 -0
  13. data/lib/ripple/document/associations/proxy.rb +125 -0
  14. data/lib/ripple/document/attribute_methods.rb +8 -1
  15. data/lib/ripple/document/attribute_methods/read.rb +4 -0
  16. data/lib/ripple/document/attribute_methods/write.rb +4 -0
  17. data/lib/ripple/document/bucket_access.rb +1 -1
  18. data/lib/ripple/document/callbacks.rb +75 -0
  19. data/lib/ripple/document/finders.rb +50 -3
  20. data/lib/ripple/document/persistence.rb +14 -6
  21. data/lib/ripple/document/validations.rb +35 -7
  22. data/lib/ripple/document/validations/associated_validator.rb +37 -0
  23. data/lib/ripple/embedded_document.rb +8 -2
  24. data/lib/{riak/map_reduce_error.rb → ripple/embedded_document/conversion.rb} +19 -5
  25. data/lib/{riak/invalid_response.rb → ripple/embedded_document/finders.rb} +17 -8
  26. data/lib/ripple/embedded_document/persistence.rb +75 -13
  27. data/lib/ripple/locale/en.yml +7 -1
  28. data/{spec/riak/net_http_backend_spec.rb → lib/ripple/railtie.rb} +17 -13
  29. data/spec/fixtures/config.yml +3 -0
  30. data/spec/integration/ripple/associations_spec.rb +81 -0
  31. data/spec/integration/ripple/persistence_spec.rb +54 -0
  32. data/spec/ripple/associations/many_embedded_proxy_spec.rb +124 -0
  33. data/spec/ripple/associations/one_embedded_proxy_spec.rb +130 -0
  34. data/spec/ripple/associations/proxy_spec.rb +78 -0
  35. data/spec/ripple/associations_spec.rb +111 -0
  36. data/spec/ripple/attribute_methods_spec.rb +37 -16
  37. data/spec/ripple/bucket_access_spec.rb +3 -14
  38. data/spec/ripple/callbacks_spec.rb +53 -9
  39. data/spec/ripple/document_spec.rb +22 -6
  40. data/spec/ripple/embedded_document/conversion_spec.rb +35 -0
  41. data/spec/{riak/headers_spec.rb → ripple/embedded_document/finders_spec.rb} +17 -14
  42. data/spec/ripple/embedded_document/persistence_spec.rb +86 -0
  43. data/spec/ripple/embedded_document_spec.rb +1 -26
  44. data/spec/ripple/finders_spec.rb +66 -30
  45. data/spec/ripple/persistence_spec.rb +33 -21
  46. data/spec/ripple/properties_spec.rb +1 -7
  47. data/spec/ripple/ripple_spec.rb +10 -0
  48. data/spec/ripple/timestamps_spec.rb +12 -19
  49. data/spec/ripple/validations_spec.rb +48 -6
  50. data/spec/spec_helper.rb +4 -10
  51. data/spec/support/associations/proxies.rb +16 -0
  52. data/spec/support/integration.rb +4 -0
  53. data/spec/support/mocks.rb +3 -0
  54. data/spec/support/models/address.rb +8 -0
  55. data/spec/support/models/box.rb +6 -0
  56. data/spec/support/models/cardboard_box.rb +3 -0
  57. data/spec/support/models/clock.rb +6 -0
  58. data/spec/support/models/customer.rb +4 -0
  59. data/spec/support/models/email.rb +4 -0
  60. data/spec/support/models/family.rb +14 -0
  61. data/spec/support/models/favorite.rb +4 -0
  62. data/spec/support/models/invoice.rb +6 -0
  63. data/spec/support/models/late_invoice.rb +3 -0
  64. data/spec/support/models/note.rb +4 -0
  65. data/spec/support/models/page.rb +4 -0
  66. data/spec/support/models/paid_invoice.rb +4 -0
  67. data/spec/support/models/tree.rb +3 -0
  68. data/spec/support/models/user.rb +6 -0
  69. data/spec/support/models/widget.rb +6 -0
  70. metadata +111 -138
  71. data/.document +0 -5
  72. data/.gitignore +0 -26
  73. data/CONTRIBUTORS.textile +0 -5
  74. data/LICENSE +0 -13
  75. data/README.textile +0 -128
  76. data/RELEASE_NOTES.textile +0 -68
  77. data/VERSION +0 -1
  78. data/lib/riak.rb +0 -46
  79. data/lib/riak/bucket.rb +0 -157
  80. data/lib/riak/client.rb +0 -139
  81. data/lib/riak/client/curb_backend.rb +0 -82
  82. data/lib/riak/client/http_backend.rb +0 -209
  83. data/lib/riak/client/net_http_backend.rb +0 -49
  84. data/lib/riak/failed_request.rb +0 -37
  85. data/lib/riak/link.rb +0 -73
  86. data/lib/riak/locale/en.yml +0 -37
  87. data/lib/riak/map_reduce.rb +0 -248
  88. data/lib/riak/robject.rb +0 -258
  89. data/lib/riak/util/escape.rb +0 -12
  90. data/lib/riak/util/fiber1.8.rb +0 -48
  91. data/lib/riak/util/headers.rb +0 -44
  92. data/lib/riak/util/multipart.rb +0 -52
  93. data/lib/riak/walk_spec.rb +0 -117
  94. data/ripple.gemspec +0 -169
  95. data/spec/fixtures/cat.jpg +0 -0
  96. data/spec/fixtures/multipart-blank.txt +0 -7
  97. data/spec/fixtures/multipart-with-body.txt +0 -16
  98. data/spec/riak/bucket_spec.rb +0 -230
  99. data/spec/riak/client_spec.rb +0 -174
  100. data/spec/riak/curb_backend_spec.rb +0 -50
  101. data/spec/riak/escape_spec.rb +0 -17
  102. data/spec/riak/http_backend_spec.rb +0 -131
  103. data/spec/riak/link_spec.rb +0 -82
  104. data/spec/riak/map_reduce_spec.rb +0 -352
  105. data/spec/riak/multipart_spec.rb +0 -36
  106. data/spec/riak/object_spec.rb +0 -532
  107. data/spec/riak/walk_spec_spec.rb +0 -208
  108. data/spec/spec.opts +0 -1
  109. data/spec/support/http_backend_implementation_examples.rb +0 -215
  110. data/spec/support/mock_server.rb +0 -58
@@ -1,12 +0,0 @@
1
- module Riak
2
- module Util
3
- module Escape
4
- # URI-escapes bucket or key names that may contain slashes for use in URLs.
5
- # @param [String] bucket_or_key the bucket or key name
6
- # @return [String] the escaped path segment
7
- def escape(bucket_or_key)
8
- URI.escape(bucket_or_key).gsub("/", "%2F")
9
- end
10
- end
11
- end
12
- end
@@ -1,48 +0,0 @@
1
- # Poor Man's Fiber (API compatible Thread based Fiber implementation for Ruby 1.8)
2
- # (c) 2008 Aman Gupta (tmm1)
3
-
4
- unless defined? Fiber
5
- require 'thread'
6
-
7
- class FiberError < StandardError; end
8
-
9
- class Fiber
10
- def initialize
11
- raise ArgumentError, 'new Fiber requires a block' unless block_given?
12
-
13
- @yield = Queue.new
14
- @resume = Queue.new
15
-
16
- @thread = Thread.new{ @yield.push [ *yield(*@resume.pop) ] }
17
- @thread.abort_on_exception = true
18
- @thread[:fiber] = self
19
- end
20
- attr_reader :thread
21
-
22
- def resume *args
23
- raise FiberError, 'dead fiber called' unless @thread.alive?
24
- @resume.push(args)
25
- result = @yield.pop
26
- result.size > 1 ? result : result.first
27
- end
28
-
29
- def yield *args
30
- @yield.push(args)
31
- result = @resume.pop
32
- result.size > 1 ? result : result.first
33
- end
34
-
35
- def self.yield *args
36
- raise FiberError, "can't yield from root fiber" unless fiber = Thread.current[:fiber]
37
- fiber.yield(*args)
38
- end
39
-
40
- def self.current
41
- Thread.current[:fiber] or raise FiberError, 'not inside a fiber'
42
- end
43
-
44
- def inspect
45
- "#<#{self.class}:0x#{self.object_id.to_s(16)}>"
46
- end
47
- end
48
- end
@@ -1,44 +0,0 @@
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 'riak'
15
-
16
- module Riak
17
- module Util
18
- # Represents headers from an HTTP response
19
- class Headers
20
- include Net::HTTPHeader
21
-
22
- def initialize
23
- initialize_http_header({})
24
- end
25
-
26
- # Parse a single header line into its key and value
27
- # @param [String] chunk a single header line
28
- def self.parse(chunk)
29
- line = chunk.strip
30
- # thanks Net::HTTPResponse
31
- return [nil,nil] if chunk =~ /\AHTTP(?:\/(\d+\.\d+))?\s+(\d\d\d)\s*(.*)\z/in
32
- m = /\A([^:]+):\s*/.match(line)
33
- [m[1], m.post_match] rescue [nil, nil]
34
- end
35
-
36
- # Parses a header line and adds it to the header collection
37
- # @param [String] chunk a single header line
38
- def parse(chunk)
39
- key, value = self.class.parse(chunk)
40
- add_field(key, value) if key && value
41
- end
42
- end
43
- end
44
- end
@@ -1,52 +0,0 @@
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 'riak'
15
-
16
- module Riak
17
- module Util
18
- # Utility methods for handling multipart/mixed responses
19
- module Multipart
20
- extend self
21
- # Parses a multipart/mixed body into its constituent parts, including nested multipart/mixed sections
22
- # @param [String] data the multipart body data
23
- # @param [String] boundary the boundary string given in the Content-Type header
24
- def parse(data, boundary)
25
- contents = data.match(/\n--#{Regexp.escape(boundary)}--\n/).pre_match rescue ""
26
- contents.split(/\n--#{Regexp.escape(boundary)}\n/).reject(&:blank?).map do |part|
27
- headers = Headers.new
28
- if md = part.match(/\r?\n\r?\n/)
29
- body = md.post_match
30
- md.pre_match.split(/\r?\n/).each do |line|
31
- headers.parse(line)
32
- end
33
-
34
- if headers["content-type"] =~ /multipart\/mixed/
35
- boundary = extract_boundary(headers.to_hash["content-type"].first)
36
- parse(body, boundary)
37
- else
38
- {:headers => headers.to_hash, :body => body}
39
- end
40
- end
41
- end.compact
42
- end
43
-
44
- # Extracts the boundary string from a Content-Type header that is a multipart type
45
- # @param [String] header_string the Content-Type header
46
- # @return [String] the boundary string separating each part
47
- def extract_boundary(header_string)
48
- $1 if header_string =~ /boundary=([A-Za-z0-9\'()+_,-.\/:=?]+)/
49
- end
50
- end
51
- end
52
- end
@@ -1,117 +0,0 @@
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 'riak'
15
-
16
- module Riak
17
-
18
- # The specification of how to follow links from one object to another in Riak,
19
- # when using the link-walker resource.
20
- # Example link-walking operation:
21
- # GET /riak/artists/REM/albums,_,_/tracks,_,1
22
- # This operation would have two WalkSpecs:
23
- # Riak::WalkSpec.new({:bucket => 'albums'})
24
- # Riak::WalkSpec.new({:bucket => 'tracks', :result => true})
25
- class WalkSpec
26
- include Util::Translation
27
- include Util::Escape
28
-
29
- # @return [String] The bucket followed links should be restricted to. "_" represents all buckets.
30
- attr_accessor :bucket
31
-
32
- # @return [String] The "riaktag" or "rel" that followed links should be restricted to. "_" represents all tags.
33
- attr_accessor :tag
34
-
35
- # @return [Boolean] Whether objects should be returned from this phase of link walking. Default is false.
36
- attr_accessor :keep
37
-
38
- # Normalize a list of walk specs into WalkSpec objects.
39
- def self.normalize(*params)
40
- params.flatten!
41
- specs = []
42
- while params.length > 0
43
- param = params.shift
44
- case param
45
- when Hash
46
- specs << new(param)
47
- when WalkSpec
48
- specs << param
49
- else
50
- if params.length >= 2
51
- specs << new(param, params.shift, params.shift)
52
- else
53
- raise ArgumentError, t("too_few_arguments", :params => params.inspect)
54
- end
55
- end
56
- end
57
- specs
58
- end
59
-
60
- # Creates a walk-spec for use in finding other objects in Riak.
61
- # @overload initialize(hash)
62
- # Creates a walk-spec from a hash.
63
- # @param [Hash] hash options for the walk-spec
64
- # @option hash [String] :bucket ("_") the bucket the links should point to (default '_' is all)
65
- # @option hash [String] :tag ("_") the tag to filter links by (default '_' is all)
66
- # @option hash [Boolean] :keep (false) whether to return results from following this link specification
67
- # @overload initialize(bucket, tag, keep)
68
- # Creates a walk-spec from a bucket-tag-result triple.
69
- # @param [String] bucket the bucket the links should point to (default '_' is all)
70
- # @param [String] tag the tag to filter links by (default '_' is all)
71
- # @param [Boolean] keep whether to return results from following this link specification
72
- # @see {Riak::RObject#walk}
73
- def initialize(*args)
74
- args.flatten!
75
- case args.size
76
- when 1
77
- hash = args.first
78
- raise ArgumentError, t("hash_type", :hash => hash.inspect) unless Hash === hash
79
- assign(hash[:bucket], hash[:tag], hash[:keep])
80
- when 3
81
- assign(*args)
82
- else
83
- raise ArgumentError, t("wrong_argument_count_walk_spec")
84
- end
85
- end
86
-
87
- # Converts the walk-spec into the form required by the link-walker resource URL
88
- def to_s
89
- b = @bucket && escape(@bucket) || '_'
90
- t = @tag && escape(@tag) || '_'
91
- "#{b},#{t},#{@keep ? '1' : '_'}"
92
- end
93
-
94
- def ==(other)
95
- other.is_a?(WalkSpec) && other.bucket == bucket && other.tag == tag && other.keep == keep
96
- end
97
-
98
- def ===(other)
99
- self == other || case other
100
- when WalkSpec
101
- other.keep == keep &&
102
- (bucket == "_" || bucket == other.bucket) &&
103
- (tag == "_" || tag == other.tag)
104
- when Link
105
- (bucket == "_" || bucket == other.url.split("/")[2]) &&
106
- (tag == "_" || tag == other.rel)
107
- end
108
- end
109
-
110
- private
111
- def assign(bucket, tag, result)
112
- @bucket = bucket || "_"
113
- @tag = tag || "_"
114
- @keep = result || false
115
- end
116
- end
117
- end
@@ -1,169 +0,0 @@
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.6.1"
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-03-17}
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
- "CONTRIBUTORS.textile",
23
- "LICENSE",
24
- "README.textile",
25
- "RELEASE_NOTES.textile",
26
- "Rakefile",
27
- "VERSION",
28
- "lib/riak.rb",
29
- "lib/riak/bucket.rb",
30
- "lib/riak/client.rb",
31
- "lib/riak/client/curb_backend.rb",
32
- "lib/riak/client/http_backend.rb",
33
- "lib/riak/client/net_http_backend.rb",
34
- "lib/riak/failed_request.rb",
35
- "lib/riak/i18n.rb",
36
- "lib/riak/invalid_response.rb",
37
- "lib/riak/link.rb",
38
- "lib/riak/locale/en.yml",
39
- "lib/riak/map_reduce.rb",
40
- "lib/riak/map_reduce_error.rb",
41
- "lib/riak/robject.rb",
42
- "lib/riak/util/escape.rb",
43
- "lib/riak/util/fiber1.8.rb",
44
- "lib/riak/util/headers.rb",
45
- "lib/riak/util/multipart.rb",
46
- "lib/riak/util/translation.rb",
47
- "lib/riak/walk_spec.rb",
48
- "lib/ripple.rb",
49
- "lib/ripple/core_ext/casting.rb",
50
- "lib/ripple/document.rb",
51
- "lib/ripple/document/attribute_methods.rb",
52
- "lib/ripple/document/attribute_methods/dirty.rb",
53
- "lib/ripple/document/attribute_methods/query.rb",
54
- "lib/ripple/document/attribute_methods/read.rb",
55
- "lib/ripple/document/attribute_methods/write.rb",
56
- "lib/ripple/document/bucket_access.rb",
57
- "lib/ripple/document/finders.rb",
58
- "lib/ripple/document/persistence.rb",
59
- "lib/ripple/document/persistence/callbacks.rb",
60
- "lib/ripple/document/properties.rb",
61
- "lib/ripple/document/timestamps.rb",
62
- "lib/ripple/document/validations.rb",
63
- "lib/ripple/embedded_document.rb",
64
- "lib/ripple/embedded_document/persistence.rb",
65
- "lib/ripple/i18n.rb",
66
- "lib/ripple/locale/en.yml",
67
- "lib/ripple/property_type_mismatch.rb",
68
- "lib/ripple/translation.rb",
69
- "ripple.gemspec",
70
- "spec/fixtures/cat.jpg",
71
- "spec/fixtures/multipart-blank.txt",
72
- "spec/fixtures/multipart-with-body.txt",
73
- "spec/riak/bucket_spec.rb",
74
- "spec/riak/client_spec.rb",
75
- "spec/riak/curb_backend_spec.rb",
76
- "spec/riak/escape_spec.rb",
77
- "spec/riak/headers_spec.rb",
78
- "spec/riak/http_backend_spec.rb",
79
- "spec/riak/link_spec.rb",
80
- "spec/riak/map_reduce_spec.rb",
81
- "spec/riak/multipart_spec.rb",
82
- "spec/riak/net_http_backend_spec.rb",
83
- "spec/riak/object_spec.rb",
84
- "spec/riak/walk_spec_spec.rb",
85
- "spec/ripple/attribute_methods_spec.rb",
86
- "spec/ripple/bucket_access_spec.rb",
87
- "spec/ripple/callbacks_spec.rb",
88
- "spec/ripple/core_ext_spec.rb",
89
- "spec/ripple/document_spec.rb",
90
- "spec/ripple/embedded_document_spec.rb",
91
- "spec/ripple/finders_spec.rb",
92
- "spec/ripple/persistence_spec.rb",
93
- "spec/ripple/properties_spec.rb",
94
- "spec/ripple/ripple_spec.rb",
95
- "spec/ripple/timestamps_spec.rb",
96
- "spec/ripple/validations_spec.rb",
97
- "spec/spec.opts",
98
- "spec/spec_helper.rb",
99
- "spec/support/http_backend_implementation_examples.rb",
100
- "spec/support/mock_server.rb"
101
- ]
102
- s.homepage = %q{http://seancribbs.github.com/ripple}
103
- s.rdoc_options = ["--charset=UTF-8"]
104
- s.require_paths = ["lib"]
105
- s.requirements = ["`gem install curb` for better HTTP performance"]
106
- s.rubygems_version = %q{1.3.6}
107
- s.summary = %q{ripple is a rich Ruby client for Riak, Basho's distributed database.}
108
- s.test_files = [
109
- "spec/riak/bucket_spec.rb",
110
- "spec/riak/client_spec.rb",
111
- "spec/riak/curb_backend_spec.rb",
112
- "spec/riak/escape_spec.rb",
113
- "spec/riak/headers_spec.rb",
114
- "spec/riak/http_backend_spec.rb",
115
- "spec/riak/link_spec.rb",
116
- "spec/riak/map_reduce_spec.rb",
117
- "spec/riak/multipart_spec.rb",
118
- "spec/riak/net_http_backend_spec.rb",
119
- "spec/riak/object_spec.rb",
120
- "spec/riak/walk_spec_spec.rb",
121
- "spec/ripple/attribute_methods_spec.rb",
122
- "spec/ripple/bucket_access_spec.rb",
123
- "spec/ripple/callbacks_spec.rb",
124
- "spec/ripple/core_ext_spec.rb",
125
- "spec/ripple/document_spec.rb",
126
- "spec/ripple/embedded_document_spec.rb",
127
- "spec/ripple/finders_spec.rb",
128
- "spec/ripple/persistence_spec.rb",
129
- "spec/ripple/properties_spec.rb",
130
- "spec/ripple/ripple_spec.rb",
131
- "spec/ripple/timestamps_spec.rb",
132
- "spec/ripple/validations_spec.rb",
133
- "spec/spec_helper.rb",
134
- "spec/support/http_backend_implementation_examples.rb",
135
- "spec/support/mock_server.rb"
136
- ]
137
-
138
- if s.respond_to? :specification_version then
139
- current_version = Gem::Specification::CURRENT_SPECIFICATION_VERSION
140
- s.specification_version = 3
141
-
142
- if Gem::Version.new(Gem::RubyGemsVersion) >= Gem::Version.new('1.2.0') then
143
- s.add_development_dependency(%q<rspec>, [">= 1.3"])
144
- s.add_development_dependency(%q<fakeweb>, [">= 1.2"])
145
- s.add_development_dependency(%q<rack>, [">= 1.0"])
146
- s.add_development_dependency(%q<yard>, [">= 0.5.2"])
147
- s.add_development_dependency(%q<curb>, [">= 0.6"])
148
- s.add_runtime_dependency(%q<activesupport>, ["~> 3.0.0.beta"])
149
- s.add_runtime_dependency(%q<activemodel>, ["~> 3.0.0.beta"])
150
- else
151
- s.add_dependency(%q<rspec>, [">= 1.3"])
152
- s.add_dependency(%q<fakeweb>, [">= 1.2"])
153
- s.add_dependency(%q<rack>, [">= 1.0"])
154
- s.add_dependency(%q<yard>, [">= 0.5.2"])
155
- s.add_dependency(%q<curb>, [">= 0.6"])
156
- s.add_dependency(%q<activesupport>, ["~> 3.0.0.beta"])
157
- s.add_dependency(%q<activemodel>, ["~> 3.0.0.beta"])
158
- end
159
- else
160
- s.add_dependency(%q<rspec>, [">= 1.3"])
161
- s.add_dependency(%q<fakeweb>, [">= 1.2"])
162
- s.add_dependency(%q<rack>, [">= 1.0"])
163
- s.add_dependency(%q<yard>, [">= 0.5.2"])
164
- s.add_dependency(%q<curb>, [">= 0.6"])
165
- s.add_dependency(%q<activesupport>, ["~> 3.0.0.beta"])
166
- s.add_dependency(%q<activemodel>, ["~> 3.0.0.beta"])
167
- end
168
- end
169
-