assonnato 0.7 → 0.8
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/lib/assonnato/api/episode.rb +41 -0
- data/lib/assonnato/api/show.rb +68 -0
- data/lib/assonnato/api/user.rb +36 -0
- data/lib/assonnato/api_factory.rb +30 -0
- data/lib/assonnato/assonnato.rb +22 -7
- data/lib/assonnato/client.rb +47 -0
- data/lib/assonnato/cookie_jar.rb +31 -0
- data/lib/assonnato/parser.rb +13 -21
- data/lib/assonnato/request.rb +29 -31
- data/lib/assonnato/version.rb +11 -12
- data/lib/assonnato.rb +12 -10
- data/spec/episode_spec.rb +9 -11
- data/spec/show_spec.rb +14 -16
- metadata +11 -22
- data/lib/assonnato/exception.rb +0 -13
- data/lib/assonnato/type/episode.rb +0 -29
- data/lib/assonnato/type/show.rb +0 -67
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 86572c17cd9eec41d61f1bdf7fe27f786363a045
|
4
|
+
data.tar.gz: b65e9cb5ae9c19043a44e5d50da9eba486d65908
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: c69c0c4059a21c9ace704db71e34a9d71a54431b6ed993de9651a9fb6e87cfa08e91b68b3d0826943dbb8fa0fdb97e81ec528d5fe5fcf46ca1fc2d6cdb966703
|
7
|
+
data.tar.gz: 97c2ec89e11b724156988db432fc4c91cc9959fc8f04b14fee54fd91a07ccfb7ae14b7c86e8cfd394cc901633c9846ab841624d09498e9707a1e3772e02848c5
|
@@ -0,0 +1,41 @@
|
|
1
|
+
#--
|
2
|
+
# Copyright (c) 2014 Giovanni Capuano <webmaster@giovannicapuano.net>
|
3
|
+
#
|
4
|
+
# Released under the MIT License
|
5
|
+
# http://opensource.org/licenses/MIT
|
6
|
+
#++
|
7
|
+
|
8
|
+
module Assonnato
|
9
|
+
|
10
|
+
class Episode
|
11
|
+
include Parser
|
12
|
+
|
13
|
+
def initialize(client)
|
14
|
+
@client = client
|
15
|
+
end
|
16
|
+
|
17
|
+
def all(show)
|
18
|
+
parse @client.get("/api/v1/episodes/#{URI.escape show}")
|
19
|
+
end
|
20
|
+
|
21
|
+
def get(show, episode)
|
22
|
+
all(show).select { |ep| ep.episode == episode }
|
23
|
+
end
|
24
|
+
|
25
|
+
def last(status)
|
26
|
+
parse @client.get("/api/v1/episodes/last/#{status}")
|
27
|
+
end
|
28
|
+
|
29
|
+
def search(keyword)
|
30
|
+
raise NotImplementedError, 'you cannot search episodes'
|
31
|
+
end
|
32
|
+
|
33
|
+
def edit(name, episode, fields)
|
34
|
+
path = '/api/v1/episode/edit'
|
35
|
+
data = { name: name, episode: episode, _csrf: @client.user.csrf_token }.merge fields
|
36
|
+
|
37
|
+
@client.post path, data
|
38
|
+
end
|
39
|
+
end
|
40
|
+
|
41
|
+
end
|
@@ -0,0 +1,68 @@
|
|
1
|
+
#--
|
2
|
+
# Copyright (c) 2014 Giovanni Capuano <webmaster@giovannicapuano.net>
|
3
|
+
#
|
4
|
+
# Released under the MIT License
|
5
|
+
# http://opensource.org/licenses/MIT
|
6
|
+
#++
|
7
|
+
|
8
|
+
module Assonnato
|
9
|
+
|
10
|
+
class Show
|
11
|
+
include Parser
|
12
|
+
|
13
|
+
def initialize(client)
|
14
|
+
@client = client
|
15
|
+
end
|
16
|
+
|
17
|
+
def all(status = :ongoing, options = {})
|
18
|
+
filters = ''.tap { |str|
|
19
|
+
if options.has_key? :fansub
|
20
|
+
str << by_fansub(options[:fansub])
|
21
|
+
elsif options.has_key? :user
|
22
|
+
if options.has_key? :role
|
23
|
+
str << by_role(options[:user], options[:role])
|
24
|
+
else
|
25
|
+
str << by_staff(options[:user])
|
26
|
+
end
|
27
|
+
end
|
28
|
+
}
|
29
|
+
|
30
|
+
parse @client.get("/api/v1/#{filters}/shows/all/#{status}")
|
31
|
+
end
|
32
|
+
|
33
|
+
def get(show_name)
|
34
|
+
search(show_name).select { |show| show.name == show_name }
|
35
|
+
end
|
36
|
+
|
37
|
+
def last!(status)
|
38
|
+
raise NotImplementedError, 'Show#last is not implemented'
|
39
|
+
end
|
40
|
+
|
41
|
+
def search(keyword)
|
42
|
+
parse @client.get("/api/v1/shows/search/#{URI.escape keyword}")
|
43
|
+
end
|
44
|
+
|
45
|
+
def edit(name, episode, fields)
|
46
|
+
path = '/api/v1/episode/edit'
|
47
|
+
data = { name: name, episode: episode, _csrf: @client.user.csrf_token }.merge fields
|
48
|
+
|
49
|
+
@client.post path, data
|
50
|
+
end
|
51
|
+
|
52
|
+
private
|
53
|
+
def by_fansub(fansub)
|
54
|
+
"/fansubs/#{URI.escape fansub}"
|
55
|
+
end
|
56
|
+
|
57
|
+
private
|
58
|
+
def by_staff(user)
|
59
|
+
"/users/#{URI.escape user}"
|
60
|
+
end
|
61
|
+
|
62
|
+
private
|
63
|
+
def by_role(user, role)
|
64
|
+
"/users/#{URI.escape user}/#{role}"
|
65
|
+
end
|
66
|
+
end
|
67
|
+
|
68
|
+
end
|
@@ -0,0 +1,36 @@
|
|
1
|
+
#--
|
2
|
+
# Copyright (c) 2014 Giovanni Capuano <webmaster@giovannicapuano.net>
|
3
|
+
#
|
4
|
+
# Released under the MIT License
|
5
|
+
# http://opensource.org/licenses/MIT
|
6
|
+
#++
|
7
|
+
|
8
|
+
module Assonnato
|
9
|
+
|
10
|
+
class User
|
11
|
+
def initialize(client)
|
12
|
+
@client = client
|
13
|
+
end
|
14
|
+
|
15
|
+
def login(username, password)
|
16
|
+
path = '/api/v1/user/login'
|
17
|
+
data = { username: username, password: password }
|
18
|
+
|
19
|
+
@client.post path, data
|
20
|
+
end
|
21
|
+
|
22
|
+
def logout
|
23
|
+
path = '/api/v1/user/logout'
|
24
|
+
data = { _csrf: @client.user.csrf_token }
|
25
|
+
|
26
|
+
@client.post path, data
|
27
|
+
end
|
28
|
+
|
29
|
+
def csrf_token
|
30
|
+
path = '/api/v1/user/csrf_token'
|
31
|
+
|
32
|
+
@client.get(path)['message']
|
33
|
+
end
|
34
|
+
end
|
35
|
+
|
36
|
+
end
|
@@ -0,0 +1,30 @@
|
|
1
|
+
#--
|
2
|
+
# Copyright (c) 2011 Peter Murach
|
3
|
+
# Copyright (c) 2014 Giovanni Capuano <webmaster@giovannicapuano.net>
|
4
|
+
#
|
5
|
+
# Released under the MIT License
|
6
|
+
# http://opensource.org/licenses/MIT
|
7
|
+
#++
|
8
|
+
|
9
|
+
module Assonnato
|
10
|
+
|
11
|
+
class ApiFactory
|
12
|
+
class << self
|
13
|
+
def new(klass, options = {})
|
14
|
+
return create_instance(klass, options) if klass
|
15
|
+
raise ArgumentError, 'must provide API class to be instantiated'
|
16
|
+
end
|
17
|
+
|
18
|
+
def create_instance(klass, options)
|
19
|
+
convert_to_constant(klass.to_s).new options
|
20
|
+
end
|
21
|
+
|
22
|
+
def convert_to_constant(classes)
|
23
|
+
classes.split('::').inject(Assonnato) do |constant, klass|
|
24
|
+
constant.const_get klass
|
25
|
+
end
|
26
|
+
end
|
27
|
+
end
|
28
|
+
end
|
29
|
+
|
30
|
+
end
|
data/lib/assonnato/assonnato.rb
CHANGED
@@ -1,11 +1,26 @@
|
|
1
1
|
#--
|
2
|
-
#
|
3
|
-
#
|
2
|
+
# Copyright (c) 2011 Peter Murach
|
3
|
+
# Copyright (c) 2014 Giovanni Capuano <webmaster@giovannicapuano.net>
|
4
4
|
#
|
5
|
-
#
|
6
|
-
#
|
7
|
-
#
|
8
|
-
# 0. You just DO WHAT THE FUCK YOU WANT TO.
|
5
|
+
# Released under the MIT License
|
6
|
+
# http://opensource.org/licenses/MIT
|
9
7
|
#++
|
10
8
|
|
11
|
-
module Assonnato
|
9
|
+
module Assonnato
|
10
|
+
|
11
|
+
class << self
|
12
|
+
def new(domain, port = 80, ssl = false)
|
13
|
+
Client.new domain, port, ssl
|
14
|
+
end
|
15
|
+
|
16
|
+
def method_missing(method, *args, &block)
|
17
|
+
return super unless new.respond_to?(method)
|
18
|
+
new.send method, *args, &block
|
19
|
+
end
|
20
|
+
|
21
|
+
def respond_to?(method, include_private = false)
|
22
|
+
new.respond_to?(method, include_private) || super(method, include_private)
|
23
|
+
end
|
24
|
+
end
|
25
|
+
|
26
|
+
end
|
@@ -0,0 +1,47 @@
|
|
1
|
+
#--
|
2
|
+
# Copyright (c) 2014 Giovanni Capuano <webmaster@giovannicapuano.net>
|
3
|
+
#
|
4
|
+
# Released under the MIT License
|
5
|
+
# http://opensource.org/licenses/MIT
|
6
|
+
#++
|
7
|
+
|
8
|
+
module Assonnato
|
9
|
+
|
10
|
+
class Client
|
11
|
+
include Request
|
12
|
+
|
13
|
+
attr_accessor :host, :port
|
14
|
+
attr_reader :cookies
|
15
|
+
|
16
|
+
def initialize(host, port = 80, ssl = false)
|
17
|
+
@host = host
|
18
|
+
@port = port
|
19
|
+
@ssl = ssl
|
20
|
+
@cookies = CookieJar.new
|
21
|
+
end
|
22
|
+
|
23
|
+
def self.namespace(*names)
|
24
|
+
options = names.last.is_a?(Hash) ? names.pop : {}
|
25
|
+
names = names.map(&:to_sym)
|
26
|
+
name = names.pop
|
27
|
+
return if public_method_defined?(name)
|
28
|
+
|
29
|
+
converted = options.fetch(:full_name, name).to_s
|
30
|
+
converted = converted.split('_').map(&:capitalize).join
|
31
|
+
class_name = ''
|
32
|
+
class_name = "#{self.name.split('::').last}::" unless options.fetch(:root, false)
|
33
|
+
class_name += converted
|
34
|
+
|
35
|
+
define_method(name) do
|
36
|
+
ApiFactory.new class_name, self
|
37
|
+
end
|
38
|
+
|
39
|
+
self
|
40
|
+
end
|
41
|
+
|
42
|
+
namespace :user, root: true
|
43
|
+
namespace :show, root: true
|
44
|
+
namespace :episode, root: true
|
45
|
+
end
|
46
|
+
|
47
|
+
end
|
@@ -0,0 +1,31 @@
|
|
1
|
+
#--
|
2
|
+
# Copyright (c) 2014 Giovanni Capuano <webmaster@giovannicapuano.net>
|
3
|
+
#
|
4
|
+
# Released under the MIT License
|
5
|
+
# http://opensource.org/licenses/MIT
|
6
|
+
#++
|
7
|
+
|
8
|
+
module Assonnato
|
9
|
+
|
10
|
+
class CookieJar
|
11
|
+
def initialize
|
12
|
+
@cookies = ''
|
13
|
+
end
|
14
|
+
|
15
|
+
def set(cookie)
|
16
|
+
@cookies = cookie
|
17
|
+
end
|
18
|
+
|
19
|
+
def get
|
20
|
+
@cookies
|
21
|
+
end
|
22
|
+
|
23
|
+
def <<(cookie)
|
24
|
+
@cookies << "; #{cookie}"
|
25
|
+
end
|
26
|
+
|
27
|
+
alias_method :append, :<<
|
28
|
+
alias_method :to_s, :get
|
29
|
+
end
|
30
|
+
|
31
|
+
end
|
data/lib/assonnato/parser.rb
CHANGED
@@ -1,30 +1,22 @@
|
|
1
1
|
#--
|
2
|
-
#
|
3
|
-
# Version 2, December 2004
|
2
|
+
# Copyright (c) 2014 Giovanni Capuano <webmaster@giovannicapuano.net>
|
4
3
|
#
|
5
|
-
#
|
6
|
-
#
|
7
|
-
#
|
8
|
-
# 0. You just DO WHAT THE FUCK YOU WANT TO.
|
4
|
+
# Released under the MIT License
|
5
|
+
# http://opensource.org/licenses/MIT
|
9
6
|
#++
|
10
7
|
|
11
8
|
module Assonnato
|
12
|
-
module Parser
|
13
|
-
|
14
|
-
def parse(what, format = :json)
|
15
|
-
collection = case format.to_sym
|
16
|
-
when :json then JSON.parse what
|
17
|
-
when :xml, :csv, :yaml then raise NotImplementedError, 'the support for XML, CSV or YAML data is not supported yet'
|
18
|
-
else raise ArgumentError, 'format not recognized'
|
19
|
-
end
|
20
9
|
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
10
|
+
module Parser
|
11
|
+
def parse(what)
|
12
|
+
[].tap { |res|
|
13
|
+
[what].flatten.each { |element|
|
14
|
+
keys = element.keys.map { |k| k.to_sym }
|
15
|
+
values = element.values
|
16
|
+
res << Struct.new(*keys).new(*values)
|
27
17
|
}
|
28
|
-
|
18
|
+
}
|
29
19
|
end
|
20
|
+
end
|
21
|
+
|
30
22
|
end
|
data/lib/assonnato/request.rb
CHANGED
@@ -1,43 +1,41 @@
|
|
1
1
|
#--
|
2
|
-
#
|
3
|
-
# Version 2, December 2004
|
2
|
+
# Copyright (c) 2014 Giovanni Capuano <webmaster@giovannicapuano.net>
|
4
3
|
#
|
5
|
-
#
|
6
|
-
#
|
7
|
-
#
|
8
|
-
# 0. You just DO WHAT THE FUCK YOU WANT TO.
|
4
|
+
# Released under the MIT License
|
5
|
+
# http://opensource.org/licenses/MIT
|
9
6
|
#++
|
10
7
|
|
11
8
|
module Assonnato
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
9
|
+
|
10
|
+
module Request
|
11
|
+
def get(path, headers = {})
|
12
|
+
request :get, path, {}, headers
|
13
|
+
end
|
17
14
|
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
15
|
+
def post(path, data = {}, headers = {})
|
16
|
+
request :post, path, data, headers
|
17
|
+
end
|
18
|
+
|
19
|
+
private
|
20
|
+
def request(method, path, data, headers)
|
21
|
+
headers['Cookie'] = @cookies.get
|
22
22
|
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
23
|
+
Net::HTTP.start(@host, @port, use_ssl: @ssl) do |http|
|
24
|
+
resp = case method.to_sym
|
25
|
+
when :get
|
26
|
+
http.get path, headers
|
27
|
+
when :post
|
28
|
+
data = URI.encode_www_form data
|
29
|
+
headers['Content-Type'] = 'application/x-www-form-urlencoded'
|
27
30
|
|
28
|
-
|
29
|
-
|
30
|
-
when :get
|
31
|
-
Net::HTTP::Get.new uri
|
32
|
-
when :post
|
33
|
-
Net::HTTP.post_form uri, params
|
34
|
-
else
|
35
|
-
raise ArgumentError, 'format not recognized'
|
36
|
-
end
|
37
|
-
response = http.request request
|
38
|
-
raise ResourceNotFound unless response.body
|
39
|
-
response.body
|
31
|
+
http.post path, data, headers
|
32
|
+
else raise ArgumentError, 'format not recognized'
|
40
33
|
end
|
34
|
+
|
35
|
+
@cookies << resp.response['set-cookie'].split('; ')[0] rescue @cookies.get
|
36
|
+
JSON.parse resp.body
|
41
37
|
end
|
42
38
|
end
|
39
|
+
end
|
40
|
+
|
43
41
|
end
|
data/lib/assonnato/version.rb
CHANGED
@@ -1,13 +1,12 @@
|
|
1
|
-
#--
|
2
|
-
#
|
3
|
-
#
|
4
|
-
#
|
5
|
-
#
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
VERSION = '0.7'
|
1
|
+
#--
|
2
|
+
# Copyright (c) 2014 Giovanni Capuano <webmaster@giovannicapuano.net>
|
3
|
+
#
|
4
|
+
# Released under the MIT License
|
5
|
+
# http://opensource.org/licenses/MIT
|
6
|
+
#++
|
7
|
+
|
8
|
+
module Assonnato
|
9
|
+
|
10
|
+
VERSION = '0.8'
|
11
|
+
|
13
12
|
end
|
data/lib/assonnato.rb
CHANGED
@@ -1,21 +1,23 @@
|
|
1
1
|
#--
|
2
|
-
#
|
3
|
-
# Version 2, December 2004
|
2
|
+
# Copyright (c) 2014 Giovanni Capuano <webmaster@giovannicapuano.net>
|
4
3
|
#
|
5
|
-
#
|
6
|
-
#
|
7
|
-
#
|
8
|
-
# 0. You just DO WHAT THE FUCK YOU WANT TO.
|
4
|
+
# Released under the MIT License
|
5
|
+
# http://opensource.org/licenses/MIT
|
9
6
|
#++
|
10
7
|
|
11
8
|
require 'uri'
|
12
9
|
require 'net/http'
|
13
10
|
require 'json'
|
14
11
|
|
15
|
-
require 'assonnato/
|
12
|
+
require 'assonnato/assonnato'
|
13
|
+
require 'assonnato/api_factory'
|
14
|
+
require 'assonnato/cookie_jar'
|
16
15
|
require 'assonnato/request'
|
17
16
|
require 'assonnato/parser'
|
18
|
-
|
19
|
-
require 'assonnato/
|
20
|
-
require 'assonnato/
|
17
|
+
|
18
|
+
require 'assonnato/client'
|
19
|
+
require 'assonnato/api/user'
|
20
|
+
require 'assonnato/api/show'
|
21
|
+
require 'assonnato/api/episode'
|
22
|
+
|
21
23
|
require 'assonnato/version'
|
data/spec/episode_spec.rb
CHANGED
@@ -1,13 +1,11 @@
|
|
1
1
|
#! /usr/bin/env ruby
|
2
2
|
require 'assonnato'
|
3
3
|
|
4
|
-
describe
|
5
|
-
|
6
|
-
@episode = Assonnato::Episode.new 'http://pigro.omnivium.it'
|
7
|
-
end
|
4
|
+
describe Assonnato::Episode do
|
5
|
+
let(:client) { Assonnato::Episode.new Assonnato.new('pigro.omnivium.it') }
|
8
6
|
|
9
|
-
it 'returns all the episodes of
|
10
|
-
res =
|
7
|
+
it 'returns all the episodes of given show' do
|
8
|
+
res = client.all 'Strike the Blood'
|
11
9
|
res.should be_kind_of(Array)
|
12
10
|
res.should_not be_empty
|
13
11
|
res.first.should be_kind_of(Struct)
|
@@ -16,20 +14,20 @@ describe 'Assonnato' do
|
|
16
14
|
|
17
15
|
it 'can\'t search episodes' do
|
18
16
|
expect {
|
19
|
-
|
17
|
+
client.search 'le_too_derp'
|
20
18
|
}.to raise_error(NotImplementedError)
|
21
19
|
end
|
22
20
|
|
23
|
-
it 'returns a specific episode of
|
24
|
-
res =
|
21
|
+
it 'returns a specific episode of given show' do
|
22
|
+
res = client.get 'Strike the Blood', 1
|
25
23
|
res.should be_kind_of(Array)
|
26
24
|
res.should_not be_empty
|
27
25
|
res.first.should be_kind_of(Struct)
|
28
26
|
res.first.episode.should eql(1)
|
29
27
|
end
|
30
28
|
|
31
|
-
it 'returns the last episode of each show with
|
32
|
-
res =
|
29
|
+
it 'returns the last episode of each show with given status' do
|
30
|
+
res = client.last :ongoing
|
33
31
|
res.should be_kind_of(Array)
|
34
32
|
res.should_not be_empty
|
35
33
|
res.first.should be_kind_of(Struct)
|
data/spec/show_spec.rb
CHANGED
@@ -1,50 +1,48 @@
|
|
1
1
|
#! /usr/bin/env ruby
|
2
2
|
require 'assonnato'
|
3
3
|
|
4
|
-
describe
|
5
|
-
|
6
|
-
@show = Assonnato::Show.new
|
7
|
-
end
|
4
|
+
describe Assonnato::Show do
|
5
|
+
let(:client) { Assonnato::Show.new Assonnato.new('pigro.omnivium.it') }
|
8
6
|
|
9
|
-
it 'returns all the
|
10
|
-
res =
|
7
|
+
it 'returns all the on-going shows' do
|
8
|
+
res = client.all :ongoing
|
11
9
|
res.should be_kind_of(Array)
|
12
10
|
res.should_not be_empty
|
13
11
|
res.first.should be_kind_of(Struct)
|
14
12
|
res.first.status.should eql('ongoing')
|
15
13
|
end
|
16
14
|
|
17
|
-
it 'search all the shows which name is similar to
|
18
|
-
res =
|
15
|
+
it 'search all the shows which name is similar to given keyword' do
|
16
|
+
res = client.search 'strike'
|
19
17
|
res.should be_kind_of(Array)
|
20
18
|
res.should_not be_empty
|
21
19
|
res.first.should be_kind_of(Struct)
|
22
20
|
res.first.name.should eql('Strike the Blood')
|
23
21
|
end
|
24
22
|
|
25
|
-
it 'returns all the
|
26
|
-
res =
|
23
|
+
it 'returns all the on-going shows of given fansub' do
|
24
|
+
res = client.all :ongoing, fansub: 'Omnivium'
|
27
25
|
res.should be_kind_of(Array)
|
28
26
|
res.should_not be_empty
|
29
27
|
res.first.should be_kind_of(Struct)
|
30
28
|
res.first.fansub.should eql('Omnivium')
|
31
29
|
end
|
32
30
|
|
33
|
-
it 'returns all the
|
34
|
-
res =
|
31
|
+
it 'returns all the on-going shows in wich given user has worked' do
|
32
|
+
res = client.all :ongoing, user: 'Roxas Shadow'
|
35
33
|
res.should be_kind_of(Array)
|
36
34
|
res.should_not be_empty
|
37
35
|
end
|
38
36
|
|
39
|
-
it 'returns all the
|
40
|
-
res =
|
37
|
+
it 'returns all the on-going shows in wich given user has worked in given role' do
|
38
|
+
res = client.all :ongoing, { user: 'Roxas Shadow', role: :translator }
|
41
39
|
res.should be_kind_of(Array)
|
42
40
|
res.should_not be_empty
|
43
41
|
res.first.translator.should eql('Roxas Shadow')
|
44
42
|
end
|
45
43
|
|
46
|
-
it 'returns all the informations of
|
47
|
-
res =
|
44
|
+
it 'returns all the informations of given show' do
|
45
|
+
res = client.get 'Strike the Blood'
|
48
46
|
res.should be_kind_of(Array)
|
49
47
|
res.should_not be_empty
|
50
48
|
res.first.should be_kind_of(Struct)
|
metadata
CHANGED
@@ -1,29 +1,15 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: assonnato
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: '0.
|
4
|
+
version: '0.8'
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Giovanni Capuano
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2014-
|
11
|
+
date: 2014-03-17 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
|
-
- !ruby/object:Gem::Dependency
|
14
|
-
name: json
|
15
|
-
requirement: !ruby/object:Gem::Requirement
|
16
|
-
requirements:
|
17
|
-
- - ">="
|
18
|
-
- !ruby/object:Gem::Version
|
19
|
-
version: '0'
|
20
|
-
type: :runtime
|
21
|
-
prerelease: false
|
22
|
-
version_requirements: !ruby/object:Gem::Requirement
|
23
|
-
requirements:
|
24
|
-
- - ">="
|
25
|
-
- !ruby/object:Gem::Version
|
26
|
-
version: '0'
|
27
13
|
- !ruby/object:Gem::Dependency
|
28
14
|
name: rake
|
29
15
|
requirement: !ruby/object:Gem::Requirement
|
@@ -52,25 +38,28 @@ dependencies:
|
|
52
38
|
- - ">="
|
53
39
|
- !ruby/object:Gem::Version
|
54
40
|
version: '0'
|
55
|
-
description: RESTful wrapper gem for
|
41
|
+
description: RESTful wrapper gem for Pigro's APIs
|
56
42
|
email: webmaster@giovannicapuano.net
|
57
43
|
executables: []
|
58
44
|
extensions: []
|
59
45
|
extra_rdoc_files: []
|
60
46
|
files:
|
47
|
+
- lib/assonnato/api/episode.rb
|
48
|
+
- lib/assonnato/api/show.rb
|
49
|
+
- lib/assonnato/api/user.rb
|
50
|
+
- lib/assonnato/api_factory.rb
|
61
51
|
- lib/assonnato/assonnato.rb
|
62
|
-
- lib/assonnato/
|
52
|
+
- lib/assonnato/client.rb
|
53
|
+
- lib/assonnato/cookie_jar.rb
|
63
54
|
- lib/assonnato/parser.rb
|
64
55
|
- lib/assonnato/request.rb
|
65
|
-
- lib/assonnato/type/episode.rb
|
66
|
-
- lib/assonnato/type/show.rb
|
67
56
|
- lib/assonnato/version.rb
|
68
57
|
- lib/assonnato.rb
|
69
58
|
- spec/episode_spec.rb
|
70
59
|
- spec/show_spec.rb
|
71
60
|
homepage: http://www.giovannicapuano.net
|
72
61
|
licenses:
|
73
|
-
-
|
62
|
+
- MIT
|
74
63
|
metadata: {}
|
75
64
|
post_install_message:
|
76
65
|
rdoc_options: []
|
@@ -91,7 +80,7 @@ rubyforge_project:
|
|
91
80
|
rubygems_version: 2.0.3
|
92
81
|
signing_key:
|
93
82
|
specification_version: 4
|
94
|
-
summary: RESTful gem wrapping
|
83
|
+
summary: RESTful gem for wrapping Pigro's APIs
|
95
84
|
test_files:
|
96
85
|
- spec/episode_spec.rb
|
97
86
|
- spec/show_spec.rb
|
data/lib/assonnato/exception.rb
DELETED
@@ -1,13 +0,0 @@
|
|
1
|
-
#--
|
2
|
-
# DO WHAT THE FUCK YOU WANT TO PUBLIC LICENSE
|
3
|
-
# Version 2, December 2004
|
4
|
-
#
|
5
|
-
# DO WHAT THE FUCK YOU WANT TO PUBLIC LICENSE
|
6
|
-
# TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
|
7
|
-
#
|
8
|
-
# 0. You just DO WHAT THE FUCK YOU WANT TO.
|
9
|
-
#++
|
10
|
-
|
11
|
-
module Assonnato
|
12
|
-
class ResourceNotFound < URI::Error; end
|
13
|
-
end
|
@@ -1,29 +0,0 @@
|
|
1
|
-
#--
|
2
|
-
# DO WHAT THE FUCK YOU WANT TO PUBLIC LICENSE
|
3
|
-
# Version 2, December 2004
|
4
|
-
#
|
5
|
-
# DO WHAT THE FUCK YOU WANT TO PUBLIC LICENSE
|
6
|
-
# TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
|
7
|
-
#
|
8
|
-
# 0. You just DO WHAT THE FUCK YOU WANT TO.
|
9
|
-
#++
|
10
|
-
|
11
|
-
module Assonnato
|
12
|
-
class Episode < Show
|
13
|
-
def all!(show)
|
14
|
-
parse get(@host, @path, "/episodes/#{URI.escape show}")
|
15
|
-
end
|
16
|
-
|
17
|
-
def search!(keyword)
|
18
|
-
raise NotImplementedError, 'you cannot search episodes'
|
19
|
-
end
|
20
|
-
|
21
|
-
def get!(show, episode)
|
22
|
-
all!(show).select { |ep| ep.episode == episode }
|
23
|
-
end
|
24
|
-
|
25
|
-
def last!(status)
|
26
|
-
parse get(@host, @path, "/episodes/last/#{status}")
|
27
|
-
end
|
28
|
-
end
|
29
|
-
end
|
data/lib/assonnato/type/show.rb
DELETED
@@ -1,67 +0,0 @@
|
|
1
|
-
#--
|
2
|
-
# DO WHAT THE FUCK YOU WANT TO PUBLIC LICENSE
|
3
|
-
# Version 2, December 2004
|
4
|
-
#
|
5
|
-
# DO WHAT THE FUCK YOU WANT TO PUBLIC LICENSE
|
6
|
-
# TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
|
7
|
-
#
|
8
|
-
# 0. You just DO WHAT THE FUCK YOU WANT TO.
|
9
|
-
#++
|
10
|
-
|
11
|
-
module Assonnato
|
12
|
-
class Show
|
13
|
-
attr_accessor :host, :path
|
14
|
-
include Request
|
15
|
-
include Parser
|
16
|
-
|
17
|
-
def initialize(host = nil, path = nil)
|
18
|
-
@host = host || 'http://pigro.omnivium.it'
|
19
|
-
@path = path || '/api/v1'
|
20
|
-
end
|
21
|
-
|
22
|
-
def all!(status = :ongoing, options = {})
|
23
|
-
filters = ''.tap { |str|
|
24
|
-
if options.has_key? :fansub
|
25
|
-
str << by_fansub(options[:fansub])
|
26
|
-
elsif options.has_key? :user
|
27
|
-
if options.has_key? :role
|
28
|
-
str << by_role(options[:user], options[:role])
|
29
|
-
else
|
30
|
-
str << by_staff(options[:user])
|
31
|
-
end
|
32
|
-
end
|
33
|
-
}
|
34
|
-
|
35
|
-
parse get(@host, @path, "#{filters}/shows/all/#{status}")
|
36
|
-
end
|
37
|
-
|
38
|
-
def search!(keyword)
|
39
|
-
parse get(@host, @path, "/shows/search/#{URI.escape keyword}")
|
40
|
-
end
|
41
|
-
|
42
|
-
def get!(show_name)
|
43
|
-
search!(show_name).select { |show|
|
44
|
-
show.name == show_name
|
45
|
-
}
|
46
|
-
end
|
47
|
-
|
48
|
-
def last!(status)
|
49
|
-
raise NotImplementedError, 'Show#last is not implemented'
|
50
|
-
end
|
51
|
-
|
52
|
-
private
|
53
|
-
def by_fansub(fansub)
|
54
|
-
"/fansubs/#{URI.escape fansub}"
|
55
|
-
end
|
56
|
-
|
57
|
-
private
|
58
|
-
def by_staff(user)
|
59
|
-
"/users/#{URI.escape user}"
|
60
|
-
end
|
61
|
-
|
62
|
-
private
|
63
|
-
def by_role(user, role)
|
64
|
-
"/users/#{URI.escape user}/#{role}"
|
65
|
-
end
|
66
|
-
end
|
67
|
-
end
|