iknow 0.1.0 → 0.1.1
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.
- 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
|