Sha256: 496473dac15fd0bd088dc7e79b9b1c1ff8082dfeb82ac4ddaed6d09deeba52be

Contents?: true

Size: 1.7 KB

Versions: 5

Compression:

Stored size: 1.7 KB

Contents

module Reporter::Support::TimeRange

	def time_range?
		valid_types = [Date, DateTime, Time, ActiveSupport::TimeWithZone]
		return false unless valid_types.include?(self.begin.class)
		return false unless valid_types.include?(self.end.class)
		true
	end

	def human_name
		return inspect unless time_range?
		b = test_begin_ends(self.begin)
		e = test_begin_ends(self.end)

		if self.begin.year == self.end.year
			if b[:by] and e[:ey]
				return self.begin.strftime("%Y")
			elsif b[:bq] and e[:eq]
				bq = get_quarter(self.begin)
				eq = get_quarter(self.end)
				if bq == eq
					return I18n.t("time_range.quarter", :year => self.begin.year, :quarter => bq, :default => "q%{quarter} %{year}")
				else
					return I18n.t("time_range.multi_quarter", :year => self.begin.year,
												:begin_quarter => bq, :end_quarter => eq, :default => "q%{begin_quarter} .. q%{end_quarter} %{year}")
				end
			elsif b[:bm] and e[:em]
				if self.begin.month == self.end.month
					return self.begin.strftime("%b '%y")
				else
					return "#{self.begin.strftime("%b")} .. #{self.end.strftime("%b '%y")}"
				end
			end
		else # multi year
			if b[:by] and e[:ey]
				return "#{self.begin.strftime("'%y")} .. #{self.end.strftime("'%y")}"
			else
				return inspect
			end
		end
	end

	private

	def get_quarter(date)
		qs = [3, 6, 9, 12]
		q = qs.detect { |q| date.month <= q }
		(qs.index q) + 1
	end

	def test_begin_ends(date)
		r = {}
		["year", "quarter", "month", "week"].each do |element|
			r["b#{element.first}".to_sym] = (date.send("at_beginning_of_#{element}".to_sym) == date)
			r["e#{element.first}".to_sym] = (date.send("at_end_of_#{element}".to_sym) == date)
		end
		r
	end

end

Range.send(:include, Reporter::Support::TimeRange)

Version data entries

5 entries across 5 versions & 1 rubygems

Version Path
reporter-0.0.5 lib/reporter/support/time_range.rb
reporter-0.0.4 lib/reporter/support/time_range.rb
reporter-0.0.3 lib/reporter/support/time_range.rb
reporter-0.0.2 lib/reporter/support/time_range.rb
reporter-0.0.1 lib/reporter/support/time_range.rb