croudia 1.0.8 → 1.0.9

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.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 6faf517b484c015bd638bfb3f87d03dd50058c63
4
- data.tar.gz: 4bfa7828051298f954d02bc370c3304ed48ce1a3
3
+ metadata.gz: 35e3879bf61ffee0163b39e54634e1a8d9991813
4
+ data.tar.gz: cf39c427d33d8f07d54a50b1cf9622499f08ce40
5
5
  SHA512:
6
- metadata.gz: a032e89cc85042b633bcb00a1c62cd02e3c9240f750322fbed68ad1d7cc4dba30bbf27a530bf2654cb5c5531b5cd45e5f85b1f3d68e75669fdc239700df63796
7
- data.tar.gz: aa7fe928f57ca1b93908a3236abf0ff7bf8087987d90140b99fbc96552cb0dc7f96397ec0e676858f6ce916cb269263aa6f200f35916e6969cebe43336fd8549
6
+ metadata.gz: c88dc315377489afa9fafa63cf8041c5df7e1559b254bfa7e68e6e34d30ac6dd6caa438353abd3a3786afe235855f87549132188cdd68a7d735cc5f97ad80c94
7
+ data.tar.gz: 51e113458a23c95d517f85b67dd5cce947713ec1db00acf5300e323a063e2fb4756b2c7bb6894e6c6b29aab0ca6844b30263c38d75275b3568d0898995b48d8b
@@ -12,6 +12,17 @@ module Croudia
12
12
  Croudia::User.new(resp)
13
13
  end
14
14
  alias current_user verify_credentials
15
+
16
+ # Update profile image
17
+ #
18
+ # @param image [File] New profile image
19
+ # @param params [Hash]
20
+ # @return [Croudia::User] Authenticated user object with new image
21
+ def update_profile_image(image, params={})
22
+ merge_file!(params, image, :image)
23
+ resp = post('/account/update_profile_image.json', params)
24
+ Croudia::User.new(resp)
25
+ end
15
26
  end
16
27
  end
17
28
  end
@@ -1,3 +1,4 @@
1
+ require 'croudia/relationship'
1
2
  require 'croudia/user'
2
3
 
3
4
  module Croudia
@@ -25,6 +26,19 @@ module Croudia
25
26
  Croudia::User.new(resp)
26
27
  end
27
28
 
29
+ # Show relationship between two users
30
+ #
31
+ # @param source [String, Integer, Croudia::User]
32
+ # @param target [String, Integer, Croudia::User]
33
+ # @param params [Hash]
34
+ # @return [Croudia::Relationship]
35
+ def friendship(source, target={}, params={})
36
+ merge_user!(params, source, :source_screen_name, :source_id)
37
+ merge_user!(params, target, :target_screen_name, :target_id)
38
+ resp = get('/friendships/show.json', params)
39
+ Croudia::Relationship.new(resp)
40
+ end
41
+
28
42
  # Lookup Friendships
29
43
  #
30
44
  # @param *users [String, Integer, Croudia::User]
@@ -15,6 +15,18 @@ module Croudia
15
15
  Croudia::Status.new(resp)
16
16
  end
17
17
 
18
+ # Update status with media
19
+ #
20
+ # @param status [String] Status text
21
+ # @param media [File] Image to upload with
22
+ # @return [Croudia::Status]
23
+ def update_with_media(status, media={}, params={})
24
+ merge_text!(params, status)
25
+ merge_file!(params, media, :media)
26
+ resp = post('/statuses/update_with_media.json', params)
27
+ Croudia::Status.new(resp)
28
+ end
29
+
18
30
  # Destroy a status
19
31
  #
20
32
  # @param status_id [String, Integer, Croudia::Status] Status to delete
@@ -13,6 +13,17 @@ module Croudia
13
13
  resp = get('/users/show.json', params)
14
14
  Croudia::User.new(resp)
15
15
  end
16
+
17
+ # Lookup Users
18
+ #
19
+ # @param *users [String, Integer, Croudia::User]
20
+ # @param params [Hash]
21
+ # @return [Array<Croudia::User>]
22
+ def users(*args)
23
+ merge_users!(params = {}, args)
24
+ resp = post('/users/lookup.json', params)
25
+ objects(Croudia::User, resp)
26
+ end
16
27
  end
17
28
  end
18
29
  end
@@ -15,16 +15,28 @@ module Croudia
15
15
  end
16
16
  end
17
17
 
18
- def merge_user!(params, user)
18
+ def merge_file!(params, file, key=:file)
19
+ case file
20
+ when Hash
21
+ params.merge!(file)
22
+ when File
23
+ params[key] = file
24
+ else
25
+ raise ArgumentError, "#{key} must be a File"
26
+ end
27
+ params
28
+ end
29
+
30
+ def merge_user!(params, user, sn_key=:screen_name, user_key=:user_id)
19
31
  case user
20
32
  when Hash
21
33
  params.merge!(user)
22
34
  when String
23
- params[:screen_name] = user
35
+ params[sn_key] = user
24
36
  when Integer
25
- params[:user_id] = user
37
+ params[user_key] = user
26
38
  when Croudia::User
27
- params[:user_id] = user.id_str
39
+ params[user_key] = user.id_str
28
40
  else
29
41
  raise ArgumentError, 'user must be a String, Integer or User'
30
42
  end
@@ -60,7 +60,6 @@ module Croudia
60
60
  def request(method, path, params={})
61
61
  connection.send(method.to_sym, path, params) do |request|
62
62
  request.headers[:authorization] = "Bearer #{@access_token}" if @access_token
63
- request.headers[:content_type] = 'application/x-www-form-urlencoded; charset=utf-8'
64
63
  end.body
65
64
  end
66
65
 
@@ -1,6 +1,7 @@
1
1
  require 'faraday'
2
2
  require 'faraday_middleware'
3
3
  require 'croudia/configurable'
4
+ require 'croudia/request/multipart_with_file'
4
5
  require 'croudia/version'
5
6
 
6
7
  module Croudia
@@ -13,19 +14,21 @@ module Croudia
13
14
  },
14
15
  request: {
15
16
  open_timeout: 5,
16
- timeout: 10,
17
+ timeout: 20,
17
18
  },
18
19
  ssl: {
19
20
  verify: true,
20
21
  },
21
22
  } unless defined? Croudia::Default::CONNECTION_OPTIONS
22
23
  MIDDLEWARE = Faraday::Builder.new do |builder|
24
+ builder.request :multipart_with_file
25
+ builder.request :multipart
23
26
  builder.request :url_encoded
24
27
 
25
28
  builder.response :json
26
29
  builder.response :raise_error
27
30
 
28
- builder.adapter :net_http
31
+ builder.adapter Faraday.default_adapter
29
32
  end unless defined? Croudia::Default::MIDDLEWARE
30
33
 
31
34
  class << self
@@ -0,0 +1,20 @@
1
+ require 'croudia/base'
2
+
3
+ class Croudia::Relationship < Croudia::Base
4
+ KEYS = [
5
+ :souorce,
6
+ :target,
7
+ ]
8
+
9
+ def relationship
10
+ self
11
+ end
12
+
13
+ def source
14
+ @source ||= Croudia::User.new(@attrs['relationship']['source'])
15
+ end
16
+
17
+ def target
18
+ @target ||= Croudia::User.new(@attrs['relationship']['target'])
19
+ end
20
+ end
@@ -0,0 +1,37 @@
1
+ require 'faraday'
2
+
3
+ module Croudia
4
+ module Request
5
+ class MultipartWithFile < Faraday::Middleware
6
+ CONTENT_TYPE = 'Content-Type'
7
+
8
+ def call(env)
9
+ env[:body].each do |key, value|
10
+ if value.respond_to?(:to_io)
11
+ env[:body][key] = Faraday::UploadIO.new(value, mime_type(value.path))
12
+ end
13
+ end if env[:body].is_a?(::Hash)
14
+ @app.call(env)
15
+ end
16
+
17
+ private
18
+
19
+ def mime_type(path)
20
+ case path
21
+ when /\.jpe?g\z/i
22
+ 'image/jpeg'
23
+ when /\.gif\z/i
24
+ 'image/gif'
25
+ when /\.png\z/i
26
+ 'image/png'
27
+ else
28
+ 'application/octet-stream'
29
+ end
30
+ end
31
+
32
+ end
33
+ end
34
+ end
35
+
36
+ Faraday.register_middleware :request,
37
+ :multipart_with_file => lambda { Croudia::Request::MultipartWithFile }
data/lib/croudia/user.rb CHANGED
@@ -7,15 +7,19 @@ module Croudia
7
7
 
8
8
  KEYS = [
9
9
  :id_str,
10
+ :blocking,
10
11
  :connections,
11
12
  :description,
12
13
  :favorites_count,
13
14
  :follow_request_sent,
15
+ :followed_by,
16
+ :following,
14
17
  :followers_count,
15
18
  :friends_count,
16
19
  :location,
17
20
  :name,
18
21
  :profile_image_url_https,
22
+ :protected,
19
23
  :screen_name,
20
24
  :statuses_count,
21
25
  :url,
@@ -1,3 +1,3 @@
1
1
  module Croudia
2
- VERSION = '1.0.8'
2
+ VERSION = '1.0.9'
3
3
  end
@@ -22,4 +22,23 @@ describe Croudia::API::Account do
22
22
  expect(@client.verify_credentials).to be_a Croudia::User
23
23
  end
24
24
  end
25
+
26
+ describe '#update_profile_image' do
27
+ before do
28
+ stub_post('/account/update_profile_image.json').to_return(
29
+ body: fixture(:user),
30
+ headers: { content_type: 'application/json; charset=utf-8' }
31
+ )
32
+ end
33
+
34
+ it 'requests the correct resource' do
35
+ @client.update_profile_image(fixture('image.jpg'))
36
+ expect(a_post('/account/update_profile_image.json')).to have_been_made
37
+ end
38
+
39
+ it 'returns a Croudia::User' do
40
+ subject = @client.update_profile_image(fixture('image.jpg'))
41
+ expect(subject).to be_a Croudia::User
42
+ end
43
+ end
25
44
  end
@@ -85,6 +85,49 @@ describe Croudia::API::Friendships do
85
85
  end
86
86
  end
87
87
 
88
+ describe '#friendship' do
89
+ before do
90
+ stub_get('/friendships/show.json').with(
91
+ query: {
92
+ source_id: '1234',
93
+ target_id: '3456',
94
+ }
95
+ ).to_return(
96
+ body: fixture(:friendship),
97
+ headers: { content_type: 'appplication/json; charset=utf-8' }
98
+ )
99
+ end
100
+
101
+ context 'when passing a Hash' do
102
+ it 'requests the correct resource' do
103
+ @client.friendship(source_id: 1234, target_id: 3456)
104
+ expect(a_get('/friendships/show.json').with(
105
+ query: {
106
+ source_id: '1234',
107
+ target_id: '3456',
108
+ }
109
+ )).to have_been_made
110
+ end
111
+ end
112
+
113
+ context 'when passing each argument' do
114
+ it 'requests the correct resource' do
115
+ @client.friendship(1234, 3456)
116
+ expect(a_get('/friendships/show.json').with(
117
+ query: {
118
+ source_id: '1234',
119
+ target_id: '3456',
120
+ }
121
+ )).to have_been_made
122
+ end
123
+ end
124
+
125
+ it 'returns a Relationship' do
126
+ subject = @client.friendship(1234, 3456)
127
+ expect(subject).to be_a Croudia::Relationship
128
+ end
129
+ end
130
+
88
131
  describe '#friendships' do
89
132
  context 'when String is passed' do
90
133
  before do
@@ -49,6 +49,34 @@ describe Croudia::API::Statuses do
49
49
  end
50
50
  end
51
51
 
52
+ describe '#update_with_media' do
53
+ before do
54
+ stub_post('/statuses/update_with_media.json').to_return(
55
+ body: fixture(:status),
56
+ headers: { content_type: 'application/json; charset=utf-8' }
57
+ )
58
+ end
59
+
60
+ context 'when passing each argument' do
61
+ it 'requests the correct resource' do
62
+ @client.update_with_media('Hi', fixture('image.jpg'))
63
+ expect(a_post('/statuses/update_with_media.json')).to have_been_made
64
+ end
65
+ end
66
+
67
+ context 'when passing a Hash' do
68
+ it 'requests the correct resource' do
69
+ @client.update_with_media(status: 'Hi', media: fixture('image.jpg'))
70
+ expect(a_post('/statuses/update_with_media.json')).to have_been_made
71
+ end
72
+ end
73
+
74
+ it 'returns a Croudia::Status' do
75
+ subject = @client.update_with_media('Hi', fixture('image.jpg'))
76
+ expect(subject).to be_a Croudia::Status
77
+ end
78
+ end
79
+
52
80
  describe '#destroy_status' do
53
81
  before do
54
82
  stub_post('/statuses/destroy/1234.json').to_return(
@@ -0,0 +1,155 @@
1
+ require 'helper'
2
+
3
+ describe Croudia::API::Users do
4
+ before do
5
+ @client = Croudia::Client.new
6
+ end
7
+
8
+ describe '#user' do
9
+ before do
10
+ stub_get('/users/show.json').with(
11
+ query: { screen_name: 'wktk' }
12
+ ).to_return(
13
+ body: fixture(:user),
14
+ headers: { content_type: 'application/json; chrset=utf-8' }
15
+ )
16
+
17
+ stub_get('/users/show.json').with(
18
+ query: { user_id: 1234 }
19
+ ).to_return(
20
+ body: fixture(:user),
21
+ headers: { content_type: 'application/json; chrset=utf-8' }
22
+ )
23
+ end
24
+
25
+ context 'when string is passed' do
26
+ it 'requests the correct resource' do
27
+ @client.user('wktk')
28
+ expect(a_get('/users/show.json').with(
29
+ query: { screen_name: 'wktk' }
30
+ )).to have_been_made
31
+ end
32
+ end
33
+
34
+ context 'when integer is passed' do
35
+ it 'requests the correct resource' do
36
+ @client.user(1234)
37
+ expect(a_get('/users/show.json').with(
38
+ query: { user_id: 1234 }
39
+ )).to have_been_made
40
+ end
41
+ end
42
+
43
+ context 'when hash is passed' do
44
+ it 'requests the correct resource' do
45
+ @client.user(screen_name: 'wktk')
46
+ expect(a_get('/users/show.json').with(
47
+ query: { screen_name: 'wktk' }
48
+ )).to have_been_made
49
+ end
50
+ end
51
+
52
+ it 'returns User object' do
53
+ expect(@client.user('wktk')).to be_a Croudia::User
54
+ end
55
+ end
56
+
57
+ describe '#users' do
58
+ context 'when String is passed' do
59
+ before do
60
+ stub_post('/users/lookup.json').with(
61
+ body: {
62
+ screen_name: 'wktk',
63
+ }
64
+ ).to_return(
65
+ body: fixture(:users),
66
+ headers: { content_type: 'application/json; charset=utf-8' }
67
+ )
68
+ end
69
+
70
+ it 'requests the correct resource' do
71
+ @client.users('wktk')
72
+ expect(a_post('/users/lookup.json')).to have_been_made
73
+ end
74
+
75
+ it 'returns array of Croudia::User' do
76
+ subject = @client.users('wktk')
77
+ expect(subject).to be_an Array
78
+ subject.each { |u| expect(u).to be_a Croudia::User }
79
+ end
80
+ end
81
+
82
+ context 'when Integer is passed' do
83
+ before do
84
+ stub_post('/users/lookup.json').with(
85
+ body: {
86
+ user_id: '1234',
87
+ }
88
+ ).to_return(
89
+ body: fixture(:users),
90
+ headers: { content_type: 'application/json; charset=utf-8' }
91
+ )
92
+ end
93
+
94
+ it 'requests the correct resource' do
95
+ @client.users(1234)
96
+ expect(a_post('/users/lookup.json')).to have_been_made
97
+ end
98
+ end
99
+
100
+ context 'when multiple Strings are passed' do
101
+ before do
102
+ stub_post('/users/lookup.json').with(
103
+ body: {
104
+ screen_name: 'wktk,croudia',
105
+ }
106
+ ).to_return(
107
+ body: fixture(:users),
108
+ headers: { content_type: 'application/json; charset=utf-8' }
109
+ )
110
+ end
111
+
112
+ it 'requests the correct resource' do
113
+ @client.users('wktk', 'croudia')
114
+ expect(a_post('/users/lookup.json')).to have_been_made
115
+ end
116
+ end
117
+
118
+ context 'when multiple Integers are passed' do
119
+ before do
120
+ stub_post('/users/lookup.json').with(
121
+ body: {
122
+ user_id: '1234,4567',
123
+ }
124
+ ).to_return(
125
+ body: fixture(:users),
126
+ headers: { content_type: 'application/json; charset=utf-8' }
127
+ )
128
+ end
129
+
130
+ it 'requests the correct resource' do
131
+ @client.users(1234, 4567)
132
+ expect(a_post('/users/lookup.json')).to have_been_made
133
+ end
134
+ end
135
+
136
+ context 'when multiple String and Integer are passed' do
137
+ before do
138
+ stub_post('/users/lookup.json').with(
139
+ body: {
140
+ user_id: '1234,4567',
141
+ screen_name: 'wktk,croudia',
142
+ }
143
+ ).to_return(
144
+ body: fixture(:users),
145
+ headers: { content_type: 'application/json; charset=utf-8' }
146
+ )
147
+ end
148
+
149
+ it 'requests the correct resource' do
150
+ @client.users('wktk', 1234, 'croudia', 4567)
151
+ expect(a_post('/users/lookup.json')).to have_been_made
152
+ end
153
+ end
154
+ end
155
+ end
@@ -0,0 +1,20 @@
1
+ {
2
+ "relationship": {
3
+ "source": {
4
+ "blocking": null,
5
+ "followed_by": true,
6
+ "following": false,
7
+ "id": 1234,
8
+ "id_str": "1234",
9
+ "screen_name": "wktk"
10
+ },
11
+ "target": {
12
+ "blocking": null,
13
+ "followed_by": true,
14
+ "following": false,
15
+ "id": 3456,
16
+ "id_str": "3456",
17
+ "screen_name": "croudia"
18
+ }
19
+ }
20
+ }
Binary file
@@ -0,0 +1 @@
1
+ [{"id":7987,"id_str":"7987","name":"wktk","screen_name":"wktk","profile_image_url_https":"https://croudia.com/testimages/download/9423","created_at":"Sun, 29 Jul 2012 19:21:21 +0900","description":"気軽に fav ります。Twitter でも @wktk です。 \r\nhttps://twitter.com/wktk\r\nhttps://github.com/wktk","favorites_count":68,"follow_request_sent":"underdevelopment","followers_count":12,"following":"underdevelopment","friends_count":11,"location":"Japan","statuses_count":26,"protected":false,"url":"http://wktk.jp/"},{"id":7987,"id_str":"7987","name":"wktk","screen_name":"wktk","profile_image_url_https":"https://croudia.com/testimages/download/9423","created_at":"Sun, 29 Jul 2012 19:21:21 +0900","description":"気軽に fav ります。Twitter でも @wktk です。 \r\nhttps://twitter.com/wktk\r\nhttps://github.com/wktk","favorites_count":68,"follow_request_sent":"underdevelopment","followers_count":12,"following":"underdevelopment","friends_count":11,"location":"Japan","statuses_count":26,"protected":false,"url":"http://wktk.jp/"}]
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: croudia
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.0.8
4
+ version: 1.0.9
5
5
  platform: ruby
6
6
  authors:
7
7
  - wktk
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2013-07-25 00:00:00.000000000 Z
11
+ date: 2013-08-17 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: faraday
@@ -126,6 +126,8 @@ files:
126
126
  - lib/croudia/default.rb
127
127
  - lib/croudia/ext/openssl.rb
128
128
  - lib/croudia/identity.rb
129
+ - lib/croudia/relationship.rb
130
+ - lib/croudia/request/multipart_with_file.rb
129
131
  - lib/croudia/secret_mail.rb
130
132
  - lib/croudia/source.rb
131
133
  - lib/croudia/status.rb
@@ -138,7 +140,7 @@ files:
138
140
  - spec/croudia/api/secret_mails_spec.rb
139
141
  - spec/croudia/api/statuses_spec.rb
140
142
  - spec/croudia/api/timelines_spec.rb
141
- - spec/croudia/api/user_spec.rb
143
+ - spec/croudia/api/users_spec.rb
142
144
  - spec/croudia/base_spec.rb
143
145
  - spec/croudia/client_spec.rb
144
146
  - spec/croudia/identity_spec.rb
@@ -148,12 +150,15 @@ files:
148
150
  - spec/croudia/user_spec.rb
149
151
  - spec/croudia_spec.rb
150
152
  - spec/fixtures/access_token.json
153
+ - spec/fixtures/friendship.json
151
154
  - spec/fixtures/friendships.json
155
+ - spec/fixtures/image.jpg
152
156
  - spec/fixtures/secret_mail.json
153
157
  - spec/fixtures/secret_mails.json
154
158
  - spec/fixtures/status.json
155
159
  - spec/fixtures/timeline.json
156
160
  - spec/fixtures/user.json
161
+ - spec/fixtures/users.json
157
162
  - spec/helper.rb
158
163
  homepage: https://github.com/wktk/croudia-gem
159
164
  licenses:
@@ -187,7 +192,7 @@ test_files:
187
192
  - spec/croudia/api/secret_mails_spec.rb
188
193
  - spec/croudia/api/statuses_spec.rb
189
194
  - spec/croudia/api/timelines_spec.rb
190
- - spec/croudia/api/user_spec.rb
195
+ - spec/croudia/api/users_spec.rb
191
196
  - spec/croudia/base_spec.rb
192
197
  - spec/croudia/client_spec.rb
193
198
  - spec/croudia/identity_spec.rb
@@ -197,10 +202,13 @@ test_files:
197
202
  - spec/croudia/user_spec.rb
198
203
  - spec/croudia_spec.rb
199
204
  - spec/fixtures/access_token.json
205
+ - spec/fixtures/friendship.json
200
206
  - spec/fixtures/friendships.json
207
+ - spec/fixtures/image.jpg
201
208
  - spec/fixtures/secret_mail.json
202
209
  - spec/fixtures/secret_mails.json
203
210
  - spec/fixtures/status.json
204
211
  - spec/fixtures/timeline.json
205
212
  - spec/fixtures/user.json
213
+ - spec/fixtures/users.json
206
214
  - spec/helper.rb
@@ -1,56 +0,0 @@
1
- require 'helper'
2
-
3
- describe Croudia::API::Users do
4
- before do
5
- @client = Croudia::Client.new
6
- end
7
-
8
- describe '#user' do
9
- before do
10
- stub_get('/users/show.json').with(
11
- query: { screen_name: 'wktk' }
12
- ).to_return(
13
- body: fixture(:user),
14
- headers: { content_type: 'application/json; chrset=utf-8' }
15
- )
16
-
17
- stub_get('/users/show.json').with(
18
- query: { user_id: 1234 }
19
- ).to_return(
20
- body: fixture(:user),
21
- headers: { content_type: 'application/json; chrset=utf-8' }
22
- )
23
- end
24
-
25
- context 'when string is passed' do
26
- it 'requests the correct resource' do
27
- @client.user('wktk')
28
- expect(a_get('/users/show.json').with(
29
- query: { screen_name: 'wktk' }
30
- )).to have_been_made
31
- end
32
- end
33
-
34
- context 'when integer is passed' do
35
- it 'requests the correct resource' do
36
- @client.user(1234)
37
- expect(a_get('/users/show.json').with(
38
- query: { user_id: 1234 }
39
- )).to have_been_made
40
- end
41
- end
42
-
43
- context 'when hash is passed' do
44
- it 'requests the correct resource' do
45
- @client.user(screen_name: 'wktk')
46
- expect(a_get('/users/show.json').with(
47
- query: { screen_name: 'wktk' }
48
- )).to have_been_made
49
- end
50
- end
51
-
52
- it 'returns User object' do
53
- expect(@client.user('wktk')).to be_a Croudia::User
54
- end
55
- end
56
- end