the_pirate_bay 0.1.3 → 0.2.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.
@@ -1,21 +1,21 @@
1
- require "the_pirate_bay/core_ext/string"
2
- require "the_pirate_bay/errors"
3
- require "the_pirate_bay/version"
4
- require "the_pirate_bay/api"
5
- require "the_pirate_bay/model"
6
- require "the_pirate_bay/client"
1
+ require 'hyper_api'
2
+
3
+ require 'the_pirate_bay/core_ext/string'
4
+ require 'the_pirate_bay/version'
5
+ require 'the_pirate_bay/connection'
6
+ require 'the_pirate_bay/client'
7
7
 
8
8
  module ThePirateBay
9
9
 
10
- ENDPOINT = "http://thepiratebay.org".freeze
10
+ ENDPOINT = 'http://thepiratebay.org'.freeze
11
11
 
12
12
  class << self
13
13
 
14
14
  # Handle for the client instance
15
15
  attr_accessor :api_client
16
16
 
17
- def new(options={}, &block)
18
- @api_client = ThePirateBay::Client.new(options, &block)
17
+ def new
18
+ @api_client = ThePirateBay::Client.new
19
19
  end
20
20
 
21
21
  # Delegate to ThePirateBay::Client
@@ -1,12 +1,12 @@
1
- require "the_pirate_bay/torrent"
2
- require "the_pirate_bay/torrent/collection"
1
+ require 'the_pirate_bay/torrent'
2
+ require 'the_pirate_bay/torrent/collection'
3
3
 
4
4
  module ThePirateBay
5
- class Client < API
6
-
5
+ class Client
6
+
7
7
  def torrents
8
8
  Torrent
9
9
  end
10
-
10
+
11
11
  end # Client
12
- end # ThePirateBay
12
+ end # ThePirateBay
@@ -1,34 +1,45 @@
1
1
  module ThePirateBay
2
- class Torrent < API
3
- include Model
4
-
5
- ATTRS_MAP = {
6
- :name => "Title",
7
- :description => "Description",
8
- :seeders => "Seeders",
9
- :leechers => "Leechers",
10
- :quality => "Quality",
11
- :size => "Size",
12
- :type => "Type",
13
- :hash => "Info Hash",
14
- :uploaded_at => "Uploaded",
15
- :uploaded_by => "By",
16
- :comments_count => "Comments",
17
- :files_count => "Files",
18
- :spoken_language => "Spoken language(s)",
19
- :written_language => "Texted language(s)",
20
- :tags => "Tag(s)",
21
- :imdb_id => "Info"
22
- }.freeze
23
-
24
- ATTRS = [:id, :magnet_uri, *ATTRS_MAP.keys].freeze
25
- SKIP_ATTRS = [:hash, :imdb_id].freeze
26
-
27
- # Torrent attributes:
28
- # id, name, magnet_uri, description, seeders, leechers, quality, size, type, hash,
29
- # uploaded_at, uploaded_by, comments_count, files_count, spoken_language, written_language, tags, imdb_id
30
-
31
- attr_accessor *ATTRS, :comments, :uploader, :html
2
+ class Torrent < HyperAPI::Base
3
+ extend Connection
4
+
5
+ integer id: 'a[title=Files]' do
6
+ attribute('href').value.match(/(\d+)\/$/)[1]
7
+ end
8
+
9
+ string name: 'div#title' do
10
+ text.sanitize!
11
+ end
12
+
13
+ string magnet_uri: 'div.download a' do
14
+ attribute('href').value
15
+ end
16
+
17
+ string hash: '#details dd' do
18
+ last.next.text.strip
19
+ end
20
+
21
+ string description: 'div.nfo' do
22
+ text.strip
23
+ end
24
+
25
+ string imdb_id: '#details dd a[title=IMDB]' do
26
+ attribute('href').value.match(/\/(\w+)\/$/)[1]
27
+ end
28
+
29
+ OPTIONAL_ATTRS = {
30
+ :seeders => 'Seeders',
31
+ :leechers => 'Leechers',
32
+ :quality => 'Quality',
33
+ :size => 'Size',
34
+ :type => 'Type',
35
+ :uploaded_at => 'Uploaded',
36
+ :uploaded_by => 'By',
37
+ :comments_count => 'Comments',
38
+ :files_count => 'Files',
39
+ :spoken_language => 'Spoken language(s)',
40
+ :written_language => 'Texted language(s)',
41
+ :tags => 'Tag(s)',
42
+ }
32
43
 
33
44
  class << self
34
45
 
@@ -41,18 +52,18 @@ module ThePirateBay
41
52
  #
42
53
  # Examples
43
54
  #
44
- # search("Fringe")
45
- # search("Fringe s05e07")
55
+ # search('Fringe')
56
+ # search('Fringe s05e07')
46
57
  #
47
58
  # Returns an array of ThePirateBay::Torrent::Collection objects.
48
59
  def search(query)
49
- uri = "search/" + CGI::escape(query)
60
+ uri = 'search/' + CGI::escape(query)
50
61
  html = request(uri) # Returns search html
51
62
 
52
63
  # Get torrents table rows from html
53
64
  # and return as ruby objects
54
- html.xpath("//table[@id='searchResult']/tr").collect do |torrent_html|
55
- Torrent::Collection.new(torrent_html)
65
+ html.css('#searchResult tr')[1..-1].collect do |torrent_html|
66
+ Torrent::Collection.new(torrent_html.to_s)
56
67
  end
57
68
  end
58
69
 
@@ -64,82 +75,36 @@ module ThePirateBay
64
75
  #
65
76
  # Examples
66
77
  #
67
- # find("7723168")
78
+ # find('7723168')
68
79
  # find(7723709)
69
80
  #
70
81
  # Returns an instance of ThePirateBay::Torrent
71
82
  def find(id)
72
83
  html = request("torrent/#{id}") # Returns torrent html
73
-
74
- # Initialize Torrent from html
75
- new(id, html)
84
+ new(html)
76
85
  end
77
86
  alias :get :find
78
87
  end
79
88
 
80
- def initialize(id, html)
81
- # Save html doc to get special attributes
82
- @id, @html = id, html
83
-
84
- # Get attributes and values html lists
85
- attrs = html.css("#details dt").map(&:text).map { |a| a.gsub(":", "") }
86
- values = html.css("#details dd").map(&:text)
89
+ def initialize(html)
90
+ opt_attrs = html.css('#details dt').map(&:text).map { |a| a.gsub(':', '') }
91
+ values = html.css('#details dd').map(&:text)
87
92
 
88
- # Set instance attributes
89
- set_attributes(attrs, values)
93
+ set_optional_attributes(opt_attrs, values)
90
94
 
91
- return self
95
+ super(html.to_s)
92
96
  end
93
97
 
94
- # Set torrent attributes from html lists
95
- def set_attributes(attrs, values)
96
- attrs.zip(values).each do |dirty_attr, value|
97
- begin
98
- attr = attributes_map.key(dirty_attr) # Map to a nice and clean attribute name (see ATTRS_MAP)
99
- next if skip_attributes.include?(attr)
100
- value.sanitize! # Remove weird characters
101
- self.public_send("#{attr}=", value) unless value.empty?
102
- rescue NoMethodError => e
103
- raise e unless e.name == :"="
104
- raise UnknownAttributeError, "unknown attribute: #{dirty_attr}"
98
+ def set_optional_attributes(opt_attrs, values)
99
+ opt_attrs.zip(values).each do |opt_attr, value|
100
+ attr = OPTIONAL_ATTRS.key(opt_attr) or next
101
+ instance_variable_set("@#{attr}", value.sanitize!)
102
+
103
+ self.class.send :define_method, attr do
104
+ instance_variable_get("@#{attr}")
105
105
  end
106
106
  end
107
107
  end
108
108
 
109
- def name
110
- @name ||= html.css("div#title").text.sanitize!
111
- end
112
-
113
- def magnet_uri
114
- @magnet_uri ||= html.css("div.download a").attribute("href").value
115
- end
116
-
117
- def hash
118
- @hash ||= html.css("#details dd")[-1].next.text.strip
119
- end
120
-
121
- def description
122
- @description ||= html.css("div.nfo").text.strip
123
- end
124
-
125
- def imdb_id
126
- @imdb_id ||= html.css("#details dd a[title=IMDB]").attribute("href").value.
127
- match(/\/(\w+)\/$/)[1]
128
- end
129
-
130
- private
131
-
132
- def attributes_map
133
- ATTRS_MAP
134
- end
135
-
136
- def class_attributes
137
- ATTRS
138
- end
139
-
140
- def skip_attributes
141
- SKIP_ATTRS
142
- end
143
-
144
109
  end # Torrent
145
110
  end # ThePirateBay
@@ -1,72 +1,37 @@
1
1
  module ThePirateBay
2
- class Torrent::Collection
3
- include Model
2
+ class Torrent::Collection < HyperAPI::Base
4
3
 
5
- ATTRS = [:id, :name, :seeders, :leechers, :magnet_uri,
6
- :size, :type, :uploaded_at, :uploaded_by, :comments_count].freeze
7
-
8
- attr_accessor *ATTRS, :html
9
-
10
- def initialize(html)
11
- @html = html # Save html to get instance attributes
12
- set_attributes
13
-
14
- return self
15
- end
16
-
17
- def set_attributes
18
- class_attributes.collect do |attr|
19
- self.public_send("#{attr}=", send(attr))
20
- end
21
- end
22
-
23
- def id
24
- @id ||= html.css('td div.detName').inner_html.match(/\/torrent\/(\d+)\//)[1]
4
+ integer id: '.detName a' do
5
+ attribute('href').value.match(/\/torrent\/(\d+)\//)[1]
25
6
  end
26
7
 
27
- def name
28
- @name ||= html.css('td div.detName a').text
29
- end
30
-
31
- def type
32
- @type ||= html.css('td[1] a').map(&:text).join(" > ")
33
- end
8
+ string name: '.detName a'
34
9
 
35
- def size
36
- @size ||= html.css('td font.detDesc').text.match(/Size (.*),/)[1].gsub('i', '')
10
+ string magnet_uri: '.detName + a' do
11
+ attribute('href').value
37
12
  end
38
13
 
39
- def seeders
40
- @seeders ||= html.css('td')[2].text
41
- end
14
+ integer seeders: 'td[3]'
42
15
 
43
- def leechers
44
- @leechers ||= html.css('td')[3].text
45
- end
46
-
47
- def magnet_uri
48
- @magnet_uri ||= html.css('td')[1].css('div.detName + a').attribute("href").value
49
- end
16
+ integer leechers: 'td[4]'
50
17
 
51
- def uploaded_at
52
- @uploaded_at ||= html.css('td')[1].css('font.detDesc').text.match(/Uploaded (.*), S/)[1]
18
+ string size: 'font.detDesc' do
19
+ text.match(/Size (.*),/)[1].gsub('i', '')
53
20
  end
54
21
 
55
- def uploaded_by
56
- @uploaded_by ||= html.css('td')[1].css('font.detDesc a').text
22
+ string type: 'td[1] a' do
23
+ map(&:text).join(' > ')
57
24
  end
58
25
 
59
- def comments_count
60
- @comments_count ||= unless (comments = html.css('td')[1].css('img[@src*="comment.gif"]')).empty?
61
- comments.attribute("alt").value.match(/\d+/)[0]
62
- end
26
+ string uploaded_at: 'font.detDesc' do
27
+ text.match(/Uploaded (.*), S/)[1]
63
28
  end
64
29
 
65
- private
30
+ string uploaded_by: 'font.detDesc a'
66
31
 
67
- def class_attributes
68
- ATTRS
32
+ integer comments_count: 'img[@src*="comment.gif"]' do
33
+ attribute('alt').value.match(/\d+/)[0]
69
34
  end
70
35
 
71
- end # Torrent::Collection
72
- end # ThePirateBay
36
+ end
37
+ end
@@ -1,3 +1,3 @@
1
1
  module ThePirateBay
2
- VERSION = "0.1.3"
2
+ VERSION = "0.2.0"
3
3
  end
@@ -166,7 +166,7 @@
166
166
  <div class="detName"> <a href="/torrent/7810640/Fringe_S05E06_Season_5_Episode_6_HDTV_x264_[GlowGaze]" class="detLink" title="Details for Fringe S05E06 Season 5 Episode 6 HDTV x264 [GlowGaze]">Fringe S05E06 Season 5 Episode 6 HDTV x264 [GlowGaze]</a>
167
167
  </div>
168
168
  <a href="magnet:?xt=urn:btih:0f4e3c1a4618b6d9658427e7778c602cd7c05ea0&dn=Fringe+S05E06+Season+5+Episode+6+HDTV+x264+%5BGlowGaze%5D&tr=udp%3A%2F%2Ftracker.openbittorrent.com%3A80&tr=udp%3A%2F%2Ftracker.publicbt.com%3A80&tr=udp%3A%2F%2Ftracker.istole.it%3A6969&tr=udp%3A%2F%2Ftracker.ccc.de%3A80" title="Download this torrent using magnet"><img src="//static.thepiratebay.se/img/icon-magnet.gif" alt="Magnet link" /></a><img src="//static.thepiratebay.se/img/icon_comment.gif" alt="This torrent has 2 comments." title="This torrent has 2 comments." /><img src="//static.thepiratebay.se/img/icon_image.gif" alt="This torrent has a cover image" title="This torrent has a cover image" /><a href="/user/GlowGaze"><img src="//static.thepiratebay.se/img/trusted.png" alt="Trusted" title="Trusted" style="width:11px;" border='0' /></a>
169
- <font class="detDesc">Uploaded Today&nbsp;04:11, Size 303.89&nbsp;MiB, ULed by <a class="detDesc" href="/user/GlowGaze/" title="Browse GlowGaze">GlowGaze</a></font>
169
+ <font class="detDesc">Uploaded Today 04:11, Size 303.89 MiB, ULed by <a class="detDesc" href="/user/GlowGaze/" title="Browse GlowGaze">GlowGaze</a></font>
170
170
  </td>
171
171
  <td align="right">413</td>
172
172
  <td align="right">117</td>
@@ -649,8 +649,8 @@
649
649
 
650
650
  <iframe src="http://cdn1.adexprt.com/clkads/bottom.html" width="728" height="90" frameborder="0" scrolling="no"></iframe>
651
651
  <p>
652
- <a href="/login" title="Login">Login</a> |
653
- <a href="/register" title="Register">Register</a> |
652
+ <a href="/login" title="Login">Login</a> |
653
+ <a href="/register" title="Register">Register</a> |
654
654
  <a href="/language" title="Select language">Language / Select language</a> |
655
655
  <a href="/about" title="About">About</a> |
656
656
  <a href="/legal" title="Legal threats">Legal threats</a> |
@@ -689,4 +689,4 @@
689
689
  <script type="text/javascript" src="http://cdn2.adexprt.com/clkads/pop.js"></script>
690
690
  <!-- abc: MX 0 -->
691
691
  </body>
692
- </html>
692
+ </html>
data/spec/spec_helper.rb CHANGED
@@ -8,7 +8,6 @@ require "webmock/rspec"
8
8
  #
9
9
  # See http://rubydoc.info/gems/rspec-core/RSpec/Core/Configuration
10
10
  RSpec.configure do |config|
11
- config.treat_symbols_as_metadata_keys_with_true_values = true
12
11
  config.run_all_when_everything_filtered = true
13
12
  config.filter_run :focus
14
13
 
@@ -29,4 +28,4 @@ end
29
28
 
30
29
  def stub_get(path, endpoint = ThePirateBay::ENDPOINT.to_s)
31
30
  stub_request(:get, [endpoint, path].join('/'))
32
- end
31
+ end
@@ -1,61 +1,61 @@
1
- require "spec_helper"
1
+ require 'spec_helper'
2
2
 
3
3
  describe ThePirateBay::Torrent do
4
4
  let(:api) { ThePirateBay.new }
5
5
 
6
- context ".search" do
6
+ context '.search' do
7
7
  before do
8
- stub_get("search/Fringe").
9
- to_return(:status => 200, :body => fixture("torrent/search.html"))
10
- @torrents = api.torrents.search("Fringe")
8
+ stub_get('search/Fringe').
9
+ to_return(:status => 200, :body => fixture('torrent/search.html'))
10
+ @torrents = api.torrents.search('Fringe')
11
11
  end
12
12
 
13
- it "returns torrents results" do
14
- @torrents.class.should == Array
13
+ it 'returns torrents results' do
14
+ expect(@torrents.class).to eq(Array)
15
15
  end
16
16
 
17
- it "instantiates torrents collection objects" do
18
- @torrents.first.class.should == ThePirateBay::Torrent::Collection
17
+ it 'instantiates torrents collection objects' do
18
+ expect(@torrents.first.class).to eq(ThePirateBay::Torrent::Collection)
19
19
  end
20
20
 
21
- it "parses torrents attributes correctly" do
21
+ it 'parses torrents attributes correctly' do
22
22
  torrent = @torrents.first
23
- torrent.id.should == "7810640"
24
- torrent.name.should == "Fringe S05E06 Season 5 Episode 6 HDTV x264 [GlowGaze]"
25
- torrent.type.should == "Video > TV shows"
26
- torrent.size == "303.89 MB"
27
- torrent.seeders == "413"
28
- torrent.leechers == "117"
29
- torrent.magnet_uri == "magnet:?xt=urn:btih:0f4e3c1a4618b6d9658427e7778c602cd7c05ea0&dn=Fringe+S05E06+Season+5+Episode+6+HDTV+x264+%5BGlowGaze%5D&tr=udp%3A%2F%2Ftracker.openbittorrent.com%3A80&tr=udp%3A%2F%2Ftracker.publicbt.com%3A80&tr=udp%3A%2F%2Ftracker.istole.it%3A6969&tr=udp%3A%2F%2Ftracker.ccc.de%3A8"
30
- torrent.uploaded_at == "Today 04:11"
31
- torrent.uploaded_by == "GlowGaze"
32
- torrent.comments_count == "2"
23
+ expect(torrent.id).to eq(7810640)
24
+ expect(torrent.name).to eq('Fringe S05E06 Season 5 Episode 6 HDTV x264 [GlowGaze]')
25
+ expect(torrent.type).to eq('Video > TV shows')
26
+ expect(torrent.size).to eq('303.89 MB')
27
+ expect(torrent.seeders).to eq(413)
28
+ expect(torrent.leechers).to eq(117)
29
+ expect(torrent.magnet_uri).to eq('magnet:?xt=urn:btih:0f4e3c1a4618b6d9658427e7778c602cd7c05ea0&dn=Fringe+S05E06+Season+5+Episode+6+HDTV+x264+%5BGlowGaze%5D&tr=udp%3A%2F%2Ftracker.openbittorrent.com%3A80&tr=udp%3A%2F%2Ftracker.publicbt.com%3A80&tr=udp%3A%2F%2Ftracker.istole.it%3A6969&tr=udp%3A%2F%2Ftracker.ccc.de%3A80')
30
+ expect(torrent.uploaded_at).to eq('Today 04:11')
31
+ expect(torrent.uploaded_by).to eq('GlowGaze')
32
+ expect(torrent.comments_count).to eq(2)
33
33
  end
34
34
  end
35
35
 
36
- context ".find" do
37
- it "returns a particular torrent" do
38
- stub_get("torrent/7723168").
39
- to_return(:status => 200, :body => fixture("torrent/find.html"))
36
+ context '.find' do
37
+ it 'returns a particular torrent' do
38
+ stub_get('torrent/7723168').
39
+ to_return(:status => 200, :body => fixture('torrent/find.html'))
40
40
 
41
- torrent = api.torrents.find("7723168")
42
- torrent.id.should == "7723168"
43
- torrent.name.should == "Fringe S05E03 HDTV x264-LOL [eztv]"
44
- torrent.description.should == "#EZTV @ EFNet -&gt; To avoid fakes, ALWAYS check that the torrent was added by eztv. \nhttp://eztv.it/\n\nEpisode: Fringe S05E03 HDTV x264-LOL\nScreenshots:"
45
- torrent.seeders.should == "2461"
46
- torrent.leechers.should == "118"
47
- torrent.quality.should == "+4 / -0 (+4)"
48
- torrent.size.should == "288.87 MiB (302897843 Bytes)"
49
- torrent.type.should == "Video > TV shows"
50
- torrent.hash.should == "84C153E4064D1AC1CC151A09070C8740C318D271"
51
- torrent.uploaded_at.should == "2012-10-13 12:33:16 GMT"
52
- torrent.uploaded_by.should == "eztv"
53
- torrent.comments_count.should == "6"
54
- torrent.files_count.should == "1"
55
- torrent.spoken_language.should == "English"
56
- torrent.written_language.should == "French"
57
- torrent.tags.should == "YIFY 720p 1080p movies x264 Bluray BrRip"
58
- torrent.imdb_id.should == "tt1985966"
41
+ torrent = api.torrents.find('7723168')
42
+ expect(torrent.id).to eq(7723168)
43
+ expect(torrent.name).to eq('Fringe S05E03 HDTV x264-LOL [eztv]')
44
+ expect(torrent.description).to eq("#EZTV @ EFNet -&gt; To avoid fakes, ALWAYS check that the torrent was added by eztv. \nhttp://eztv.it/\n\nEpisode: Fringe S05E03 HDTV x264-LOL\nScreenshots:")
45
+ expect(torrent.seeders).to eq('2461')
46
+ expect(torrent.leechers).to eq('118')
47
+ expect(torrent.quality).to eq('+4 / -0 (+4)')
48
+ expect(torrent.size).to eq('288.87 MiB (302897843 Bytes)')
49
+ expect(torrent.type).to eq('Video > TV shows')
50
+ expect(torrent.hash).to eq('84C153E4064D1AC1CC151A09070C8740C318D271')
51
+ expect(torrent.uploaded_at).to eq('2012-10-13 12:33:16 GMT')
52
+ expect(torrent.uploaded_by).to eq('eztv')
53
+ expect(torrent.comments_count).to eq('6')
54
+ expect(torrent.files_count).to eq('1')
55
+ expect(torrent.spoken_language).to eq('English')
56
+ expect(torrent.written_language).to eq('French')
57
+ expect(torrent.tags).to eq('YIFY 720p 1080p movies x264 Bluray BrRip')
58
+ expect(torrent.imdb_id).to eq('tt1985966')
59
59
  end
60
60
  end
61
61
  end
@@ -1,13 +1,13 @@
1
1
  require "spec_helper"
2
2
 
3
3
  describe ThePirateBay do
4
-
4
+
5
5
  it "should respond to 'new' message" do
6
- subject.should respond_to :new
6
+ expect(subject).to respond_to(:new)
7
7
  end
8
8
 
9
9
  it "should receive 'new' and initialize ThePirateBay::Client instance" do
10
- subject.new.should be_a ThePirateBay::Client
10
+ expect(subject.new).to be_a(ThePirateBay::Client)
11
11
  end
12
-
13
- end
12
+
13
+ end
@@ -4,23 +4,24 @@ $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
4
4
  require 'the_pirate_bay/version'
5
5
 
6
6
  Gem::Specification.new do |gem|
7
- gem.name = "the_pirate_bay"
7
+ gem.name = 'the_pirate_bay'
8
8
  gem.version = ThePirateBay::VERSION
9
- gem.authors = ["Javier Saldana"]
10
- gem.email = ["javier@tractical.com"]
9
+ gem.authors = ['Javier Saldana']
10
+ gem.email = ['javier@tractical.com']
11
11
  gem.description = %q{Ruby Client for ThePirateBay.se}
12
12
  gem.summary = %q{ThePirateBay.se Client}
13
- gem.homepage = "https://github.com/jassa/the_pirate_bay"
13
+ gem.homepage = 'https://github.com/jassa/the_pirate_bay'
14
14
 
15
15
  gem.files = `git ls-files`.split($/)
16
16
  gem.executables = gem.files.grep(%r{^bin/}).map{ |f| File.basename(f) }
17
17
  gem.test_files = gem.files.grep(%r{^(test|spec|features)/})
18
- gem.require_paths = ["lib"]
18
+ gem.require_paths = ['lib']
19
19
 
20
- gem.add_dependency "faraday", "~> 0.8.4"
21
- gem.add_dependency "faraday_middleware", "~> 0.8.4"
22
- gem.add_dependency "nokogiri", "~> 1.6.0"
20
+ gem.add_dependency 'faraday', '~> 0.8.4'
21
+ gem.add_dependency 'faraday_middleware', '~> 0.8.4'
22
+ gem.add_dependency 'nokogiri', '~> 1.6.0'
23
+ gem.add_dependency 'hyper_api', '~> 0.1.1'
23
24
 
24
- gem.add_development_dependency "rspec", "~> 2.12.0"
25
- gem.add_development_dependency "webmock", "~> 1.9.0"
25
+ gem.add_development_dependency 'rspec', '~> 3.0.0.beta1'
26
+ gem.add_development_dependency 'webmock', '~> 1.9.0'
26
27
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: the_pirate_bay
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.3
4
+ version: 0.2.0
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -9,7 +9,7 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2014-02-13 00:00:00.000000000 Z
12
+ date: 2014-02-17 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: faraday
@@ -59,6 +59,22 @@ dependencies:
59
59
  - - ~>
60
60
  - !ruby/object:Gem::Version
61
61
  version: 1.6.0
62
+ - !ruby/object:Gem::Dependency
63
+ name: hyper_api
64
+ requirement: !ruby/object:Gem::Requirement
65
+ none: false
66
+ requirements:
67
+ - - ~>
68
+ - !ruby/object:Gem::Version
69
+ version: 0.1.1
70
+ type: :runtime
71
+ prerelease: false
72
+ version_requirements: !ruby/object:Gem::Requirement
73
+ none: false
74
+ requirements:
75
+ - - ~>
76
+ - !ruby/object:Gem::Version
77
+ version: 0.1.1
62
78
  - !ruby/object:Gem::Dependency
63
79
  name: rspec
64
80
  requirement: !ruby/object:Gem::Requirement
@@ -66,7 +82,7 @@ dependencies:
66
82
  requirements:
67
83
  - - ~>
68
84
  - !ruby/object:Gem::Version
69
- version: 2.12.0
85
+ version: 3.0.0.beta1
70
86
  type: :development
71
87
  prerelease: false
72
88
  version_requirements: !ruby/object:Gem::Requirement
@@ -74,7 +90,7 @@ dependencies:
74
90
  requirements:
75
91
  - - ~>
76
92
  - !ruby/object:Gem::Version
77
- version: 2.12.0
93
+ version: 3.0.0.beta1
78
94
  - !ruby/object:Gem::Dependency
79
95
  name: webmock
80
96
  requirement: !ruby/object:Gem::Requirement
@@ -106,12 +122,9 @@ files:
106
122
  - README.md
107
123
  - Rakefile
108
124
  - lib/the_pirate_bay.rb
109
- - lib/the_pirate_bay/api.rb
110
125
  - lib/the_pirate_bay/client.rb
111
126
  - lib/the_pirate_bay/connection.rb
112
127
  - lib/the_pirate_bay/core_ext/string.rb
113
- - lib/the_pirate_bay/errors.rb
114
- - lib/the_pirate_bay/model.rb
115
128
  - lib/the_pirate_bay/response.rb
116
129
  - lib/the_pirate_bay/response/htmlize.rb
117
130
  - lib/the_pirate_bay/torrent.rb
@@ -1,21 +0,0 @@
1
- require "the_pirate_bay/connection"
2
-
3
- module ThePirateBay
4
- class API
5
- extend Connection
6
-
7
- def initialize(options={}, &block)
8
- super()
9
- set_api_client
10
- self
11
-
12
- self.instance_eval(&block) if block_given?
13
- end
14
-
15
- # Assigns current api class
16
- def set_api_client
17
- ThePirateBay.api_client = self
18
- end
19
-
20
- end # API
21
- end # ThePirateBay
@@ -1,18 +0,0 @@
1
- module ThePirateBay
2
-
3
- # Generic ThePirateBay exception class.
4
- class ThePirateBayError < StandardError
5
- end
6
-
7
- # Raised when a connection to the api can't be established.
8
- class ConnectionNotEstablished < StandardError
9
- end
10
-
11
- # Raised when the record was not found given an id or set of ids.
12
- class RecordNotFound < StandardError
13
- end
14
-
15
- # Raised when unknown attributes are supplied via mass assignment.
16
- class UnknownAttributeError < NoMethodError
17
- end
18
- end
@@ -1,36 +0,0 @@
1
- module ThePirateBay
2
- module Model
3
-
4
- def attributes
5
- attrs = {}
6
- class_attributes.each do |name|
7
- attrs[name] = send(name)
8
- end
9
- attrs
10
- end
11
-
12
- def inspect
13
- inspection = unless id.nil?
14
- class_attributes.collect { |name|
15
- "#{name}: #{attribute_for_inspect(name)}"
16
- }.compact.join(", ")
17
- else
18
- "not initialized"
19
- end
20
- "#<#{self.class} #{inspection}>"
21
- end
22
-
23
- def attribute_for_inspect(attr_name)
24
- value = send(attr_name)
25
-
26
- if value.is_a?(String) && value.length > 50
27
- "#{value[0..50]}...".inspect
28
- elsif value.is_a?(Date) || value.is_a?(Time)
29
- %("#{value.to_s(:db)}")
30
- else
31
- value.inspect
32
- end
33
- end
34
-
35
- end # Model
36
- end # ThePirateBay