lib/by_star/base.rb in by_star-4.0.0 vs lib/by_star/base.rb in by_star-4.0.1

- old
+ new

@@ -1,69 +1,69 @@ -module ByStar - - module Base - - include ByStar::Between - include ByStar::Directional - - def by_star_field(*args) - options = args.extract_options! - @by_star_start_field ||= args[0] - @by_star_end_field ||= args[1] - @by_star_offset ||= options[:offset] - @by_star_scope ||= options[:scope] - @by_star_index_scope ||= options[:index_scope] - end - - def by_star_offset(options = {}) - (options[:offset] || @by_star_offset || 0).seconds - end - - def by_star_start_field(options={}) - field = options[:field] || - options[:start_field] || - @by_star_start_field || - by_star_default_field - field.to_s - end - - def by_star_end_field(options={}) - field = options[:field] || - options[:end_field] || - @by_star_end_field || - by_star_start_field - field.to_s - end - - protected - - # Wrapper function which extracts time and options for each by_star query. - # Note the following syntax examples are valid: - # - # Post.by_month # defaults to current time - # Post.by_month(2, year: 2004) # February, 2004 - # Post.by_month(Time.now) - # Post.by_month(Time.now, field: "published_at") - # Post.by_month(field: "published_at") - # - def with_by_star_options(*args, &block) - options = args.extract_options!.symbolize_keys! - time = args.first || Time.zone.now - block.call(time, options) - end - - def by_star_eval_index_scope(start_time, end_time, options) - value = options[:index_scope] || @by_star_index_scope - value = value.call(start_time, end_time, options) if value.is_a?(Proc) - case value - when nil, false then nil - when Time, DateTime, Date then value.in_time_zone - when ActiveSupport::Duration then start_time - value - when Numeric then start_time - value.seconds - when :beginning_of_day - offset = options[:offset] || 0 - (start_time - offset).beginning_of_day + offset - else raise 'ByStar :index_scope option value is not a supported type.' - end - end - end -end +module ByStar + + module Base + + include ByStar::Between + include ByStar::Directional + + def by_star_field(*args) + options = args.extract_options! + @by_star_start_field ||= args[0] + @by_star_end_field ||= args[1] + @by_star_offset ||= options[:offset] + @by_star_scope ||= options[:scope] + @by_star_index_scope ||= options[:index_scope] + end + + def by_star_offset(options = {}) + (options[:offset] || @by_star_offset || 0).seconds + end + + def by_star_start_field(options={}) + field = options[:field] || + options[:start_field] || + @by_star_start_field || + by_star_default_field + field.to_s + end + + def by_star_end_field(options={}) + field = options[:field] || + options[:end_field] || + @by_star_end_field || + by_star_start_field + field.to_s + end + + protected + + # Wrapper function which extracts time and options for each by_star query. + # Note the following syntax examples are valid: + # + # Post.by_month # defaults to current time + # Post.by_month(2, year: 2004) # February, 2004 + # Post.by_month(Time.now) + # Post.by_month(Time.now, field: "published_at") + # Post.by_month(field: "published_at") + # + def with_by_star_options(*args, &block) + options = args.extract_options!.symbolize_keys! + time = args.first || Time.zone.now + block.call(time, options) + end + + def by_star_eval_index_scope(start_time, end_time, options) + value = options[:index_scope] || @by_star_index_scope + value = value.call(start_time, end_time, options) if value.is_a?(Proc) + case value + when nil, false then nil + when Time, DateTime, Date then value.in_time_zone + when ActiveSupport::Duration then start_time - value + when Numeric then start_time - value.seconds + when :beginning_of_day + offset = options[:offset] || 0 + (start_time - offset).beginning_of_day + offset + else raise 'ByStar :index_scope option value is not a supported type.' + end + end + end +end