croudia 0.0.2 → 1.0.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +7 -0
- data/.gitignore +2 -0
- data/README.md +31 -14
- data/Rakefile +11 -11
- data/croudia.gemspec +10 -8
- data/lib/croudia/api/favorites.rb +43 -0
- data/lib/croudia/api/oauth.rb +32 -0
- data/lib/croudia/api/statuses.rb +55 -0
- data/lib/croudia/api/timelines.rb +57 -0
- data/lib/croudia/base.rb +44 -0
- data/lib/croudia/client.rb +64 -0
- data/lib/croudia/configurable.rb +39 -0
- data/lib/croudia/creatable.rb +9 -0
- data/lib/croudia/default.rb +63 -0
- data/lib/croudia/ext/openssl.rb +19 -0
- data/lib/croudia/identity.rb +22 -39
- data/lib/croudia/status.rb +26 -0
- data/lib/croudia/user.rb +12 -43
- data/lib/croudia/version.rb +1 -1
- data/lib/croudia.rb +21 -12
- data/spec/croudia/api/favorites_spec.rb +35 -0
- data/spec/croudia/api/oauth_spec.rb +53 -0
- data/spec/croudia/api/statuses_spec.rb +73 -0
- data/spec/croudia/api/timelines_spec.rb +93 -0
- data/spec/croudia/base_spec.rb +27 -0
- data/spec/croudia/client_spec.rb +115 -0
- data/spec/croudia/identity_spec.rb +29 -65
- data/spec/croudia/status_spec.rb +30 -0
- data/spec/croudia/user_spec.rb +30 -43
- data/spec/croudia_spec.rb +48 -49
- data/spec/fixtures/access_token.json +6 -0
- data/spec/fixtures/status.json +1 -0
- data/spec/fixtures/timeline.json +1 -0
- data/spec/helper.rb +49 -32
- metadata +80 -84
- data/lib/croudia/api.rb +0 -5
- data/lib/croudia/error.rb +0 -5
- data/lib/croudia/scraper/friendships.rb +0 -72
- data/lib/croudia/scraper/login.rb +0 -42
- data/lib/croudia/scraper/parser/users.rb +0 -59
- data/lib/croudia/scraper/parser/voices.rb +0 -32
- data/lib/croudia/scraper/parser.rb +0 -13
- data/lib/croudia/scraper/users.rb +0 -20
- data/lib/croudia/scraper/voices.rb +0 -59
- data/lib/croudia/scraper.rb +0 -63
- data/lib/croudia/voice.rb +0 -21
- data/spec/croudia/api_spec.rb +0 -7
- data/spec/croudia/error_spec.rb +0 -13
- data/spec/croudia/scraper/friendships_spec.rb +0 -115
- data/spec/croudia/scraper/login_spec.rb +0 -137
- data/spec/croudia/scraper/parser/users_spec.rb +0 -292
- data/spec/croudia/scraper/parser/voices_spec.rb +0 -119
- data/spec/croudia/scraper/users_spec.rb +0 -78
- data/spec/croudia/scraper/voices_spec.rb +0 -178
- data/spec/croudia/scraper_spec.rb +0 -120
- data/spec/croudia/version_spec.rb +0 -7
- data/spec/croudia/voice_spec.rb +0 -16
- data/spec/fixtures/follow_request.html +0 -69
- data/spec/fixtures/follower_wktk.html +0 -89
- data/spec/fixtures/following_wktk.html +0 -89
- data/spec/fixtures/user_wktk1.html +0 -72
- data/spec/fixtures/user_wktk2.html +0 -75
- data/spec/fixtures/user_wktk3.html +0 -83
- data/spec/fixtures/voices_reply_list.html +0 -55
- data/spec/fixtures/voices_timeline.html +0 -60
- data/spec/fixtures/voices_written.html +0 -20
checksums.yaml
ADDED
@@ -0,0 +1,7 @@
|
|
1
|
+
---
|
2
|
+
SHA1:
|
3
|
+
metadata.gz: fb3a0686cfdaa7c6f90d6e512c28a40f6367a6cb
|
4
|
+
data.tar.gz: 8350f383e5f846169b696c6653afd805f6498c16
|
5
|
+
SHA512:
|
6
|
+
metadata.gz: 1fe3050abdbbd48263071db6435d669386ee2b846739d07db79498525653934aeaff6d24b3aa9ec95b089773affbad8cd0150af9002882fda7b2372a8d577372
|
7
|
+
data.tar.gz: f2f081a62a57f4e20267c9d141eac2138ecc95067240b88466d6b5584ce65ed3c7bdb252c1d70ccd00a0587c424ca9b88767e5e4e35955f3ffb13dd40adb36f6
|
data/.gitignore
CHANGED
data/README.md
CHANGED
@@ -1,6 +1,6 @@
|
|
1
1
|
# Croudia
|
2
2
|
|
3
|
-
A
|
3
|
+
A Ruby Wapper for the [Croudia](https://croudia.com) API
|
4
4
|
|
5
5
|
## Installation
|
6
6
|
|
@@ -18,24 +18,41 @@ Or install it yourself as:
|
|
18
18
|
|
19
19
|
## Usage
|
20
20
|
|
21
|
-
|
22
|
-
require 'croudia'
|
21
|
+
### Getting an access token
|
23
22
|
|
24
|
-
|
25
|
-
croudia
|
23
|
+
``` ruby
|
24
|
+
require "croudia"
|
26
25
|
|
27
|
-
#
|
28
|
-
croudia = Croudia.new
|
29
|
-
|
26
|
+
# Initialize a new instance
|
27
|
+
croudia = Croudia::Client.new(
|
28
|
+
client_id: "client_id",
|
29
|
+
client_secret: "client_secret"
|
30
|
+
)
|
30
31
|
|
31
|
-
#
|
32
|
-
croudia.
|
32
|
+
# Get URL
|
33
|
+
url = croudia.authorize_url
|
33
34
|
|
34
|
-
#
|
35
|
-
croudia.
|
35
|
+
# Or add scope query in URL
|
36
|
+
url = croudia.authrorize_url(scope: "scope_value")
|
36
37
|
|
37
|
-
#
|
38
|
-
croudia.
|
38
|
+
# Retrieve an access token
|
39
|
+
access_token = croudia.get_access_token("code param returned by user")
|
40
|
+
#=> { "access_token" => " ... ", "refresh_token" => " ... ", ... }
|
41
|
+
```
|
42
|
+
|
43
|
+
### Using the API
|
44
|
+
|
45
|
+
``` ruby
|
46
|
+
require "croudia"
|
47
|
+
|
48
|
+
# Create an instance
|
49
|
+
croudia = Croudia::Client.new(access_token: "access_token")
|
50
|
+
|
51
|
+
# Get home_timeline
|
52
|
+
home_timeline = croudia.home_timeline
|
53
|
+
|
54
|
+
# Post a status
|
55
|
+
posted_status = croudia.update("Hello!")
|
39
56
|
```
|
40
57
|
|
41
58
|
## Contributing
|
data/Rakefile
CHANGED
@@ -1,11 +1,11 @@
|
|
1
|
-
#!/usr/bin/env rake
|
2
|
-
|
3
|
-
require 'bundler/gem_tasks'
|
4
|
-
require 'rspec/core/rake_task'
|
5
|
-
|
6
|
-
RSpec::Core::RakeTask.new(:spec) do |spec|
|
7
|
-
spec.pattern = 'spec/**/*_spec.rb'
|
8
|
-
spec.rspec_opts = ['-cfs']
|
9
|
-
end
|
10
|
-
|
11
|
-
task :default => :spec
|
1
|
+
#!/usr/bin/env rake
|
2
|
+
|
3
|
+
require 'bundler/gem_tasks'
|
4
|
+
require 'rspec/core/rake_task'
|
5
|
+
|
6
|
+
RSpec::Core::RakeTask.new(:spec) do |spec|
|
7
|
+
spec.pattern = 'spec/**/*_spec.rb'
|
8
|
+
spec.rspec_opts = ['-cfs']
|
9
|
+
end
|
10
|
+
|
11
|
+
task :default => :spec
|
data/croudia.gemspec
CHANGED
@@ -3,9 +3,9 @@ require File.expand_path('../lib/croudia/version', __FILE__)
|
|
3
3
|
|
4
4
|
Gem::Specification.new do |gem|
|
5
5
|
gem.authors = ['wktk']
|
6
|
-
gem.email = ['
|
7
|
-
gem.description = '
|
8
|
-
gem.summary = 'Croudia
|
6
|
+
gem.email = ['mail@wktk.jp']
|
7
|
+
gem.description = 'Ruby Wrapper for the Croudia API'
|
8
|
+
gem.summary = 'Croudia API'
|
9
9
|
gem.homepage = 'https://github.com/wktk/croudia-gem'
|
10
10
|
|
11
11
|
gem.files = `git ls-files`.split($\)
|
@@ -15,9 +15,11 @@ Gem::Specification.new do |gem|
|
|
15
15
|
gem.require_paths = ['lib']
|
16
16
|
gem.version = Croudia::VERSION
|
17
17
|
|
18
|
-
gem.add_dependency '
|
19
|
-
gem.
|
20
|
-
gem.
|
21
|
-
gem.add_development_dependency '
|
22
|
-
gem.add_development_dependency '
|
18
|
+
gem.add_dependency 'faraday', '~> 0.8.7'
|
19
|
+
gem.add_dependency 'faraday_middleware', '~> 0.9.0'
|
20
|
+
gem.add_dependency 'hashie', '~> 2.0.5'
|
21
|
+
gem.add_development_dependency 'rake', '~> 10.1.0'
|
22
|
+
gem.add_development_dependency 'rdoc', '~> 4.0.1'
|
23
|
+
gem.add_development_dependency 'rspec', '~> 2.14.0'
|
24
|
+
gem.add_development_dependency 'webmock', '~> 1.13.0'
|
23
25
|
end
|
@@ -0,0 +1,43 @@
|
|
1
|
+
require 'croudia/status'
|
2
|
+
|
3
|
+
module Croudia
|
4
|
+
module API
|
5
|
+
module Favorites
|
6
|
+
# Favorite a status
|
7
|
+
#
|
8
|
+
# @param status_id [String, Integer, Croudia::Status]
|
9
|
+
# @param params [Hash]
|
10
|
+
# @return [Croudia::Status] Favorited status
|
11
|
+
def favorite(status_id, params={})
|
12
|
+
case status_id
|
13
|
+
when String, Integer
|
14
|
+
when Croudia::Status
|
15
|
+
status_id = status_id.id_str
|
16
|
+
else
|
17
|
+
raise ArgumentError, 'status_id is invalid'
|
18
|
+
end
|
19
|
+
|
20
|
+
resp = post("/favorites/create/#{status_id}.json", params)
|
21
|
+
Croudia::Status.new(resp)
|
22
|
+
end
|
23
|
+
|
24
|
+
# Unfavorite a status
|
25
|
+
#
|
26
|
+
# @param status_id [String, Integer, Croudia::Status]
|
27
|
+
# @param params [Hash]
|
28
|
+
# @return [Croudia::Status] Unfavorited status
|
29
|
+
def unfavorite(status_id, params={})
|
30
|
+
case status_id
|
31
|
+
when String, Integer
|
32
|
+
when Croudia::Status
|
33
|
+
status_id = status_id.id_str
|
34
|
+
else
|
35
|
+
raise ArgumentError, 'status_id is invalid'
|
36
|
+
end
|
37
|
+
|
38
|
+
resp = delete("/favorites/destroy/#{status_id}.json", params)
|
39
|
+
Croudia::Status.new(resp)
|
40
|
+
end
|
41
|
+
end
|
42
|
+
end
|
43
|
+
end
|
@@ -0,0 +1,32 @@
|
|
1
|
+
module Croudia
|
2
|
+
module API
|
3
|
+
module OAuth
|
4
|
+
# Authorize URL
|
5
|
+
#
|
6
|
+
# @return authorize_url [String]
|
7
|
+
def authorize_url(params={})
|
8
|
+
params[:client_id] ||= @client_id
|
9
|
+
params[:response_type] ||= 'code'
|
10
|
+
connection.build_url('/oauth/authorize', params).to_s.sub(/^https/, 'http')
|
11
|
+
end
|
12
|
+
|
13
|
+
# Retrieve access_token
|
14
|
+
#
|
15
|
+
# @param code [String] Authorize code passed from user
|
16
|
+
# @params params [Hash] Additional params
|
17
|
+
# @return access_token [Hash]
|
18
|
+
def get_access_token(code, params={})
|
19
|
+
case code
|
20
|
+
when String, Integer
|
21
|
+
params[:code] ||= code
|
22
|
+
when Hash
|
23
|
+
params = code.merge(params)
|
24
|
+
end
|
25
|
+
params[:client_id] ||= @client_id
|
26
|
+
params[:client_secret] ||= @client_secret
|
27
|
+
params[:grant_type] ||= 'authorization_code'
|
28
|
+
post('/oauth/token', params)
|
29
|
+
end
|
30
|
+
end
|
31
|
+
end
|
32
|
+
end
|
@@ -0,0 +1,55 @@
|
|
1
|
+
require 'croudia/status'
|
2
|
+
|
3
|
+
module Croudia
|
4
|
+
module API
|
5
|
+
module Statuses
|
6
|
+
# Update status
|
7
|
+
#
|
8
|
+
# @param status [String] Status text
|
9
|
+
# @param params [Hash] Additional params
|
10
|
+
# @return status [Croudia::Status] Posted status
|
11
|
+
def update(status, params={})
|
12
|
+
case status
|
13
|
+
when String
|
14
|
+
params[:status] ||= status
|
15
|
+
when Hash
|
16
|
+
params = status.merge(params)
|
17
|
+
end
|
18
|
+
|
19
|
+
resp = post('/statuses/update.json', params)
|
20
|
+
Croudia::Status.new(resp)
|
21
|
+
end
|
22
|
+
|
23
|
+
# Destroy a status
|
24
|
+
#
|
25
|
+
# @param status_id [String, Integer, Croudia::Status] Status to delete
|
26
|
+
# @param params [Hash]
|
27
|
+
# @return [Croudia::Status] Deleted status
|
28
|
+
def destroy_status(status_id, params={})
|
29
|
+
case status_id
|
30
|
+
when String, Integer
|
31
|
+
when Croudia::Status
|
32
|
+
status_id = status_id.id_str
|
33
|
+
end
|
34
|
+
|
35
|
+
post("/statuses/destroy/#{status_id}.json", params)
|
36
|
+
end
|
37
|
+
|
38
|
+
# Retrieve a status
|
39
|
+
#
|
40
|
+
# @param status_id [String, Integer, Croudia::Status]
|
41
|
+
# @param params [Hash]
|
42
|
+
# @return [Croudia::Status]
|
43
|
+
def status(status_id, params={})
|
44
|
+
case status_id
|
45
|
+
when String, Integer
|
46
|
+
when Croudia::Status
|
47
|
+
status_id = status_id.id_str
|
48
|
+
end
|
49
|
+
|
50
|
+
resp = get("/statuses/show/#{status_id}.json", params)
|
51
|
+
Croudia::Status.new(resp)
|
52
|
+
end
|
53
|
+
end
|
54
|
+
end
|
55
|
+
end
|
@@ -0,0 +1,57 @@
|
|
1
|
+
require 'croudia/status'
|
2
|
+
|
3
|
+
module Croudia
|
4
|
+
module API
|
5
|
+
module Timelines
|
6
|
+
# Public Timeline
|
7
|
+
#
|
8
|
+
# @param params [Hash] Additional params
|
9
|
+
# @return [Array<Croudia::Status>]
|
10
|
+
def public_timeline(params={})
|
11
|
+
resp = get('/statuses/public_timeline.json', params)
|
12
|
+
objectify_statuses(resp)
|
13
|
+
end
|
14
|
+
|
15
|
+
# Home Timeline
|
16
|
+
#
|
17
|
+
# @params params [Hash]
|
18
|
+
# @return [Array<Croudia::Status>]
|
19
|
+
def home_timeline(params={})
|
20
|
+
resp = get('/statuses/home_timeline.json', params)
|
21
|
+
objectify_statuses(resp)
|
22
|
+
end
|
23
|
+
|
24
|
+
# User Timeline
|
25
|
+
#
|
26
|
+
# @param user [String, Integer, Croudia::User]
|
27
|
+
# @param params [Hash]
|
28
|
+
# @return [Array<Croudia::Status>
|
29
|
+
def user_timeline(user, params={})
|
30
|
+
case user
|
31
|
+
when String
|
32
|
+
params[:screen_name] ||= user
|
33
|
+
when Integer
|
34
|
+
params[:user_id] ||= user
|
35
|
+
when Croudia::User
|
36
|
+
params[:user_id] ||= user.id_str
|
37
|
+
when Hash
|
38
|
+
params = user.merge(params)
|
39
|
+
end
|
40
|
+
|
41
|
+
resp = get('/statuses/user_timeline.json', params)
|
42
|
+
objectify_statuses(resp)
|
43
|
+
end
|
44
|
+
|
45
|
+
def mentions(params={})
|
46
|
+
resp = get('/statuses/mentions.json', params)
|
47
|
+
objectify_statuses(resp)
|
48
|
+
end
|
49
|
+
alias mentions_timeline mentions
|
50
|
+
|
51
|
+
private
|
52
|
+
def objectify_statuses(statuses)
|
53
|
+
statuses.map { |status| Croudia::Status.new(status) }
|
54
|
+
end
|
55
|
+
end
|
56
|
+
end
|
57
|
+
end
|
data/lib/croudia/base.rb
ADDED
@@ -0,0 +1,44 @@
|
|
1
|
+
module Croudia
|
2
|
+
class Base
|
3
|
+
class << self
|
4
|
+
def attr_reader(*attrs)
|
5
|
+
mod = Module.new do
|
6
|
+
attrs.each do |attr|
|
7
|
+
define_method(attr) do
|
8
|
+
@attrs[attr.to_sym]
|
9
|
+
end
|
10
|
+
define_method("#{attr}?") do
|
11
|
+
!!@attrs[attr.to_sym]
|
12
|
+
end
|
13
|
+
end
|
14
|
+
end
|
15
|
+
const_set(:Attributes, mod)
|
16
|
+
include mod
|
17
|
+
end
|
18
|
+
end
|
19
|
+
|
20
|
+
# Initialize a new object
|
21
|
+
#
|
22
|
+
# @param attrs [Hash]
|
23
|
+
# @return [Croudia::Base]
|
24
|
+
def initialize(attrs = {})
|
25
|
+
@attrs = attrs || {}
|
26
|
+
end
|
27
|
+
|
28
|
+
# Fetch an attribute
|
29
|
+
#
|
30
|
+
# @param name [String, Symobol]
|
31
|
+
def [](name)
|
32
|
+
__send__(name.to_sym)
|
33
|
+
rescue NoMethodError
|
34
|
+
nil
|
35
|
+
end
|
36
|
+
|
37
|
+
# @return [Hash]
|
38
|
+
def attrs
|
39
|
+
@attrs
|
40
|
+
end
|
41
|
+
alias to_h attrs
|
42
|
+
alias to_hash attrs
|
43
|
+
end
|
44
|
+
end
|
@@ -0,0 +1,64 @@
|
|
1
|
+
require 'croudia/api/favorites'
|
2
|
+
require 'croudia/api/oauth'
|
3
|
+
require 'croudia/api/statuses'
|
4
|
+
require 'croudia/api/timelines'
|
5
|
+
require 'croudia/configurable'
|
6
|
+
require 'croudia/ext/openssl'
|
7
|
+
require 'croudia/version'
|
8
|
+
require 'faraday'
|
9
|
+
|
10
|
+
module Croudia
|
11
|
+
class Client
|
12
|
+
include Croudia::API::Favorites
|
13
|
+
include Croudia::API::OAuth
|
14
|
+
include Croudia::API::Statuses
|
15
|
+
include Croudia::API::Timelines
|
16
|
+
include Croudia::Configurable
|
17
|
+
|
18
|
+
# Initialize a new Client object
|
19
|
+
#
|
20
|
+
# @param options [Hash]
|
21
|
+
# @return [Croudia::Client]
|
22
|
+
def initialize(options={})
|
23
|
+
Croudia::Configurable.keys.each do |key|
|
24
|
+
instance_variable_set(:"@#{key}", options[key] || Croudia.instance_variable_get(:"@#{key}"))
|
25
|
+
end
|
26
|
+
end
|
27
|
+
|
28
|
+
# Perform an HTTP DELETE request
|
29
|
+
def delete(path, params={})
|
30
|
+
request(:delete, path, params)
|
31
|
+
end
|
32
|
+
|
33
|
+
# Perform an HTTP GET request
|
34
|
+
def get(path, params={})
|
35
|
+
request(:get, path, params)
|
36
|
+
end
|
37
|
+
|
38
|
+
# Perform an HTTP POST request
|
39
|
+
def post(path, params={})
|
40
|
+
request(:post, path, params)
|
41
|
+
end
|
42
|
+
|
43
|
+
# Perform an HTTP PUT request
|
44
|
+
def put(path, params={})
|
45
|
+
request(:put, path, params)
|
46
|
+
end
|
47
|
+
|
48
|
+
private
|
49
|
+
|
50
|
+
def request(method, path, params={})
|
51
|
+
connection.send(method.to_sym, path, params) do |request|
|
52
|
+
request.headers[:authorization] = "Bearer #{@access_token}" if @access_token
|
53
|
+
request.headers[:content_type] = 'application/x-www-form-urlencoded; charset=utf-8'
|
54
|
+
end.body
|
55
|
+
end
|
56
|
+
|
57
|
+
# Return a Faraday::Connection objet
|
58
|
+
#
|
59
|
+
# @return [Faraday::Connection]
|
60
|
+
def connection
|
61
|
+
@connection ||= Faraday.new(@endpoint, @connection_options.merge(builder: @middleware))
|
62
|
+
end
|
63
|
+
end
|
64
|
+
end
|
@@ -0,0 +1,39 @@
|
|
1
|
+
require 'croudia/default'
|
2
|
+
|
3
|
+
module Croudia
|
4
|
+
module Configurable
|
5
|
+
attr_writer :client_secret, :access_token
|
6
|
+
attr_accessor :client_id, :endpoint, :connection_options, :middleware
|
7
|
+
|
8
|
+
class << self
|
9
|
+
def keys
|
10
|
+
@keys ||= [
|
11
|
+
:endpoint,
|
12
|
+
:connection_options,
|
13
|
+
:middleware,
|
14
|
+
:client_id,
|
15
|
+
:client_secret,
|
16
|
+
:access_token,
|
17
|
+
]
|
18
|
+
end
|
19
|
+
end
|
20
|
+
|
21
|
+
def configure
|
22
|
+
yield self
|
23
|
+
self
|
24
|
+
end
|
25
|
+
|
26
|
+
def reset!
|
27
|
+
Croudia::Configurable.keys.each do |key|
|
28
|
+
instance_variable_set(:"@#{key}", Croudia::Default.options[key])
|
29
|
+
end
|
30
|
+
end
|
31
|
+
alias setup reset!
|
32
|
+
|
33
|
+
def options
|
34
|
+
Hash[Croudia::Configurable.keys.map do |key|
|
35
|
+
[key, instance_variable_get(:"@#{key}")]
|
36
|
+
end]
|
37
|
+
end
|
38
|
+
end
|
39
|
+
end
|
@@ -0,0 +1,63 @@
|
|
1
|
+
require 'faraday'
|
2
|
+
require 'faraday_middleware'
|
3
|
+
require 'croudia/configurable'
|
4
|
+
|
5
|
+
module Croudia
|
6
|
+
module Default
|
7
|
+
ENDPOINT = 'https://api.croudia.com' unless defined? Croudia::Default::ENDPOINT
|
8
|
+
CONNECTION_OPTIONS = {
|
9
|
+
headers: {
|
10
|
+
accept: 'application/json',
|
11
|
+
user_agent: "Croudia Ruby Gem/#{Croudia::VERSION}",
|
12
|
+
},
|
13
|
+
request: {
|
14
|
+
open_timeout: 5,
|
15
|
+
timeout: 10,
|
16
|
+
},
|
17
|
+
ssl: {
|
18
|
+
verify: true,
|
19
|
+
},
|
20
|
+
} unless defined? Croudia::Default::CONNECTION_OPTIONS
|
21
|
+
MIDDLEWARE = Faraday::Builder.new do |builder|
|
22
|
+
builder.request :url_encoded
|
23
|
+
|
24
|
+
builder.response :mashify
|
25
|
+
builder.response :json
|
26
|
+
builder.response :raise_error
|
27
|
+
|
28
|
+
builder.adapter :net_http
|
29
|
+
end unless defined? Croudia::Default::MIDDLEWARE
|
30
|
+
|
31
|
+
class << self
|
32
|
+
def options
|
33
|
+
Hash[Croudia::Configurable.keys.map do |key|
|
34
|
+
[key, __send__(key)]
|
35
|
+
end]
|
36
|
+
end
|
37
|
+
|
38
|
+
def client_id
|
39
|
+
ENV['CROUDIA_CLIENT_ID']
|
40
|
+
end
|
41
|
+
|
42
|
+
def client_secret
|
43
|
+
ENV['CROUDIA_CLIENT_SECRET']
|
44
|
+
end
|
45
|
+
|
46
|
+
def access_token
|
47
|
+
ENV['CROUDIA_ACCESS_TOKEN']
|
48
|
+
end
|
49
|
+
|
50
|
+
def endpoint
|
51
|
+
ENDPOINT
|
52
|
+
end
|
53
|
+
|
54
|
+
def connection_options
|
55
|
+
CONNECTION_OPTIONS
|
56
|
+
end
|
57
|
+
|
58
|
+
def middleware
|
59
|
+
MIDDLEWARE
|
60
|
+
end
|
61
|
+
end
|
62
|
+
end
|
63
|
+
end
|
@@ -0,0 +1,19 @@
|
|
1
|
+
require 'openssl'
|
2
|
+
|
3
|
+
class OpenSSL::SSL::SSLSocket
|
4
|
+
# As of writing, https://api.croudia.com returns a valid cert for
|
5
|
+
# "croudia.com", but not for "api.croudia.com". When the original check
|
6
|
+
# process fails with "api.croudia.com", recheck as "croudia.com" and catch
|
7
|
+
# the error if it looks valid.
|
8
|
+
alias_method :croudia_original_pcc, :post_connection_check
|
9
|
+
|
10
|
+
def post_connection_check(hostname)
|
11
|
+
croudia_original_pcc(hostname)
|
12
|
+
rescue OpenSSL::SSL::SSLError => e
|
13
|
+
if hostname == 'api.croudia.com'
|
14
|
+
croudia_original_pcc('croudia.com')
|
15
|
+
else
|
16
|
+
raise e
|
17
|
+
end
|
18
|
+
end
|
19
|
+
end
|
data/lib/croudia/identity.rb
CHANGED
@@ -1,39 +1,22 @@
|
|
1
|
-
|
2
|
-
|
3
|
-
|
4
|
-
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
attrs
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
def ==(other)
|
24
|
-
super || self.class == other.class && @id == other.id
|
25
|
-
end
|
26
|
-
|
27
|
-
def [](name)
|
28
|
-
instance_variable_get(:"@#{name}")
|
29
|
-
end
|
30
|
-
|
31
|
-
def id
|
32
|
-
@id
|
33
|
-
end
|
34
|
-
|
35
|
-
def method_missing(name, *args)
|
36
|
-
self[name]
|
37
|
-
end
|
38
|
-
end
|
39
|
-
end
|
1
|
+
require 'croudia/base'
|
2
|
+
|
3
|
+
module Croudia
|
4
|
+
class Identity < Croudia::Base
|
5
|
+
def initialize(*)
|
6
|
+
super
|
7
|
+
raise ArgumentError, 'argument must have an :id key' unless id
|
8
|
+
@attrs[:id_str] = id.to_s
|
9
|
+
end
|
10
|
+
|
11
|
+
# @param other [Croudia::Identity]
|
12
|
+
# @return [Boolean]
|
13
|
+
def ==(other)
|
14
|
+
super || self.class == other.class && id == other.id
|
15
|
+
end
|
16
|
+
|
17
|
+
# @return [Integer]
|
18
|
+
def id
|
19
|
+
@attrs[:id]
|
20
|
+
end
|
21
|
+
end
|
22
|
+
end
|
@@ -0,0 +1,26 @@
|
|
1
|
+
require 'croudia/creatable'
|
2
|
+
require 'croudia/identity'
|
3
|
+
require 'croudia/user'
|
4
|
+
|
5
|
+
module Croudia
|
6
|
+
class Status < Croudia::Identity
|
7
|
+
include Croudia::Creatable
|
8
|
+
|
9
|
+
attr_reader :favorited, :favorite_count,
|
10
|
+
:in_reply_to_screen_name, :in_reply_to_status_id_str,
|
11
|
+
:in_reply_to_status_id, :in_reply_to_user_id_str,
|
12
|
+
:in_reply_to_user_id, :spread_count,
|
13
|
+
:play_spread, :play_spread_status, :reply_status, :source,
|
14
|
+
:text, :user
|
15
|
+
|
16
|
+
def initialize(attrs={})
|
17
|
+
user = attrs.delete(:user)
|
18
|
+
pss = attrs.delete(:play_spread_status)
|
19
|
+
reply_status = attrs.delete(:reply_status)
|
20
|
+
super(attrs)
|
21
|
+
@attrs[:user] = Croudia::User.new(user) if user
|
22
|
+
@attrs[:play_spread_status] = Croudia::Status.new(pss) if pss
|
23
|
+
@attrs[:reply_status] = Croudia::Status.new(reply_status) if reply_status
|
24
|
+
end
|
25
|
+
end
|
26
|
+
end
|