BrunosFlicks 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 ADDED
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA256:
3
+ metadata.gz: 5d4775cdbaf7dd96e81142fa6cc19642cd26238d67dc57f2e9ae63da2b0b7165
4
+ data.tar.gz: ed7274d6e3fcc0674007b133cd92f4bf85aa46541038a9edbbf8703c89bcaef8
5
+ SHA512:
6
+ metadata.gz: 998e8d389b69ee66b9bfeb55e7a45bd4c8caaf21b6e16acab864d856ce8f6cf2b27270e7209ee2122c3f7efbc4a5c28e2a40f7ed28628cd16264acdf7ba06ea8
7
+ data.tar.gz: 77d916b9dfa08b82002e52bdf59a3824cb6209b732e235a1f2890739f808c58bb3d42eee37131fa68dda83a69c7fbf6824b567159abed893dcc583f26c72cb01
data/bin/flicks ADDED
@@ -0,0 +1,27 @@
1
+ require_relative '../lib/flicks/playlist'
2
+
3
+ playlist = Flicks::Playlist.new("Kermit")
4
+ default_movie_file =
5
+ File.join(File.dirname(__FILE__), 'movies.csv')
6
+ playlist.load(ARGV.shift || default_movie_file)
7
+
8
+ loop do
9
+ puts "How many viewings? ('quit' to exit)"
10
+ answer = gets.chomp.downcase
11
+ case answer
12
+ when /^\d+$/
13
+ playlist.play(answer.to_i)
14
+
15
+ when 'quit', 'exit'
16
+ playlist.print_stats
17
+ break
18
+
19
+ else
20
+ puts "Please enter a number or 'quit'"
21
+ end
22
+
23
+ puts "Enjoy you #{answer} viewngs..."
24
+
25
+ end
26
+
27
+ playlist.save
data/bin/flicks.rb ADDED
@@ -0,0 +1,29 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ require 'flicks/playlist'
4
+
5
+ playlist = Flicks::Playlist.new("Kermit")
6
+ default_movie_file =
7
+ File.join(File.dirname(__FILE__), 'movies.csv')
8
+ playlist.load(ARGV.shift || default_movie_file)
9
+
10
+ loop do
11
+ puts "How many viewings? ('quit' to exit)"
12
+ answer = gets.chomp.downcase
13
+ case answer
14
+ when /^\d+$/
15
+ playlist.play(answer.to_i)
16
+
17
+ when 'quit', 'exit'
18
+ playlist.print_stats
19
+ break
20
+
21
+ else
22
+ puts "Please enter a number or 'quit'"
23
+ end
24
+
25
+ puts "Enjoy you #{answer} viewngs..."
26
+
27
+ end
28
+
29
+ playlist.save
data/bin/movies.csv ADDED
@@ -0,0 +1,3 @@
1
+ goonies,10
2
+ avatar,9
3
+ godfinger,8
@@ -0,0 +1,45 @@
1
+ require_relative 'rankable'
2
+
3
+ class Movie
4
+ include Rankable
5
+
6
+ attr_accessor :title, :rank
7
+
8
+ def initialize(title, rank=0)
9
+ @title = title.capitalize
10
+ @rank = rank
11
+ @snack_carbs = Hash.new(0)
12
+ end
13
+
14
+ def self.from_csv(line)
15
+ title, rank = line.split(',')
16
+ movie = Movie.new(title, Integer(rank))
17
+ end
18
+
19
+ def to_csv
20
+ "#{@title},#{@rank}"
21
+ end
22
+
23
+ def ate_snack(snack)
24
+ @snack_carbs[snack.name] += snack.carbs
25
+ puts "#{@title} led to #{snack.carbs} #{snack.name} being eaten"
26
+ puts "#{@title}'s snacks: #{@snack_carbs}"
27
+ end
28
+
29
+ def carbs_consumed
30
+ @snack_carbs.values.reduce(0, :+)
31
+
32
+ end
33
+
34
+ def each_snack
35
+ @snack_carbs.each do |name, carbs|
36
+ snack = Snack.new(name, carbs)
37
+ yield snack
38
+ end
39
+ end
40
+
41
+ def to_s
42
+ "#{@title} has a rank of #{@rank} (#{status})"
43
+ end
44
+
45
+ end
@@ -0,0 +1,28 @@
1
+ require_relative 'movie'
2
+
3
+ class Movie3D < Movie
4
+ def initialize(title, rank, wow_factor)
5
+ super(title, rank)
6
+ @wow_factor = wow_factor
7
+ end
8
+
9
+ def thumbs_up
10
+ @wow_factor.times { super }
11
+ end
12
+
13
+ def show_effect
14
+ puts "wow!" * @wow_factor
15
+ end
16
+
17
+ end
18
+
19
+ if __FILE__ == 0
20
+ movie3d = Movie3D.new('glee', 5, 10)
21
+ puts movie3d.title
22
+ puts movie3d.rank
23
+
24
+ movie3d.thumbs_up
25
+
26
+ puts movie3d
27
+ puts movie3d.show_effect
28
+ end
@@ -0,0 +1,85 @@
1
+ require_relative 'movie'
2
+ require_relative 'movie3d'
3
+ require_relative 'reviewer'
4
+ require_relative 'snack_bar'
5
+
6
+ module Flicks
7
+ class Playlist
8
+ def initialize(name)
9
+ @name = name
10
+ @movies = []
11
+ end
12
+
13
+ def load(from_file)
14
+ File.readlines(from_file).each do |line|
15
+ add_movie(Movie.from_csv(line))
16
+ end
17
+ end
18
+
19
+ def save(to_file="movie_rankings.csv")
20
+ File.open(to_file, "w") do |file|
21
+ @movies.sort.each do |movie|
22
+ file.puts movie.to_csv
23
+ end
24
+ end
25
+ end
26
+
27
+ def add_movie(movie)
28
+ @movies << movie
29
+ end
30
+
31
+ def play(viewings)
32
+ puts "#{@name}'s playlist"
33
+ puts @movies.sort
34
+
35
+ snacks = SnackBar::SNACKS
36
+ puts "\nThere are #{snacks.size} snacks available in the snack bar"
37
+
38
+ snacks.each do |snack|
39
+ puts "#{snack.name} has #{snack.carbs} carbs"
40
+ end
41
+
42
+ 1.upto(viewings) do |count|
43
+ puts "\nViewing #{count}"
44
+
45
+ @movies.each do |movie|
46
+ Reviewer.review(movie)
47
+ snack = SnackBar.random
48
+ movie.ate_snack(snack)
49
+ puts movie
50
+ end
51
+
52
+ end
53
+ end
54
+
55
+ def total_carbs_consumed
56
+ @movies.reduce(0) do |sum, movie|
57
+ sum + movie.carbs_consumed
58
+ end
59
+ end
60
+
61
+ def print_stats
62
+ puts "\n#{@name}'s Stats:"
63
+
64
+ puts "#{total_carbs_consumed} total carbs consumed"
65
+
66
+ @movies.sort.each do |movie|
67
+ puts "\n#{movie.title}'s snack totals:"
68
+
69
+ movie.each_snack do |snack|
70
+ puts "#{snack.carbs} total #{snack.name} carbs"
71
+ end
72
+
73
+ puts "#{movie.carbs_consumed} grand total carbs"
74
+ end
75
+
76
+ hits, flops = @movies.partition { |movie| movie.hit? }
77
+
78
+ puts "\nHits:"
79
+ puts hits.sort
80
+
81
+ puts "\nFlops:"
82
+ puts flops.sort
83
+ end
84
+ end
85
+ end
@@ -0,0 +1,25 @@
1
+ module Rankable
2
+ def thumbs_up
3
+ self.rank += 1
4
+ end
5
+
6
+ def thumbs_down
7
+ self.rank -= 1
8
+ end
9
+
10
+ def hit?
11
+ self.rank >= 5
12
+ end
13
+
14
+ def <=>(other)
15
+ other.rank <=> @rank
16
+ end
17
+
18
+ def status
19
+ hit? ? "Hit" : "Flop"
20
+ end
21
+
22
+ def normalized_rank
23
+ self.rank / 100
24
+ end
25
+ end
@@ -0,0 +1,24 @@
1
+ module Reviewer
2
+ def self.roll_die
3
+ rand(1..6)
4
+ end
5
+
6
+ def self.review(movie)
7
+ number_rolled = roll_die
8
+
9
+ case number_rolled
10
+
11
+ when 1..2
12
+ movie.thumbs_down
13
+ puts "#{movie.title} got a thumbs down"
14
+
15
+ when 3..4
16
+ puts "#{movie.title} was skipped."
17
+
18
+ else
19
+ movie.thumbs_up
20
+ puts "#{movie.title} got a thumbs up"
21
+ end
22
+ end
23
+ end
24
+
@@ -0,0 +1,22 @@
1
+ Snack = Struct.new(:name, :carbs)
2
+
3
+ module SnackBar
4
+ SNACKS = [
5
+ Snack.new(:popcorn, 20),
6
+ Snack.new(:candy, 15),
7
+ Snack.new(:nachos, 40),
8
+ Snack.new(:pretzel, 10),
9
+ Snack.new(:soda, 5),
10
+ ]
11
+
12
+ def self.random
13
+ SNACKS.sample
14
+ end
15
+ end
16
+
17
+
18
+ if __FILE__ == 0
19
+ puts SnackBar::SNACKS
20
+ snack = SnackBar.random
21
+ puts "Enjoy your #{snack.name} (#{snack.carbs} carbs)"
22
+ end
@@ -0,0 +1,66 @@
1
+ require 'flicks/movie'
2
+
3
+ describe Movie do
4
+ before do
5
+ @initial_rank = 10
6
+ @movie = Movie.new("goonies", @initial_rank)
7
+ end
8
+
9
+ it "has a capitalized title" do
10
+ @movie.title.should == "Goonies"
11
+ end
12
+
13
+ it "has an initial rank" do
14
+ @movie.rank.should == 10
15
+ end
16
+
17
+ it "has a string representation" do
18
+ @movie.to_s.should == "Goonies has a rank of 10 (Hit)"
19
+ end
20
+
21
+ it "increases rank by 1 when given a thumbs up" do
22
+ @movie.thumbs_up
23
+ @movie.rank.should == @initial_rank + 1
24
+ end
25
+
26
+ it "decreases rank by 1 when given a thumbs down" do
27
+ @movie.thumbs_down
28
+ @movie.rank.should == @initial_rank - 1
29
+ end
30
+
31
+ context "created with a default rank" do
32
+ it "movie created with default rank" do
33
+ movie = Movie.new("goonies")
34
+ movie.rank.should == 0
35
+ end
36
+ end
37
+
38
+ context "With a rank of at least 10" do
39
+ before do
40
+ @movie = Movie.new("goonies", 10)
41
+ end
42
+
43
+ it "is a it" do
44
+ @movie.should be_hit
45
+ end
46
+
47
+ it "has a status hit" do
48
+ @movie.status.should == "Hit"
49
+ end
50
+
51
+ end
52
+
53
+ context "With rank of less than 10" do
54
+ before do
55
+ @movie = Movie.new("goonies", 9)
56
+ end
57
+
58
+ it "is not a hit" do
59
+ @movie.should_not be_hit
60
+ end
61
+
62
+ it "has a status flop" do
63
+ @movie.status.should == "Flop"
64
+ end
65
+ end
66
+ end
@@ -0,0 +1,42 @@
1
+ require 'flicks/playlist'
2
+
3
+ module Flicks
4
+ describe Playlist do
5
+
6
+ before do
7
+ @playlist = Playlist.new("Kermit")
8
+ end
9
+
10
+ context "being played with one movie" do
11
+ before do
12
+ @initial_rank = 10
13
+ @movie = Movie.new("goonies", @initial_rank)
14
+ @playlist.add_movie(@movie)
15
+ end
16
+
17
+ it "gives the movie a thumbs up if a high number is rolled" do
18
+ Reviewer.stub(:roll_die).and_return(6)
19
+
20
+ @playlist.play
21
+
22
+ @movie.rank.should == @initial_rank + 1
23
+ end
24
+
25
+ it "skips the movie if a medium number is rolled" do
26
+ Reviewer.stub(:roll_die).and_return(3)
27
+
28
+ @playlist.play
29
+
30
+ @movie.rank.should == @initial_rank
31
+ end
32
+
33
+ it "gives the movie a thumbs down if a low number is rolled" do
34
+ Reviewer.stub(:roll_die).and_return(1)
35
+
36
+ @playlist.play
37
+
38
+ @movie.rank.should == @initial_rank - 1
39
+ end
40
+ end
41
+ end
42
+ end
metadata ADDED
@@ -0,0 +1,69 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: BrunosFlicks
3
+ version: !ruby/object:Gem::Version
4
+ version: 1.0.0
5
+ platform: ruby
6
+ authors:
7
+ - Bruno
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2022-02-25 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: rspec
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - ">="
18
+ - !ruby/object:Gem::Version
19
+ version: '0'
20
+ type: :development
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - ">="
25
+ - !ruby/object:Gem::Version
26
+ version: '0'
27
+ description: Plays and reviews movies
28
+ email: bmarianoleite3@gmail.com
29
+ executables:
30
+ - flicks
31
+ extensions: []
32
+ extra_rdoc_files: []
33
+ files:
34
+ - bin/flicks
35
+ - bin/flicks.rb
36
+ - bin/movies.csv
37
+ - lib/flicks/movie.rb
38
+ - lib/flicks/movie3d.rb
39
+ - lib/flicks/playlist.rb
40
+ - lib/flicks/rankable.rb
41
+ - lib/flicks/reviewer.rb
42
+ - lib/flicks/snack_bar.rb
43
+ - spec/flicks/movie_spec.rb
44
+ - spec/flicks/playlist_spec.rb
45
+ homepage: https://github.com/nullbr/
46
+ licenses: []
47
+ metadata: {}
48
+ post_install_message:
49
+ rdoc_options: []
50
+ require_paths:
51
+ - lib
52
+ required_ruby_version: !ruby/object:Gem::Requirement
53
+ requirements:
54
+ - - ">="
55
+ - !ruby/object:Gem::Version
56
+ version: '1.9'
57
+ required_rubygems_version: !ruby/object:Gem::Requirement
58
+ requirements:
59
+ - - ">="
60
+ - !ruby/object:Gem::Version
61
+ version: '0'
62
+ requirements: []
63
+ rubygems_version: 3.3.6
64
+ signing_key:
65
+ specification_version: 4
66
+ summary: Plays and reviews movies
67
+ test_files:
68
+ - spec/flicks/movie_spec.rb
69
+ - spec/flicks/playlist_spec.rb