rest-more 0.8.0 → 1.0.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 (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