module ShengXiao::Finder

Public Class Methods

sign_for(date) click to toggle source
# File lib/shengxiao/finder.rb, line 6
def sign_for(date)
  date = Date.parse(date) unless date.is_a?(Date)
  year = date.year

  parse_data_from_file if @data.empty?
  year_data = get_year_data(year)

  raise "Date should be specified in the given range: "\
        "#{@data_start} - #{@data_end}. "\
        "You specified: #{date}." unless year_data

  year_start_date = Date.parse("#{year_data['start_date']} #{year}")
  if date < year_start_date
    year_data = get_year_data(year-1)
    raise "Given date should be no earlier than #{@data_start}. "\
          "You specified: #{date}." unless year_data
  end

  sign = year_data["sign"]
  I18n.t("shengxiao.signs.#{sign}")
end

Private Class Methods

get_year_data(year) click to toggle source
# File lib/shengxiao/finder.rb, line 37
def get_year_data(year)
  @data.detect { |d| d['year'] == year.to_s }
end
parse_data_from_file() click to toggle source
# File lib/shengxiao/finder.rb, line 30
def parse_data_from_file
  data_file   = File.read(File.join(File.dirname(__FILE__), '..', 'data', 'data.json'))
  @data       = JSON.parse(data_file)
  @data_start = Date.parse("#{@data.first['start_date']} #{@data.first['year']}")
  @data_end   = Date.parse("31 Jan #{@data.last['year']}")
end