rest-more 0.8.0 → 1.0.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (48) hide show
  1. data/.travis.yml +4 -2
  2. data/CHANGES.md +54 -34
  3. data/Gemfile +3 -1
  4. data/README.md +187 -14
  5. data/Rakefile +1 -1
  6. data/TODO.md +2 -12
  7. data/doc/ToC.md +9 -0
  8. data/doc/dependency.md +4 -0
  9. data/doc/design.md +4 -0
  10. data/doc/rest-graph.md +4 -0
  11. data/doc/tutorial/facebook.md +173 -0
  12. data/example/async.rb +89 -0
  13. data/example/facebook.rb +13 -0
  14. data/example/multi.rb +28 -0
  15. data/example/rails3/Gemfile +1 -1
  16. data/example/rainbows.rb +40 -0
  17. data/example/simple.rb +8 -0
  18. data/lib/rest-core/client/bing.rb +15 -7
  19. data/lib/rest-core/client/dropbox.rb +104 -0
  20. data/lib/rest-core/client/facebook.rb +59 -15
  21. data/lib/rest-core/client/flurry.rb +11 -1
  22. data/lib/rest-core/client/github.rb +11 -1
  23. data/lib/rest-core/client/linkedin.rb +10 -6
  24. data/lib/rest-core/client/twitter.rb +18 -9
  25. data/lib/rest-core/util/config.rb +15 -9
  26. data/lib/rest-more.rb +1 -0
  27. data/lib/rest-more/version.rb +1 -1
  28. data/rest-more.gemspec +54 -41
  29. data/test/{client/bing → bing}/test_api.rb +0 -0
  30. data/test/dropbox/test_api.rb +37 -0
  31. data/test/{client/facebook → facebook}/config/rest-core.yaml +0 -0
  32. data/test/{client/facebook → facebook}/test_api.rb +0 -0
  33. data/test/{client/facebook → facebook}/test_cache.rb +0 -0
  34. data/test/{client/facebook → facebook}/test_default.rb +0 -0
  35. data/test/{client/facebook → facebook}/test_error.rb +0 -0
  36. data/test/{client/facebook → facebook}/test_handler.rb +0 -0
  37. data/test/{client/facebook → facebook}/test_load_config.rb +0 -0
  38. data/test/{client/facebook → facebook}/test_misc.rb +0 -0
  39. data/test/{client/facebook → facebook}/test_oauth.rb +0 -0
  40. data/test/{client/facebook → facebook}/test_old.rb +0 -0
  41. data/test/{client/facebook → facebook}/test_page.rb +16 -29
  42. data/test/{client/facebook → facebook}/test_parse.rb +2 -2
  43. data/test/{client/facebook → facebook}/test_serialize.rb +0 -0
  44. data/test/{client/facebook → facebook}/test_timeout.rb +0 -0
  45. data/test/{client/flurry → flurry}/test_metrics.rb +0 -0
  46. data/test/{client/mixi → mixi}/test_api.rb +0 -0
  47. data/test/{client/twitter → twitter}/test_api.rb +4 -3
  48. metadata +60 -41
@@ -0,0 +1,104 @@
1
+
2
+ require 'rest-core'
3
+
4
+ # https://www.dropbox.com/developers/reference/api
5
+ RestCore::Dropbox = RestCore::Builder.client(:root) do
6
+ s = self.class # this is only for ruby 1.8!
7
+ use s::Timeout , 10
8
+
9
+ use s::DefaultSite , 'https://api.dropbox.com/'
10
+ use s::DefaultHeaders, {'Accept' => 'application/json',
11
+ 'Content-Type' => 'application/octet-stream'}
12
+
13
+ use s::Oauth1Header ,
14
+ '1/oauth/request_token', '1/oauth/access_token',
15
+ 'https://www.dropbox.com/1/oauth/authorize'
16
+
17
+ use s::CommonLogger , nil
18
+ use s::Cache , nil, 600 do
19
+ use s::ErrorHandler, lambda{ |env|
20
+ if env[s::ASYNC]
21
+ if env[s::RESPONSE_BODY].kind_of?(::Exception)
22
+ env
23
+ else
24
+ env.merge(s::RESPONSE_BODY => ::RestCore::Dropbox::Error.call(env))
25
+ end
26
+ else
27
+ raise ::RestCore::Dropbox::Error.call(env)
28
+ end}
29
+ use s::ErrorDetectorHttp
30
+ use s::JsonDecode , true
31
+ end
32
+ end
33
+
34
+ class RestCore::Dropbox::Error < RestCore::Error
35
+ include RestCore
36
+ class ServerError < Dropbox::Error; end
37
+
38
+ class BadRequest < Dropbox::Error; end
39
+ class Unauthorized < Dropbox::Error; end
40
+ class Forbidden < Dropbox::Error; end
41
+ class NotFound < Dropbox::Error; end
42
+ class MethodNotAllowed < Dropbox::Error; end
43
+
44
+ # a 5xx error which is not a server error
45
+ class OverStorageQuota < Dropbox::Error; end
46
+
47
+ class ServiceUnavailable < Dropbox::Error::ServerError; end
48
+
49
+ attr_reader :error, :code, :url
50
+ def initialize error, code, url=''
51
+ @error, @code, @url = error, code, url
52
+ super("[#{code}] #{error.inspect} from #{url}")
53
+ end
54
+
55
+ def self.call env
56
+ error, code, url = env[RESPONSE_BODY], env[RESPONSE_STATUS],
57
+ Middleware.request_uri(env)
58
+ return new(error, code, url) unless error.kind_of?(Hash)
59
+ case code
60
+ when 400; BadRequest
61
+ when 401; Unauthorized
62
+ when 403; Forbidden
63
+ when 404; NotFound
64
+ when 405; MethodNotAllowed
65
+ when 503; ServiceUnavailable
66
+ when 507; OverStorageQuota
67
+ else ; if code / 100 == 5
68
+ Dropbox::Error::ServerError
69
+ else
70
+ Dropbox::Error
71
+ end
72
+ end.new(error, code, url)
73
+ end
74
+ end
75
+
76
+ module RestCore::Dropbox::Client
77
+ include RestCore
78
+
79
+ def me query={}, opts={}
80
+ get('1/account/info', query, opts)
81
+ end
82
+
83
+ def default_root
84
+ 'sandbox'
85
+ end
86
+
87
+ def download path, query={}, opts={}
88
+ get("https://api-content.dropbox.com/1/files/#{root}/#{path}",
89
+ query, {:json_decode => false}.merge(opts))
90
+ end
91
+
92
+ def upload path, file, query={}, opts={}
93
+ put("https://api-content.dropbox.com/1/files_put/#{root}/#{path}",
94
+ file, query, opts)
95
+ end
96
+
97
+ def ls path='', query={}, opts={}
98
+ get("1/metadata/#{root}/#{path}", query, opts)['contents'].
99
+ map{ |c| c['path'] }
100
+ end
101
+ end
102
+
103
+ RestCore::Dropbox.send(:include, RestCore::ClientOauth1)
104
+ RestCore::Dropbox.send(:include, RestCore::Dropbox::Client)
@@ -18,7 +18,15 @@ RestCore::Facebook = RestCore::Builder.client(
18
18
  use s::CommonLogger , nil
19
19
  use s::Cache , nil, 600 do
20
20
  use s::ErrorHandler, lambda{ |env|
21
- raise ::RestCore::Facebook::Error.call(env) }
21
+ if env[s::ASYNC]
22
+ if env[s::RESPONSE_BODY].kind_of?(::Exception)
23
+ env
24
+ else
25
+ env.merge(s::RESPONSE_BODY => ::RestCore::Facebook::Error.call(env))
26
+ end
27
+ else
28
+ raise ::RestCore::Facebook::Error.call(env)
29
+ end}
22
30
  use s::ErrorDetector, lambda{ |env|
23
31
  if env[s::RESPONSE_BODY].kind_of?(Hash)
24
32
  env[s::RESPONSE_BODY]['error'] ||
@@ -45,7 +53,7 @@ class RestCore::Facebook::Error < RestCore::Error
45
53
 
46
54
  def self.call env
47
55
  error, url = env[RESPONSE_BODY], Middleware.request_uri(env)
48
- return new(env[FAIL], url) unless error.kind_of?(Hash)
56
+ return new(error, url) unless error.kind_of?(Hash)
49
57
  if invalid_token?(error)
50
58
  InvalidAccessToken.new(error, url)
51
59
  elsif missing_token?(error)
@@ -91,31 +99,67 @@ module RestCore::Facebook::Client
91
99
  def authorized? ; !!access_token ; end
92
100
 
93
101
  def next_page hash, opts={}, &cb
94
- if hash['paging'].kind_of?(Hash) && hash['paging']['next']
95
- get(hash['paging']['next'], {}, opts, &cb)
102
+ if hash.nil?
103
+ nil
104
+ elsif hash['paging'].kind_of?(Hash) && hash['paging']['next']
105
+ # FIXME: facebook is returning broken URI....
106
+ get(URI.encode(hash['paging']['next']), {}, opts, &cb)
107
+ elsif block_given?
108
+ yield(nil)
109
+ self
96
110
  else
97
- yield(nil) if block_given?
111
+ nil
98
112
  end
99
113
  end
100
114
 
101
115
  def prev_page hash, opts={}, &cb
102
- if hash['paging'].kind_of?(Hash) && hash['paging']['previous']
103
- get(hash['paging']['previous'], {}, opts, &cb)
116
+ if hash.nil?
117
+ nil
118
+ elsif hash['paging'].kind_of?(Hash) && hash['paging']['previous']
119
+ # FIXME: facebook is returning broken URI....
120
+ get(URI.encode(hash['paging']['previous']), {}, opts, &cb)
121
+ elsif block_given?
122
+ yield(nil)
123
+ self
104
124
  else
105
- yield(nil) if block_given?
125
+ nil
106
126
  end
107
127
  end
108
128
  alias_method :previous_page, :prev_page
109
129
 
110
130
  def for_pages hash, pages=1, opts={}, kind=:next_page, &cb
111
- if pages > 1
112
- merge_data(send(kind, hash, opts){ |result|
113
- yield(result.freeze) if block_given?
114
- for_pages(result, pages - 1, opts, kind, &cb) if result
115
- }, hash)
131
+ if hash.nil?
132
+ nil
133
+ elsif pages <= 0
134
+ if block_given?
135
+ yield(nil)
136
+ self
137
+ else
138
+ nil
139
+ end
140
+ elsif pages == 1
141
+ if block_given?
142
+ yield(hash)
143
+ yield(nil)
144
+ self
145
+ else
146
+ hash
147
+ end
116
148
  else
117
- yield(nil) if block_given?
118
- hash
149
+ if block_given?
150
+ yield(hash)
151
+ send(kind, hash, opts){ |result|
152
+ if result.nil?
153
+ yield(nil)
154
+ else
155
+ for_pages(result, pages - 1, opts, kind, &cb)
156
+ end
157
+ }
158
+ else
159
+ merge_data(
160
+ for_pages(send(kind, hash, opts), pages - 1, opts, kind),
161
+ hash)
162
+ end
119
163
  end
120
164
  end
121
165
 
@@ -14,7 +14,17 @@ RestCore::Flurry = RestCore::Builder.client(:apiKey, :apiAccessCode) do
14
14
 
15
15
  use s::CommonLogger , nil
16
16
  use s::Cache , nil, 600 do
17
- use s::ErrorHandler, lambda{|env| raise env[s::RESPONSE_BODY]['message']}
17
+ use s::ErrorHandler, lambda{ |env|
18
+ if env[s::ASYNC]
19
+ if env[s::RESPONSE_BODY].kind_of?(::Exception)
20
+ env
21
+ else
22
+ env.merge(s::RESPONSE_BODY =>
23
+ RuntimeError.new(env[s::RESPONSE_BODY]['message']))
24
+ end
25
+ else
26
+ raise env[s::RESPONSE_BODY]['message']
27
+ end}
18
28
  use s::ErrorDetectorHttp
19
29
  use s::JsonDecode , true
20
30
  end
@@ -12,7 +12,17 @@ RestCore::Github = RestCore::Builder.client do
12
12
 
13
13
  use s::CommonLogger , nil
14
14
  use s::Cache , nil, 600 do
15
- use s::ErrorHandler, lambda{|env| raise env[s::RESPONSE_BODY]['message']}
15
+ use s::ErrorHandler, lambda{ |env|
16
+ if env[s::ASYNC]
17
+ if env[s::RESPONSE_BODY].kind_of?(::Exception)
18
+ env
19
+ else
20
+ env.merge(s::RESPONSE_BODY =>
21
+ RuntimeError.new(env[s::RESPONSE_BODY]['message']))
22
+ end
23
+ else
24
+ raise env[s::RESPONSE_BODY]['message']
25
+ end}
16
26
  use s::ErrorDetectorHttp
17
27
  use s::JsonDecode , true
18
28
  end
@@ -16,13 +16,17 @@ RestCore::Linkedin = RestCore::Builder.client do
16
16
 
17
17
  use s::CommonLogger , nil
18
18
  use s::Cache , nil, 600 do
19
- use s::ErrorHandler, lambda{|env|
20
- if (body = env[s::RESPONSE_BODY]).kind_of?(Hash)
21
- raise body['message']
19
+ use s::ErrorHandler, lambda{ |env|
20
+ if env[s::ASYNC]
21
+ if env[s::RESPONSE_BODY].kind_of?(::Exception)
22
+ env
23
+ else
24
+ env.merge(s::RESPONSE_BODY =>
25
+ RuntimeError.new(env[s::RESPONSE_BODY]['message']))
26
+ end
22
27
  else
23
- raise body
24
- end
25
- }
28
+ raise env[s::RESPONSE_BODY]['message']
29
+ end}
26
30
  use s::ErrorDetectorHttp
27
31
  use s::JsonDecode , true
28
32
  end
@@ -15,7 +15,15 @@ RestCore::Twitter = RestCore::Builder.client do
15
15
  use s::CommonLogger , nil
16
16
  use s::Cache , nil, 600 do
17
17
  use s::ErrorHandler, lambda{ |env|
18
- raise ::RestCore::Twitter::Error.call(env) }
18
+ if env[s::ASYNC]
19
+ if env[s::RESPONSE_BODY].kind_of?(::Exception)
20
+ env
21
+ else
22
+ env.merge(s::RESPONSE_BODY => ::RestCore::Twitter::Error.call(env))
23
+ end
24
+ else
25
+ raise ::RestCore::Twitter::Error.call(env)
26
+ end}
19
27
  use s::ErrorDetectorHttp
20
28
  use s::JsonDecode , true
21
29
  end
@@ -37,16 +45,17 @@ class RestCore::Twitter::Error < RestCore::Error
37
45
  class BadGateway < Twitter::Error::ServerError; end
38
46
  class ServiceUnavailable < Twitter::Error::ServerError; end
39
47
 
40
- attr_reader :error, :url
41
- def initialize error, url=''
42
- @error, @url = error, url
43
- super("#{error.inspect} from #{url}")
48
+ attr_reader :error, :code, :url
49
+ def initialize error, code, url=''
50
+ @error, @code, @url = error, code, url
51
+ super("[#{code}] #{error.inspect} from #{url}")
44
52
  end
45
53
 
46
54
  def self.call env
47
- error, url = env[RESPONSE_BODY], Middleware.request_uri(env)
48
- return new(env[FAIL], url) unless error.kind_of?(Hash)
49
- case env[RESPONSE_STATUS]
55
+ error, code, url = env[RESPONSE_BODY], env[RESPONSE_STATUS],
56
+ Middleware.request_uri(env)
57
+ return new(error, code, url) unless error.kind_of?(Hash)
58
+ case code
50
59
  when 400; BadRequest
51
60
  when 401; Unauthorized
52
61
  when 403; Forbidden
@@ -57,7 +66,7 @@ class RestCore::Twitter::Error < RestCore::Error
57
66
  when 502; BadGateway
58
67
  when 503; ServiceUnavailable
59
68
  else ; self
60
- end.new(error, url)
69
+ end.new(error, code, url)
61
70
  end
62
71
  end
63
72
 
@@ -9,6 +9,8 @@ module RestCore::Config
9
9
  DefaultModuleName = 'DefaultAttributes'
10
10
 
11
11
  def load_for_rails klass, namespace=nil, app=Rails
12
+ default_attributes_module(klass) # make sure the default is there
13
+ # even if there's no config file
12
14
  root = File.expand_path(app.root)
13
15
  path = ["#{root}/config/rest-core.yaml", # YAML should use .yaml
14
16
  "#{root}/config/rest-core.yml" ].find{|p| File.exist?(p)}
@@ -29,6 +31,18 @@ module RestCore::Config
29
31
  raise ArgumentError.new("#{data} is not a hash") unless
30
32
  data.kind_of?(Hash)
31
33
 
34
+ default_attributes_module(klass).module_eval(
35
+ data.inject(["extend self\n"]){ |r, (k, v)|
36
+ # quote strings, leave others free (e.g. false, numbers, etc)
37
+ r << <<-RUBY
38
+ def default_#{k}
39
+ #{v.inspect}
40
+ end
41
+ RUBY
42
+ }.join, __FILE__, __LINE__)
43
+ end
44
+
45
+ def default_attributes_module klass
32
46
  mod = if klass.const_defined?(DefaultModuleName)
33
47
  klass.const_get(DefaultModuleName)
34
48
  else
@@ -42,14 +56,6 @@ module RestCore::Config
42
56
  end
43
57
 
44
58
  klass.send(:extend, mod) unless singleton_class < mod
45
-
46
- mod.module_eval(data.inject(["extend self\n"]){ |r, (k, v)|
47
- # quote strings, leave others free (e.g. false, numbers, etc)
48
- r << <<-RUBY
49
- def default_#{k}
50
- #{v.kind_of?(String) ? "'#{v}'" : v}
51
- end
52
- RUBY
53
- }.join, __FILE__, __LINE__)
59
+ mod
54
60
  end
55
61
  end
@@ -5,6 +5,7 @@ module RestCore
5
5
  autoload :Config , 'rest-core/util/config'
6
6
 
7
7
  autoload :Bing , 'rest-core/client/bing'
8
+ autoload :Dropbox , 'rest-core/client/dropbox'
8
9
  autoload :Facebook, 'rest-core/client/facebook'
9
10
  autoload :Flurry , 'rest-core/client/flurry'
10
11
  autoload :Github , 'rest-core/client/github'
@@ -1,4 +1,4 @@
1
1
 
2
2
  module RestMore
3
- VERSION = '0.8.0'
3
+ VERSION = '1.0.0'
4
4
  end
@@ -2,13 +2,13 @@
2
2
 
3
3
  Gem::Specification.new do |s|
4
4
  s.name = "rest-more"
5
- s.version = "0.8.0"
5
+ s.version = "1.0.0"
6
6
 
7
7
  s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
8
8
  s.authors = [
9
9
  "Cardinal Blue",
10
10
  "Lin Jen-Shin (godfat)"]
11
- s.date = "2011-11-29"
11
+ s.date = "2012-03-17"
12
12
  s.description = "Various REST clients such as Facebook and Twitter built with [rest-core][]\n\n[rest-core]: https://github.com/cardinalblue/rest-core"
13
13
  s.email = ["dev (XD) cardinalblue.com"]
14
14
  s.executables = ["rib-rest-core"]
@@ -23,6 +23,14 @@ Gem::Specification.new do |s|
23
23
  "Rakefile",
24
24
  "TODO.md",
25
25
  "bin/rib-rest-core",
26
+ "doc/ToC.md",
27
+ "doc/dependency.md",
28
+ "doc/design.md",
29
+ "doc/rest-graph.md",
30
+ "doc/tutorial/facebook.md",
31
+ "example/async.rb",
32
+ "example/facebook.rb",
33
+ "example/multi.rb",
26
34
  "example/rails2/Gemfile",
27
35
  "example/rails2/README",
28
36
  "example/rails2/Rakefile",
@@ -62,9 +70,12 @@ Gem::Specification.new do |s|
62
70
  "example/rails3/test/functional/application_controller_test.rb",
63
71
  "example/rails3/test/test_helper.rb",
64
72
  "example/rails3/test/unit/rails_util_test.rb",
73
+ "example/rainbows.rb",
74
+ "example/simple.rb",
65
75
  "example/sinatra/config.ru",
66
76
  "lib/rest-core/client/bing.rb",
67
77
  "lib/rest-core/client/bing/rails_util.rb",
78
+ "lib/rest-core/client/dropbox.rb",
68
79
  "lib/rest-core/client/facebook.rb",
69
80
  "lib/rest-core/client/facebook/rails_util.rb",
70
81
  "lib/rest-core/client/flurry.rb",
@@ -86,56 +97,58 @@ Gem::Specification.new do |s|
86
97
  "rest-more.gemspec",
87
98
  "task/.gitignore",
88
99
  "task/gemgem.rb",
89
- "test/client/bing/test_api.rb",
90
- "test/client/facebook/config/rest-core.yaml",
91
- "test/client/facebook/test_api.rb",
92
- "test/client/facebook/test_cache.rb",
93
- "test/client/facebook/test_default.rb",
94
- "test/client/facebook/test_error.rb",
95
- "test/client/facebook/test_handler.rb",
96
- "test/client/facebook/test_load_config.rb",
97
- "test/client/facebook/test_misc.rb",
98
- "test/client/facebook/test_oauth.rb",
99
- "test/client/facebook/test_old.rb",
100
- "test/client/facebook/test_page.rb",
101
- "test/client/facebook/test_parse.rb",
102
- "test/client/facebook/test_serialize.rb",
103
- "test/client/facebook/test_timeout.rb",
104
- "test/client/flurry/test_metrics.rb",
105
- "test/client/mixi/test_api.rb",
106
- "test/client/twitter/test_api.rb"]
100
+ "test/bing/test_api.rb",
101
+ "test/dropbox/test_api.rb",
102
+ "test/facebook/config/rest-core.yaml",
103
+ "test/facebook/test_api.rb",
104
+ "test/facebook/test_cache.rb",
105
+ "test/facebook/test_default.rb",
106
+ "test/facebook/test_error.rb",
107
+ "test/facebook/test_handler.rb",
108
+ "test/facebook/test_load_config.rb",
109
+ "test/facebook/test_misc.rb",
110
+ "test/facebook/test_oauth.rb",
111
+ "test/facebook/test_old.rb",
112
+ "test/facebook/test_page.rb",
113
+ "test/facebook/test_parse.rb",
114
+ "test/facebook/test_serialize.rb",
115
+ "test/facebook/test_timeout.rb",
116
+ "test/flurry/test_metrics.rb",
117
+ "test/mixi/test_api.rb",
118
+ "test/twitter/test_api.rb"]
107
119
  s.homepage = "https://github.com/cardinalblue/rest-more"
108
120
  s.require_paths = ["lib"]
109
- s.rubygems_version = "1.8.11"
121
+ s.rubygems_version = "1.8.19"
110
122
  s.summary = "Various REST clients such as Facebook and Twitter built with [rest-core][]"
111
123
  s.test_files = [
112
- "test/client/bing/test_api.rb",
113
- "test/client/facebook/test_api.rb",
114
- "test/client/facebook/test_cache.rb",
115
- "test/client/facebook/test_default.rb",
116
- "test/client/facebook/test_error.rb",
117
- "test/client/facebook/test_handler.rb",
118
- "test/client/facebook/test_load_config.rb",
119
- "test/client/facebook/test_misc.rb",
120
- "test/client/facebook/test_oauth.rb",
121
- "test/client/facebook/test_old.rb",
122
- "test/client/facebook/test_page.rb",
123
- "test/client/facebook/test_parse.rb",
124
- "test/client/facebook/test_serialize.rb",
125
- "test/client/facebook/test_timeout.rb",
126
- "test/client/flurry/test_metrics.rb",
127
- "test/client/mixi/test_api.rb",
128
- "test/client/twitter/test_api.rb"]
124
+ "test/bing/test_api.rb",
125
+ "test/dropbox/test_api.rb",
126
+ "test/facebook/test_api.rb",
127
+ "test/facebook/test_cache.rb",
128
+ "test/facebook/test_default.rb",
129
+ "test/facebook/test_error.rb",
130
+ "test/facebook/test_handler.rb",
131
+ "test/facebook/test_load_config.rb",
132
+ "test/facebook/test_misc.rb",
133
+ "test/facebook/test_oauth.rb",
134
+ "test/facebook/test_old.rb",
135
+ "test/facebook/test_page.rb",
136
+ "test/facebook/test_parse.rb",
137
+ "test/facebook/test_serialize.rb",
138
+ "test/facebook/test_timeout.rb",
139
+ "test/flurry/test_metrics.rb",
140
+ "test/mixi/test_api.rb",
141
+ "test/twitter/test_api.rb"]
129
142
 
130
143
  if s.respond_to? :specification_version then
131
144
  s.specification_version = 3
132
145
 
133
146
  if Gem::Version.new(Gem::VERSION) >= Gem::Version.new('1.2.0') then
134
- s.add_runtime_dependency(%q<rest-core>, [">= 0"])
147
+ s.add_runtime_dependency(%q<rest-core>, [">= 1.0.0"])
135
148
  else
136
- s.add_dependency(%q<rest-core>, [">= 0"])
149
+ s.add_dependency(%q<rest-core>, [">= 1.0.0"])
137
150
  end
138
151
  else
139
- s.add_dependency(%q<rest-core>, [">= 0"])
152
+ s.add_dependency(%q<rest-core>, [">= 1.0.0"])
140
153
  end
141
154
  end