-
Notifications
You must be signed in to change notification settings - Fork 19
/
core.rb
72 lines (61 loc) · 1.76 KB
/
core.rb
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
module Rubicure
require "singleton"
# generic methods
class Core
include Singleton
include Enumerable
include Rubicure::Concerns::Util
def method_missing(name, *args)
unmarked_precure = Rubicure::Series.find(:unmarked)
if Rubicure::Series.valid?(name)
Rubicure::Series.find(name)
elsif unmarked_precure.respond_to?(name)
unmarked_precure.send(name, *args)
else
super
end
end
# @return [Series] current precure
# @raise not onair!
def now
current_time = Time.now
each_with_series do |series|
return series if series.on_air?(current_time)
end
raise "Not on air precure!"
end
alias_method :current, :now
# @param [Time,Date,String,Symbol] arg Time, Date or date like String (ex. "2013-12-16")
# @return [Array<Rubicure::Girl>]
def all_stars(arg = Time.current)
unless @all_stars
@all_stars = []
Rubicure::Girl.names.each do |girl_name|
@all_stars << Rubicure::Girl.find(girl_name)
end
@all_stars.uniq!(&:human_name)
end
begin
movie = Rubicure::Movie.find(arg.to_sym)
date = movie.started_date
rescue
# args is Time or Date
date = to_date(arg)
end
@all_stars.select { |girl| girl.created_date && girl.created_date <= date }
end
# iterate with :unmarked, :max_heart, ...
#
# @yield series
# @yieldparam series [Rubicure::Series]
#
# @return [Array<Symbol>] ex. :unmarked, :max_heart, ...
def each_with_series
Rubicure::Series.uniq_names.each do |series_name|
series = Rubicure::Series.find(series_name)
yield series
end
end
alias_method :each, :each_with_series
end
end