1 Commits
dev ... v0.2.7

Author SHA1 Message Date
b29c232939 Merge branch 'release/v0.2.7' 2010-11-24 09:48:23 +00:00
17 changed files with 238 additions and 368 deletions

10
.gitignore vendored
View File

@@ -16,11 +16,9 @@ tmtags
## PROJECT::GENERAL ## PROJECT::GENERAL
coverage coverage
rdoc rdoc
Gemfile.lock pkg
pkg/*
*.gem
.bundle
## PROJECT::SPECIFIC ## PROJECT::SPECIFIC
.yardoc .yardoc/*
docs/* *.gemspec
doc/*

1
.rvmrc
View File

@@ -1 +0,0 @@
rvm gemset use time_ext

10
Gemfile
View File

@@ -1,4 +1,10 @@
source 'http://rubygems.org/' source 'http://rubygems.org/'
# Specify your gem's dependencies in time_ext.gemspec gem 'activesupport', '>= 2.3.0'
gemspec gem 'i18n', '>= 0.4.2'
group :development do
gem 'jeweler', '>= 1.4.0'
gem 'rspec', '>= 2.1.0'
gem 'yard', '>= 0.6.3'
end

34
Gemfile.lock Normal file
View File

@@ -0,0 +1,34 @@
GEM
remote: http://rubygems.org/
specs:
activesupport (3.0.3)
diff-lcs (1.1.2)
gemcutter (0.6.1)
git (1.2.5)
i18n (0.4.2)
jeweler (1.4.0)
gemcutter (>= 0.1.0)
git (>= 1.2.5)
rubyforge (>= 2.0.0)
json_pure (1.4.6)
rspec (2.1.0)
rspec-core (~> 2.1.0)
rspec-expectations (~> 2.1.0)
rspec-mocks (~> 2.1.0)
rspec-core (2.1.0)
rspec-expectations (2.1.0)
diff-lcs (~> 1.1.2)
rspec-mocks (2.1.0)
rubyforge (2.0.4)
json_pure (>= 1.1.7)
yard (0.6.3)
PLATFORMS
ruby
DEPENDENCIES
activesupport (>= 2.3.0)
i18n (>= 0.4.2)
jeweler (>= 1.4.0)
rspec (>= 2.1.0)
yard (>= 0.6.3)

View File

@@ -1,4 +1,4 @@
Copyright (c) 2011 Jim Myhrberg. Copyright (c) 2010 Jim Myhrberg.
Permission is hereby granted, free of charge, to any person obtaining Permission is hereby granted, free of charge, to any person obtaining
a copy of this software and associated documentation files (the a copy of this software and associated documentation files (the

View File

@@ -75,7 +75,7 @@ I recommend you read the complete class [documentation][docs] for the Time objec
## License and Copyright ## License and Copyright
Copyright (c) 2011 Jim Myhrberg. Copyright (c) 2010 Jim Myhrberg.
Permission is hereby granted, free of charge, to any person obtaining Permission is hereby granted, free of charge, to any person obtaining
a copy of this software and associated documentation files (the a copy of this software and associated documentation files (the
@@ -99,5 +99,5 @@ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
[as]: http://as.rubyonrails.org/classes/ActiveSupport/CoreExtensions/Time/Calculations.html [as]: http://as.rubyonrails.org/classes/ActiveSupport/CoreExtensions/Time/Calculations.html
[docs]: http://rdoc.info/gems/time_ext/frames [docs]: http://rdoc.info/projects/jimeh/time_ext
[rdoc.info]: http://rdoc.info/ [rdoc.info]: http://rdoc.info/

100
Rakefile
View File

@@ -1,14 +1,27 @@
require 'bundler' require 'rubygems'
Bundler::GemHelper.install_tasks require 'rake'
require 'rake/testtask' begin
require 'rake/clean' require 'jeweler'
Jeweler::Tasks.new do |gem|
gem.name = "time_ext"
gem.summary = %Q{Extends the abilities of Ruby's built-in Time class by building on top of ActiveSupport.}
gem.description = %Q{Extends the abilities of Ruby's built-in Time class by building on top of ActiveSupport.}
gem.email = "contact@jimeh.me"
gem.homepage = "http://github.com/jimeh/time_ext"
gem.authors = ["Jim Myhrberg"]
gem.add_dependency 'activesupport', '>= 2.3.0'
gem.add_dependency 'i18n', '>= 0.4.2'
gem.add_development_dependency 'jeweler', '>= 1.4.0'
gem.add_development_dependency 'rspec', '>= 2.1.0'
gem.add_development_dependency 'yard', '>= 0.6.3'
end
Jeweler::GemcutterTasks.new
rescue LoadError
puts "Jeweler (or a dependency) not available. Install it with: gem install jeweler"
end
#
# Rspec # Rspec
#
require 'rspec/core/rake_task' require 'rspec/core/rake_task'
RSpec::Core::RakeTask.new(:spec) do |spec| RSpec::Core::RakeTask.new(:spec) do |spec|
spec.pattern = 'spec/**/*_spec.rb' spec.pattern = 'spec/**/*_spec.rb'
@@ -19,70 +32,21 @@ RSpec::Core::RakeTask.new(:rcov) do |spec|
spec.rcov = true spec.rcov = true
end end
task :spec => :check_dependencies
task :default => :spec task :default => :spec
#
# Rocco
#
begin
require 'rocco/tasks'
Rocco::make 'docs/'
rescue LoadError
warn "#$! -- rocco tasks not loaded."
task :rocco
end
desc 'Build rocco docs'
task :docs => :rocco
directory 'docs/'
desc 'Build docs and open in browser for the reading'
task :read => :docs do
sh 'open docs/lib/time_ext.html'
end
# Make index.html a copy of rocco.html
file 'docs/index.html' => 'docs/lib/time_ext.html' do |f|
cp 'docs/lib/time_ext.html', 'docs/index.html', :preserve => true
end
task :docs => 'docs/index.html'
CLEAN.include 'docs/index.html'
# Alias for docs task
task :doc => :docs
# GITHUB PAGES ===============================================================
desc 'Update gh-pages branch'
task :pages => ['docs/.git', :docs] do
rev = `git rev-parse --short HEAD`.strip
Dir.chdir 'docs' do
sh "git add *"
sh "git commit -m 'rebuild pages from #{rev}'" do |ok,res|
if ok
verbose { puts "gh-pages updated" }
sh "git push -q o HEAD:gh-pages"
end
end
end
end
# Update the pages/ directory clone
file 'docs/.git' => ['docs/', '.git/refs/heads/gh-pages'] do |f|
sh "cd docs && git init -q && git remote add o ../.git" if !File.exist?(f.name)
sh "cd docs && git fetch -q o && git reset -q --hard o/gh-pages && touch ."
end
CLOBBER.include 'docs/.git'
#
# Misc.
#
desc "Start an irb console with TimeExt pre-loaded." desc "Start an irb console with TimeExt pre-loaded."
task :console do task :console do
exec "irb -r spec/spec_helper" exec "irb -r spec/spec_helper"
end end
task :c => :console task :c => :console
begin
require 'yard'
YARD::Rake::YardocTask.new
rescue LoadError
task :yardoc do
abort "YARD is not available. In order to run yardoc, you must: sudo gem install yard"
end
end

1
VERSION Normal file
View File

@@ -0,0 +1 @@
0.2.7

View File

@@ -1,7 +1 @@
# encoding: utf-8
# Enable use by:
# require 'time/ext'
# In addition to the default:
# require 'time_ext'
require 'time_ext' require 'time_ext'

View File

@@ -1,25 +1,11 @@
# encoding: utf-8
require 'rubygems' require 'rubygems'
require 'active_support' require 'active_support'
require 'time_ext/version'
# [Calculation][ca] methods such as `#floor`, `#ceil`, `#round`, # support both Active Support 2.x and 3.x
# `#prev_week` and many more, adding on top of the defaults present in require 'active_support/time' if !Time.respond_to?(:days_in_month)
# ActiveSupport.
# [ca]: /time_ext/lib/time_ext/calculations.html
require 'time_ext/calculations' require 'time_ext/calculations'
# [Iteration][it] methods allowing the use of `#each`, `#map_each` and more on
# Time objects similar to how you loop over an Array of items.
# [it]: /time_ext/lib/time_ext/iterations.html
require 'time_ext/iterations' require 'time_ext/iterations'
require 'time_ext/support'
# Core extention of [Time][ti] class to load in [Calculation][ca] and
# [Iteration][it] modules.
# [ti]: /time_ext/lib/time_ext/core_ext/time.html
require 'time_ext/core_ext/time' require 'time_ext/core_ext/time'
# Core extention of [Numeric][nu] class to set a couple of required aliases.
# [nu]: /time_ext/lib/time_ext/core_ext/numeric.html
require 'time_ext/core_ext/numeric' require 'time_ext/core_ext/numeric'

View File

@@ -1,14 +1,8 @@
# encoding: utf-8
module TimeExt module TimeExt
# Adds an even greater extent of calculation methods on top of those already # Adds an even greater extent of calculation methods on top of those already provided by ActiveSupport.
# provided by ActiveSupport.
module Calculations module Calculations
#### Public Methods # Returns a new Time representing the start of the unit specified (second by default).
# Returns a new Time representing the start of the unit specified (second
# by default).
def floor(unit = :sec) def floor(unit = :sec)
self.send("beginning_of_#{unit}") self.send("beginning_of_#{unit}")
end end
@@ -22,8 +16,7 @@ module TimeExt
alias :beginning_of_next :ceil alias :beginning_of_next :ceil
alias :at_beginning_of_next :ceil alias :at_beginning_of_next :ceil
# Returns a new Time representing the start of the current or next unit # Returns a new Time representing the start of the current or next unit specified (second by default) depending which is closest
# specified (second by default) depending which is closest
def round(unit = :sec) def round(unit = :sec)
next_unit = self.ceil(unit) next_unit = self.ceil(unit)
this_unit = self.floor(unit) this_unit = self.floor(unit)
@@ -31,14 +24,12 @@ module TimeExt
end end
alias :beginning_of_closest :round alias :beginning_of_closest :round
# Returns a new Time representing the previoius unit specified (defaults # Returns a new Time representing the previoius unit specified (defaults to second).
# to second).
def prev(unit = :sec) def prev(unit = :sec)
send("prev_#{unit}") send("prev_#{unit}")
end end
# Returns a new Time representing the next unit specified (defaults to # Returns a new Time representing the next unit specified (defaults to second).
# second).
def next(unit = :sec) def next(unit = :sec)
send("next_#{unit}") send("next_#{unit}")
end end
@@ -87,8 +78,7 @@ module TimeExt
days_since(1) days_since(1)
end end
# Returns a new Time representing the start of the given day in the # Returns a new Time representing the start of the given day in the previous week (default is Monday).
# previous week (default is Monday).
def prev_week(day = :monday) def prev_week(day = :monday)
weeks_ago(1).beginning_of_week.since(days_into_week[day].day).change(:hour => 0) weeks_ago(1).beginning_of_week.since(days_into_week[day].day).change(:hour => 0)
end end
@@ -103,28 +93,24 @@ module TimeExt
quarters_ago(1).beginning_of_quarter quarters_ago(1).beginning_of_quarter
end end
# Returns a new Time representing the time a number of specified minutes # Returns a new Time representing the time a number of specified minutes ago.
# ago.
def minutes_ago(minutes) def minutes_ago(minutes)
ago(minutes.minutes) ago(minutes.minutes)
end end
alias :mins_ago :minutes_ago alias :mins_ago :minutes_ago
# Returns a new Time representing the time a number of specified minutes # Returns a new Time representing the time a number of specified minutes in the future.
# in the future.
def minutes_since(minutes) def minutes_since(minutes)
since(minutes.minutes) since(minutes.minutes)
end end
alias :mins_since :minutes_since alias :mins_since :minutes_since
# Returns a new Time representing the time a number of specified hours # Returns a new Time representing the time a number of specified hours ago.
# ago.
def hours_ago(hours) def hours_ago(hours)
ago(hours.hours) ago(hours.hours)
end end
# Returns a new Time representing the time a number of specified hours in # Returns a new Time representing the time a number of specified hours in the future.
# the future.
def hours_since(hours) def hours_since(hours)
since(hours.hours) since(hours.hours)
end end
@@ -134,44 +120,37 @@ module TimeExt
ago(days.days) ago(days.days)
end end
# Returns a new Time representing the time a number of specified days in # Returns a new Time representing the time a number of specified days in the future.
# the future.
def days_since(days) def days_since(days)
since(days.days) since(days.days)
end end
# Returns a new Time representing the time a number of specified weeks # Returns a new Time representing the time a number of specified weeks ago.
# ago.
def weeks_ago(weeks) def weeks_ago(weeks)
ago(weeks.weeks) ago(weeks.weeks)
end end
# Returns a new Time representing the time a number of specified weeks in # Returns a new Time representing the time a number of specified weeks in the future.
# the future.
def weeks_since(weeks) def weeks_since(weeks)
since(weeks.weeks) since(weeks.weeks)
end end
# Returns a new Time representing the time a number of specified quarters # Returns a new Time representing the time a number of specified quarters (3 months) ago.
# (3 months) ago.
def quarters_ago(quarters) def quarters_ago(quarters)
ago((quarters * 3).months) ago((quarters * 3).months)
end end
# Returns a new Time representing the time a number of specified quarters # Returns a new Time representing the time a number of specified quarters (3 months) in the future.
# (3 months) in the future.
def quarters_since(quarters) def quarters_since(quarters)
since((quarters * 3).months) since((quarters * 3).months)
end end
# Returns a new Time representing the end of the unit specified (defaults # Returns a new Time representing the end of the unit specified (defaults to second).
# to second).
def end_of(unit = :sec) def end_of(unit = :sec)
send("end_of_#{unit}") send("end_of_#{unit}")
end end
# Returns a new Time representing the start of the second, XX:XX:XX.000000 # Returns a new Time representing the start of the second, XX:XX:XX.000000 (.000000000 in ruby1.9).
# (.000000000 in ruby1.9).
def beginning_of_second def beginning_of_second
change(:usec => 0) change(:usec => 0)
end end
@@ -179,8 +158,7 @@ module TimeExt
alias :at_beginning_of_sec :beginning_of_second alias :at_beginning_of_sec :beginning_of_second
alias :at_beginning_of_second :beginning_of_second alias :at_beginning_of_second :beginning_of_second
# Returns a new Time representing the end of the second, XX:XX:XX.999999 # Returns a new Time representing the end of the hour, XX:XX:XX.999999 (.999999999 in ruby1.9).
# (.999999999 in ruby1.9).
def end_of_second def end_of_second
change(:usec => 999999.999) change(:usec => 999999.999)
end end
@@ -206,25 +184,10 @@ module TimeExt
end end
alias :at_beginning_of_hour :beginning_of_hour alias :at_beginning_of_hour :beginning_of_hour
# Returns a new Time representing the end of the hour, XX:59:59.999999 # Returns a new Time representing the end of the hour, XX:59:59.999999 (.999999999 in ruby1.9).
# (.999999999 in ruby1.9).
def end_of_hour def end_of_hour
change(:min => 59, :sec => 59, :usec => 999999.999) change(:min => 59, :sec => 59, :usec => 999999.999)
end end
private
#### Private Helper Methods
# Definitive list of days in the week.
def days_into_week
defined?(DAYS_INTO_WEEK) ? DAYS_INTO_WEEK : { :monday => 0, :tuesday => 1, :wednesday => 2, :thursday => 3, :friday => 4, :saturday => 5, :sunday => 6 }
end
# Definitive list of days for each month of the year.
def common_year_days_in_month
defined?(COMMON_YEAR_DAYS_IN_MONTH) ? COMMON_YEAR_DAYS_IN_MONTH : [nil, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31]
end
end end
end end

View File

@@ -1,9 +1,3 @@
# encoding: utf-8
# Support both Active Support 2.x and 3.x, and also addresses rare loading
# issue.
require 'active_support/core_ext/numeric/time' unless Numeric.new.respond_to?(:seconds)
class Numeric class Numeric
alias :sec :seconds alias :sec :seconds
alias :min :minutes alias :min :minutes

View File

@@ -1,12 +1,5 @@
# encoding: utf-8
# Support both Active Support 2.x and 3.x, and also address rare loading
# issue.
require 'active_support/time' unless Time.respond_to?(:days_in_month)
require 'active_support/core_ext/time/calculations' unless Time.new.respond_to?(:ago)
class Time class Time
# Include TimeExt modules into Time object. include TimeExt::Support
include TimeExt::Calculations include TimeExt::Calculations
include TimeExt::Iterations include TimeExt::Iterations

View File

@@ -1,114 +1,10 @@
# encoding: utf-8
module TimeExt module TimeExt
# Allows you to iterate over Time objects with `#each` and other # Allows you to iterate over Time objects with #each and other methods almost as if it was an Array or Hash.
# methods almost as if it was an Array or Hash.
module Iterations module Iterations
#### Iterator Methods
# Executes passed block for each `unit` of time specified, with # Used by #each, #map_each and similar methods to iterate over ranges of time.
# a new time object for each interval passed to the block. def iterate(unit, options = {}, &block)
def each(unit, options = {}, &block) options.reverse_merge!(:map_result => false, :beginning_of => false, :include_start => false, :include_end => true)
iterate(unit, options.merge(:map_result => false), &block)
end
# Executes passed block for each `unit` of time specified, with
# a new time object set to the beginning of `unit` for each
# interval passed to the block.
def beginning_of_each(unit, options = {}, &block)
iterate(unit, options.merge(:map_result => false, :beginning_of => true), &block)
end
# Executes passed block for each `unit` of time specified,
# returning an array with the return values from the passed block.
def map_each(unit, options = {}, &block)
iterate(unit, options.merge(:map_result => true), &block)
end
# Executes passed block for each `unit` of time specified,
# returning an array with the return values from passed block.
# Additionally the time object passed into the block is set to
# the beginning of specified `unit`.
def map_beginning_of_each(unit, options = {}, &block)
iterate(unit, options.merge(:map_result => true, :beginning_of => true), &block)
end
#### Limiter Methods
#
# Usually chained with an iterator method to specify at which point
# in time the iterator should stop.
# Used togeter with `#each` and other iteration methods to specify
# end of interation.
def until(time, &block)
time = time.to_time if time.is_a?(::Date)
@until = time
return call_chain(block) if block_given?
self
end
alias :till :until
# Used together with `#each` and other interation methods to specify
# start of iteration, and end will be current object.
def from(time, &block)
time = time.to_time if time.is_a?(::Date)
method, args = @method_chain.pop if block_given?
if !method.nil?
time.until(self).send(method, *args, &block)
else
time.until(self)
end
end
# Let's you iterate over every unit specified in the `#each` or
# `#map_each` call for the specified unit.
def of_the(unit, &block)
@of_the = unit
return call_chain(block) if block_given?
self
end
alias :of :of_the
#### Shorthand Methods
# Dynamically define convenience methods, like `#each_hour` as a
# shorthand for `#each(:hour)`.
[:year, :month, :day, :hour, :min, :sec].each do |unit|
[:each, :beginning_of_each, :map_each, :map_beginning_of_each].each do |method|
define_method "#{method}_#{unit}" do |*args, &block|
send(method, unit, *args, &block)
end
class_eval { alias :"#{method}_minute" :"#{method}_min" } if unit == :min
class_eval { alias :"#{method}_second" :"#{method}_sec" } if unit == :sec
end
[:of_the, :of].each do |method|
define_method "#{method}_#{unit}" do |*args, &block|
send(method, unit, *args, &block)
end
class_eval { alias :"#{method}_minute" :"#{method}_min" } if unit == :min
class_eval { alias :"#{method}_second" :"#{method}_sec" } if unit == :sec
end
end
private
#### Private Helper Methods
# Default options for `#iterate`.
def default_options
{ :map_result => false,
:beginning_of => false,
:end_of => false,
:include_start => false,
:include_end => true }
end
# Used by `#each`, `#map_each` and similar methods to iterate over
# ranges of time.
def iterate(unit, opts = {}, &block)
options = default_options.merge(opts)
# Perform the grunt work of iteration.
if block_given? if block_given?
units = [:year, :month, :day, :hour, :min, :sec, :usec] units = [:year, :month, :day, :hour, :min, :sec, :usec]
parent_unit = units[units.index(unit)-1] parent_unit = units[units.index(unit)-1]
@@ -131,27 +27,76 @@ module TimeExt
time = time.send(succ_method) time = time.send(succ_method)
end end
options[:map_result] ? results : self options[:map_result] ? results : self
# If a block is not given, add itself to the chain list to be
# executed when the chain ends.
else else
add_to_chain(:iterate, unit, options) add_to_chain(:iterate, unit, options)
self self
end end
end end
# Enables chaining of iterator methods with # Used togeter with #each and other iteration methods to specify end of interation.
def add_to_chain(method, *args, &block) def until(time, &block)
@method_chain ||= [] time = time.to_time if time.is_a?(::Date)
@method_chain << [method.to_sym, args, block] @until = time
return call_chain(block) if block_given?
self
end
alias :till :until
# Used together with #each and other interation methods to specify start of iteration, and end will be current object.
def from(time, &block)
time = time.to_time if time.is_a?(::Date)
method, args = @method_chain.pop if block_given?
if !method.nil?
time.until(self).send(method, *args, &block)
else
time.until(self)
end
end end
def call_chain(custom_block = nil, &block) # Let's you iterate over every unit specified in the #each or #map call for the specified unit.
method, args, iblock = @method_chain.pop def of_the(unit, &block)
return nil if method.nil? @of_the = unit
iblock = custom_block if !custom_block.nil? return call_chain(block) if block_given?
method, args, iblock = yield(method, args, iblock) if block_given? self
self.send(method, *args, &iblock) end
alias :of :of_the
# Executes passed block for each "unit" of time specified, with a new time object for each interval passed to the block.
def each(unit, options = {}, &block)
iterate(unit, options.merge(:map_result => false), &block)
end
# Executes passed block for each "unit" of time specified, with a new time object set to the beginning of "unit" for each interval passed to the block.
def beginning_of_each(unit, options = {}, &block)
iterate(unit, options.merge(:map_result => false, :beginning_of => true), &block)
end
# Executes passed block for each "unit" of time specified, returning an array with the return values from the passed block.
def map_each(unit, options = {}, &block)
iterate(unit, options.merge(:map_result => true), &block)
end
# Executes passed block for each "unit" of time specified, returning an array with the return values from passed block. Additionally the time object passed into the block is set to the beginning of specified "unit".
def map_beginning_of_each(unit, options = {}, &block)
iterate(unit, options.merge(:map_result => true, :beginning_of => true), &block)
end
# Dynamically define convenience methods, like #each_hour instead of #each(:hour).
[:year, :month, :day, :hour, :min, :sec].each do |unit|
[:each, :beginning_of_each, :map_each, :map_beginning_of_each].each do |method|
define_method "#{method}_#{unit}" do |*args, &block|
send(method, unit, *args, &block)
end
class_eval { alias :"#{method}_minute" :"#{method}_min" } if unit == :min
class_eval { alias :"#{method}_second" :"#{method}_sec" } if unit == :sec
end
[:of_the, :of].each do |method|
define_method "#{method}_#{unit}" do |*args, &block|
send(method, unit, *args, &block)
end
class_eval { alias :"#{method}_minute" :"#{method}_min" } if unit == :min
class_eval { alias :"#{method}_second" :"#{method}_sec" } if unit == :sec
end
end end
end end

27
lib/time_ext/support.rb Normal file
View File

@@ -0,0 +1,27 @@
module TimeExt
# Provides helper methods used by TimeExt::Calculations for backwards compatibility with ActiveSupport, and method chaining helpers for TimeExt::Iterations.
module Support
def days_into_week
defined?(DAYS_INTO_WEEK) ? DAYS_INTO_WEEK : { :monday => 0, :tuesday => 1, :wednesday => 2, :thursday => 3, :friday => 4, :saturday => 5, :sunday => 6 }
end
def common_year_days_in_month
defined?(COMMON_YEAR_DAYS_IN_MONTH) ? COMMON_YEAR_DAYS_IN_MONTH : [nil, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31]
end
def add_to_chain(method, *args, &block)
@method_chain ||= []
@method_chain << [method.to_sym, args, block]
end
def call_chain(custom_block = nil, &block)
method, args, iblock = @method_chain.pop
return nil if method.nil?
iblock = custom_block if !custom_block.nil?
method, args, iblock = yield(method, args, iblock) if block_given?
self.send(method, *args, &iblock)
end
end
end

View File

@@ -1,5 +0,0 @@
# encoding: utf-8
module TimeExt
VERSION = "0.2.9"
end

View File

@@ -1,29 +0,0 @@
# -*- encoding: utf-8 -*-
$:.push File.expand_path("../lib", __FILE__)
require "time_ext/version"
Gem::Specification.new do |s|
s.name = "time_ext"
s.version = TimeExt::VERSION
s.platform = Gem::Platform::RUBY
s.authors = ["Jim Myhrberg"]
s.email = ["contact@jimeh.me"]
s.homepage = "http://github.com/jimeh/time_ext"
s.summary = "Extends the abilities of Ruby's built-in Time class by building on top of ActiveSupport."
s.description = "Extends the abilities of Ruby's built-in Time class by building on top of ActiveSupport."
s.rubyforge_project = "time_ext"
s.files = `git ls-files`.split("\n")
s.test_files = `git ls-files -- {test,spec,features}/*`.split("\n")
s.executables = `git ls-files -- bin/*`.split("\n").map{ |f| File.basename(f) }
s.require_paths = ["lib"]
s.add_runtime_dependency 'activesupport', '>= 2.3.2'
s.add_runtime_dependency 'i18n', '>= 0.4.2'
s.add_development_dependency 'rake', '>= 0.8.7'
s.add_development_dependency 'rspec', '>= 2.1.0'
s.add_development_dependency 'rocco', '>= 0.6.0'
s.add_development_dependency 'ruby-debug'
end