torrentify 0.3

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 ADDED
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA1:
3
+ metadata.gz: 2cd02c015cbff3bb92376671f4dacbc6bf24aaec
4
+ data.tar.gz: ab3af8ef8a46196506b5f8bddbdf7f2afac5de4d
5
+ SHA512:
6
+ metadata.gz: c3aeff0508d82e7eb58dab4cc294f55032527911f9d8c42d4cea5f5aab74a6e97425efe1525c07a37757e3797bfc29cfaef66d64796675794aa6f023fdbc3b1c
7
+ data.tar.gz: c5c9d03012369271d566fdf158315236a2cffbdc7547fd29a50af50940f9864b6de21f479ae0c1fca2d40cee4a79a3c2096b5416b8213ce78adcfde530f1368b
data/.coveralls.yml ADDED
@@ -0,0 +1 @@
1
+ repo_token: Zj3HYNTGP7lW6SiQaLNTZYzPIbktefvuA
data/.gitignore ADDED
@@ -0,0 +1,10 @@
1
+ /.bundle/
2
+ /.yardoc
3
+ /_yardoc/
4
+ /coverage/
5
+ /doc/
6
+ /pkg/
7
+ /tmp/
8
+ Gemfile.lock
9
+ /vendor/
10
+ .DS_Store
data/.rubocop.yml ADDED
@@ -0,0 +1,11 @@
1
+ AllCops:
2
+ Exclude:
3
+ - 'torrentify.gemspec'
4
+ - 'vendor/bundle/**/*'
5
+
6
+
7
+ Style/HashSyntax:
8
+ EnforcedStyle: hash_rockets
9
+
10
+ Style/ClassVars:
11
+ Enabled: false
data/.travis.yml ADDED
@@ -0,0 +1,13 @@
1
+ language: ruby
2
+ rvm:
3
+ - 2.0.0
4
+
5
+ before_install: gem install bundler -v 1.10.6
6
+
7
+ env:
8
+ global:
9
+ - CODECLIMATE_REPO_TOKEN="dde4ba83df1f56ca989e97fa0ce037374f2aca04225a15f0e06f6a597e0749e2"
10
+
11
+ after_success:
12
+ - bundle exec rake codeclimate
13
+ - bundle exec rake coveralls
data/Gemfile ADDED
@@ -0,0 +1,10 @@
1
+ source 'https://rubygems.org'
2
+
3
+ require 'rubygems'
4
+ # require 'bundler/setup'
5
+
6
+ group :test do
7
+ # gem 'test-unit' , '3.1.3'
8
+ end
9
+
10
+ gemspec
data/README.md ADDED
@@ -0,0 +1,2 @@
1
+ # torrentify
2
+ A search-tool for torrents
data/Rakefile ADDED
@@ -0,0 +1,51 @@
1
+ require 'rake'
2
+ require 'rake/testtask'
3
+ require 'bundler/gem_tasks'
4
+
5
+ desc 'Clean, test and install app'
6
+ task :default => [:test, :install]
7
+
8
+ desc 'test'
9
+ task :test => [:clean, :unitTest, :rubocop]
10
+
11
+ desc 'Remove coverage and pkg dirs before compilation'
12
+ task :clean do
13
+ rm_rf %w(coverage pkg)
14
+ end
15
+
16
+ desc 'Run RuboCop - Tool for detecting codestyle violations'
17
+ task :rubocop do
18
+ require 'rubocop/rake_task'
19
+ RuboCop::RakeTask.new
20
+ end
21
+
22
+ desc 'Run Unittests'
23
+ Rake::TestTask.new(:unitTest) do |t|
24
+ t.libs << 'test'
25
+ t.verbose = false
26
+ t.test_files = FileList['test/*_test.rb', 'test/sites/*_test.rb']
27
+ end
28
+
29
+ desc 'Run codeclimate - Sends coverage info to CodeClimate when in CI'
30
+ task :codeclimate => :test do
31
+ require 'simplecov'
32
+ require 'codeclimate-test-reporter'
33
+ SimpleCov.formatter = SimpleCov::Formatter::MultiFormatter[
34
+ SimpleCov::Formatter::HTMLFormatter,
35
+ CodeClimate::TestReporter::Formatter
36
+ ]
37
+ CodeClimate::TestReporter::Formatter.new.format(SimpleCov.result)
38
+ end
39
+
40
+ require 'coveralls/rake/task'
41
+ Coveralls::RakeTask.new
42
+ desc 'Run Coveralls - Sends coverage info to coveralls.io when in CI'
43
+ task :coveralls => [:test, 'coveralls:push'] do
44
+ require 'simplecov'
45
+ require 'coveralls'
46
+ SimpleCov.formatter = SimpleCov::Formatter::MultiFormatter[
47
+ SimpleCov::Formatter::HTMLFormatter,
48
+ Coveralls::SimpleCov::Formatter
49
+ ]
50
+ Coveralls.wear_merged!
51
+ end
@@ -0,0 +1,28 @@
1
+ #!/usr/bin/ruby
2
+ require 'rubygems'
3
+ require 'mechanize'
4
+ require_relative 'sites/kickass_parser'
5
+
6
+ # Manager responsible for scraping webpagem
7
+ class MechanizeManager
8
+ def initialize
9
+ end
10
+
11
+ # Module responsible for calling mechanize
12
+ module Agent
13
+ def self.get_web_page(url)
14
+ agent = Mechanize.new
15
+ agent.agent.http.verify_mode = OpenSSL::SSL::VERIFY_NONE
16
+ agent.get(url)
17
+ end
18
+ end
19
+
20
+ def search_kickass(search_term)
21
+ white_space = '%20'
22
+ url = 'https://kat.cr/usearch/' << search_term.gsub(' ', white_space)
23
+ puts "Searching for '#{search_term}' on kickass"
24
+ page = Agent.get_web_page(url)
25
+ KickassParser.new(page).main_divs
26
+ page
27
+ end
28
+ end
@@ -0,0 +1,72 @@
1
+ #!/usr/bin/ruby
2
+
3
+ require_relative '../../model/torrent_model'
4
+
5
+ # Class responsible for parsing
6
+ # the page response from kickass
7
+ class KickassParser
8
+ def initialize(page)
9
+ @page = page
10
+ end
11
+
12
+ # Parse values from html
13
+ module Parser
14
+ def self.seeders(div)
15
+ links = div.search(".//td[@class='red lasttd center']")
16
+ value = ''
17
+ links.each do |link|
18
+ value = link.content
19
+ end
20
+ value
21
+ end
22
+
23
+ def self.leechers(div)
24
+ links = div.search(".//td[@class='green center']")
25
+ value = ''
26
+ links.each do |link|
27
+ value = link.content
28
+ end
29
+ value
30
+ end
31
+
32
+ def self.size(div)
33
+ links = div.search(".//td[@class='nobr center']")
34
+ value = ''
35
+ links.each do |link|
36
+ value = link.content
37
+ end
38
+ value
39
+ end
40
+
41
+ def self.torrent_url(div)
42
+ links = div.search(".//a[@title='Download torrent file']")
43
+ value = ''
44
+ links.each do |link|
45
+ value = link.attributes['href']
46
+ end
47
+ value
48
+ end
49
+
50
+ def self.torrent_name(div)
51
+ links = div.search(".//a[@class='cellMainLink']")
52
+ value = ''
53
+ links.each do |link|
54
+ value = link.content
55
+ end
56
+ value
57
+ end
58
+ end
59
+
60
+ def main_divs
61
+ divs = @page.search(".//tr[@class='even' or @class='odd']")
62
+ divs.each do |div|
63
+ puts '-----------------'
64
+ puts Parser.torrent_url(div)
65
+ puts Parser.torrent_name(div)
66
+ puts Parser.size(div)
67
+ puts Parser.seeders(div)
68
+ puts Parser.leechers(div)
69
+ end
70
+ divs
71
+ end
72
+ end
@@ -0,0 +1,10 @@
1
+ #!/usr/bin/ruby
2
+
3
+ # Model for saving torrent info
4
+ class Torrent
5
+ attr_accessor :torrent_file
6
+ attr_accessor :name
7
+ attr_accessor :size
8
+ attr_accessor :seeders
9
+ attr_accessor :leechers
10
+ end
data/lib/torrentify.rb ADDED
@@ -0,0 +1,11 @@
1
+ #!/usr/bin/ruby
2
+
3
+ require_relative 'manager/mechanize_manager'
4
+
5
+ # Main interface
6
+ # Responsible for running manager-methods
7
+ module Torrentify
8
+ def self.search(search_param)
9
+ MechanizeManager.new.search_kickass(search_param)
10
+ end
11
+ end
@@ -0,0 +1,55 @@
1
+ require_relative '../test_helper'
2
+
3
+ require_relative '../../lib/mechanize_manager'
4
+
5
+ # Tests for code
6
+ class TestMechanizeManagerClass < Test::Unit::TestCase
7
+ class << self
8
+ def startup
9
+ puts 'Getting page and storing in class for reuse'
10
+ begin
11
+ search_term = 'a pigeon sat on a branch reflecting on existence'
12
+ @@page = MechanizeManager.new.search_kickass(search_term)
13
+ rescue ResponseCodeError
14
+ puts 'error getting page'
15
+ end
16
+ end
17
+
18
+ def shutdown
19
+ end
20
+
21
+ def suite
22
+ mysuite = super
23
+ def mysuite.run(*args)
24
+ TestMechanizeManagerClass.startup
25
+ super
26
+ TestMechanizeManagerClass.shutdown
27
+ end
28
+ mysuite
29
+ end
30
+ end
31
+
32
+ def setup
33
+ puts 'runs before each test'
34
+ end
35
+
36
+ def teardown
37
+ puts 'runs after each test'
38
+ end
39
+
40
+ def test_get_web_page_kickass
41
+ assert_not_nil @@page
42
+ end
43
+ end
44
+
45
+ # Capture of stdout to STDOUT var
46
+ module Kernel
47
+ def capture_stdout
48
+ out = StringIO.new
49
+ $stdout = out
50
+ yield
51
+ return out
52
+ ensure
53
+ $stdout = STDOUT
54
+ end
55
+ end
@@ -0,0 +1,32 @@
1
+ #!/usr/bin/ruby
2
+ require_relative '../../test_helper'
3
+
4
+ require_relative '../../../lib/sites/kickass_parser'
5
+ require_relative '../../../lib/mechanize_manager'
6
+
7
+ # Tests for kickass
8
+ class TestKickassClass < Test::Unit::TestCase
9
+ def test_main_divs
10
+ search_term = 'a pigeon sat on a branch reflecting on existence'
11
+ page = MechanizeManager.new.search_kickass(search_term)
12
+ parser = KickassParser.new(page)
13
+ out = capture_stdout do
14
+ result = parser.main_divs
15
+ assert_not_nil result
16
+ end
17
+ assert_not_nil out
18
+ puts out.string
19
+ end
20
+ end
21
+
22
+ # Capture of stdout to STDOUT var
23
+ module Kernel
24
+ def capture_stdout
25
+ out = StringIO.new
26
+ $stdout = out
27
+ yield
28
+ return out
29
+ ensure
30
+ $stdout = STDOUT
31
+ end
32
+ end
@@ -0,0 +1,6 @@
1
+ require 'simplecov'
2
+ SimpleCov.add_filter 'vendor'
3
+ SimpleCov.add_filter 'test'
4
+ SimpleCov.command_name 'Unit tests'
5
+ SimpleCov.start
6
+ require 'test/unit'
@@ -0,0 +1,11 @@
1
+ require_relative 'test_helper'
2
+
3
+ require_relative '../lib/torrentify'
4
+
5
+ # Tests for torrentify
6
+ class TestTorrentify < Test::Unit::TestCase
7
+ def test_first
8
+ search_param = 'Hej'
9
+ Torrentify.search(search_param)
10
+ end
11
+ end
@@ -0,0 +1,37 @@
1
+ # coding: utf-8
2
+ lib = File.expand_path('../lib', __FILE__)
3
+ $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
4
+
5
+ Gem::Specification.new do |spec|
6
+ spec.name = 'torrentify'
7
+ spec.version = 0.3
8
+ spec.authors = ['david eriksson']
9
+ spec.email = ['davideriksson@swedenmail.com']
10
+
11
+ spec.summary = %w(Baseapp for webscraping torrent-sites)
12
+ spec.description = %w(Baseapp for webscraping torrent-sites)
13
+ spec.homepage = 'http://seppaleinen.github.io/torrentify'
14
+
15
+ # Prevent pushing this gem to RubyGems.org by setting 'allowed_push_host', or
16
+ # delete this section to allow pushing this gem to any host.
17
+ if spec.respond_to?(:metadata)
18
+ spec.metadata['allowed_push_host'] = 'https://rubygems.org'
19
+ else
20
+ fail 'RubyGems 2.0 or nwr is required to protect against public gem pushes'
21
+ end
22
+
23
+ #spec.files = `git ls-files`.split($\).reject { |f| f.match(%r{^(test|spec|features)/}) }
24
+ spec.files = `git ls-files`.split($\)
25
+ spec.test_files = spec.files.grep(%r{^(test|spec|features)/})
26
+ spec.require_paths = ['lib']
27
+
28
+ spec.add_runtime_dependency 'mechanize', '2.7.3'
29
+ spec.add_development_dependency 'simplecov', '>= 0.7.1', '< 1.0.0'
30
+ spec.add_development_dependency 'bundler', '~> 1.10.6'
31
+ spec.add_development_dependency 'rake', '~> 10.4.2'
32
+ spec.add_development_dependency 'codeclimate-test-reporter', '0.4.8'
33
+ spec.add_development_dependency 'coveralls', '0.8.2'
34
+ #spec.add_development_dependency 'rspec', '3.3.0'
35
+ spec.add_development_dependency 'test-unit', '3.1.3'
36
+ spec.add_development_dependency 'rubocop', '~> 0.33.0'
37
+ end
metadata ADDED
@@ -0,0 +1,182 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: torrentify
3
+ version: !ruby/object:Gem::Version
4
+ version: '0.3'
5
+ platform: ruby
6
+ authors:
7
+ - david eriksson
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2015-09-05 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: mechanize
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - '='
18
+ - !ruby/object:Gem::Version
19
+ version: 2.7.3
20
+ type: :runtime
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - '='
25
+ - !ruby/object:Gem::Version
26
+ version: 2.7.3
27
+ - !ruby/object:Gem::Dependency
28
+ name: simplecov
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - ">="
32
+ - !ruby/object:Gem::Version
33
+ version: 0.7.1
34
+ - - "<"
35
+ - !ruby/object:Gem::Version
36
+ version: 1.0.0
37
+ type: :development
38
+ prerelease: false
39
+ version_requirements: !ruby/object:Gem::Requirement
40
+ requirements:
41
+ - - ">="
42
+ - !ruby/object:Gem::Version
43
+ version: 0.7.1
44
+ - - "<"
45
+ - !ruby/object:Gem::Version
46
+ version: 1.0.0
47
+ - !ruby/object:Gem::Dependency
48
+ name: bundler
49
+ requirement: !ruby/object:Gem::Requirement
50
+ requirements:
51
+ - - "~>"
52
+ - !ruby/object:Gem::Version
53
+ version: 1.10.6
54
+ type: :development
55
+ prerelease: false
56
+ version_requirements: !ruby/object:Gem::Requirement
57
+ requirements:
58
+ - - "~>"
59
+ - !ruby/object:Gem::Version
60
+ version: 1.10.6
61
+ - !ruby/object:Gem::Dependency
62
+ name: rake
63
+ requirement: !ruby/object:Gem::Requirement
64
+ requirements:
65
+ - - "~>"
66
+ - !ruby/object:Gem::Version
67
+ version: 10.4.2
68
+ type: :development
69
+ prerelease: false
70
+ version_requirements: !ruby/object:Gem::Requirement
71
+ requirements:
72
+ - - "~>"
73
+ - !ruby/object:Gem::Version
74
+ version: 10.4.2
75
+ - !ruby/object:Gem::Dependency
76
+ name: codeclimate-test-reporter
77
+ requirement: !ruby/object:Gem::Requirement
78
+ requirements:
79
+ - - '='
80
+ - !ruby/object:Gem::Version
81
+ version: 0.4.8
82
+ type: :development
83
+ prerelease: false
84
+ version_requirements: !ruby/object:Gem::Requirement
85
+ requirements:
86
+ - - '='
87
+ - !ruby/object:Gem::Version
88
+ version: 0.4.8
89
+ - !ruby/object:Gem::Dependency
90
+ name: coveralls
91
+ requirement: !ruby/object:Gem::Requirement
92
+ requirements:
93
+ - - '='
94
+ - !ruby/object:Gem::Version
95
+ version: 0.8.2
96
+ type: :development
97
+ prerelease: false
98
+ version_requirements: !ruby/object:Gem::Requirement
99
+ requirements:
100
+ - - '='
101
+ - !ruby/object:Gem::Version
102
+ version: 0.8.2
103
+ - !ruby/object:Gem::Dependency
104
+ name: test-unit
105
+ requirement: !ruby/object:Gem::Requirement
106
+ requirements:
107
+ - - '='
108
+ - !ruby/object:Gem::Version
109
+ version: 3.1.3
110
+ type: :development
111
+ prerelease: false
112
+ version_requirements: !ruby/object:Gem::Requirement
113
+ requirements:
114
+ - - '='
115
+ - !ruby/object:Gem::Version
116
+ version: 3.1.3
117
+ - !ruby/object:Gem::Dependency
118
+ name: rubocop
119
+ requirement: !ruby/object:Gem::Requirement
120
+ requirements:
121
+ - - "~>"
122
+ - !ruby/object:Gem::Version
123
+ version: 0.33.0
124
+ type: :development
125
+ prerelease: false
126
+ version_requirements: !ruby/object:Gem::Requirement
127
+ requirements:
128
+ - - "~>"
129
+ - !ruby/object:Gem::Version
130
+ version: 0.33.0
131
+ description: '["Baseapp", "for", "webscraping", "torrent-sites"]'
132
+ email:
133
+ - davideriksson@swedenmail.com
134
+ executables: []
135
+ extensions: []
136
+ extra_rdoc_files: []
137
+ files:
138
+ - ".coveralls.yml"
139
+ - ".gitignore"
140
+ - ".rubocop.yml"
141
+ - ".travis.yml"
142
+ - Gemfile
143
+ - README.md
144
+ - Rakefile
145
+ - lib/manager/mechanize_manager.rb
146
+ - lib/manager/sites/kickass_parser.rb
147
+ - lib/model/torrent_model.rb
148
+ - lib/torrentify.rb
149
+ - test/manager/mechanize_manager_test.rb
150
+ - test/manager/sites/kickass_parser_test.rb
151
+ - test/test_helper.rb
152
+ - test/torrentify_test.rb
153
+ - torrentify.gemspec
154
+ homepage: http://seppaleinen.github.io/torrentify
155
+ licenses: []
156
+ metadata:
157
+ allowed_push_host: https://rubygems.org
158
+ post_install_message:
159
+ rdoc_options: []
160
+ require_paths:
161
+ - lib
162
+ required_ruby_version: !ruby/object:Gem::Requirement
163
+ requirements:
164
+ - - ">="
165
+ - !ruby/object:Gem::Version
166
+ version: '0'
167
+ required_rubygems_version: !ruby/object:Gem::Requirement
168
+ requirements:
169
+ - - ">="
170
+ - !ruby/object:Gem::Version
171
+ version: '0'
172
+ requirements: []
173
+ rubyforge_project:
174
+ rubygems_version: 2.4.6
175
+ signing_key:
176
+ specification_version: 4
177
+ summary: '["Baseapp", "for", "webscraping", "torrent-sites"]'
178
+ test_files:
179
+ - test/manager/mechanize_manager_test.rb
180
+ - test/manager/sites/kickass_parser_test.rb
181
+ - test/test_helper.rb
182
+ - test/torrentify_test.rb