oscar-movies 1.0.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +7 -0
- data/LICENSE +4 -0
- data/README +3 -0
- data/bin/movies.csv +5 -0
- data/bin/oscar +24 -0
- data/lib/oscar/movie.rb +63 -0
- data/lib/oscar/movie3d.rb +29 -0
- data/lib/oscar/playlist.rb +83 -0
- data/lib/oscar/rankable.rb +23 -0
- data/lib/oscar/reviewer.rb +20 -0
- data/lib/oscar/snack_bar.rb +21 -0
- data/lib/oscar/song.rb +26 -0
- data/spec/oscar/movie3d_spec.rb +31 -0
- data/spec/oscar/movie_spec.rb +102 -0
- data/spec/oscar/playlist_spec.rb +65 -0
- data/spec/oscar/snack_bar_spec.rb +25 -0
- metadata +80 -0
checksums.yaml
ADDED
@@ -0,0 +1,7 @@
|
|
1
|
+
---
|
2
|
+
SHA1:
|
3
|
+
metadata.gz: 0a06ccb41fc1dd3b43bb95bcecccc1913101c978
|
4
|
+
data.tar.gz: ff0fdf4e5ed68ec8fe36cfe217a128995580824d
|
5
|
+
SHA512:
|
6
|
+
metadata.gz: 3054a4214ab1af1e1c15d8c4c5c3b7e0dfb1159d16b95e92d99067732d6e1547cacf6c0bd88dc35801a4cc526a889467156da815fa3de2937ac0a11544ccf231
|
7
|
+
data.tar.gz: b31510cfe51650a3fd6b69ff3ca277c4cb54e48fa1c24e6cd83197ce2e8489e1fb36ca9c5b0cbee7ec84f43dee0b4d3fb3c25081e95835ab1fe5e2e673edcd40
|
data/LICENSE
ADDED
data/README
ADDED
data/bin/movies.csv
ADDED
data/bin/oscar
ADDED
@@ -0,0 +1,24 @@
|
|
1
|
+
#!/usr/bin/env ruby
|
2
|
+
|
3
|
+
require_relative "../lib/oscar/playlist"
|
4
|
+
|
5
|
+
playlist = Oscar::Playlist.new("Kermit")
|
6
|
+
# stor command line argument in ARGF
|
7
|
+
default_movie_file = File.join(File.dirname(__FILE__), 'movies.csv')
|
8
|
+
playlist.load(ARGV.shift || default_movie_file)
|
9
|
+
|
10
|
+
loop do
|
11
|
+
puts "\nHow many viewings you want to see? ('quit' to exit)"
|
12
|
+
answer = gets.chomp.downcase
|
13
|
+
case answer
|
14
|
+
when /^\d+$/
|
15
|
+
playlist.play(answer.to_i)
|
16
|
+
when 'quit', 'exit'
|
17
|
+
playlist.print_stats
|
18
|
+
break
|
19
|
+
else
|
20
|
+
puts "Please enter a number or 'quit'"
|
21
|
+
end
|
22
|
+
end
|
23
|
+
playlist.save
|
24
|
+
|
data/lib/oscar/movie.rb
ADDED
@@ -0,0 +1,63 @@
|
|
1
|
+
require_relative "snack_bar"
|
2
|
+
require_relative "rankable"
|
3
|
+
|
4
|
+
module Oscar
|
5
|
+
class Movie
|
6
|
+
include Rankable
|
7
|
+
|
8
|
+
attr_accessor :title, :rank
|
9
|
+
|
10
|
+
def initialize(title, rank=0)
|
11
|
+
@title = title.capitalize
|
12
|
+
@rank = rank
|
13
|
+
@snack_carbs = Hash.new(0)
|
14
|
+
end
|
15
|
+
|
16
|
+
def each_snack
|
17
|
+
@snack_carbs.each do |name, carbs|
|
18
|
+
snack = Snack.new(name, carbs)
|
19
|
+
yield snack
|
20
|
+
end
|
21
|
+
end
|
22
|
+
|
23
|
+
def carbs_consumed
|
24
|
+
@snack_carbs.values.reduce(0, :+)
|
25
|
+
end
|
26
|
+
|
27
|
+
def self.from_csv(line)
|
28
|
+
title, rank = line.split(',')
|
29
|
+
Movie.new(title, Integer(rank))
|
30
|
+
end
|
31
|
+
|
32
|
+
def to_csv
|
33
|
+
"#{@title}, #{@rank}"
|
34
|
+
end
|
35
|
+
|
36
|
+
def ate_snack(snack)
|
37
|
+
@snack_carbs[snack.name] += snack.carbs
|
38
|
+
puts "#{@title} let to (#{snack.carbs}) #{snack.name} carbs being consumed"
|
39
|
+
puts "#{@title}'s snack: #{@snack_carbs}"
|
40
|
+
end
|
41
|
+
|
42
|
+
def to_s # meta programming
|
43
|
+
"#{@title} has a rank of #{@rank} (#{status})"
|
44
|
+
end
|
45
|
+
end
|
46
|
+
|
47
|
+
if __FILE__ == $0
|
48
|
+
movie1 = Movie.new("gravity", 20)
|
49
|
+
puts movie1.thumbs_up
|
50
|
+
puts movie1.title
|
51
|
+
puts movie1
|
52
|
+
|
53
|
+
movie2 = Movie.new("wall street", 3)
|
54
|
+
puts movie2.thumbs_down
|
55
|
+
puts movie2.rank
|
56
|
+
puts movie2
|
57
|
+
|
58
|
+
movie3 = Movie.new("frozen", 3)
|
59
|
+
puts movie3.thumbs_up
|
60
|
+
puts movie3.rank
|
61
|
+
puts movie3
|
62
|
+
end
|
63
|
+
end
|
@@ -0,0 +1,29 @@
|
|
1
|
+
require_relative "movie"
|
2
|
+
|
3
|
+
module Oscar
|
4
|
+
class Movie3D < Movie
|
5
|
+
|
6
|
+
def initialize(title, rank, wow_factor)
|
7
|
+
super(title, rank)
|
8
|
+
@wow_factor = wow_factor
|
9
|
+
end
|
10
|
+
|
11
|
+
def thumbs_up
|
12
|
+
@wow_factor.times {super}
|
13
|
+
end
|
14
|
+
|
15
|
+
def show_effect
|
16
|
+
puts "Wow!" * @wow_factor
|
17
|
+
end
|
18
|
+
end
|
19
|
+
|
20
|
+
if __FILE__ == $0
|
21
|
+
movie3d = Movie3D.new("gravity", 5, 20)
|
22
|
+
puts "3D movie: #{movie3d.title}"
|
23
|
+
puts "Initial rank: #{movie3d.rank}"
|
24
|
+
movie3d.thumbs_up
|
25
|
+
puts "Rank after thumbs up: #{movie3d.rank}"
|
26
|
+
puts movie3d
|
27
|
+
movie3d.show_effect
|
28
|
+
end
|
29
|
+
end
|
@@ -0,0 +1,83 @@
|
|
1
|
+
require_relative "movie"
|
2
|
+
require_relative "reviewer"
|
3
|
+
require_relative "snack_bar"
|
4
|
+
|
5
|
+
module Oscar
|
6
|
+
class Playlist
|
7
|
+
attr_reader :name
|
8
|
+
|
9
|
+
def initialize(name)
|
10
|
+
@name = name
|
11
|
+
@movies = [ ]
|
12
|
+
end
|
13
|
+
|
14
|
+
def load(from_file)
|
15
|
+
File.readlines(from_file).each do |line|
|
16
|
+
add_movie(Movie.from_csv(line))
|
17
|
+
end
|
18
|
+
end
|
19
|
+
|
20
|
+
def save(to_file="movie_rankings.csv" )
|
21
|
+
File.open(to_file, "w") do |file| # w mode for writing
|
22
|
+
file.puts @movies.sort.map { |movie| movie.to_csv }
|
23
|
+
# @movies.sort.each do |movie|
|
24
|
+
# file.puts movie.to_csv
|
25
|
+
# end
|
26
|
+
end
|
27
|
+
end
|
28
|
+
|
29
|
+
def add_movie(movie)
|
30
|
+
@movies << movie
|
31
|
+
end
|
32
|
+
|
33
|
+
def play(viewings)
|
34
|
+
puts "\n*** #{@name}'s playlist:"
|
35
|
+
puts @movies.sort
|
36
|
+
|
37
|
+
snacks = SnackBar::SNACKS
|
38
|
+
puts "\nThere are #{snacks.size} snacks available in the snack bar."
|
39
|
+
|
40
|
+
snacks.each do |snack|
|
41
|
+
puts "#{snack.name.capitalize} has (#{snack.carbs}) carbs."
|
42
|
+
end
|
43
|
+
|
44
|
+
1.upto(viewings) do |count|
|
45
|
+
puts "\nViewing #{count}:"
|
46
|
+
@movies.each do |movie|
|
47
|
+
Reviewer.review(movie)
|
48
|
+
|
49
|
+
snack = SnackBar.random
|
50
|
+
movie.ate_snack(snack)
|
51
|
+
puts movie
|
52
|
+
end
|
53
|
+
end
|
54
|
+
end
|
55
|
+
|
56
|
+
def total_carbs_consumed
|
57
|
+
@movies.reduce(0) do |sum, movie|
|
58
|
+
sum + movie.carbs_consumed
|
59
|
+
end
|
60
|
+
end
|
61
|
+
|
62
|
+
def print_stats
|
63
|
+
puts "\n#{@name}'s Stats:"
|
64
|
+
|
65
|
+
winners, losers = @movies.partition { |movie| movie.winner? }
|
66
|
+
|
67
|
+
puts "\nWinners:"
|
68
|
+
puts winners.sort
|
69
|
+
|
70
|
+
puts "\nLosers:"
|
71
|
+
puts losers.sort
|
72
|
+
|
73
|
+
puts "#{total_carbs_consumed} total carbs consumed"
|
74
|
+
@movies.sort.each do |movie|
|
75
|
+
puts "\n#{movie.title}'s snack totals:"
|
76
|
+
movie.each_snack do |snack|
|
77
|
+
puts "#{snack.carbs} totla #{snack.name.capitalize}"
|
78
|
+
end
|
79
|
+
puts "#{movie.carbs_consumed} grand total carbs."
|
80
|
+
end
|
81
|
+
end
|
82
|
+
end
|
83
|
+
end
|
@@ -0,0 +1,23 @@
|
|
1
|
+
module Oscar
|
2
|
+
module Rankable
|
3
|
+
def thumbs_up
|
4
|
+
self.rank += 1
|
5
|
+
end
|
6
|
+
|
7
|
+
def thumbs_down
|
8
|
+
self.rank -= 1
|
9
|
+
end
|
10
|
+
|
11
|
+
def winner?
|
12
|
+
self.rank >= 20
|
13
|
+
end
|
14
|
+
|
15
|
+
def status
|
16
|
+
winner? ? "Winner!" : "Loser!"
|
17
|
+
end
|
18
|
+
|
19
|
+
def <=>(other)
|
20
|
+
other.rank <=> self.rank
|
21
|
+
end
|
22
|
+
end
|
23
|
+
end
|
@@ -0,0 +1,20 @@
|
|
1
|
+
module Oscar
|
2
|
+
module Reviewer
|
3
|
+
def self.roll_die
|
4
|
+
rand(1..20)
|
5
|
+
end
|
6
|
+
|
7
|
+
def self.review(movie)
|
8
|
+
case roll_die
|
9
|
+
when 1..9
|
10
|
+
movie.thumbs_down
|
11
|
+
puts "#{movie.title} got a thumbs down."
|
12
|
+
when 10..17
|
13
|
+
puts "#{movie.title} was skipped."
|
14
|
+
else
|
15
|
+
movie.thumbs_up
|
16
|
+
puts "#{movie.title} got a thumbs up."
|
17
|
+
end
|
18
|
+
end
|
19
|
+
end
|
20
|
+
end
|
@@ -0,0 +1,21 @@
|
|
1
|
+
Snack = Struct.new(:name, :carbs)
|
2
|
+
|
3
|
+
module Oscar
|
4
|
+
module SnackBar
|
5
|
+
SNACKS = [
|
6
|
+
Snack.new(:popcorn, 10),
|
7
|
+
Snack.new(:juice, 20),
|
8
|
+
Snack.new(:candy, 30),
|
9
|
+
Snack.new(:pretzel, 40),
|
10
|
+
Snack.new(:nachos, 50)
|
11
|
+
]
|
12
|
+
|
13
|
+
def self.random
|
14
|
+
SNACKS.sample
|
15
|
+
end
|
16
|
+
end
|
17
|
+
if __FILE__ == $0
|
18
|
+
puts SnackBar::SNACKS
|
19
|
+
puts SnackBar.random
|
20
|
+
end
|
21
|
+
end
|
data/lib/oscar/song.rb
ADDED
@@ -0,0 +1,26 @@
|
|
1
|
+
require_relative "rankable"
|
2
|
+
|
3
|
+
module Oscar
|
4
|
+
class Song
|
5
|
+
include Rankable
|
6
|
+
|
7
|
+
attr_accessor :title, :rank
|
8
|
+
|
9
|
+
def initialize(title, rank)
|
10
|
+
@title = title
|
11
|
+
@rank = rank
|
12
|
+
end
|
13
|
+
|
14
|
+
def to_s
|
15
|
+
"#{@title} has a rank of #{@rank} (#{status}"
|
16
|
+
end
|
17
|
+
end
|
18
|
+
|
19
|
+
if __FILE__ == $0
|
20
|
+
song.Song.new("Mamamia", 30)
|
21
|
+
song.thumbs_down
|
22
|
+
puts song
|
23
|
+
song.thumbs_up
|
24
|
+
puts song
|
25
|
+
end
|
26
|
+
end
|
@@ -0,0 +1,31 @@
|
|
1
|
+
require "oscar/movie3d"
|
2
|
+
|
3
|
+
module Oscar
|
4
|
+
describe "Movie3D" do
|
5
|
+
let(:initial_rank) { 20 }
|
6
|
+
let(:wow_factor) { 5 }
|
7
|
+
let(:movie) { Movie3D.new("hobbit", initial_rank, wow_factor) }
|
8
|
+
|
9
|
+
it "has a title" do
|
10
|
+
expect(movie.title).to eql("Hobbit")
|
11
|
+
end
|
12
|
+
|
13
|
+
it "has a rank" do
|
14
|
+
expect(movie.rank).to eql(20)
|
15
|
+
end
|
16
|
+
|
17
|
+
xit "has a wow factor" do
|
18
|
+
expect(movie.wow_factor).to eql(5)
|
19
|
+
end
|
20
|
+
|
21
|
+
it "increases rank by 1 times the wow factor when given a thumbs up" do
|
22
|
+
movie.thumbs_up
|
23
|
+
expect(movie.rank).to eql(initial_rank + (1 * wow_factor))
|
24
|
+
end
|
25
|
+
|
26
|
+
it "decreases rank by 1 when given a thumbs down" do
|
27
|
+
movie.thumbs_down
|
28
|
+
expect(movie.rank).to eql(initial_rank - 1)
|
29
|
+
end
|
30
|
+
end
|
31
|
+
end
|
@@ -0,0 +1,102 @@
|
|
1
|
+
require "oscar/movie"
|
2
|
+
|
3
|
+
module Oscar
|
4
|
+
describe Movie do
|
5
|
+
let(:initial_rank) { 20 }
|
6
|
+
let(:movie) { Movie.new("gravity", initial_rank) }
|
7
|
+
|
8
|
+
it "has a capitalized title" do
|
9
|
+
# movie.title.should == "Gravity"
|
10
|
+
expect(movie.title).to eql("Gravity")
|
11
|
+
end
|
12
|
+
|
13
|
+
it "GET #rank" do
|
14
|
+
# movie.rank.should == 20
|
15
|
+
expect(movie.rank).to eql(initial_rank)
|
16
|
+
end
|
17
|
+
|
18
|
+
it "has a description" do
|
19
|
+
expect(movie.to_s).to eql("Gravity has a rank of 20 (Winner!)")
|
20
|
+
end
|
21
|
+
|
22
|
+
it "GET #thumbs_up" do
|
23
|
+
expect(movie.thumbs_up).to eql(initial_rank+1)
|
24
|
+
end
|
25
|
+
|
26
|
+
it "decreases rank by 1 when given a thumbs down" do
|
27
|
+
expect(movie.thumbs_down).to eql(initial_rank-1)
|
28
|
+
end
|
29
|
+
|
30
|
+
context 'with a default rank' do
|
31
|
+
let(:movie) { Movie.new("godfather") }
|
32
|
+
it "has a value of 0" do
|
33
|
+
expect(movie.rank).to eql(0)
|
34
|
+
end
|
35
|
+
end
|
36
|
+
|
37
|
+
context 'with a rank of 20 or more' do
|
38
|
+
it "is a winner" do
|
39
|
+
expect(movie.winner?).to eql(true)
|
40
|
+
end
|
41
|
+
|
42
|
+
it "has a winner status" do
|
43
|
+
expect(movie.status).to eql("Winner!")
|
44
|
+
end
|
45
|
+
end
|
46
|
+
|
47
|
+
context 'with a rank of less than 20' do
|
48
|
+
let(:movie) { Movie.new("gravity", 19) }
|
49
|
+
it "is a loser" do
|
50
|
+
expect(movie.winner?).to eql(false)
|
51
|
+
end
|
52
|
+
|
53
|
+
it "has a loser status" do
|
54
|
+
expect(movie.status).to eql("Loser!")
|
55
|
+
end
|
56
|
+
end
|
57
|
+
|
58
|
+
it "is sorted by decreasing rank" do
|
59
|
+
movie1 = Movie.new("gravity", 100)
|
60
|
+
movie2 = Movie.new("madacascar", 200)
|
61
|
+
movie3 = Movie.new("godfather", 300)
|
62
|
+
|
63
|
+
movies = [movie1, movie2, movie3]
|
64
|
+
expect(movies.sort).to eql([movie3, movie2, movie1])
|
65
|
+
end
|
66
|
+
|
67
|
+
it "computes carbs consumed as the sum of all snack carbs consumed" do
|
68
|
+
expect(movie.carbs_consumed).to eql(0)
|
69
|
+
|
70
|
+
movie.ate_snack(Snack.new(:popcorn, 10))
|
71
|
+
expect(movie.carbs_consumed).to eql(10)
|
72
|
+
|
73
|
+
movie.ate_snack(Snack.new(:popcorn, 10))
|
74
|
+
expect(movie.carbs_consumed).to eql(20)
|
75
|
+
|
76
|
+
movie.ate_snack(Snack.new(:juice, 5))
|
77
|
+
expect(movie.carbs_consumed).to eql(25)
|
78
|
+
end
|
79
|
+
|
80
|
+
it "yields each snack" do
|
81
|
+
movie.ate_snack(Snack.new(:popcorn, 10))
|
82
|
+
movie.ate_snack(Snack.new(:popcorn, 10))
|
83
|
+
movie.ate_snack(Snack.new(:juice, 5))
|
84
|
+
|
85
|
+
yielded = []
|
86
|
+
movie.each_snack do |snack|
|
87
|
+
yielded << snack
|
88
|
+
end
|
89
|
+
expect(yielded).to eql([Snack.new(:popcorn, 20), Snack.new(:juice, 5)])
|
90
|
+
end
|
91
|
+
|
92
|
+
it "can be instantiated from a CSV file" do
|
93
|
+
movie = Movie.from_csv("gravity,10")
|
94
|
+
expect(movie.title).to eql("Gravity")
|
95
|
+
expect(movie.rank).to eql(10)
|
96
|
+
end
|
97
|
+
|
98
|
+
it "can be serialized to a CSV file" do
|
99
|
+
expect(movie.to_csv).to eql("Gravity, 20")
|
100
|
+
end
|
101
|
+
end
|
102
|
+
end
|
@@ -0,0 +1,65 @@
|
|
1
|
+
require "oscar/playlist"
|
2
|
+
|
3
|
+
module Oscar
|
4
|
+
describe Playlist do
|
5
|
+
let(:playlist) { Playlist.new("Oscar") }
|
6
|
+
|
7
|
+
it "has a name" do
|
8
|
+
expect(playlist.name).to eql("Oscar")
|
9
|
+
end
|
10
|
+
|
11
|
+
context 'being played with one movie' do
|
12
|
+
let(:initial_rank) { 20 }
|
13
|
+
let(:movie) { Movie.new("gravity", initial_rank) }
|
14
|
+
before {playlist.add_movie(movie)}
|
15
|
+
|
16
|
+
it "gives the movie thumbs up if a high number is rolled" do
|
17
|
+
Reviewer.stub(:roll_die).and_return(20)
|
18
|
+
playlist.play(2)
|
19
|
+
expect(movie.rank).to eql(initial_rank+2)
|
20
|
+
|
21
|
+
Reviewer.stub(:roll_die).and_return(19)
|
22
|
+
playlist.play(2)
|
23
|
+
expect(movie.rank).to eql(initial_rank+4)
|
24
|
+
end
|
25
|
+
|
26
|
+
it "skips the movie if a medium number is rolled" do
|
27
|
+
Reviewer.stub(:roll_die).and_return(10)
|
28
|
+
playlist.play(2)
|
29
|
+
expect(movie.rank).to eql(initial_rank)
|
30
|
+
|
31
|
+
Reviewer.stub(:roll_die).and_return(13)
|
32
|
+
playlist.play(2)
|
33
|
+
expect(movie.rank).to eql(initial_rank)
|
34
|
+
end
|
35
|
+
|
36
|
+
it "gives the movie thumbs down if a lower number is rolled" do
|
37
|
+
Reviewer.stub(:roll_die).and_return(2)
|
38
|
+
playlist.play(2)
|
39
|
+
expect(movie.rank).to eql(initial_rank-2)
|
40
|
+
|
41
|
+
Reviewer.stub(:roll_die).and_return(4)
|
42
|
+
playlist.play(2)
|
43
|
+
expect(movie.rank).to eql(initial_rank-4)
|
44
|
+
end
|
45
|
+
end
|
46
|
+
|
47
|
+
context 'with movies that have casued snacks to be consumed' do
|
48
|
+
before do
|
49
|
+
movie1 = Movie.new("gravity")
|
50
|
+
movie2 = Movie.new("godfather")
|
51
|
+
|
52
|
+
playlist.add_movie(movie1)
|
53
|
+
playlist.add_movie(movie2)
|
54
|
+
|
55
|
+
movie1.ate_snack(Snack.new(:popcorn, 10))
|
56
|
+
movie1.ate_snack(Snack.new(:popcorn, 10))
|
57
|
+
movie2.ate_snack(Snack.new(:juice, 5))
|
58
|
+
end
|
59
|
+
|
60
|
+
it "computes total carbs consumed as the sum of all mocies carbs consumed" do
|
61
|
+
expect(playlist.total_carbs_consumed).to eql(25)
|
62
|
+
end
|
63
|
+
end
|
64
|
+
end
|
65
|
+
end
|
@@ -0,0 +1,25 @@
|
|
1
|
+
require "oscar/snack_bar"
|
2
|
+
|
3
|
+
module Oscar
|
4
|
+
describe Snack do
|
5
|
+
let(:snack) { Snack.new(:popcorn, 10) }
|
6
|
+
|
7
|
+
it "has a name attribute" do
|
8
|
+
expect(snack.name).to eql(:popcorn)
|
9
|
+
end
|
10
|
+
|
11
|
+
it "has a carbs attribute" do
|
12
|
+
expect(snack.carbs).to eql(10)
|
13
|
+
end
|
14
|
+
|
15
|
+
describe SnackBar do
|
16
|
+
it "has a full yummy bar" do
|
17
|
+
expect(SnackBar::SNACKS).to_not be_nil
|
18
|
+
end
|
19
|
+
|
20
|
+
it "returns a random yummy snack" do
|
21
|
+
expect(SnackBar::SNACKS).to include(snack)
|
22
|
+
end
|
23
|
+
end
|
24
|
+
end
|
25
|
+
end
|
metadata
ADDED
@@ -0,0 +1,80 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: oscar-movies
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 1.0.0
|
5
|
+
platform: ruby
|
6
|
+
authors:
|
7
|
+
- Ahmed Nadar
|
8
|
+
autorequire:
|
9
|
+
bindir: bin
|
10
|
+
cert_chain: []
|
11
|
+
date: 2014-03-17 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: |-
|
28
|
+
This is an application used to cover lost of aras in Ruby.
|
29
|
+
|
30
|
+
You can contact me here http://twitter.com/ahmedandar.
|
31
|
+
email: ahmednadar@gmail.com
|
32
|
+
executables:
|
33
|
+
- oscar
|
34
|
+
extensions: []
|
35
|
+
extra_rdoc_files: []
|
36
|
+
files:
|
37
|
+
- bin/movies.csv
|
38
|
+
- bin/oscar
|
39
|
+
- lib/oscar/movie.rb
|
40
|
+
- lib/oscar/movie3d.rb
|
41
|
+
- lib/oscar/playlist.rb
|
42
|
+
- lib/oscar/rankable.rb
|
43
|
+
- lib/oscar/reviewer.rb
|
44
|
+
- lib/oscar/snack_bar.rb
|
45
|
+
- lib/oscar/song.rb
|
46
|
+
- spec/oscar/movie3d_spec.rb
|
47
|
+
- spec/oscar/movie_spec.rb
|
48
|
+
- spec/oscar/playlist_spec.rb
|
49
|
+
- spec/oscar/snack_bar_spec.rb
|
50
|
+
- LICENSE
|
51
|
+
- README
|
52
|
+
homepage: http://ahmednadar.github.io
|
53
|
+
licenses: []
|
54
|
+
metadata: {}
|
55
|
+
post_install_message:
|
56
|
+
rdoc_options: []
|
57
|
+
require_paths:
|
58
|
+
- lib
|
59
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
60
|
+
requirements:
|
61
|
+
- - '>='
|
62
|
+
- !ruby/object:Gem::Version
|
63
|
+
version: '1.9'
|
64
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
65
|
+
requirements:
|
66
|
+
- - '>='
|
67
|
+
- !ruby/object:Gem::Version
|
68
|
+
version: '0'
|
69
|
+
requirements: []
|
70
|
+
rubyforge_project:
|
71
|
+
rubygems_version: 2.1.11
|
72
|
+
signing_key:
|
73
|
+
specification_version: 4
|
74
|
+
summary: Plays and reviews movies
|
75
|
+
test_files:
|
76
|
+
- spec/oscar/movie3d_spec.rb
|
77
|
+
- spec/oscar/movie_spec.rb
|
78
|
+
- spec/oscar/playlist_spec.rb
|
79
|
+
- spec/oscar/snack_bar_spec.rb
|
80
|
+
has_rdoc:
|