* Missing files
* Work on post exploration code by traversing dates
This commit is contained in:
72
app/logical/date_tag.rb
Normal file
72
app/logical/date_tag.rb
Normal file
@@ -0,0 +1,72 @@
|
||||
class DateTag
|
||||
attr_accessor :tag, :start_date, :end_date
|
||||
|
||||
def self.new_from_range(start, stop)
|
||||
new("#{start.to_formatted_s(:db)}..#{stop.to_formatted_s(:db)}")
|
||||
end
|
||||
|
||||
def initialize(tag)
|
||||
@tag = tag
|
||||
end
|
||||
|
||||
def is_single_day?
|
||||
tag =~ /^\d+-\d+-\d+$/
|
||||
end
|
||||
|
||||
def is_range?
|
||||
!is_single_day
|
||||
end
|
||||
|
||||
def start_date
|
||||
return date if is_single_day?
|
||||
extract_ranges
|
||||
start_date
|
||||
end
|
||||
|
||||
def end_date
|
||||
return date if is_single_day?
|
||||
extract_ranges
|
||||
end_date
|
||||
end
|
||||
|
||||
def previous_week
|
||||
DateTag.new_from_range(1.week.ago(start_date), 1.week.ago(end_date))
|
||||
end
|
||||
|
||||
def next_week
|
||||
DateTag.new_from_range(1.week.since(start_date)), 1.week.since(end_date)
|
||||
end
|
||||
|
||||
def previous_month
|
||||
DateTag.new_from_range(1.month.ago(start_date), 1.month.ago(end_date))
|
||||
end
|
||||
|
||||
def next_month
|
||||
DateTag.new_from_range(1.month.since(start_date)), 1.month.since(end_date)
|
||||
end
|
||||
|
||||
def date
|
||||
Date.parse(tag)
|
||||
end
|
||||
|
||||
private
|
||||
def extract_ranges
|
||||
case tag
|
||||
when /\A(.+?)\.\.(.+)/
|
||||
self.start_date = Date.parse($1)
|
||||
self.end_date = Date.parse($2)
|
||||
|
||||
when /\A<(.+)/, /\A<=(.+)/, /\A\.\.(.+)/
|
||||
self.start_date = 20.years.ago
|
||||
self.end_date = Date.parse($1)
|
||||
|
||||
when /\A>(.+)/, /\A>=(.+)/, /\A(.+)\.\.\Z/
|
||||
self.start_date = Date.parse($1)
|
||||
self.end_date = Date.today
|
||||
|
||||
else
|
||||
self.start_date = Date.today
|
||||
self.end_date = Date.today
|
||||
end
|
||||
end
|
||||
end
|
||||
@@ -43,6 +43,10 @@ class PostSet
|
||||
tag_array.size == 1
|
||||
end
|
||||
|
||||
def date_tag
|
||||
tag_array.grep(/date:/).first
|
||||
end
|
||||
|
||||
def load_associations
|
||||
if is_single_tag?
|
||||
@wiki_page = WikiPage.find_by_title(tags)
|
||||
|
||||
Reference in New Issue
Block a user