bootleg 0.0.4 → 0.0.5

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/Gemfile CHANGED
@@ -3,7 +3,8 @@ source 'https://rubygems.org'
3
3
  gem 'nokogiri'
4
4
  gem 'mechanize'
5
5
  gem 'rspec'
6
-
6
+ gem 'activerecord'
7
+ gem 'activerecord-nulldb-adapter'
7
8
  # Specify your gem's dependencies in bootleg.gemspec
8
9
 
9
10
  gemspec
data/README.md CHANGED
@@ -1,6 +1,8 @@
1
1
  # Bootleg
2
2
 
3
- TODO: Write a gem description
3
+ Bootleg is a basic scraper. It scrapes movie, theater and showtime
4
+ details from moviefone.com based on a certain zipcode for a 25 mile
5
+ radius.
4
6
 
5
7
  ## Installation
6
8
 
@@ -16,9 +18,43 @@ Or install it yourself as:
16
18
 
17
19
  $ gem install bootleg
18
20
 
21
+ Generate models and migrations:
22
+
23
+ $ rails generate bootleg:install
24
+
19
25
  ## Usage
20
26
 
21
- TODO: Write usage instructions here
27
+ Load content for a certain zipcode:
28
+
29
+ Example:
30
+
31
+ Bootleg.load('21102')
32
+
33
+ This will load all the movies for a 25 mile radius(including their showtimes
34
+ and the theaters where they play).
35
+
36
+ Examples:
37
+
38
+ movie = BootlegMovie.where(name: 'Example').first
39
+
40
+ Get all the theaters where the movie is played:
41
+
42
+ theaters = movie.theaters
43
+
44
+ Get all the showtimes:
45
+
46
+ showtimes = movie.showtimes
47
+
48
+ Get the theater of the showtimes:
49
+
50
+ theater = showtimes.first.theater
51
+
52
+
53
+ The content is stored in 3 Active Record models BootlegMovie,
54
+ BootlegTheater and BootlegShowtime. After you load a zipcode just start
55
+ a rails console and take a look at the models to see what information is
56
+ stored inside.
57
+
22
58
 
23
59
  ## Contributing
24
60
 
@@ -27,3 +63,7 @@ TODO: Write usage instructions here
27
63
  3. Commit your changes (`git commit -am 'Add some feature'`)
28
64
  4. Push to the branch (`git push origin my-new-feature`)
29
65
  5. Create new Pull Request
66
+
67
+ If there is other content that you would like to pull it is relatively easy
68
+ to build a new feature to extract it. If you would like to contribute
69
+ and need help feel free to shoot me an email at marius@mlpinit.com .
@@ -19,5 +19,6 @@ Gem::Specification.new do |gem|
19
19
 
20
20
  gem.add_dependency "nokogiri"
21
21
  gem.add_dependency "mechanize"
22
+ gem.add_dependency "activerecord"
22
23
  gem.add_development_dependency "rspec"
23
24
  end
@@ -2,7 +2,7 @@ require "bootleg/version"
2
2
  require "presenter"
3
3
 
4
4
  module Bootleg
5
- def self.presenter(zipcode)
5
+ def self.load(zipcode)
6
6
  Presenter.new(zipcode)
7
7
  end
8
8
  end
@@ -1,3 +1,3 @@
1
1
  module Bootleg
2
- VERSION = "0.0.4"
2
+ VERSION = "0.0.5"
3
3
  end
@@ -17,6 +17,7 @@ class Extractor
17
17
  def extract_movies
18
18
  theaters.each do |theater|
19
19
  theater.extend Theater
20
+ BootlegTheater.create!(name: theater.name, href: theater.link)
20
21
  theater_info = { name: theater.name, href: theater.link, movies: theater.movies}
21
22
  @page_theaters << theater_info
22
23
  end
File without changes
@@ -0,0 +1,15 @@
1
+ require 'rails/generators/migration'
2
+
3
+ module Bootleg
4
+ module Generators
5
+ class InstallGenerator < Rails::Generators::Base
6
+ source_root File.expand_path('../templates', __FILE__)
7
+
8
+ def run_generators
9
+ generate "bootleg:movie"
10
+ generate "bootleg:theater"
11
+ generate "bootleg:showtime"
12
+ end
13
+ end
14
+ end
15
+ end
@@ -0,0 +1,24 @@
1
+ require 'rails/generators/migration'
2
+
3
+ module Bootleg
4
+ module Generators
5
+ class MovieGenerator < Rails::Generators::Base
6
+ include Rails::Generators::Migration
7
+
8
+ source_root File.expand_path('../templates', __FILE__)
9
+
10
+ def generate_movie_migration
11
+ migration_template "movie_migration.rb", "db/migrate/create_bootleg_movies.rb"
12
+ end
13
+
14
+ def generate_movie_model
15
+ copy_file "movie_model.rb", "app/models/bootleg_movie.rb"
16
+ end
17
+
18
+ def self.next_migration_number(path)
19
+ @migration_number = Time.now.utc.strftime("%Y%m%d%H%M%S").to_i.to_s
20
+ end
21
+ end
22
+ end
23
+ end
24
+
@@ -0,0 +1,24 @@
1
+ require 'rails/generators/migration'
2
+
3
+ module Bootleg
4
+ module Generators
5
+ class ShowtimeGenerator < Rails::Generators::Base
6
+ include Rails::Generators::Migration
7
+
8
+ source_root File.expand_path('../templates', __FILE__)
9
+
10
+ def generate_theater_movie_migration
11
+ migration_template "showtime_migration.rb", "db/migrate/create_bootleg_showtimes.rb"
12
+ end
13
+
14
+ def generate_theater_movie_model
15
+ copy_file "showtime_model.rb", "app/models/bootleg_showtime.rb"
16
+ end
17
+
18
+ def self.next_migration_number(path)
19
+ @migration_number = Time.now.utc.strftime("%Y%m%d%H%M%S").to_i.to_s
20
+ end
21
+ end
22
+ end
23
+ end
24
+
@@ -0,0 +1,11 @@
1
+ class CreateBootlegMovies < ActiveRecord::Migration
2
+ def change
3
+ create_table :bootleg_movies do |t|
4
+ t.string :name
5
+ t.string :href
6
+ t.string :showtimes
7
+
8
+ t.timestamps
9
+ end
10
+ end
11
+ end
@@ -0,0 +1,10 @@
1
+ class BootlegMovie < ActiveRecord::Base
2
+ attr_accessible :name, :href, :showtimes
3
+
4
+ has_many :bootleg_showtimes
5
+ has_many :theaters, through: :bootleg_showtimes, source: :bootleg_theater
6
+
7
+ def showtimes
8
+ bootleg_showtimes
9
+ end
10
+ end
@@ -0,0 +1,11 @@
1
+ class CreateBootlegShowtimes < ActiveRecord::Migration
2
+ def change
3
+ create_table :bootleg_showtimes do |t|
4
+ t.integer :bootleg_movie_id
5
+ t.integer :bootleg_theater_id
6
+ t.string :showtimes
7
+
8
+ t.timestamps
9
+ end
10
+ end
11
+ end
@@ -0,0 +1,14 @@
1
+ class BootlegShowtime < ActiveRecord::Base
2
+ attr_accessible :bootleg_movie_id, :bootleg_theater_id, :showtimes
3
+
4
+ belongs_to :bootleg_movie
5
+ belongs_to :bootleg_theater
6
+
7
+ def theater
8
+ bootleg_theater
9
+ end
10
+
11
+ def movie
12
+ bootleg_movie
13
+ end
14
+ end
@@ -0,0 +1,10 @@
1
+ class CreateBootlegTheaters < ActiveRecord::Migration
2
+ def change
3
+ create_table :bootleg_theaters do |t|
4
+ t.string :name
5
+ t.string :href
6
+
7
+ t.timestamps
8
+ end
9
+ end
10
+ end
@@ -0,0 +1,10 @@
1
+ class BootlegTheater < ActiveRecord::Base
2
+ attr_accessible :name, :href
3
+
4
+ has_many :bootleg_showtimes
5
+ has_many :movies, through: :bootleg_showtimes, source: :bootleg_movie
6
+
7
+ def showtimes
8
+ bootleg_showtimes
9
+ end
10
+ end
@@ -0,0 +1,24 @@
1
+ require 'rails/generators/migration'
2
+
3
+ module Bootleg
4
+ module Generators
5
+ class TheaterGenerator < Rails::Generators::Base
6
+ include Rails::Generators::Migration
7
+
8
+ source_root File.expand_path('../templates', __FILE__)
9
+
10
+ def generate_theater_migration
11
+ migration_template "theater_migration.rb", "db/migrate/create_bootleg_theaters.rb"
12
+ end
13
+
14
+ def generate_theater_model
15
+ copy_file "theater_model.rb", "app/models/bootleg_theater.rb"
16
+ end
17
+
18
+ def self.next_migration_number(path)
19
+ @migration_number = Time.now.utc.strftime("%Y%m%d%H%M%S").to_i.to_s
20
+ end
21
+ end
22
+ end
23
+ end
24
+
@@ -1,8 +1,4 @@
1
1
  module Movie
2
- def details
3
- self.css('div.movietitle')
4
- end
5
-
6
2
  def name
7
3
  details.css('a').text.strip
8
4
  end
@@ -19,4 +15,10 @@ module Movie
19
15
  end
20
16
  values
21
17
  end
18
+
19
+ private
20
+
21
+ def details
22
+ self.css('div.movietitle')
23
+ end
22
24
  end
@@ -12,10 +12,12 @@ module Theater
12
12
  def movies
13
13
  movies = self.css('div.movie-listing.first')
14
14
  values = []
15
+ theater = BootlegTheater.last
15
16
  movies.each do |movie|
16
17
  movie.extend Movie
17
18
  movie_info = { name: movie.name, href: movie.link, showtimes: movie.showtimes }
18
19
  values << movie_info
20
+ insert_movies(theater,movie)
19
21
  end
20
22
  values
21
23
  end
@@ -24,4 +26,18 @@ module Theater
24
26
  def details
25
27
  self.css('h3.title').css('a')
26
28
  end
29
+
30
+ def insert_movies(theater, movie)
31
+ existing_movie = BootlegMovie.where(name: movie.name).first
32
+ if existing_movie
33
+ showtime = theater.bootleg_showtimes.new
34
+ showtime.bootleg_movie_id = existing_movie.id
35
+ showtime.save
36
+ else
37
+ theater.movies.create!(name: movie.name, href: movie.link)
38
+ end
39
+ showtime = BootlegShowtime.last
40
+ showtime.showtimes = movie.showtimes.to_s.gsub(/-/, '').gsub(/\n/,'').strip
41
+ showtime.save
42
+ end
27
43
  end
@@ -1,7 +1,4 @@
1
1
  require 'spec_helper'
2
2
 
3
3
  describe Presenter do
4
- it "should not work" do
5
- pending 'to be continued...'
6
- end
7
4
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: bootleg
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.4
4
+ version: 0.0.5
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: 2012-11-12 00:00:00.000000000 Z
12
+ date: 2012-11-21 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: nokogiri
@@ -43,6 +43,22 @@ dependencies:
43
43
  - - ! '>='
44
44
  - !ruby/object:Gem::Version
45
45
  version: '0'
46
+ - !ruby/object:Gem::Dependency
47
+ name: activerecord
48
+ requirement: !ruby/object:Gem::Requirement
49
+ none: false
50
+ requirements:
51
+ - - ! '>='
52
+ - !ruby/object:Gem::Version
53
+ version: '0'
54
+ type: :runtime
55
+ prerelease: false
56
+ version_requirements: !ruby/object:Gem::Requirement
57
+ none: false
58
+ requirements:
59
+ - - ! '>='
60
+ - !ruby/object:Gem::Version
61
+ version: '0'
46
62
  - !ruby/object:Gem::Dependency
47
63
  name: rspec
48
64
  requirement: !ruby/object:Gem::Requirement
@@ -78,6 +94,17 @@ files:
78
94
  - lib/bootleg/version.rb
79
95
  - lib/extractor.rb
80
96
  - lib/finder.rb
97
+ - lib/generators/bootleg/USAGE
98
+ - lib/generators/bootleg/install_generator.rb
99
+ - lib/generators/bootleg/movie_generator.rb
100
+ - lib/generators/bootleg/showtime_generator.rb
101
+ - lib/generators/bootleg/templates/movie_migration.rb
102
+ - lib/generators/bootleg/templates/movie_model.rb
103
+ - lib/generators/bootleg/templates/showtime_migration.rb
104
+ - lib/generators/bootleg/templates/showtime_model.rb
105
+ - lib/generators/bootleg/templates/theater_migration.rb
106
+ - lib/generators/bootleg/templates/theater_model.rb
107
+ - lib/generators/bootleg/theater_generator.rb
81
108
  - lib/manager.rb
82
109
  - lib/modules/href.rb
83
110
  - lib/modules/movie.rb