iknow 0.1.0 → 0.1.1
Sign up to get free protection for your applications and to get access to all the features.
- data/ChangeLog +10 -1
- data/Rakefile +1 -1
- data/examples/pure_ruby.rb +4 -2
- data/lib/iknow/core/auth.rb +13 -3
- data/lib/iknow/core/config.rb +4 -4
- data/lib/iknow/core/version.rb +1 -1
- data/lib/iknow/model/base.rb +8 -11
- data/lib/iknow/model/item.rb +10 -10
- data/lib/iknow/model/list.rb +13 -13
- data/lib/iknow/model/sentence.rb +6 -6
- data/lib/iknow/model/user.rb +12 -12
- data/lib/iknow/rest_client/base.rb +69 -35
- metadata +2 -12
data/ChangeLog
CHANGED
@@ -9,4 +9,13 @@
|
|
9
9
|
== 0.0.4
|
10
10
|
|
11
11
|
* add new API calls
|
12
|
-
* add new attributes
|
12
|
+
* add new attributes
|
13
|
+
|
14
|
+
== 0.1.0
|
15
|
+
|
16
|
+
* add Iknow::Auth (supports basic_auth and oauth)
|
17
|
+
* add List#create, List#delete, List#add_item, List#delete_item
|
18
|
+
|
19
|
+
== 0.1.1
|
20
|
+
|
21
|
+
* remove Mechanize
|
data/Rakefile
CHANGED
@@ -62,7 +62,6 @@ spec = Gem::Specification.new do |s|
|
|
62
62
|
|
63
63
|
s.add_dependency('rails', '>=2.1.0')
|
64
64
|
s.add_dependency('json')
|
65
|
-
s.add_dependency('mechanize')
|
66
65
|
s.add_dependency('oauth', '>=0.2.7')
|
67
66
|
s.required_ruby_version = '>= 1.8.6'
|
68
67
|
|
@@ -114,6 +113,7 @@ task :rubyforge => [:rdoc, :package] do
|
|
114
113
|
Rake::RubyForgePublisher.new(RUBYFORGE_PROJECT, 'nov').upload
|
115
114
|
end
|
116
115
|
|
116
|
+
# rake release VERSION=x.y.z
|
117
117
|
desc 'Package and upload the release to rubyforge.'
|
118
118
|
task :release => [:clean, :package] do |t|
|
119
119
|
v = ENV["VERSION"] or abort "Must supply VERSION=x.y.z"
|
data/examples/pure_ruby.rb
CHANGED
@@ -70,8 +70,8 @@ end
|
|
70
70
|
########################
|
71
71
|
|
72
72
|
iknow_auth = case
|
73
|
-
when OAUTH_ACCESS_TOKEN
|
74
|
-
if Iknow::Config.oauth_consumer_key
|
73
|
+
when !OAUTH_ACCESS_TOKEN.empty?
|
74
|
+
if Iknow::Config.oauth_consumer_key.empty? or Iknow::Config.oauth_consumer_secret.empty?
|
75
75
|
raise ArgumentError.new("oauth_consumer_key and oauth_consumer_secret are required")
|
76
76
|
end
|
77
77
|
Iknow::Auth.new(:token => OAUTH_ACCESS_TOKEN, :secret => OAUTH_ACCESS_TOKEN_SECRET)
|
@@ -83,6 +83,8 @@ iknow_auth = case
|
|
83
83
|
unless iknow_auth
|
84
84
|
puts "Skip calls which require authentication"
|
85
85
|
exit
|
86
|
+
else
|
87
|
+
puts "Authenticate Mode :: #{iknow_auth.mode}"
|
86
88
|
end
|
87
89
|
|
88
90
|
## List API
|
data/lib/iknow/core/auth.rb
CHANGED
@@ -1,14 +1,21 @@
|
|
1
1
|
require 'oauth/consumer'
|
2
|
-
require 'mechanize'
|
3
2
|
|
4
3
|
class Iknow::Auth
|
5
4
|
attr_accessor :mode, :auth_token
|
6
5
|
|
6
|
+
class Basic
|
7
|
+
attr_reader :username, :password
|
8
|
+
|
9
|
+
def initialize(username, password)
|
10
|
+
@username = username
|
11
|
+
@password = password
|
12
|
+
end
|
13
|
+
end
|
14
|
+
|
7
15
|
def initialize(options = {})
|
8
16
|
if options[:username] && options[:password]
|
9
17
|
@mode = :basic_auth
|
10
|
-
@auth_token =
|
11
|
-
@auth_token.auth(options[:username], options[:password])
|
18
|
+
@auth_token = Basic.new(options[:username], options[:password])
|
12
19
|
elsif options[:token] && options[:secret]
|
13
20
|
@mode = :oauth
|
14
21
|
@auth_token = OAuth::AccessToken.new(Iknow::Auth.consumer, options[:token], options[:secret])
|
@@ -21,9 +28,12 @@ class Iknow::Auth
|
|
21
28
|
@@consumer ||= OAuth::Consumer.new(
|
22
29
|
Iknow::Config.oauth_consumer_key,
|
23
30
|
Iknow::Config.oauth_consumer_secret,
|
31
|
+
:http_method => :get,
|
32
|
+
:schema => :query_string,
|
24
33
|
:site => Iknow::Config.iknow_api_base_url,
|
25
34
|
:authorize_url => "#{Iknow::Config.iknow_base_url}/oauth/authorize"
|
26
35
|
)
|
27
36
|
end
|
28
37
|
|
38
|
+
alias_method :account, :auth_token
|
29
39
|
end
|
data/lib/iknow/core/config.rb
CHANGED
@@ -2,7 +2,7 @@ require 'singleton'
|
|
2
2
|
|
3
3
|
class Iknow::Config
|
4
4
|
include Singleton
|
5
|
-
attr_accessor :protocol, :host, :port, :api_protocol, :api_host, :api_port,
|
5
|
+
attr_accessor :protocol, :host, :port, :api_protocol, :api_host, :api_port, :timeout,
|
6
6
|
:api_key, :oauth_consumer_key, :oauth_consumer_secret,
|
7
7
|
:user_agent, :application_name, :application_version, :application_url, :source
|
8
8
|
|
@@ -14,14 +14,14 @@ class Iknow::Config
|
|
14
14
|
:api_protocol => 'http',
|
15
15
|
:api_host => 'api.iknow.co.jp',
|
16
16
|
:api_port => 80,
|
17
|
+
:timeout => 5,
|
17
18
|
:api_key => '',
|
18
19
|
:oauth_consumer_key => '',
|
19
20
|
:oauth_consumer_secret => '',
|
20
21
|
:user_agent => 'default',
|
21
|
-
:application_name => '
|
22
|
+
:application_name => 'iKnow! Gem',
|
22
23
|
:application_version => Iknow::Version.to_version,
|
23
|
-
:application_url => 'http://github.com/nov/iknow'
|
24
|
-
:source => 'iknow'
|
24
|
+
:application_url => 'http://github.com/nov/iknow'
|
25
25
|
}.each do |key, value| conf.send("#{key}=", value) end
|
26
26
|
yield conf if block_given?
|
27
27
|
conf
|
data/lib/iknow/core/version.rb
CHANGED
data/lib/iknow/model/base.rb
CHANGED
@@ -4,26 +4,23 @@ class Iknow::Base
|
|
4
4
|
|
5
5
|
def attributes; self.class.attributes end
|
6
6
|
|
7
|
-
def self.deserialize(
|
8
|
-
return nil if
|
9
|
-
(response.is_a?(Hash) and
|
10
|
-
!response['error'].nil? and
|
11
|
-
response['error']['code'].to_i == 404)
|
7
|
+
def self.deserialize(hash, params = {})
|
8
|
+
return nil if hash.nil?
|
12
9
|
|
13
10
|
klass = params[:as] ? params[:as] : self
|
14
|
-
if
|
15
|
-
|
11
|
+
if hash.is_a?(Array)
|
12
|
+
hash.inject([]) { |results, hash|
|
16
13
|
hash.symbolize_keys!
|
17
14
|
results << klass.new(hash)
|
18
15
|
}
|
19
16
|
else
|
20
|
-
|
21
|
-
klass.new(
|
17
|
+
hash.symbolize_keys!
|
18
|
+
klass.new(hash)
|
22
19
|
end
|
23
20
|
end
|
24
21
|
|
25
|
-
def deserialize(
|
26
|
-
self.class.deserialize(
|
22
|
+
def deserialize(hash, params = {})
|
23
|
+
self.class.deserialize(hash, params)
|
27
24
|
end
|
28
25
|
|
29
26
|
end
|
data/lib/iknow/model/item.rb
CHANGED
@@ -1,5 +1,5 @@
|
|
1
1
|
class Iknow::Item < Iknow::Base
|
2
|
-
ATTRIBUTES = [:sentences, :
|
2
|
+
ATTRIBUTES = [:sentences, :hash, :cue, :id]
|
3
3
|
attr_reader *ATTRIBUTES
|
4
4
|
|
5
5
|
class Response
|
@@ -28,32 +28,32 @@ class Iknow::Item < Iknow::Base
|
|
28
28
|
end
|
29
29
|
|
30
30
|
def self.recent(params = {})
|
31
|
-
|
32
|
-
self.deserialize(
|
31
|
+
hash = Iknow::RestClient::Item.recent(params)
|
32
|
+
self.deserialize(hash) || []
|
33
33
|
end
|
34
34
|
|
35
35
|
def self.find(item_id, params = {})
|
36
36
|
params[:id] = item_id
|
37
|
-
|
38
|
-
self.deserialize(
|
37
|
+
hash = Iknow::RestClient::Item.find(params)
|
38
|
+
self.deserialize(hash)
|
39
39
|
end
|
40
40
|
|
41
41
|
def self.matching(keyword, params = {})
|
42
42
|
params[:keyword] = keyword
|
43
|
-
|
44
|
-
self.deserialize(
|
43
|
+
hash = Iknow::RestClient::Item.matching(params)
|
44
|
+
self.deserialize(hash) || []
|
45
45
|
end
|
46
46
|
|
47
47
|
def self.extract(text, params = {})
|
48
48
|
params[:text] = text
|
49
|
-
|
50
|
-
self.deserialize(
|
49
|
+
hash = Iknow::RestClient::Item.extract(params)
|
50
|
+
self.deserialize(hash) || []
|
51
51
|
end
|
52
52
|
|
53
53
|
def initialize(params = {})
|
54
54
|
@id = params[:id].to_i
|
55
55
|
@cue = self.deserialize(params[:cue], :as => Iknow::Item::Cue)
|
56
|
-
@
|
56
|
+
@hashs = self.deserialize(params[:hashs], :as => Iknow::Item::Response)
|
57
57
|
@sentences = self.deserialize(params[:sentences], :as => Iknow::Sentence)
|
58
58
|
end
|
59
59
|
|
data/lib/iknow/model/list.rb
CHANGED
@@ -35,20 +35,20 @@ class Iknow::List < Iknow::Base
|
|
35
35
|
end
|
36
36
|
|
37
37
|
def self.recent(params = {})
|
38
|
-
|
39
|
-
self.deserialize(
|
38
|
+
hash = Iknow::RestClient::List.recent(params)
|
39
|
+
self.deserialize(hash) || []
|
40
40
|
end
|
41
41
|
|
42
42
|
def self.find(list_id, params = {})
|
43
43
|
params[:id] = list_id
|
44
|
-
|
45
|
-
self.deserialize(
|
44
|
+
hash = Iknow::RestClient::List.find(params)
|
45
|
+
self.deserialize(hash)
|
46
46
|
end
|
47
47
|
|
48
48
|
def self.matching(keyword, params = {})
|
49
49
|
params[:keyword] = keyword
|
50
|
-
|
51
|
-
self.deserialize(
|
50
|
+
hash = Iknow::RestClient::List.matching(params)
|
51
|
+
self.deserialize(hash) || []
|
52
52
|
end
|
53
53
|
|
54
54
|
def self.create(iknow_auth, params = {})
|
@@ -88,26 +88,26 @@ class Iknow::List < Iknow::Base
|
|
88
88
|
end
|
89
89
|
|
90
90
|
def items(params = {})
|
91
|
-
|
92
|
-
self.deserialize(
|
91
|
+
hash = Iknow::RestClient::List.items(params.merge(:id => self.id))
|
92
|
+
self.deserialize(hash, :as => Iknow::Item) || []
|
93
93
|
end
|
94
94
|
|
95
95
|
def sentences(params = {})
|
96
|
-
|
97
|
-
self.deserialize(
|
96
|
+
hash = Iknow::RestClient::List.sentences(params.merge(:id => self.id))
|
97
|
+
self.deserialize(hash, :as => Iknow::Sentence) || []
|
98
98
|
end
|
99
99
|
|
100
100
|
def save(iknow_auth)
|
101
101
|
begin
|
102
102
|
list_id = Iknow::RestClient::List.create(iknow_auth, self.to_post_data)
|
103
|
-
rescue
|
104
|
-
|
103
|
+
# rescue
|
104
|
+
# return false
|
105
105
|
end
|
106
106
|
Iknow::List.find(list_id)
|
107
107
|
end
|
108
108
|
|
109
109
|
def delete(iknow_auth)
|
110
|
-
Iknow::RestClient::List.delete(iknow_auth, :id => self.id)
|
110
|
+
Iknow::RestClient::List.delete(iknow_auth, {:id => self.id})
|
111
111
|
end
|
112
112
|
alias_method :destroy, :delete
|
113
113
|
|
data/lib/iknow/model/sentence.rb
CHANGED
@@ -5,20 +5,20 @@ class Iknow::Sentence < Iknow::Base
|
|
5
5
|
attr_reader *(ATTRIBUTES - WRITABLE_ATTRIBUTES)
|
6
6
|
|
7
7
|
def self.recent(params = {})
|
8
|
-
|
9
|
-
self.deserialize(
|
8
|
+
hash = Iknow::RestClient::Sentence.recent(params)
|
9
|
+
self.deserialize(hash) || []
|
10
10
|
end
|
11
11
|
|
12
12
|
def self.find(sentence_id, params = {})
|
13
13
|
params[:id] = sentence_id
|
14
|
-
|
15
|
-
self.deserialize(
|
14
|
+
hash = Iknow::RestClient::Sentence.find(params)
|
15
|
+
self.deserialize(hash)
|
16
16
|
end
|
17
17
|
|
18
18
|
def self.matching(keyword, params = {})
|
19
19
|
params[:keyword] = keyword
|
20
|
-
|
21
|
-
self.deserialize(
|
20
|
+
hash = Iknow::RestClient::Sentence.matching(params)
|
21
|
+
self.deserialize(hash) || []
|
22
22
|
end
|
23
23
|
|
24
24
|
def initialize(params = {})
|
data/lib/iknow/model/user.rb
CHANGED
@@ -63,14 +63,14 @@ class Iknow::User < Iknow::Base
|
|
63
63
|
|
64
64
|
def self.find(username, params = {})
|
65
65
|
params[:username] = username
|
66
|
-
|
67
|
-
self.deserialize(
|
66
|
+
hash = Iknow::RestClient::User.find(params)
|
67
|
+
self.deserialize(hash)
|
68
68
|
end
|
69
69
|
|
70
70
|
def self.matching(keyword, params = {})
|
71
71
|
params[:keyword] = keyword
|
72
|
-
|
73
|
-
self.deserialize(
|
72
|
+
hash = Iknow::RestClient::User.matching(params)
|
73
|
+
self.deserialize(hash) || []
|
74
74
|
end
|
75
75
|
|
76
76
|
def initialize(params)
|
@@ -79,24 +79,24 @@ class Iknow::User < Iknow::Base
|
|
79
79
|
end
|
80
80
|
|
81
81
|
def items(params = {})
|
82
|
-
|
83
|
-
self.deserialize(
|
82
|
+
hash = Iknow::RestClient::User.items(params.merge(:username => self.username))
|
83
|
+
self.deserialize(hash, :as => Iknow::Item) || []
|
84
84
|
end
|
85
85
|
|
86
86
|
def lists(params = {})
|
87
|
-
|
88
|
-
self.deserialize(
|
87
|
+
hash = Iknow::RestClient::User.lists(params.merge(:username => self.username))
|
88
|
+
self.deserialize(hash, :as => Iknow::List) || []
|
89
89
|
end
|
90
90
|
|
91
91
|
def friends(params = {})
|
92
|
-
|
93
|
-
self.deserialize(
|
92
|
+
hash = Iknow::RestClient::User.friends(params.merge(:username => self.username))
|
93
|
+
self.deserialize(hash) || []
|
94
94
|
end
|
95
95
|
|
96
96
|
def study(params = {})
|
97
97
|
params[:application] ||= 'iknow'
|
98
|
-
|
99
|
-
self.deserialize(
|
98
|
+
hash = Iknow::RestClient::User.study_results(params.merge(:username => self.username))
|
99
|
+
self.deserialize(hash, :as => Iknow::User::Study)
|
100
100
|
end
|
101
101
|
|
102
102
|
end
|
@@ -1,3 +1,5 @@
|
|
1
|
+
require 'timeout'
|
2
|
+
|
1
3
|
class Iknow::RestClient::Base
|
2
4
|
|
3
5
|
class RESTError < Exception
|
@@ -24,13 +26,13 @@ class Iknow::RestClient::Base
|
|
24
26
|
case self.http_method(action)
|
25
27
|
when :get
|
26
28
|
path, params = path_with_params(self.path(action), args[0])
|
27
|
-
|
29
|
+
http_get(path, params)
|
28
30
|
when :post
|
29
31
|
path, params = path_with_params(self.path(action), args[1])
|
30
|
-
|
32
|
+
http_post(iknow_auth(args[0]), path, params)
|
31
33
|
when :delete
|
32
34
|
path, params = path_with_params(self.path(action), args[1])
|
33
|
-
|
35
|
+
http_delete(iknow_auth(args[0]), path, params)
|
34
36
|
end
|
35
37
|
end
|
36
38
|
|
@@ -54,19 +56,54 @@ class Iknow::RestClient::Base
|
|
54
56
|
raise RESTError.new(:code => response.code, :message => response.message)
|
55
57
|
end
|
56
58
|
|
57
|
-
def self.handle_rest_response(response)
|
59
|
+
def self.handle_rest_response(response, format)
|
58
60
|
raise_rest_error(response) unless response.is_a?(Net::HTTPSuccess)
|
61
|
+
case format
|
62
|
+
when :json
|
63
|
+
handle_json_response(response.body)
|
64
|
+
when :nothing
|
65
|
+
# success => nothing / failure => json error
|
66
|
+
handle_json_response(response.body) rescue :success
|
67
|
+
else
|
68
|
+
response.body
|
69
|
+
end
|
70
|
+
end
|
71
|
+
|
72
|
+
def self.handle_json_response(json_response)
|
73
|
+
hash = JSON.parse(json_response)
|
74
|
+
unless (hash['error'].nil? rescue :success) # success response may be Array, not Hash.
|
75
|
+
if hash['error']['code'].to_i == 404
|
76
|
+
return nil
|
77
|
+
else
|
78
|
+
raise RESTError.new(:code => hash['error']['code'], :message => hash['error']['message'])
|
79
|
+
end
|
80
|
+
end
|
81
|
+
hash
|
59
82
|
end
|
60
83
|
|
61
84
|
def self.http_header
|
62
85
|
@@http_header ||= {
|
63
|
-
'User-Agent'
|
64
|
-
'Accept'
|
65
|
-
'X-iKnow-Client' => self.config.application_name,
|
66
|
-
'X-iKnow-Client-Version' => self.config.application_version,
|
67
|
-
'X-iKnow-Client-URL' => self.config.application_url,
|
86
|
+
'User-Agent' => "#{self.config.application_name} v#{Iknow::Version.to_version} [#{self.config.user_agent}]",
|
87
|
+
'Accept' => 'text/x-json',
|
88
|
+
'X-iKnow-Gem-Client' => self.config.application_name,
|
89
|
+
'X-iKnow-Gem-Client-Version' => self.config.application_version,
|
90
|
+
'X-iKnow-Gem-Client-URL' => self.config.application_url,
|
68
91
|
}
|
69
|
-
|
92
|
+
end
|
93
|
+
|
94
|
+
def self.http_connect
|
95
|
+
http = Net::HTTP.new(self.config.api_host, self.config.api_port)
|
96
|
+
http.start do |conn|
|
97
|
+
request, format = yield
|
98
|
+
begin
|
99
|
+
timeout(self.config.timeout) do
|
100
|
+
response = conn.request(request)
|
101
|
+
handle_rest_response(response, format)
|
102
|
+
end
|
103
|
+
rescue
|
104
|
+
raise RESTError.new(:code => 408, :message => "iKnow! Gem Timeout (#{self.config.timeout} [sec])")
|
105
|
+
end
|
106
|
+
end
|
70
107
|
end
|
71
108
|
|
72
109
|
def self.path_with_params(path, params = {})
|
@@ -82,50 +119,47 @@ class Iknow::RestClient::Base
|
|
82
119
|
return path_with_params, params
|
83
120
|
end
|
84
121
|
|
85
|
-
def self.
|
86
|
-
|
87
|
-
|
88
|
-
|
89
|
-
|
90
|
-
|
91
|
-
|
122
|
+
def self.http_get(path, params = {})
|
123
|
+
http_connect do
|
124
|
+
params.merge!(:api_key => self.config.api_key) unless self.config.api_key == ''
|
125
|
+
path = (params.size > 0) ? "#{path}?#{params.to_http_str}" : path
|
126
|
+
get_req = Net::HTTP::Get.new(path, http_header)
|
127
|
+
[get_req, :json]
|
128
|
+
end
|
92
129
|
end
|
93
130
|
|
94
|
-
def self.
|
131
|
+
def self.http_post(iknow_auth, path, params = {})
|
95
132
|
self.api_key_required
|
96
133
|
params.merge!(:api_key => self.config.api_key)
|
97
134
|
case iknow_auth.mode
|
98
|
-
when :oauth
|
135
|
+
when :oauth
|
99
136
|
response = iknow_auth.auth_token.post(path, params, http_header)
|
100
|
-
handle_rest_response(response)
|
101
|
-
response.body
|
137
|
+
handle_rest_response(response, :text)
|
102
138
|
when :basic_auth
|
103
|
-
|
104
|
-
|
105
|
-
|
106
|
-
|
107
|
-
|
139
|
+
http_connect do
|
140
|
+
post_req = Net::HTTP::Post.new(path, http_header)
|
141
|
+
post_req.body = params.to_http_str
|
142
|
+
post_req.basic_auth(iknow_auth.account.username, iknow_auth.account.password)
|
143
|
+
[post_req, :text]
|
108
144
|
end
|
109
145
|
end
|
110
146
|
end
|
111
147
|
|
112
|
-
def self.
|
148
|
+
def self.http_delete(iknow_auth, path, params = {})
|
113
149
|
self.api_key_required
|
114
150
|
params.merge!(:api_key => self.config.api_key)
|
115
151
|
case iknow_auth.mode
|
116
152
|
when :oauth
|
117
153
|
response = iknow_auth.auth_token.delete(path, params.stringfy_keys!.stringfy_values!)
|
118
|
-
handle_rest_response(response)
|
154
|
+
handle_rest_response(response, :nothing)
|
119
155
|
when :basic_auth
|
120
|
-
|
121
|
-
|
122
|
-
|
123
|
-
|
156
|
+
http_connect do
|
157
|
+
delete_req = Net::HTTP::Post.new(path, http_header)
|
158
|
+
delete_req.body = params.merge(:_method => 'DELETE').to_http_str
|
159
|
+
delete_req.basic_auth(iknow_auth.account.username, iknow_auth.account.password)
|
160
|
+
[delete_req, :nothing]
|
124
161
|
end
|
125
162
|
end
|
126
163
|
end
|
127
164
|
|
128
|
-
private_class_method :raise_rest_error, :handle_rest_response, :http_header,
|
129
|
-
:path_with_params, :http_get_request, :http_post_request, :http_delete_request
|
130
|
-
|
131
165
|
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: iknow
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.1.
|
4
|
+
version: 0.1.1
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- nov
|
@@ -9,7 +9,7 @@ autorequire:
|
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
11
|
|
12
|
-
date: 2008-12-
|
12
|
+
date: 2008-12-20 00:00:00 +09:00
|
13
13
|
default_executable:
|
14
14
|
dependencies:
|
15
15
|
- !ruby/object:Gem::Dependency
|
@@ -32,16 +32,6 @@ dependencies:
|
|
32
32
|
- !ruby/object:Gem::Version
|
33
33
|
version: "0"
|
34
34
|
version:
|
35
|
-
- !ruby/object:Gem::Dependency
|
36
|
-
name: mechanize
|
37
|
-
type: :runtime
|
38
|
-
version_requirement:
|
39
|
-
version_requirements: !ruby/object:Gem::Requirement
|
40
|
-
requirements:
|
41
|
-
- - ">="
|
42
|
-
- !ruby/object:Gem::Version
|
43
|
-
version: "0"
|
44
|
-
version:
|
45
35
|
- !ruby/object:Gem::Dependency
|
46
36
|
name: oauth
|
47
37
|
type: :runtime
|