Class: FilmAffinity::Movie

Inherits:
Object
  • Object
show all
Defined in:
lib/filmaffinity/movie.rb

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(id, title = nil) ⇒ Movie

Returns a new instance of Movie.



7
8
9
10
11
12
# File 'lib/filmaffinity/movie.rb', line 7

def initialize(id, title = nil)
  @id = id
  @title = title
  @json_parser = JsonMovieParser.new
  @poster_manager = PosterManager.new
end

Instance Attribute Details

#idObject (readonly)

Returns the value of attribute id.



5
6
7
# File 'lib/filmaffinity/movie.rb', line 5

def id
  @id
end

Instance Method Details

#castObject



76
77
78
79
80
81
82
# File 'lib/filmaffinity/movie.rb', line 76

def cast
  document_html.search(Constants.tag(:cast)).map do |actor|
    actor.at(Constants.tag(:cast_each)).content.strip
  end
rescue StandardError
  []
end

#companyObject



58
59
60
61
62
# File 'lib/filmaffinity/movie.rb', line 58

def company
  document_html.at(Constants.tag(:company)).next_sibling.next_sibling.content
rescue StandardError
  nil
end

#countryObject



40
41
42
43
44
# File 'lib/filmaffinity/movie.rb', line 40

def country
  document_html.at(Constants.tag(:country)).next_sibling.content&.gsub(/\A[[:space:]]+|[[:space:]]+\z/, '')
rescue StandardError
  nil
end

#directorObject



46
47
48
49
50
# File 'lib/filmaffinity/movie.rb', line 46

def director
  document_html.at(Constants.tag(:director)).content&.strip
rescue StandardError
  nil
end

#document_htmlObject



14
15
16
# File 'lib/filmaffinity/movie.rb', line 14

def document_html
  @document_html ||= Nokogiri::HTML(generate_html)
end

#durationObject



34
35
36
37
38
# File 'lib/filmaffinity/movie.rb', line 34

def duration
  document_html.at(Constants.tag(:duration)).content[/\d+/].to_i
rescue StandardError
  nil
end

#generate_htmlObject



18
19
20
# File 'lib/filmaffinity/movie.rb', line 18

def generate_html
  URI.parse(Constants.urls[:movie] % id).open
end

#genresObject



84
85
86
87
88
89
90
91
92
# File 'lib/filmaffinity/movie.rb', line 84

def genres
  node = document_html.at(Constants.tag(:genre)).next_sibling.next_sibling
  raw_genres = node.search('a')
  raw_genres.map do |raw_genre|
    raw_genre.content.strip
  end
rescue StandardError
  []
end

#musicObject



52
53
54
55
56
# File 'lib/filmaffinity/movie.rb', line 52

def music
  document_html.at(Constants.tag(:music)).next_sibling.next_sibling.content
rescue StandardError
  nil
end

#photographyObject



70
71
72
73
74
# File 'lib/filmaffinity/movie.rb', line 70

def photography
  document_html.at(Constants.tag(:photography)).next_sibling.next_sibling.content
rescue StandardError
  nil
end

#posterObject



107
108
109
110
111
112
# File 'lib/filmaffinity/movie.rb', line 107

def poster
  poster_url = document_html.at(Constants.tag(:poster))['src']
  @poster_manager.load_poster(poster_url) if poster_url
rescue StandardError
  nil
end

#poster_bigObject



114
115
116
117
118
119
# File 'lib/filmaffinity/movie.rb', line 114

def poster_big
  poster_url = document_html.at(Constants.tag(:poster_big))['href']
  @poster_manager.load_poster(poster_url) if poster_url
rescue StandardError
  nil
end

#ratingObject



100
101
102
103
104
105
# File 'lib/filmaffinity/movie.rb', line 100

def rating
  raw_rating = document_html.at(Constants.tag(:rating)).content.strip
  raw_rating&.tr(',', '.')&.to_f
rescue StandardError
  nil
end

#scriptObject



64
65
66
67
68
# File 'lib/filmaffinity/movie.rb', line 64

def script
  document_html.at(Constants.tag(:script)).next_sibling.next_sibling.content
rescue StandardError
  nil
end

#sinopsisObject



94
95
96
97
98
# File 'lib/filmaffinity/movie.rb', line 94

def sinopsis
  document_html.at(Constants.tag(:sinopsis)).content
rescue StandardError
  nil
end

#titleObject



22
23
24
25
26
# File 'lib/filmaffinity/movie.rb', line 22

def title
  @title ||= document_html.at(Constants.tag(:title)).content.strip
rescue StandardError
  nil
end

#to_json(*_args) ⇒ Object



121
122
123
# File 'lib/filmaffinity/movie.rb', line 121

def to_json(*_args)
  @json_parser.to_json(self)
end

#yearObject



28
29
30
31
32
# File 'lib/filmaffinity/movie.rb', line 28

def year
  document_html.at(Constants.tag(:year)).content[/\d+/].to_i
rescue StandardError
  nil
end