flicks1 1.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml ADDED
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA1:
3
+ metadata.gz: caab57cc75852f01b07bd9c6f03603f9973cdca2
4
+ data.tar.gz: e483fc8d412a34949c2eea638b84018ebc85d5e9
5
+ SHA512:
6
+ metadata.gz: 6f890ad424c905517083de45a6634739754b9925962ed80dd6026b6767ff15bf9239075e893bffd32a626ec356861da2a53512f506146c53f74ef35aa9f8be1b
7
+ data.tar.gz: 3981000d4b15fc4baba4473dbc0c4ba78fcc7906a502923745d80694099666005d697db7ed128626f272d524dcfd8ce016ca157f8975078fab8a2ccafaf1e018
data/LICENSE ADDED
@@ -0,0 +1 @@
1
+ THIS IS MY LICENSE. :)
data/README ADDED
@@ -0,0 +1 @@
1
+ Just practicing making gem
data/bin/flicks ADDED
@@ -0,0 +1,40 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ require_relative '../lib/flicks/playlist'
4
+ require_relative '../lib/flicks/inheritance'
5
+
6
+
7
+ module Flicks
8
+ playlist1 = Playlist.new('Kermit')
9
+
10
+ default_movie_path = File.join(File.dirname(__FILE__),'movies.csv')
11
+ puts "Loading default Path since no ARGV is given: #{default_movie_path}"
12
+
13
+ playlist1.load(ARGV.shift || default_movie_path )
14
+
15
+ playlist1.add_movie(Movie3D.new('Batman vs Superman',7,10))
16
+
17
+ counter = 0
18
+ loop do
19
+ puts "\nHow many viewings? ('quit' to 'exit')"
20
+ answer = gets.chomp.downcase
21
+ case answer
22
+ when 'quit','exit'
23
+ puts "Thank you for playing"
24
+ playlist1.print_stats
25
+ playlist1.save unless counter == 0
26
+ break
27
+ when /^\d+$/ #rubular expression can pick up integers in string format
28
+ unless answer == "0"
29
+ puts "Enjoy your #{answer} viewings"
30
+ counter += 1
31
+ playlist1.play(answer.to_i)
32
+ else
33
+ puts "Can't play if it's 0 viewings.."
34
+ end
35
+ else
36
+ puts "Either enter a number greater than 0 or 'quit' to exit"
37
+ p answer
38
+ end
39
+ end
40
+ end
data/bin/movies.csv ADDED
@@ -0,0 +1,3 @@
1
+ Goonies,10
2
+ Ghostbusters,9
3
+ Goldfinger,0
@@ -0,0 +1,32 @@
1
+ require_relative 'movie'
2
+
3
+ module Flicks
4
+ class Movie3D < Movie
5
+ attr_accessor :wow_factor
6
+
7
+ def initialize(title,rank,wow_factor)
8
+ super(title,rank)
9
+ @wow_factor = wow_factor
10
+ end
11
+
12
+ def thumbs_up
13
+ @wow_factor.times { super }
14
+ end
15
+
16
+ def show_effect
17
+ puts "Wow" * @wow_factor
18
+ end
19
+
20
+ def to_s
21
+ puts super
22
+ puts "Also with a wow_factor of #{@wow_factor}"
23
+ end
24
+ end
25
+ end
26
+
27
+ if __FILE__ == $0
28
+ movie3d = Movie3D.new('something',10,10)
29
+ puts movie3d
30
+ puts movie3d.thumbs_up
31
+ puts movie3d
32
+ end
@@ -0,0 +1,60 @@
1
+ require_relative 'rankable'
2
+
3
+ module Flicks
4
+ class Movie
5
+ include Rankable
6
+ attr_accessor :title,:rank,:snack_carbs
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.convert(line)
15
+ title,rank = line.split(",")
16
+ return 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} carbs being consumed"
26
+ puts "#{@title}'s consumed snacks: #{@snack_carbs}"
27
+ end
28
+
29
+ def each_snack
30
+ @snack_carbs.each do |key,value|
31
+ snack = Snack.new(key,Integer(value))
32
+ yield snack
33
+ end
34
+ end
35
+
36
+ def carbs_consumed
37
+ @snack_carbs.values.reduce(0) {|sum,n| sum + n }
38
+ end
39
+
40
+ def to_s
41
+ "#{@title} has a rank of #{@rank} (#{status})"
42
+ end
43
+
44
+ class << self #or object name
45
+ def whatsgood
46
+ "Another way to define singleton method"
47
+ end
48
+ end
49
+
50
+ end
51
+ end
52
+ if __FILE__ == $0
53
+ # movie = Movie.new('goonies',10)
54
+ # puts movie.title
55
+ # puts movie.rank
56
+ # puts movie.normalized_rank
57
+ # puts movie.thumbs_up
58
+ # puts movie.thumbs_down
59
+ # puts movie
60
+ end
@@ -0,0 +1,77 @@
1
+ require_relative 'movie'
2
+ require_relative 'waldorf_and_statler'
3
+ require_relative 'snack_bar'
4
+
5
+ module Flicks
6
+ class Playlist
7
+ def initialize(name)
8
+ @name = name
9
+ @movies = Array.new
10
+ end
11
+
12
+ def load(from_file)
13
+ puts "::Loading #{from_file}::"
14
+ File.readlines(from_file).each do |line|
15
+ add_movie(Movie.convert(line))
16
+ end
17
+ end
18
+
19
+ def Playlist.saving_time
20
+ Time.new.strftime('Printed on %m/%d/%Y at %I:%M%p')
21
+ end
22
+
23
+
24
+ def save(to_file='final_scores.csv')
25
+ File.open(to_file,'a+') do |file|
26
+ @movies.sort {|a,z| z.rank <=> a.rank}.each do |movie|
27
+ file.puts(movie.to_csv)
28
+ end
29
+ file.puts(Playlist.saving_time)
30
+ end
31
+ puts "\n::::Total Stats Saved to #{to_file}::::"
32
+ end
33
+
34
+ def add_movie(movie)
35
+ puts "::Adding #{movie.title} to playlist"
36
+ @movies.push(movie)
37
+ end
38
+
39
+ def play(viewings)
40
+ puts "#{@name}'s playlist:"
41
+ puts @movies.sort
42
+
43
+ puts "There are #{SnackBar::SNACKS.size} snacks in the Snack Bar"
44
+ SnackBar::SNACKS.map.with_index(1) {|snack,i| puts "\t#{i}. #{snack.name} #{snack.carbs} carbs"}
45
+
46
+ 1.upto(viewings) do |count|
47
+ @movies.sort.each do |movie|
48
+ puts "\nViewing #{count}:"
49
+ WaldorfAndStatler.review(movie)
50
+ movie.ate_snack(SnackBar.random)
51
+ puts movie
52
+ end
53
+ end
54
+ end
55
+
56
+ def print_stats
57
+ puts "\n#{@name}'s Stats"
58
+
59
+ movies_ordered_by_carbs = @movies.sort {|a,z| z.carbs_consumed <=> a.carbs_consumed}
60
+ movies_ordered_by_carbs.map.with_index(1) do |movie,i|
61
+ puts "#{i}. #{movie.title} - #{movie.carbs_consumed} total carbs(#{movie.snack_carbs.keys.size} snacks)"
62
+ movie.each_snack do |snack|
63
+ puts "\t#{snack.name.capitalize} - #{snack.carbs} carbs"
64
+ end
65
+ end
66
+
67
+
68
+ hits, flops = @movies.partition {|movie| movie.hit? }
69
+
70
+ puts "\nHits:"
71
+ puts hits.sort {|a,z| z.rank <=> a.rank }
72
+ puts "\nFlops:"
73
+ puts flops.sort {|d,q| q.rank <=> d.rank }
74
+ end
75
+
76
+ end
77
+ end
@@ -0,0 +1,31 @@
1
+ module Rankable
2
+
3
+ def self.introduction
4
+ puts "Greetings. This module was first designed for instances of class Movie"
5
+ end
6
+
7
+ def thumbs_up
8
+ self.rank += 1
9
+ end
10
+
11
+ def thumbs_down
12
+ self.rank -= 1
13
+ end
14
+
15
+ def hit?
16
+ self.rank >= 10
17
+ end
18
+
19
+ def status
20
+ hit? ? "Hit" : "Flop"
21
+ end
22
+
23
+ def normalized_rank
24
+ self.rank / 10
25
+ end
26
+
27
+ def <=>(object)
28
+ object.rank <=> self.rank
29
+ end
30
+
31
+ end
@@ -0,0 +1,25 @@
1
+ module Flicks
2
+ Snack = Struct.new(:name,:carbs)
3
+
4
+ module SnackBar
5
+
6
+ SNACKS = [
7
+ Snack.new(:popcorn,20),
8
+ Snack.new(:candy,15),
9
+ Snack.new(:nachos,40),
10
+ Snack.new(:pretzel,20),
11
+ Snack.new(:soda,5)
12
+ ]
13
+
14
+ def self.random
15
+ SNACKS.sample
16
+ end
17
+
18
+ end
19
+ end
20
+
21
+ if __FILE__ == $0
22
+ puts SnackBar::SNACKS
23
+ random = SnackBar.random
24
+ puts "Enjoy your #{random.name} with #{random.carbs} carbs"
25
+ end
@@ -0,0 +1,29 @@
1
+
2
+ module Flicks
3
+ module WaldorfAndStatler
4
+
5
+ def self.roll_die
6
+ rand(1..6)
7
+ end
8
+
9
+ def self.review(movie)
10
+ case(roll_die)
11
+ when(0..2)
12
+ movie.thumbs_down
13
+ puts "#{movie.title} got a thumbs down."
14
+ when(3..4)
15
+ puts "#{movie.title} was skipped"
16
+ else
17
+ movie.thumbs_up
18
+ puts "#{movie.title} got a thumbs up!"
19
+ end
20
+ end
21
+ end
22
+ end
23
+
24
+
25
+ if __FILE__ == $0
26
+ movie = Movie.new('harry potter')
27
+ WaldorfAndStatler.review(movie)
28
+ end
29
+
@@ -0,0 +1,40 @@
1
+ require 'flicks/movie'
2
+
3
+ module Flicks
4
+ RSpec.describe(Movie) do
5
+ before do
6
+ @initial_rank = 10
7
+ @movie = Movie.new('goonies',@initial_rank)
8
+ end
9
+
10
+ it('has a capitalized title') do
11
+ expect(@movie.title).to eq(@movie.title.capitalize)
12
+ end
13
+
14
+ it('has an initial rank') do
15
+ expect(@movie.rank).to eq(10)
16
+ end
17
+
18
+ it('has a string representation') do
19
+ expect(@movie.to_s).to eq("#{@movie.title} has a rank of #{@movie.rank} (Hit)")
20
+ end
21
+
22
+ it('increases rank by 1 when given a thumbs up') do
23
+ expect(@movie.thumbs_up).to eq(@initial_rank + 1)
24
+ end
25
+
26
+ it('decreases rank by 1 when given a thumbs down') do
27
+ expect(@movie.thumbs_down).to eq(@initial_rank - 1)
28
+ end
29
+
30
+ context("created with default rank") do
31
+ before do
32
+ @movie = Movie.new('goonies')
33
+ end
34
+
35
+ it('has default value of 0') do
36
+ expect(@movie.rank).to eq(0)
37
+ end
38
+ end
39
+ end
40
+ end
@@ -0,0 +1,40 @@
1
+ require 'flicks/playlist'
2
+ require 'flicks/waldorf_and_statler'
3
+
4
+ module Flicks
5
+ RSpec.describe(Playlist) do
6
+ before do
7
+ $stdout = StringIO.new
8
+ @playlist = Playlist.new('Kermit')
9
+ end
10
+
11
+ context('being played with one movie') do
12
+ before do
13
+ @initial_rank = 10
14
+ @movie = Movie.new('goonies',@initial_rank)
15
+ @playlist.add_movie(@movie)
16
+ end
17
+
18
+ it('gives the movie a thumbs up if a high number is rolled') do
19
+ allow(WaldorfAndStatler).to receive(:roll_die).and_return(5)
20
+ @playlist.play(1)
21
+
22
+ expect(@movie.rank).to eq(@initial_rank + 1)
23
+ end
24
+
25
+ it('skips the movie if medium number is rolled') do
26
+ allow(WaldorfAndStatler).to receive(:roll_die).and_return(4)
27
+ @playlist.play(1)
28
+
29
+ expect(@movie.rank).to eq(@initial_rank)
30
+ end
31
+
32
+ it('gives the movie a thumbs down if low number is rolled') do
33
+ allow(WaldorfAndStatler).to receive(:roll_die).and_return(0)
34
+ @playlist.play(1)
35
+
36
+ expect(@movie.rank).to eq(@initial_rank - 1)
37
+ end
38
+ end
39
+ end
40
+ end
metadata ADDED
@@ -0,0 +1,72 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: flicks1
3
+ version: !ruby/object:Gem::Version
4
+ version: '1.0'
5
+ platform: ruby
6
+ authors:
7
+ - pragmatic_studio_student
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2015-11-20 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: Just practicing making gem
28
+ email: practice@gmail.com
29
+ executables:
30
+ - flicks
31
+ extensions: []
32
+ extra_rdoc_files: []
33
+ files:
34
+ - LICENSE
35
+ - README
36
+ - bin/flicks
37
+ - bin/movies.csv
38
+ - lib/flicks/inheritance.rb
39
+ - lib/flicks/movie.rb
40
+ - lib/flicks/playlist.rb
41
+ - lib/flicks/rankable.rb
42
+ - lib/flicks/snack_bar.rb
43
+ - lib/flicks/waldorf_and_statler.rb
44
+ - spec/flicks/movie_spec.rb
45
+ - spec/flicks/playlist_spec.rb
46
+ homepage:
47
+ licenses:
48
+ - THIS IS MY LICENSE. :)
49
+ metadata: {}
50
+ post_install_message:
51
+ rdoc_options: []
52
+ require_paths:
53
+ - lib
54
+ required_ruby_version: !ruby/object:Gem::Requirement
55
+ requirements:
56
+ - - ">="
57
+ - !ruby/object:Gem::Version
58
+ version: '1.9'
59
+ required_rubygems_version: !ruby/object:Gem::Requirement
60
+ requirements:
61
+ - - ">="
62
+ - !ruby/object:Gem::Version
63
+ version: '0'
64
+ requirements: []
65
+ rubyforge_project:
66
+ rubygems_version: 2.2.2
67
+ signing_key:
68
+ specification_version: 4
69
+ summary: Quick practice on creating gem
70
+ test_files:
71
+ - spec/flicks/movie_spec.rb
72
+ - spec/flicks/playlist_spec.rb