flicks_alec 1.0.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.
- checksums.yaml +7 -0
- data/LICENSE +18 -0
- data/README.md +12 -0
- data/bin/flicks +54 -0
- data/bin/flicks.rb +57 -0
- data/bin/movie_rankings.csv +4 -0
- data/bin/movies.csv +3 -0
- data/bin/superhero_movies.csv +3 -0
- data/lib/flicks/movie3d.rb +32 -0
- data/lib/flicks/movies.rb +89 -0
- data/lib/flicks/playlist.rb +81 -0
- data/lib/flicks/rankable.rb +35 -0
- data/lib/flicks/reviewers.rb +21 -0
- data/lib/flicks/snack_bar.rb +40 -0
- data/lib/movie_rankings.csv +4 -0
- metadata +69 -0
checksums.yaml
ADDED
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
---
|
|
2
|
+
SHA256:
|
|
3
|
+
metadata.gz: f8e67c8ce3f1fd7a97e86db5b4ac259b16ce4221f63d46c8dbbc2569963c7497
|
|
4
|
+
data.tar.gz: 184b2f52cd09ffaa73c38d5f21cc90337b71f869513175ca9c4903040af1a019
|
|
5
|
+
SHA512:
|
|
6
|
+
metadata.gz: c2eeb669c8a819b2df5683834c3a6f7427f8ee9b054aca3f5fff2a956be70a54db1f240620bde1f769b4f2e7e82db9f01f91a9c03c0a971cbe713bac00bb2520
|
|
7
|
+
data.tar.gz: 6820fe70ea0438cd372633590700e2a8713f5d73c6f8f0dec6ea93debab2e17a2c7d643fde7bd0a44094f91f87af4b7151748bf145eef95b1a13274b94f5f280
|
data/LICENSE
ADDED
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
MIT License
|
|
2
|
+
|
|
3
|
+
Copyright (c) 2025 Alec
|
|
4
|
+
|
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
6
|
+
of this software and associated documentation files (the "Software"), to deal
|
|
7
|
+
in the Software without restriction, including without limitation the rights
|
|
8
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
9
|
+
copies of the Software, and to permit persons to whom the Software is
|
|
10
|
+
furnished to do so, subject to the following conditions:
|
|
11
|
+
|
|
12
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
13
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
14
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
15
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
16
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
17
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
18
|
+
SOFTWARE.
|
data/README.md
ADDED
data/bin/flicks
ADDED
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
#!/usr/bin/env ruby
|
|
2
|
+
|
|
3
|
+
lib = File.expand_path('../lib', __dir__)
|
|
4
|
+
$LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
|
|
5
|
+
|
|
6
|
+
require 'flicks/movies'
|
|
7
|
+
require 'flicks/playlist'
|
|
8
|
+
require 'flicks/reviewers' # mantenha igual ao nome do arquivo (reviewrs.rb)
|
|
9
|
+
require 'flicks/movie3d'
|
|
10
|
+
require 'flicks/snack_bar'
|
|
11
|
+
|
|
12
|
+
#movie1= Movie.new("goonies", 10) #Criando um objeto da classe e chamando os métodos de instância
|
|
13
|
+
#movie2= Movie.new("ghostbusters", 9)
|
|
14
|
+
#movie3= Movie.new("Goldfingers")
|
|
15
|
+
|
|
16
|
+
|
|
17
|
+
#movies = [movie1, movie2, movie3]
|
|
18
|
+
|
|
19
|
+
playlist1= Flicks::Playlist.new("Kermit")
|
|
20
|
+
default_movie_file =
|
|
21
|
+
File.join(File.dirname(__FILE__), 'movies.csv')
|
|
22
|
+
playlist1.load(ARGV.shift || default_movie_file)
|
|
23
|
+
movie3d = Flicks::Movie3D.new('glee', 5, 20)
|
|
24
|
+
playlist1.add_movie(movie3d)
|
|
25
|
+
|
|
26
|
+
|
|
27
|
+
loop do
|
|
28
|
+
|
|
29
|
+
puts "How many viewings? ('quit' to exit)"
|
|
30
|
+
answer = gets.chomp.downcase
|
|
31
|
+
case answer
|
|
32
|
+
when /^\d+$/
|
|
33
|
+
puts "Enjoy your #{answer} viewings.."
|
|
34
|
+
playlist1.play(answer.to_i)
|
|
35
|
+
when 'quit', 'exit'
|
|
36
|
+
playlist1.print_stats
|
|
37
|
+
break
|
|
38
|
+
else
|
|
39
|
+
puts "Please enter a number or 'quit'"
|
|
40
|
+
end
|
|
41
|
+
|
|
42
|
+
end
|
|
43
|
+
playlist1.save
|
|
44
|
+
|
|
45
|
+
|
|
46
|
+
puts "--------------------------------"
|
|
47
|
+
=begin
|
|
48
|
+
playlist2 = Playlist.new("Fozzie")
|
|
49
|
+
playlist2.add_movie(movie3)
|
|
50
|
+
|
|
51
|
+
movie4= Movie.new("avengers", 15)
|
|
52
|
+
playlist2.add_movie(movie4)
|
|
53
|
+
playlist2.play(2)
|
|
54
|
+
=end
|
data/bin/flicks.rb
ADDED
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
#!/usr/bin/env ruby
|
|
2
|
+
|
|
3
|
+
begin
|
|
4
|
+
require 'flicks/movies'
|
|
5
|
+
require 'flicks/playlist'
|
|
6
|
+
require 'flicks/reviewers' # mantenha o mesmo nome do arquivo
|
|
7
|
+
require 'flicks/movie3d'
|
|
8
|
+
require 'flicks/snack_bar'
|
|
9
|
+
rescue LoadError
|
|
10
|
+
$LOAD_PATH.unshift File.expand_path('../lib', __dir__)
|
|
11
|
+
retry
|
|
12
|
+
end
|
|
13
|
+
|
|
14
|
+
|
|
15
|
+
|
|
16
|
+
playlist1= Flicks::Playlist.new("Kermit")
|
|
17
|
+
default_movie_file =
|
|
18
|
+
File.join(File.dirname(__FILE__), 'movies.csv')
|
|
19
|
+
playlist1.load(ARGV.shift || default_movie_file)
|
|
20
|
+
movie3d = Flicks::Movie3D.new('glee', 5, 20)
|
|
21
|
+
playlist1.add_movie(movie3d)
|
|
22
|
+
|
|
23
|
+
|
|
24
|
+
loop do
|
|
25
|
+
|
|
26
|
+
puts "How many viewings? ('quit' to exit)"
|
|
27
|
+
answer = gets.chomp.downcase
|
|
28
|
+
case answer
|
|
29
|
+
when /^\d+$/
|
|
30
|
+
puts "Enjoy your #{answer} viewings.."
|
|
31
|
+
playlist1.play(answer.to_i)
|
|
32
|
+
when 'quit', 'exit'
|
|
33
|
+
playlist1.print_stats
|
|
34
|
+
break
|
|
35
|
+
else
|
|
36
|
+
puts "Please enter a number or 'quit'"
|
|
37
|
+
end
|
|
38
|
+
|
|
39
|
+
end
|
|
40
|
+
playlist1.save
|
|
41
|
+
|
|
42
|
+
|
|
43
|
+
puts "--------------------------------"
|
|
44
|
+
=begin
|
|
45
|
+
playlist2 = Playlist.new("Fozzie")
|
|
46
|
+
playlist2.add_movie(movie3)
|
|
47
|
+
|
|
48
|
+
movie4= Movie.new("avengers", 15)
|
|
49
|
+
playlist2.add_movie(movie4)
|
|
50
|
+
playlist2.play(2)
|
|
51
|
+
=end
|
|
52
|
+
#movie1= Movie.new("goonies", 10) #Criando um objeto da classe e chamando os métodos de instância
|
|
53
|
+
#movie2= Movie.new("ghostbusters", 9)
|
|
54
|
+
#movie3= Movie.new("Goldfingers")
|
|
55
|
+
|
|
56
|
+
|
|
57
|
+
#movies = [movie1, movie2, movie3]
|
data/bin/movies.csv
ADDED
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
require_relative 'movies'
|
|
2
|
+
module Flicks
|
|
3
|
+
class Movie3D < Movie
|
|
4
|
+
|
|
5
|
+
def initialize(title, rank,wow_factor)
|
|
6
|
+
super(title, rank)
|
|
7
|
+
@wow_factor = wow_factor
|
|
8
|
+
end
|
|
9
|
+
|
|
10
|
+
def show_effect
|
|
11
|
+
puts "Wow! " * @wow_factor
|
|
12
|
+
end
|
|
13
|
+
|
|
14
|
+
def thumbs_up
|
|
15
|
+
@wow_factor.times {super }
|
|
16
|
+
|
|
17
|
+
end
|
|
18
|
+
end
|
|
19
|
+
end
|
|
20
|
+
|
|
21
|
+
if __FILE__ == $0
|
|
22
|
+
movie3d= Movie3D.new('glee', 5, 20)
|
|
23
|
+
puts movie3d.title
|
|
24
|
+
puts movie3d.rank
|
|
25
|
+
|
|
26
|
+
movie3d.thumbs_up
|
|
27
|
+
puts movie3d.rank
|
|
28
|
+
#puts movie3d
|
|
29
|
+
|
|
30
|
+
movie3d.show_effect
|
|
31
|
+
|
|
32
|
+
end
|
|
@@ -0,0 +1,89 @@
|
|
|
1
|
+
|
|
2
|
+
=begin
|
|
3
|
+
(((
|
|
4
|
+
attr_reader :title é a mesma coisa que:
|
|
5
|
+
def title
|
|
6
|
+
@reader
|
|
7
|
+
end
|
|
8
|
+
)))
|
|
9
|
+
(((
|
|
10
|
+
attr_writer :title é a mesma coisa que:
|
|
11
|
+
def title=(new_title)
|
|
12
|
+
@title = new_title
|
|
13
|
+
)))
|
|
14
|
+
(((
|
|
15
|
+
attr_accessor :title é a mesma coisa que:
|
|
16
|
+
def title
|
|
17
|
+
@reader
|
|
18
|
+
end
|
|
19
|
+
def title=(new_title)
|
|
20
|
+
@title = new_title
|
|
21
|
+
Ou seja, a união dos dois
|
|
22
|
+
)))
|
|
23
|
+
=end
|
|
24
|
+
require_relative 'rankable'
|
|
25
|
+
module Flicks
|
|
26
|
+
class Movie
|
|
27
|
+
include Rankable
|
|
28
|
+
|
|
29
|
+
#attr_reader :rank
|
|
30
|
+
attr_accessor :title, :rank
|
|
31
|
+
def initialize(title, rank=0) #ESTADO armazena a variáveis de instância
|
|
32
|
+
@title = title.capitalize
|
|
33
|
+
@rank= rank
|
|
34
|
+
@snack_carbs = Hash.new(0)
|
|
35
|
+
#puts "Created a movie object with object with title #{title} and a rank #{rank}"
|
|
36
|
+
end
|
|
37
|
+
|
|
38
|
+
#INPUT(LEITURA DE DADOS EXTERNOS)
|
|
39
|
+
def self.from_csv(line) #método de class
|
|
40
|
+
title, rank = line.split(',') # se a linha é "Goonies, 10", o split(',') vira: ["Goonies", "10"]
|
|
41
|
+
Movie.new(title, Integer(rank)) #não precisa de um objeto já criado #Movie.new cria realmente o objeto completo com os atributos certos: Movie.new("Goonies", 10)
|
|
42
|
+
# Integer(health) Converte a String "10" para inteiro, isso é importante porque vindo de arquivo tudo é texto
|
|
43
|
+
#AGORA VOCÊ CONSEGUE POPULAR SUA APLICAÇÃO INTEIRA LENDO UM ARQUIVO .csv EM VEZ DE CRIAR TUDO "NA MÃO" NO CÓDIGO.
|
|
44
|
+
end
|
|
45
|
+
|
|
46
|
+
|
|
47
|
+
def to_csv
|
|
48
|
+
"#{@title}, #{@rank}"
|
|
49
|
+
end
|
|
50
|
+
|
|
51
|
+
|
|
52
|
+
def each_snack
|
|
53
|
+
@snack_carbs.each do |name, carbs|
|
|
54
|
+
sna = Snack.new(name, carbs)
|
|
55
|
+
yield sna
|
|
56
|
+
end
|
|
57
|
+
end
|
|
58
|
+
|
|
59
|
+
def carbs_consumed
|
|
60
|
+
@snack_carbs.values.reduce(0, :+)
|
|
61
|
+
end
|
|
62
|
+
|
|
63
|
+
|
|
64
|
+
def ate_snack(snack)
|
|
65
|
+
@snack_carbs[snack.name] += snack.carbs # += serve para acumular
|
|
66
|
+
puts "#{@title} led to #{snack.carbs} #{snack.name} carbs being consumed"
|
|
67
|
+
puts "#{@title}'s snacks: #{@snack_carbs}"
|
|
68
|
+
end
|
|
69
|
+
|
|
70
|
+
|
|
71
|
+
|
|
72
|
+
def to_s
|
|
73
|
+
"#{@title} has a rank of #{@rank} (#{status})"
|
|
74
|
+
end
|
|
75
|
+
|
|
76
|
+
|
|
77
|
+
|
|
78
|
+
end
|
|
79
|
+
end
|
|
80
|
+
if __FILE__ == $0
|
|
81
|
+
movie = Movie.new("Filme teste",10)
|
|
82
|
+
puts movie.title
|
|
83
|
+
puts movie.rank
|
|
84
|
+
|
|
85
|
+
puts movie.thumbs_down
|
|
86
|
+
puts movie.thumbs_up
|
|
87
|
+
puts movie.thumbs_up
|
|
88
|
+
puts movie
|
|
89
|
+
end
|
|
@@ -0,0 +1,81 @@
|
|
|
1
|
+
require_relative 'movies'
|
|
2
|
+
require_relative 'reviewers'
|
|
3
|
+
require_relative 'snack_bar'
|
|
4
|
+
module Flicks
|
|
5
|
+
class Playlist
|
|
6
|
+
def initialize(name)
|
|
7
|
+
@name = name
|
|
8
|
+
@movies = []
|
|
9
|
+
end
|
|
10
|
+
|
|
11
|
+
def load(from_file)
|
|
12
|
+
File.readlines(from_file).each do |line| #abre um arquivo de texto e lê todas as linhas e devolve um array de strings
|
|
13
|
+
add_movie(Movie.from_csv(line)) #cria um objeto (Movie) A PARTIR do texto do arquivo
|
|
14
|
+
end
|
|
15
|
+
end
|
|
16
|
+
|
|
17
|
+
def save(to_file="movie_rankings.csv")
|
|
18
|
+
File.open(to_file, "w") do |file|
|
|
19
|
+
@movies.sort.each do |movie|
|
|
20
|
+
file.puts movie.to_csv
|
|
21
|
+
end
|
|
22
|
+
end
|
|
23
|
+
end
|
|
24
|
+
|
|
25
|
+
def add_movie(movie)
|
|
26
|
+
@movies << movie # sinal de << append Significa literalmente: Pega o array @movies e adicione o objeto movie ao final dele
|
|
27
|
+
end
|
|
28
|
+
|
|
29
|
+
|
|
30
|
+
def play(viewings=1)
|
|
31
|
+
puts "#{@name}'s playlist: "
|
|
32
|
+
|
|
33
|
+
puts @movies.sort
|
|
34
|
+
snacks = SnackBar::SNACKS
|
|
35
|
+
puts "\nThere are #{snacks.size} snacks available in the snack bar."
|
|
36
|
+
|
|
37
|
+
snacks.each do |snakc|
|
|
38
|
+
puts "#{snakc.name} has #{snakc.carbs} carbs."
|
|
39
|
+
end
|
|
40
|
+
|
|
41
|
+
1.upto(viewings) do |count|
|
|
42
|
+
puts "\nViewing #{count}"
|
|
43
|
+
@movies.each do |m|
|
|
44
|
+
Reviewer.review(m)
|
|
45
|
+
snack = SnackBar.random
|
|
46
|
+
m.ate_snack(snack)
|
|
47
|
+
puts m
|
|
48
|
+
end
|
|
49
|
+
end
|
|
50
|
+
puts "----------"
|
|
51
|
+
end
|
|
52
|
+
|
|
53
|
+
def total_carbs_consumed
|
|
54
|
+
@movies.reduce(0) do |sum, movie|
|
|
55
|
+
sum + movie.carbs_consumed
|
|
56
|
+
end
|
|
57
|
+
end
|
|
58
|
+
|
|
59
|
+
def print_stats
|
|
60
|
+
puts "\n#{@name}'s Stats:"
|
|
61
|
+
|
|
62
|
+
puts "#{total_carbs_consumed} total carbs consumed"
|
|
63
|
+
@movies.sort.each do |mov|
|
|
64
|
+
puts "\n#{mov.title}'s snack totals:"
|
|
65
|
+
mov.each_snack do |snac|
|
|
66
|
+
puts "#{snac.carbs} total #{snac.name} carbs"
|
|
67
|
+
end
|
|
68
|
+
puts "\n#{mov.carbs_consumed} grand total carbs"
|
|
69
|
+
end
|
|
70
|
+
|
|
71
|
+
hits, flops = @movies.partition do |movie| movie.hit? end
|
|
72
|
+
|
|
73
|
+
puts "\nHits:"
|
|
74
|
+
puts hits.sort
|
|
75
|
+
|
|
76
|
+
puts "\nFlops:"
|
|
77
|
+
puts flops.sort
|
|
78
|
+
end
|
|
79
|
+
|
|
80
|
+
end
|
|
81
|
+
end
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
module Flicks
|
|
2
|
+
module Rankable
|
|
3
|
+
def thumbs_up
|
|
4
|
+
self.rank += 1
|
|
5
|
+
"#{@title} get's a thumbs up!"
|
|
6
|
+
|
|
7
|
+
end
|
|
8
|
+
def thumbs_down #COMPORTAMENTO expresso como método de instância
|
|
9
|
+
self.rank -= 1
|
|
10
|
+
"#{@title} get's a thumbs down!"
|
|
11
|
+
end
|
|
12
|
+
|
|
13
|
+
def status
|
|
14
|
+
hit? ? "Hit" : "Flop" #if hit? "Hit" else "Flop"
|
|
15
|
+
end
|
|
16
|
+
|
|
17
|
+
def hit?
|
|
18
|
+
self.rank >= 10
|
|
19
|
+
end
|
|
20
|
+
|
|
21
|
+
def <=>(other)
|
|
22
|
+
=begin
|
|
23
|
+
O .sort funciona porque o Ruby depende do método <=> para comparar objeto.Se você não implementa <=>, ele não sabe o que fazer e dá erro.
|
|
24
|
+
O Ruby precisa comparar os elementos do array para decidir em que ordem colocá-los.
|
|
25
|
+
Mas o Ruby não sabe como comparar objetos que você mesmo criou (no caso, instâncias da classe Movie).
|
|
26
|
+
Ele só sabe comparar números, strings, etc., que já têm <=> implementado.
|
|
27
|
+
=end
|
|
28
|
+
other.rank <=> self.rank
|
|
29
|
+
end
|
|
30
|
+
|
|
31
|
+
def normalized_rank
|
|
32
|
+
self.rank/10
|
|
33
|
+
end
|
|
34
|
+
end
|
|
35
|
+
end
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
module Flicks
|
|
2
|
+
module Reviewer
|
|
3
|
+
def self.roll_die #sorteia um número de 1 a 6
|
|
4
|
+
rand(1..6)
|
|
5
|
+
end
|
|
6
|
+
def self.review(movie)
|
|
7
|
+
number_rolled= roll_die
|
|
8
|
+
case number_rolled
|
|
9
|
+
when 1..2
|
|
10
|
+
movie.thumbs_down
|
|
11
|
+
puts "#{movie.title} got a thumbs down"
|
|
12
|
+
when 3..4
|
|
13
|
+
puts "#{movie.title} was skipped"
|
|
14
|
+
else
|
|
15
|
+
movie.thumbs_up
|
|
16
|
+
puts "#{movie.title} got a thumbs_up"
|
|
17
|
+
end
|
|
18
|
+
puts movie
|
|
19
|
+
end
|
|
20
|
+
end
|
|
21
|
+
end
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
=begin
|
|
2
|
+
class Snack
|
|
3
|
+
attr_reader :name, :carbs
|
|
4
|
+
def initialize (name, carbs)
|
|
5
|
+
@name = name
|
|
6
|
+
@carbs = carbs
|
|
7
|
+
end
|
|
8
|
+
end
|
|
9
|
+
=end
|
|
10
|
+
module Flicks
|
|
11
|
+
Snack = Struct.new(:name, :carbs)
|
|
12
|
+
|
|
13
|
+
|
|
14
|
+
module SnackBar
|
|
15
|
+
SNACKS = [
|
|
16
|
+
Snack.new(:popcorn, 20),
|
|
17
|
+
Snack.new(:candy, 15),
|
|
18
|
+
Snack.new(:nacho, 40),
|
|
19
|
+
Snack.new(:pretzel, 30),
|
|
20
|
+
Snack.new(:soda, 5)
|
|
21
|
+
]
|
|
22
|
+
def self.random
|
|
23
|
+
SNACKS.sample
|
|
24
|
+
end
|
|
25
|
+
end
|
|
26
|
+
end
|
|
27
|
+
if __FILE__ == $0
|
|
28
|
+
puts SnackBar::SNACKS
|
|
29
|
+
snack = SnackBar.random
|
|
30
|
+
puts "Enjoy your #{snack.name} (#{snack.carbs} carbs)"
|
|
31
|
+
end
|
|
32
|
+
=begin
|
|
33
|
+
popcorn = Snack.new("popcorn", 20)
|
|
34
|
+
puts popcorn.name
|
|
35
|
+
puts popcorn.carbs
|
|
36
|
+
|
|
37
|
+
candy = Snack.new("candy", 15)
|
|
38
|
+
puts candy.name
|
|
39
|
+
puts candy.carbs
|
|
40
|
+
=end
|
metadata
ADDED
|
@@ -0,0 +1,69 @@
|
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
|
2
|
+
name: flicks_alec
|
|
3
|
+
version: !ruby/object:Gem::Version
|
|
4
|
+
version: 1.0.0
|
|
5
|
+
platform: ruby
|
|
6
|
+
authors:
|
|
7
|
+
- LucioAlec
|
|
8
|
+
bindir: bin
|
|
9
|
+
cert_chain: []
|
|
10
|
+
date: 1980-01-02 00:00:00.000000000 Z
|
|
11
|
+
dependencies:
|
|
12
|
+
- !ruby/object:Gem::Dependency
|
|
13
|
+
name: rspec
|
|
14
|
+
requirement: !ruby/object:Gem::Requirement
|
|
15
|
+
requirements:
|
|
16
|
+
- - "~>"
|
|
17
|
+
- !ruby/object:Gem::Version
|
|
18
|
+
version: '3'
|
|
19
|
+
type: :development
|
|
20
|
+
prerelease: false
|
|
21
|
+
version_requirements: !ruby/object:Gem::Requirement
|
|
22
|
+
requirements:
|
|
23
|
+
- - "~>"
|
|
24
|
+
- !ruby/object:Gem::Version
|
|
25
|
+
version: '3'
|
|
26
|
+
description: "\uFEFF# Flicks\n\nCommand-line app/gem to play and review movies.\n\n##
|
|
27
|
+
Run from source\nruby bin/flicks\n\n## Features\n- Load movies from CSV\n- Review
|
|
28
|
+
system (thumbs up/down)\n- Snacks & carbs tracking\n- 3D movie with wow factor\n"
|
|
29
|
+
email: lucioalec@gmail.com
|
|
30
|
+
executables:
|
|
31
|
+
- flicks
|
|
32
|
+
extensions: []
|
|
33
|
+
extra_rdoc_files: []
|
|
34
|
+
files:
|
|
35
|
+
- LICENSE
|
|
36
|
+
- README.md
|
|
37
|
+
- bin/flicks
|
|
38
|
+
- bin/flicks.rb
|
|
39
|
+
- bin/movie_rankings.csv
|
|
40
|
+
- bin/movies.csv
|
|
41
|
+
- bin/superhero_movies.csv
|
|
42
|
+
- lib/flicks/movie3d.rb
|
|
43
|
+
- lib/flicks/movies.rb
|
|
44
|
+
- lib/flicks/playlist.rb
|
|
45
|
+
- lib/flicks/rankable.rb
|
|
46
|
+
- lib/flicks/reviewers.rb
|
|
47
|
+
- lib/flicks/snack_bar.rb
|
|
48
|
+
- lib/movie_rankings.csv
|
|
49
|
+
licenses:
|
|
50
|
+
- MIT
|
|
51
|
+
metadata: {}
|
|
52
|
+
rdoc_options: []
|
|
53
|
+
require_paths:
|
|
54
|
+
- lib
|
|
55
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
|
56
|
+
requirements:
|
|
57
|
+
- - ">="
|
|
58
|
+
- !ruby/object:Gem::Version
|
|
59
|
+
version: '2.5'
|
|
60
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
|
61
|
+
requirements:
|
|
62
|
+
- - ">="
|
|
63
|
+
- !ruby/object:Gem::Version
|
|
64
|
+
version: '0'
|
|
65
|
+
requirements: []
|
|
66
|
+
rubygems_version: 3.6.9
|
|
67
|
+
specification_version: 4
|
|
68
|
+
summary: Plays and reviews movies
|
|
69
|
+
test_files: []
|