Skip to content

Instantly share code, notes, and snippets.

View Sihui's full-sized avatar

Sihui Huang Sihui

View GitHub Profile
@Sihui
Sihui / group_contact.rb
Created August 5, 2017 18:19
Design Pattern: Composite and Group Messaging
class GroupContact
attr_reader :group
def initialize(people_in_group)
@group = people_in_group
end
def message(text)
group.each do |person|
person.message(text)
end
@Sihui
Sihui / person_contact.rb
Last active August 5, 2017 18:11
Design Pattern: Composite and Group Messaging
class PersonContact
attr_reader :title, :number
def initialize(title, number)
@title = title
@number = number
end
def message(text)
puts "Messaging #{title}(#{number}): "
@Sihui
Sihui / hash_iterator.rb
Created August 4, 2017 07:20
Design Pattern: Iterator and Movie Collections
class HashIterator
attr_reader :collection, :keys
attr_accessor :current_index
def initialize(collection)
@collection = collection
@keys = collection.keys
@current_index = 0
end
@Sihui
Sihui / array_iterator.rb
Created August 4, 2017 07:15
Design Pattern: Iterator and Movie Collections
class ArrayIterator
attr_reader :collection
attr_accessor :current_index
def initialize(collection)
@collection = collection
@current_index = 0
end
def has_next?
@Sihui
Sihui / movie_collection3.rb
Last active August 4, 2017 07:33
Design Pattern: Iterator and Movie Collections
class MovieCollection
attr_reader :movie_iterators
attr_accessor :all_movies
def initialize(movie_iterators)
@movie_iterators = movie_iterators
@all_movies = get_all_movies
end
private
@Sihui
Sihui / get_all_movies_2.rb
Last active August 4, 2017 07:30
Design Pattern: Iterator and Movie Collections
def get_all_movies
movies = []
movie_iterators = [
netflix_movie_iterator,
amazon_movie_iterator,
hulu_movie_iterator,
youtube_movie_iterator,
hbo_movie_iterator
]
@Sihui
Sihui / get_all_movies.rb
Last active August 4, 2017 07:29
Design Pattern: Iterator and Movie Collections
def get_all_movies
movies = []
while netflix_movie_iterator.has_next?
movies << netflix_movie_iterator.next
end
while amazon_movie_iterator.has_next?
movies << amazon_movie_iterator.next
end
@Sihui
Sihui / movie_collection2.rb
Last active August 4, 2017 07:32
Design Pattern: Iterator and Movie Collections
class MovieCollection
attr_reader :netflix_movies, :amazon_movies,
:hulu_movies, :youtube_movies, :hbo_movies
attr_accessor :all_movies
def initialize(netflix_movies, amazon_movies,
hulu_movies, youtube_movies, hbo_movies)
@netflix_movies = netflix_movies
@Sihui
Sihui / movie_collection.rb
Last active August 4, 2017 07:29
Design Pattern: Iterator and Movie Collections
class MovieCollection
attr_reader :netflix_movies, :amazon_movies
def initialize(netflix_movies, amazon_movies)
@netflix_movies = netflix_movies
@amazon_movies = amazon_movies
@all_movies = get_all_movies
end
private
@Sihui
Sihui / amazon_movies.rb
Last active August 4, 2017 07:22
Design Pattern: Iterator and Movie Collections
amazon_movies = {
0 => {
title: 'Mission: Impossible - Rogue Nation',
year: '2015',
director: 'Christopher McQuarrie',
genre: 'Thriller/Actio',
length: '2h 11m'
},
1 => {
title: 'The Hunger Games: Mockingja',