croudia 0.0.2 → 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.
- 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
|