course_scraper 0.0.1
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.
- data/.gitignore +4 -0
- data/.rvmrc +47 -0
- data/Gemfile +5 -0
- data/Rakefile +11 -0
- data/Readme.md +41 -0
- data/course_scraper.gemspec +27 -0
- data/lib/course_scraper.rb +9 -0
- data/lib/course_scraper/catalonia.rb +107 -0
- data/lib/course_scraper/category.rb +16 -0
- data/lib/course_scraper/course.rb +16 -0
- data/lib/course_scraper/spain.rb +107 -0
- data/lib/course_scraper/version.rb +3 -0
- data/test/course_scraper/catalonia_test.rb +77 -0
- data/test/course_scraper/spain_test.rb +76 -0
- data/test/test_helper.rb +12 -0
- metadata +159 -0
data/.gitignore
ADDED
data/.rvmrc
ADDED
@@ -0,0 +1,47 @@
|
|
1
|
+
#!/usr/bin/env bash
|
2
|
+
|
3
|
+
# This is an RVM Project .rvmrc file, used to automatically load the ruby
|
4
|
+
# development environment upon cd'ing into the directory
|
5
|
+
|
6
|
+
# First we specify our desired <ruby>[@<gemset>], the @gemset name is optional.
|
7
|
+
environment_id="1.9.3@course_scraper"
|
8
|
+
|
9
|
+
#
|
10
|
+
# First we attempt to load the desired environment directly from the environment
|
11
|
+
# file. This is very fast and efficicent compared to running through the entire
|
12
|
+
# CLI and selector. If you want feedback on which environment was used then
|
13
|
+
# insert the word 'use' after --create as this triggers verbose mode.
|
14
|
+
#
|
15
|
+
if [[ -d "${rvm_path:-$HOME/.rvm}/environments" \
|
16
|
+
&& -s "${rvm_path:-$HOME/.rvm}/environments/$environment_id" ]]
|
17
|
+
then
|
18
|
+
\. "${rvm_path:-$HOME/.rvm}/environments/$environment_id"
|
19
|
+
|
20
|
+
if [[ -s ".rvm/hooks/after_use" ]]
|
21
|
+
then
|
22
|
+
. ".rvm/hooks/after_use"
|
23
|
+
fi
|
24
|
+
else
|
25
|
+
# If the environment file has not yet been created, use the RVM CLI to select.
|
26
|
+
if ! rvm --create "$environment_id"
|
27
|
+
then
|
28
|
+
echo "Failed to create RVM environment ''."
|
29
|
+
fi
|
30
|
+
fi
|
31
|
+
|
32
|
+
#
|
33
|
+
# If you use an RVM gemset file to install a list of gems (*.gems), you can have
|
34
|
+
# it be automatically loaded. Uncomment the following and adjust the filename if
|
35
|
+
# necessary.
|
36
|
+
#
|
37
|
+
# filename=".gems"
|
38
|
+
# if [[ -s "$filename" ]] ; then
|
39
|
+
# rvm gemset import "$filename" | grep -v already | grep -v listed | grep -v complete | sed '/^$/d'
|
40
|
+
# fi
|
41
|
+
|
42
|
+
#
|
43
|
+
# If you use bundler and would like to run bundle each time you enter the
|
44
|
+
# directory, you can uncomment the following code.
|
45
|
+
#
|
46
|
+
export PATH="./bin:$PATH"
|
47
|
+
#
|
data/Gemfile
ADDED
data/Rakefile
ADDED
data/Readme.md
ADDED
@@ -0,0 +1,41 @@
|
|
1
|
+
# course_scraper
|
2
|
+
|
3
|
+
A course scraper that gets all the vocational training courses in Catalonia
|
4
|
+
and Spain.
|
5
|
+
|
6
|
+
# Install
|
7
|
+
|
8
|
+
In your Gemfile:
|
9
|
+
|
10
|
+
gem 'course_scraper', git: 'git://github.com/codegram/course_scraper'
|
11
|
+
|
12
|
+
## Usage
|
13
|
+
|
14
|
+
```ruby
|
15
|
+
require 'course_scraper'
|
16
|
+
catalan_categories = CourseScraper::Catalonia.scrape
|
17
|
+
|
18
|
+
catalan_categories.each do |category|
|
19
|
+
category.name
|
20
|
+
# => "Administracio"
|
21
|
+
category.courses.each do |course|
|
22
|
+
course.name
|
23
|
+
# => "Transport"
|
24
|
+
course.type
|
25
|
+
# => :medium
|
26
|
+
end
|
27
|
+
end
|
28
|
+
|
29
|
+
spanish_categories = CourseScraper::Spain.scrape
|
30
|
+
|
31
|
+
spanish_categories.each do |category|
|
32
|
+
category.name
|
33
|
+
# => "Administracion"
|
34
|
+
category.courses.each do |course|
|
35
|
+
course.name
|
36
|
+
# => "Transporte"
|
37
|
+
course.type
|
38
|
+
# => :medium
|
39
|
+
end
|
40
|
+
end
|
41
|
+
```
|
@@ -0,0 +1,27 @@
|
|
1
|
+
# -*- encoding: utf-8 -*-
|
2
|
+
$:.push File.expand_path("../lib", __FILE__)
|
3
|
+
require "course_scraper/version"
|
4
|
+
|
5
|
+
Gem::Specification.new do |s|
|
6
|
+
s.name = "course_scraper"
|
7
|
+
s.version = CourseScraper::VERSION
|
8
|
+
s.authors = ["Josep M. Bach"]
|
9
|
+
s.email = ["josep.m.bach@gmail.com"]
|
10
|
+
s.homepage = "http://github.com/codegram/course_scraper"
|
11
|
+
s.summary = %q{Gives you a list of all courses in Spanish vocational education.}
|
12
|
+
s.description = %q{Gives you a list of all courses in Spanish vocational education.}
|
13
|
+
|
14
|
+
s.rubyforge_project = "course_scraper"
|
15
|
+
|
16
|
+
s.files = `git ls-files`.split("\n")
|
17
|
+
s.test_files = `git ls-files -- {test,spec,features}/*`.split("\n")
|
18
|
+
s.executables = `git ls-files -- bin/*`.split("\n").map{ |f| File.basename(f) }
|
19
|
+
s.require_paths = ["lib"]
|
20
|
+
|
21
|
+
s.add_runtime_dependency "capybara"
|
22
|
+
s.add_runtime_dependency "capybara-webkit"
|
23
|
+
s.add_development_dependency "vcr"
|
24
|
+
s.add_development_dependency "webmock"
|
25
|
+
s.add_development_dependency "mocha"
|
26
|
+
s.add_development_dependency "minitest"
|
27
|
+
end
|
@@ -0,0 +1,107 @@
|
|
1
|
+
require 'capybara'
|
2
|
+
require 'capybara/dsl'
|
3
|
+
require 'capybara-webkit'
|
4
|
+
|
5
|
+
module CourseScraper
|
6
|
+
# Public: A scraper for all the vocational training courses in Catalonia.
|
7
|
+
#
|
8
|
+
# Examples
|
9
|
+
#
|
10
|
+
# courses = Catalonia.scrape
|
11
|
+
# # => [#<CourseScraper::Course ...>, #<CourseScraper::Course ...>]
|
12
|
+
#
|
13
|
+
class Catalonia
|
14
|
+
include Capybara::DSL
|
15
|
+
|
16
|
+
# Public: Instantiates a new scraper and fires it to grab all the vocational
|
17
|
+
# training courses in Catalonia.
|
18
|
+
#
|
19
|
+
# Returns the Array collection of CourseScraper::Course instances.
|
20
|
+
def self.scrape
|
21
|
+
new.scrape
|
22
|
+
end
|
23
|
+
|
24
|
+
# Internal: Sets the configuration for capybara to work with the Gencat
|
25
|
+
# website.
|
26
|
+
#
|
27
|
+
# Returns nothing.
|
28
|
+
def setup_capybara
|
29
|
+
Capybara.run_server = false
|
30
|
+
Capybara.current_driver = :webkit
|
31
|
+
Capybara.app_host = 'http://www20.gencat.cat'
|
32
|
+
end
|
33
|
+
|
34
|
+
# Public: Scrapes the vocational training courses in Catalonia.
|
35
|
+
#
|
36
|
+
# Returns the Array collection of CourseScraper::Category instances with
|
37
|
+
# nested Courses.
|
38
|
+
def scrape
|
39
|
+
setup_capybara
|
40
|
+
|
41
|
+
categories = []
|
42
|
+
each_category do |name, href|
|
43
|
+
categories << { name: name, url: href }
|
44
|
+
end
|
45
|
+
|
46
|
+
categories.map do |category|
|
47
|
+
cat = Category.new(category[:name], [])
|
48
|
+
each_course category[:url] do |name, type|
|
49
|
+
cat.courses << Course.new(name, type)
|
50
|
+
end
|
51
|
+
cat
|
52
|
+
end
|
53
|
+
end
|
54
|
+
|
55
|
+
# Internal: Visits the main page where the course categories are listed.
|
56
|
+
#
|
57
|
+
# Returns nothing.
|
58
|
+
def visit_category_list
|
59
|
+
visit "/portal/site/queestudiar/menuitem.d7cfc336363a7af8e85c7273b0c0e1a0/?vgnextoid=0a8137a9f4f2b210VgnVCM2000009b0c1e0aRCRD&vgnextchannel=0a8137a9f4f2b210VgnVCM2000009b0c1e0aRCRD&vgnextfmt=default"
|
60
|
+
end
|
61
|
+
|
62
|
+
# Internal: Call a block for every category.
|
63
|
+
#
|
64
|
+
# Yields the String name of the category and its String URL.
|
65
|
+
#
|
66
|
+
# Returns nothing.
|
67
|
+
def each_category(&block)
|
68
|
+
visit_category_list
|
69
|
+
|
70
|
+
links = []
|
71
|
+
|
72
|
+
within ".FW_bColEsquerraCos" do
|
73
|
+
links += all('a')
|
74
|
+
end
|
75
|
+
|
76
|
+
within ".FW_bColDretaCos" do
|
77
|
+
links += all('a')
|
78
|
+
end
|
79
|
+
|
80
|
+
links.each do |link|
|
81
|
+
block.call link.text, link[:href]
|
82
|
+
end
|
83
|
+
end
|
84
|
+
|
85
|
+
# Internal: Call a block for every course in a category URL.
|
86
|
+
#
|
87
|
+
# category_url - the String category URL
|
88
|
+
#
|
89
|
+
# Yields the String name of the course and its Symbol type.
|
90
|
+
#
|
91
|
+
# Returns nothing.
|
92
|
+
def each_course(category_url, &block)
|
93
|
+
visit category_url
|
94
|
+
|
95
|
+
courses = []
|
96
|
+
|
97
|
+
all('.CEDU_vertical').each do |ul|
|
98
|
+
type = ul.find('li:nth-of-type(2)').text =~ /superior/ ? :high : :medium
|
99
|
+
courses << [ul.find('li.titol').text, type]
|
100
|
+
end
|
101
|
+
|
102
|
+
courses.each do |course|
|
103
|
+
block.call *course
|
104
|
+
end
|
105
|
+
end
|
106
|
+
end
|
107
|
+
end
|
@@ -0,0 +1,16 @@
|
|
1
|
+
module CourseScraper
|
2
|
+
# Public: A Category of vocational courses that contains them.
|
3
|
+
#
|
4
|
+
class Category
|
5
|
+
attr_reader :name, :courses
|
6
|
+
|
7
|
+
# Public: Initializes a new Category.
|
8
|
+
#
|
9
|
+
# name - the String name of the category
|
10
|
+
# courses - the Array of courses of the category
|
11
|
+
def initialize(name, courses)
|
12
|
+
@name = name
|
13
|
+
@courses = courses || []
|
14
|
+
end
|
15
|
+
end
|
16
|
+
end
|
@@ -0,0 +1,16 @@
|
|
1
|
+
module CourseScraper
|
2
|
+
# Public: A vocational course.
|
3
|
+
#
|
4
|
+
class Course
|
5
|
+
attr_reader :name, :type
|
6
|
+
|
7
|
+
# Public: Initializes a new Course.
|
8
|
+
#
|
9
|
+
# name - the String name of the course
|
10
|
+
# type - the Symbol type of the course (either :high or :medium).
|
11
|
+
def initialize(name, type)
|
12
|
+
@name = name
|
13
|
+
@type = type
|
14
|
+
end
|
15
|
+
end
|
16
|
+
end
|
@@ -0,0 +1,107 @@
|
|
1
|
+
# encoding: utf-8
|
2
|
+
require 'capybara'
|
3
|
+
require 'capybara/dsl'
|
4
|
+
require 'capybara-webkit'
|
5
|
+
|
6
|
+
module CourseScraper
|
7
|
+
# Public: A scraper for all the vocational training courses in Spain.
|
8
|
+
#
|
9
|
+
# Examples
|
10
|
+
#
|
11
|
+
# courses = Spain.scrape
|
12
|
+
# # => [#<CourseScraper::Course ...>, #<CourseScraper::Course ...>]
|
13
|
+
#
|
14
|
+
class Spain
|
15
|
+
include Capybara::DSL
|
16
|
+
|
17
|
+
# Public: Instantiates a new scraper and fires it to grab all the vocational
|
18
|
+
# training courses in Spain.
|
19
|
+
#
|
20
|
+
# Returns the Array collection of CourseScraper::Course instances.
|
21
|
+
def self.scrape
|
22
|
+
new.scrape
|
23
|
+
end
|
24
|
+
|
25
|
+
# Internal: Sets the configuration for capybara to work with the Todofp
|
26
|
+
# website.
|
27
|
+
#
|
28
|
+
# Returns nothing.
|
29
|
+
def setup_capybara
|
30
|
+
Capybara.run_server = false
|
31
|
+
Capybara.current_driver = :webkit
|
32
|
+
Capybara.app_host = 'http://todofp.es'
|
33
|
+
end
|
34
|
+
|
35
|
+
# Public: Scrapes the vocational training courses in Spain.
|
36
|
+
#
|
37
|
+
# Returns the Array collection of CourseScraper::Category instances with
|
38
|
+
# nested Courses.
|
39
|
+
def scrape
|
40
|
+
setup_capybara
|
41
|
+
|
42
|
+
categories = []
|
43
|
+
each_category do |name, href|
|
44
|
+
categories << { name: name, url: href }
|
45
|
+
end
|
46
|
+
|
47
|
+
categories.map do |category|
|
48
|
+
cat = Category.new(category[:name], [])
|
49
|
+
each_course category[:url] do |name, type|
|
50
|
+
cat.courses << Course.new(name, type)
|
51
|
+
end
|
52
|
+
cat
|
53
|
+
end
|
54
|
+
end
|
55
|
+
|
56
|
+
# Internal: Visits the main page where the course categories are listed.
|
57
|
+
#
|
58
|
+
# Returns nothing.
|
59
|
+
def visit_category_list
|
60
|
+
visit '/todofp/formacion/que-y-como-estudiar/oferta-formativa/todos-los-estudios.html'
|
61
|
+
end
|
62
|
+
|
63
|
+
# Internal: Call a block for every category.
|
64
|
+
#
|
65
|
+
# Yields the String name of the category and its String URL.
|
66
|
+
#
|
67
|
+
# Returns nothing.
|
68
|
+
def each_category(&block)
|
69
|
+
visit_category_list
|
70
|
+
|
71
|
+
links = []
|
72
|
+
|
73
|
+
within ".columnas-fp" do
|
74
|
+
links = all('a')
|
75
|
+
end
|
76
|
+
|
77
|
+
links.each do |link|
|
78
|
+
block.call link.text, link[:href]
|
79
|
+
end
|
80
|
+
end
|
81
|
+
|
82
|
+
# Internal: Call a block for every course in a category URL.
|
83
|
+
#
|
84
|
+
# category_url - the String category URL
|
85
|
+
#
|
86
|
+
# Yields the String name of the course and its Symbol type.
|
87
|
+
#
|
88
|
+
# Returns nothing.
|
89
|
+
def each_course(category_url, &block)
|
90
|
+
visit category_url
|
91
|
+
|
92
|
+
courses = []
|
93
|
+
|
94
|
+
all('.columnas-familiafp ul:nth-of-type(1) li').each do |course|
|
95
|
+
courses << [course.text, :medium]
|
96
|
+
end
|
97
|
+
|
98
|
+
all('.columnas-familiafp ul:nth-of-type(2) li').each do |course|
|
99
|
+
courses << [course.text, :high]
|
100
|
+
end
|
101
|
+
|
102
|
+
courses.each do |course|
|
103
|
+
block.call *course
|
104
|
+
end
|
105
|
+
end
|
106
|
+
end
|
107
|
+
end
|
@@ -0,0 +1,77 @@
|
|
1
|
+
# encoding: utf-8
|
2
|
+
require_relative '../test_helper'
|
3
|
+
|
4
|
+
module CourseScraper
|
5
|
+
describe Catalonia do
|
6
|
+
subject { Catalonia.new }
|
7
|
+
|
8
|
+
before do
|
9
|
+
subject.setup_capybara
|
10
|
+
end
|
11
|
+
|
12
|
+
describe ".scrape" do
|
13
|
+
it 'delegates to an instance' do
|
14
|
+
Catalonia.stubs(:new).returns subject
|
15
|
+
subject.expects(:scrape)
|
16
|
+
|
17
|
+
Catalonia.scrape
|
18
|
+
end
|
19
|
+
end
|
20
|
+
|
21
|
+
describe "#visit_category_list" do
|
22
|
+
it 'visit the category list' do
|
23
|
+
subject.expects(:visit)
|
24
|
+
subject.visit_category_list
|
25
|
+
end
|
26
|
+
end
|
27
|
+
|
28
|
+
describe "#each_category" do
|
29
|
+
it 'calls a block for each category' do
|
30
|
+
names = []
|
31
|
+
urls = []
|
32
|
+
subject.each_category do |name, url|
|
33
|
+
names << name
|
34
|
+
urls << url
|
35
|
+
end
|
36
|
+
|
37
|
+
names = names[0..2]
|
38
|
+
urls = urls[0..2]
|
39
|
+
|
40
|
+
names.must_equal [
|
41
|
+
"Activitats físiques i esportives",
|
42
|
+
"Agrària",
|
43
|
+
"Comerç i màrqueting"
|
44
|
+
]
|
45
|
+
urls.must_equal [
|
46
|
+
"/portal/site/queestudiar/menuitem.796f7d19c318c94cd56a1c76b0c0e1a0/?vgnextoid=e01237a9f4f2b210VgnVCM2000009b0c1e0aRCRD&vgnextchannel=e01237a9f4f2b210VgnVCM2000009b0c1e0aRCRD&vgnextfmt=default",
|
47
|
+
"/portal/site/queestudiar/menuitem.796f7d19c318c94cd56a1c76b0c0e1a0/?vgnextoid=d6e237a9f4f2b210VgnVCM2000009b0c1e0aRCRD&vgnextchannel=d6e237a9f4f2b210VgnVCM2000009b0c1e0aRCRD&vgnextfmt=default",
|
48
|
+
"/portal/site/queestudiar/menuitem.796f7d19c318c94cd56a1c76b0c0e1a0/?vgnextoid=1d8337a9f4f2b210VgnVCM2000009b0c1e0aRCRD&vgnextchannel=1d8337a9f4f2b210VgnVCM2000009b0c1e0aRCRD&vgnextfmt=default"
|
49
|
+
]
|
50
|
+
end
|
51
|
+
end
|
52
|
+
|
53
|
+
describe "#each_course" do
|
54
|
+
it 'calls a block for each course in a category' do
|
55
|
+
category_url = "http://www20.gencat.cat/portal/site/queestudiar/menuitem.796f7d19c318c94cd56a1c76b0c0e1a0/?vgnextoid=e01237a9f4f2b210VgnVCM2000009b0c1e0aRCRD&vgnextchannel=e01237a9f4f2b210VgnVCM2000009b0c1e0aRCRD&vgnextfmt=default://google.com"
|
56
|
+
|
57
|
+
names = []
|
58
|
+
types = []
|
59
|
+
|
60
|
+
VCR.use_cassette(:catalan_courses) do
|
61
|
+
subject.each_course(category_url) do |name, type|
|
62
|
+
names << name
|
63
|
+
types << type
|
64
|
+
end
|
65
|
+
end
|
66
|
+
|
67
|
+
names[0].must_match /i esportives/
|
68
|
+
names[1].must_match /sicoesportives en el medi natural/
|
69
|
+
names[2].must_match /en el medi natural, perfil professional/
|
70
|
+
|
71
|
+
types[0].must_equal :high
|
72
|
+
types[1].must_equal :medium
|
73
|
+
types[2].must_equal :medium
|
74
|
+
end
|
75
|
+
end
|
76
|
+
end
|
77
|
+
end
|
@@ -0,0 +1,76 @@
|
|
1
|
+
# encoding: utf-8
|
2
|
+
require_relative '../test_helper'
|
3
|
+
|
4
|
+
module CourseScraper
|
5
|
+
describe Spain do
|
6
|
+
subject { Spain.new }
|
7
|
+
|
8
|
+
before do
|
9
|
+
subject.setup_capybara
|
10
|
+
end
|
11
|
+
|
12
|
+
describe ".scrape" do
|
13
|
+
it 'delegates to an instance' do
|
14
|
+
Spain.stubs(:new).returns subject
|
15
|
+
subject.expects(:scrape)
|
16
|
+
|
17
|
+
Spain.scrape
|
18
|
+
end
|
19
|
+
end
|
20
|
+
|
21
|
+
describe "#visit_category_list" do
|
22
|
+
it 'visit the category list' do
|
23
|
+
subject.expects(:visit)
|
24
|
+
subject.visit_category_list
|
25
|
+
end
|
26
|
+
end
|
27
|
+
|
28
|
+
describe "#each_category" do
|
29
|
+
it 'calls a block for each category' do
|
30
|
+
names = []
|
31
|
+
urls = []
|
32
|
+
subject.each_category do |name, url|
|
33
|
+
names << name
|
34
|
+
urls << url
|
35
|
+
end
|
36
|
+
|
37
|
+
names = names[0..2]
|
38
|
+
urls = urls[0..2]
|
39
|
+
|
40
|
+
names.must_equal [
|
41
|
+
"Actividades Físicas y Deportivas",
|
42
|
+
"Administración y Gestión",
|
43
|
+
"Agraria"
|
44
|
+
]
|
45
|
+
urls.must_equal [
|
46
|
+
"/todofp/formacion/que-y-como-estudiar/oferta-formativa/todos-los-estudios/actividades-fisico-deportivas.html",
|
47
|
+
"/todofp/formacion/que-y-como-estudiar/oferta-formativa/todos-los-estudios/administracion-gestion.html",
|
48
|
+
"/todofp/formacion/que-y-como-estudiar/oferta-formativa/todos-los-estudios/agraria.html"
|
49
|
+
]
|
50
|
+
end
|
51
|
+
end
|
52
|
+
|
53
|
+
describe "#each_course" do
|
54
|
+
it 'calls a block for each course in a category' do
|
55
|
+
category_url = "http://todofp.es/todofp/formacion/que-y-como-estudiar/oferta-formativa/todos-los-estudios/actividades-fisico-deportivas.html"
|
56
|
+
|
57
|
+
names = []
|
58
|
+
types = []
|
59
|
+
|
60
|
+
VCR.use_cassette(:spanish_courses) do
|
61
|
+
subject.each_course(category_url) do |name, type|
|
62
|
+
names << name
|
63
|
+
types << type
|
64
|
+
end
|
65
|
+
end
|
66
|
+
|
67
|
+
names[0].must_equal "Conducción de actividades físico-deportivas en el medio natural"
|
68
|
+
names[1].must_equal "Animación de actividades físico-deportivas"
|
69
|
+
|
70
|
+
types[0].must_equal :medium
|
71
|
+
types[1].must_equal :high
|
72
|
+
end
|
73
|
+
end
|
74
|
+
end
|
75
|
+
end
|
76
|
+
|
data/test/test_helper.rb
ADDED
@@ -0,0 +1,12 @@
|
|
1
|
+
gem 'minitest'
|
2
|
+
require 'minitest/spec'
|
3
|
+
require 'minitest/autorun'
|
4
|
+
require 'mocha'
|
5
|
+
require 'vcr'
|
6
|
+
require_relative '../lib/course_scraper'
|
7
|
+
|
8
|
+
VCR.config do |c|
|
9
|
+
c.cassette_library_dir = "test/fixtures/cassettes"
|
10
|
+
c.stub_with :webmock
|
11
|
+
c.default_cassette_options = { :record => :new_episodes }
|
12
|
+
end
|
metadata
ADDED
@@ -0,0 +1,159 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: course_scraper
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.0.1
|
5
|
+
prerelease:
|
6
|
+
platform: ruby
|
7
|
+
authors:
|
8
|
+
- Josep M. Bach
|
9
|
+
autorequire:
|
10
|
+
bindir: bin
|
11
|
+
cert_chain: []
|
12
|
+
date: 2012-03-22 00:00:00.000000000 Z
|
13
|
+
dependencies:
|
14
|
+
- !ruby/object:Gem::Dependency
|
15
|
+
name: capybara
|
16
|
+
requirement: !ruby/object:Gem::Requirement
|
17
|
+
none: false
|
18
|
+
requirements:
|
19
|
+
- - ! '>='
|
20
|
+
- !ruby/object:Gem::Version
|
21
|
+
version: '0'
|
22
|
+
type: :runtime
|
23
|
+
prerelease: false
|
24
|
+
version_requirements: !ruby/object:Gem::Requirement
|
25
|
+
none: false
|
26
|
+
requirements:
|
27
|
+
- - ! '>='
|
28
|
+
- !ruby/object:Gem::Version
|
29
|
+
version: '0'
|
30
|
+
- !ruby/object:Gem::Dependency
|
31
|
+
name: capybara-webkit
|
32
|
+
requirement: !ruby/object:Gem::Requirement
|
33
|
+
none: false
|
34
|
+
requirements:
|
35
|
+
- - ! '>='
|
36
|
+
- !ruby/object:Gem::Version
|
37
|
+
version: '0'
|
38
|
+
type: :runtime
|
39
|
+
prerelease: false
|
40
|
+
version_requirements: !ruby/object:Gem::Requirement
|
41
|
+
none: false
|
42
|
+
requirements:
|
43
|
+
- - ! '>='
|
44
|
+
- !ruby/object:Gem::Version
|
45
|
+
version: '0'
|
46
|
+
- !ruby/object:Gem::Dependency
|
47
|
+
name: vcr
|
48
|
+
requirement: !ruby/object:Gem::Requirement
|
49
|
+
none: false
|
50
|
+
requirements:
|
51
|
+
- - ! '>='
|
52
|
+
- !ruby/object:Gem::Version
|
53
|
+
version: '0'
|
54
|
+
type: :development
|
55
|
+
prerelease: false
|
56
|
+
version_requirements: !ruby/object:Gem::Requirement
|
57
|
+
none: false
|
58
|
+
requirements:
|
59
|
+
- - ! '>='
|
60
|
+
- !ruby/object:Gem::Version
|
61
|
+
version: '0'
|
62
|
+
- !ruby/object:Gem::Dependency
|
63
|
+
name: webmock
|
64
|
+
requirement: !ruby/object:Gem::Requirement
|
65
|
+
none: false
|
66
|
+
requirements:
|
67
|
+
- - ! '>='
|
68
|
+
- !ruby/object:Gem::Version
|
69
|
+
version: '0'
|
70
|
+
type: :development
|
71
|
+
prerelease: false
|
72
|
+
version_requirements: !ruby/object:Gem::Requirement
|
73
|
+
none: false
|
74
|
+
requirements:
|
75
|
+
- - ! '>='
|
76
|
+
- !ruby/object:Gem::Version
|
77
|
+
version: '0'
|
78
|
+
- !ruby/object:Gem::Dependency
|
79
|
+
name: mocha
|
80
|
+
requirement: !ruby/object:Gem::Requirement
|
81
|
+
none: false
|
82
|
+
requirements:
|
83
|
+
- - ! '>='
|
84
|
+
- !ruby/object:Gem::Version
|
85
|
+
version: '0'
|
86
|
+
type: :development
|
87
|
+
prerelease: false
|
88
|
+
version_requirements: !ruby/object:Gem::Requirement
|
89
|
+
none: false
|
90
|
+
requirements:
|
91
|
+
- - ! '>='
|
92
|
+
- !ruby/object:Gem::Version
|
93
|
+
version: '0'
|
94
|
+
- !ruby/object:Gem::Dependency
|
95
|
+
name: minitest
|
96
|
+
requirement: !ruby/object:Gem::Requirement
|
97
|
+
none: false
|
98
|
+
requirements:
|
99
|
+
- - ! '>='
|
100
|
+
- !ruby/object:Gem::Version
|
101
|
+
version: '0'
|
102
|
+
type: :development
|
103
|
+
prerelease: false
|
104
|
+
version_requirements: !ruby/object:Gem::Requirement
|
105
|
+
none: false
|
106
|
+
requirements:
|
107
|
+
- - ! '>='
|
108
|
+
- !ruby/object:Gem::Version
|
109
|
+
version: '0'
|
110
|
+
description: Gives you a list of all courses in Spanish vocational education.
|
111
|
+
email:
|
112
|
+
- josep.m.bach@gmail.com
|
113
|
+
executables: []
|
114
|
+
extensions: []
|
115
|
+
extra_rdoc_files: []
|
116
|
+
files:
|
117
|
+
- .gitignore
|
118
|
+
- .rvmrc
|
119
|
+
- Gemfile
|
120
|
+
- Rakefile
|
121
|
+
- Readme.md
|
122
|
+
- course_scraper.gemspec
|
123
|
+
- lib/course_scraper.rb
|
124
|
+
- lib/course_scraper/catalonia.rb
|
125
|
+
- lib/course_scraper/category.rb
|
126
|
+
- lib/course_scraper/course.rb
|
127
|
+
- lib/course_scraper/spain.rb
|
128
|
+
- lib/course_scraper/version.rb
|
129
|
+
- test/course_scraper/catalonia_test.rb
|
130
|
+
- test/course_scraper/spain_test.rb
|
131
|
+
- test/test_helper.rb
|
132
|
+
homepage: http://github.com/codegram/course_scraper
|
133
|
+
licenses: []
|
134
|
+
post_install_message:
|
135
|
+
rdoc_options: []
|
136
|
+
require_paths:
|
137
|
+
- lib
|
138
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
139
|
+
none: false
|
140
|
+
requirements:
|
141
|
+
- - ! '>='
|
142
|
+
- !ruby/object:Gem::Version
|
143
|
+
version: '0'
|
144
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
145
|
+
none: false
|
146
|
+
requirements:
|
147
|
+
- - ! '>='
|
148
|
+
- !ruby/object:Gem::Version
|
149
|
+
version: '0'
|
150
|
+
requirements: []
|
151
|
+
rubyforge_project: course_scraper
|
152
|
+
rubygems_version: 1.8.19
|
153
|
+
signing_key:
|
154
|
+
specification_version: 3
|
155
|
+
summary: Gives you a list of all courses in Spanish vocational education.
|
156
|
+
test_files:
|
157
|
+
- test/course_scraper/catalonia_test.rb
|
158
|
+
- test/course_scraper/spain_test.rb
|
159
|
+
- test/test_helper.rb
|