birthday 0.0.1
Sign up to get free protection for your applications and to get access to all the features.
- data/.gitignore +7 -0
- data/.rspec +1 -0
- data/.travis.yml +13 -0
- data/Gemfile +4 -0
- data/README.md +58 -0
- data/RUNNING_UNIT_TESTS +9 -0
- data/Rakefile +9 -0
- data/birthday.gemspec +29 -0
- data/lib/birthday.rb +7 -0
- data/lib/railslove/acts/birthday/adapters/mysql2_adapter.rb +11 -0
- data/lib/railslove/acts/birthday/adapters/mysql_adapter.rb +28 -0
- data/lib/railslove/acts/birthday/adapters/postgresql_adapter.rb +26 -0
- data/lib/railslove/acts/birthday/birthday.rb +76 -0
- data/lib/railslove/acts/birthday/version.rb +7 -0
- data/spec/birthday_spec.rb +95 -0
- data/spec/database.yml +9 -0
- data/spec/schema.rb +13 -0
- data/spec/spec_helper.rb +50 -0
- metadata +186 -0
data/.gitignore
ADDED
data/.rspec
ADDED
@@ -0,0 +1 @@
|
|
1
|
+
--color
|
data/.travis.yml
ADDED
@@ -0,0 +1,13 @@
|
|
1
|
+
rvm:
|
2
|
+
- 1.8.7 # (current default)
|
3
|
+
- 1.9.2
|
4
|
+
before_script:
|
5
|
+
- "psql -c 'create database birthday_plugin_test;' -U postgres"
|
6
|
+
- "mysql -e 'create database birthday_plugin_test;'"
|
7
|
+
- "gem install rails -v 3.0.9"
|
8
|
+
- "gem install rails -v 2.3.8"
|
9
|
+
env:
|
10
|
+
- DB=mysql RAILS=3.0.9
|
11
|
+
- DB=postgres RAILS=3.0.9
|
12
|
+
- DB=mysql RAILS=2.3.8
|
13
|
+
- DB=postgres RAILS=2.3.8
|
data/Gemfile
ADDED
data/README.md
ADDED
@@ -0,0 +1,58 @@
|
|
1
|
+
# Birthday
|
2
|
+
|
3
|
+
This is a small gem that hooks into ActiveRecord and allows to tag a database field (date or datetime) as birthday, allowing to find birthdays with ease.
|
4
|
+
|
5
|
+
## How To Install
|
6
|
+
|
7
|
+
After the gem has been properly tested, it will be released on RubyGems, and will be available to be installed with:
|
8
|
+
|
9
|
+
gem install birthday
|
10
|
+
|
11
|
+
## Synopsis
|
12
|
+
|
13
|
+
Read [a blog post about the gem](http://blog.railslove.com/2011/10/17/birthday-gem-easy-anniversaries-handling-ruby/) at Railslove blog to get a comprehensive guide to usage of this gem.
|
14
|
+
|
15
|
+
### To do
|
16
|
+
|
17
|
+
* Test PostgreSQL
|
18
|
+
* kick class_eval?
|
19
|
+
* make tests more "aware" of environment
|
20
|
+
|
21
|
+
## Note on Patches/Pull Requests
|
22
|
+
|
23
|
+
* Fork the project.
|
24
|
+
* Create a feature branch
|
25
|
+
* Make your feature addition or bug fix.
|
26
|
+
* Add tests.
|
27
|
+
* Commit, do not mess with Rakefile, version, or history.
|
28
|
+
* Send me a pull request.
|
29
|
+
|
30
|
+
## Copyright
|
31
|
+
|
32
|
+
Copyright (c) 2011 Railslove
|
33
|
+
|
34
|
+
## Main contributors
|
35
|
+
|
36
|
+
* [@Holek (Mike Połtyn)](http://github.com/Holek)
|
37
|
+
|
38
|
+
## License
|
39
|
+
|
40
|
+
The MIT License
|
41
|
+
|
42
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
43
|
+
of this software and associated documentation files (the "Software"), to deal
|
44
|
+
in the Software without restriction, including without limitation the rights
|
45
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
46
|
+
copies of the Software, and to permit persons to whom the Software is
|
47
|
+
furnished to do so, subject to the following conditions:
|
48
|
+
|
49
|
+
The above copyright notice and this permission notice shall be included in
|
50
|
+
all copies or substantial portions of the Software.
|
51
|
+
|
52
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
53
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
54
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
55
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
56
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
57
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
58
|
+
THE SOFTWARE.
|
data/RUNNING_UNIT_TESTS
ADDED
@@ -0,0 +1,9 @@
|
|
1
|
+
1. Pick Rails version. Either dump this plugin in a Rails app and run it from there, or specify it as an ENV var:
|
2
|
+
|
3
|
+
RAILS=3.0.9 rspec spec/birthday_spec.rb
|
4
|
+
|
5
|
+
2. Setup your database. By default mysql is used, and no further setup is necessary. You can pick any of the listed databases in test/database.yml. Be sure to create the database first.
|
6
|
+
|
7
|
+
DB=postgres rspec spec/birthday_spec.rb
|
8
|
+
|
9
|
+
3. Profit!!
|
data/Rakefile
ADDED
data/birthday.gemspec
ADDED
@@ -0,0 +1,29 @@
|
|
1
|
+
# -*- encoding: utf-8 -*-
|
2
|
+
$:.push File.expand_path("../lib", __FILE__)
|
3
|
+
require "railslove/acts/birthday/version"
|
4
|
+
|
5
|
+
Gem::Specification.new do |s|
|
6
|
+
s.name = "birthday"
|
7
|
+
s.version = Railslove::Acts::Birthday::VERSION
|
8
|
+
s.authors = ["Mike Połtyn"]
|
9
|
+
s.email = ["mike@railslove.com"]
|
10
|
+
s.homepage = ""
|
11
|
+
s.summary = %q{Birthday gem allows to tag date and datetime fields in ActiveRecord}
|
12
|
+
s.description = %q{Birthday gem creates convienent methods for date and datetime fields in ActiveRecord, making it possible to look for birthdays without a hassle.}
|
13
|
+
|
14
|
+
s.rubyforge_project = "birthday"
|
15
|
+
|
16
|
+
s.files = `git ls-files`.split("\n")
|
17
|
+
s.test_files = `git ls-files -- {test,spec,features}/*`.split("\n")
|
18
|
+
s.executables = `git ls-files -- bin/*`.split("\n").map{ |f| File.basename(f) }
|
19
|
+
s.require_paths = ["lib"]
|
20
|
+
|
21
|
+
# specify any dependencies here; for example:
|
22
|
+
s.add_development_dependency "rake"
|
23
|
+
s.add_development_dependency "rspec"
|
24
|
+
s.add_development_dependency "mysql2", '0.3.6'
|
25
|
+
s.add_development_dependency "delorean"
|
26
|
+
s.add_development_dependency "pg"
|
27
|
+
s.add_runtime_dependency "activerecord"
|
28
|
+
s.add_runtime_dependency "activesupport"
|
29
|
+
end
|
data/lib/birthday.rb
ADDED
@@ -0,0 +1,7 @@
|
|
1
|
+
require "railslove/acts/birthday/birthday"
|
2
|
+
require "railslove/acts/birthday/adapters/mysql_adapter"
|
3
|
+
require "railslove/acts/birthday/adapters/mysql2_adapter"
|
4
|
+
require "railslove/acts/birthday/adapters/postgresql_adapter"
|
5
|
+
require "railslove/acts/birthday/version"
|
6
|
+
|
7
|
+
ActiveRecord::Base.send :include, ::Railslove::Acts::Birthday
|
@@ -0,0 +1,28 @@
|
|
1
|
+
# Birthday
|
2
|
+
module Railslove
|
3
|
+
module Acts #:nodoc:
|
4
|
+
module Birthday #:nodoc:
|
5
|
+
module Adapters
|
6
|
+
class MysqlAdapter
|
7
|
+
def self.scope_hash(field, date_start, date_end)
|
8
|
+
date_start = date_start.to_date
|
9
|
+
if ((date_end.respond_to?(:empty?) && date_end.empty?) || !date_end)
|
10
|
+
where_sql = "DATE_FORMAT(`#{field}`, '%m%d') = \"#{date_start.strftime('%m%d')}\""
|
11
|
+
else
|
12
|
+
date_end = date_end.to_date
|
13
|
+
if date_end.strftime('%m%d') < date_start.strftime('%m%d')
|
14
|
+
where_sql = "(DATE_FORMAT(`#{field}`, '%m%d') >= \"0101\""
|
15
|
+
where_sql << " AND DATE_FORMAT(`#{field}`, '%m%d') <= \"#{date_start.strftime('%m%d')}\")"
|
16
|
+
where_sql << " OR (DATE_FORMAT(`#{field}`, '%m%d') >= \"#{date_end.strftime('%m%d')}\""
|
17
|
+
where_sql << " AND DATE_FORMAT(`#{field}`, '%m%d') <= \"1231\")"
|
18
|
+
else
|
19
|
+
where_sql = "DATE_FORMAT(`#{field}`, '%m%d') >= \"#{date_start.strftime('%m%d')}\" AND DATE_FORMAT(`#{field}`, '%m%d') <= \"#{date_end.strftime('%m%d')}\""
|
20
|
+
end
|
21
|
+
end
|
22
|
+
{ :conditions => where_sql }
|
23
|
+
end
|
24
|
+
end
|
25
|
+
end
|
26
|
+
end
|
27
|
+
end
|
28
|
+
end
|
@@ -0,0 +1,26 @@
|
|
1
|
+
# Birthday
|
2
|
+
module Railslove
|
3
|
+
module Acts #:nodoc:
|
4
|
+
module Birthday #:nodoc:
|
5
|
+
module Adapters
|
6
|
+
class PostgreSQLAdapter
|
7
|
+
def self.scope_hash(field, date_start, date_end)
|
8
|
+
date_start = date_start.to_date
|
9
|
+
if ((date_end.respond_to?(:empty?) && date_end.empty?) || !date_end)
|
10
|
+
where_sql = "to_char(\"#{field}\", 'MMDD') = '#{date_start.strftime('%m%d')}'"
|
11
|
+
else
|
12
|
+
date_end = date_end.to_date
|
13
|
+
if date_end.strftime('%m%d') < date_start.strftime('%m%d')
|
14
|
+
where_sql = "to_char(\"#{field}\", 'MMDD') BETWEEN '0101' AND '#{date_end.strftime('%m%d')}'"
|
15
|
+
where_sql << "OR to_char(\"#{field}\", 'MMDD') BETWEEN '#{date_start.strftime('%m%d')}' AND '1231'"
|
16
|
+
else
|
17
|
+
where_sql = "to_char(\"#{field}\", 'MMDD') BETWEEN '#{date_start.strftime('%m%d')}' AND '#{date_end.strftime('%m%d')}'"
|
18
|
+
end
|
19
|
+
end
|
20
|
+
{ :conditions => where_sql }
|
21
|
+
end
|
22
|
+
end
|
23
|
+
end
|
24
|
+
end
|
25
|
+
end
|
26
|
+
end
|
@@ -0,0 +1,76 @@
|
|
1
|
+
# Birthday
|
2
|
+
module Railslove
|
3
|
+
module Acts #:nodoc:
|
4
|
+
module Birthday #:nodoc:
|
5
|
+
def self.included(base)
|
6
|
+
base.extend ClassMethods
|
7
|
+
end
|
8
|
+
|
9
|
+
module ClassMethods
|
10
|
+
|
11
|
+
# Expects an array of date or datetime fields. If the first object
|
12
|
+
# in passed array is a class with a class method `scope_hash`
|
13
|
+
# class SqliteAdapter
|
14
|
+
# def self.scope_hash(field, date_start, date_end)
|
15
|
+
# # do some magic and return scope hash you can use
|
16
|
+
# end
|
17
|
+
# end
|
18
|
+
#
|
19
|
+
# then this class is used as an adapter to create its scope for birthday finders.
|
20
|
+
#
|
21
|
+
# An example code in basic model would be:
|
22
|
+
#
|
23
|
+
# class Person < ActiveRecord::Base
|
24
|
+
# acts_as_birthday :birthday, :created_at
|
25
|
+
# end
|
26
|
+
#
|
27
|
+
# This will create scopes:
|
28
|
+
# Person.find_birthdays_for
|
29
|
+
# Person.find_created_ats_for
|
30
|
+
# and instance methods:
|
31
|
+
# person = Person.find(1)
|
32
|
+
# person.birthday_age => 34
|
33
|
+
# person.birthday_today? => true/false
|
34
|
+
# person.created_at_age => 2
|
35
|
+
# person.created_at_today? => true/false
|
36
|
+
def acts_as_birthday(*args)
|
37
|
+
args = args.to_a.flatten.compact
|
38
|
+
klass = args.shift if args.first.class == Class
|
39
|
+
if klass && klass.class == Class
|
40
|
+
@@_birthday_backend = klass
|
41
|
+
else
|
42
|
+
@@_birthday_backend ||= "Railslove::Acts::Birthday::Adapters::#{ActiveRecord::Base.connection.class.name.split("::").last}".constantize
|
43
|
+
end
|
44
|
+
|
45
|
+
birthday_fields = args.map(&:to_sym)
|
46
|
+
|
47
|
+
scope_method = ActiveRecord::VERSION::MAJOR == 3 ? 'scope' : 'named_scope'
|
48
|
+
|
49
|
+
birthday_fields.each do |field|
|
50
|
+
self.send(scope_method, :"find_#{field.to_s.pluralize}_for", lambda{ |*scope_args|
|
51
|
+
raise ArgumentError if scope_args.empty? or scope_args.size > 2
|
52
|
+
date_start, date_end = *scope_args
|
53
|
+
@@_birthday_backend.scope_hash(field, date_start, date_end)
|
54
|
+
})
|
55
|
+
|
56
|
+
class_eval %{
|
57
|
+
def #{field}_age
|
58
|
+
return nil unless self.#{field}?
|
59
|
+
today = Date.today
|
60
|
+
age = today.year - #{field}.year
|
61
|
+
age -= 1 if today.month < #{field}.month || (today.month == #{field}.month && today.mday < #{field}.mday)
|
62
|
+
age
|
63
|
+
end
|
64
|
+
|
65
|
+
def #{field}_today?
|
66
|
+
return nil unless self.#{field}?
|
67
|
+
Date.today.strftime('%m%d') == #{field}.strftime('%m%d')
|
68
|
+
end
|
69
|
+
}
|
70
|
+
end
|
71
|
+
end
|
72
|
+
end
|
73
|
+
|
74
|
+
end
|
75
|
+
end
|
76
|
+
end
|
@@ -0,0 +1,95 @@
|
|
1
|
+
require File.join(File.dirname(__FILE__), 'spec_helper')
|
2
|
+
|
3
|
+
class Person < ActiveRecord::Base
|
4
|
+
acts_as_birthday :birthday
|
5
|
+
end
|
6
|
+
|
7
|
+
class Marriage < ActiveRecord::Base
|
8
|
+
acts_as_birthday :anniversary
|
9
|
+
end
|
10
|
+
|
11
|
+
describe Marriage do
|
12
|
+
|
13
|
+
before :each do
|
14
|
+
@m1 = Marriage.create(:faithful => true, :anniversary => Date.parse('2009-09-09')).reload
|
15
|
+
@m2 = Marriage.create(:faithful => false, :anniversary => Date.parse('2009-08-08')).reload
|
16
|
+
end
|
17
|
+
|
18
|
+
after :each do
|
19
|
+
back_to_the_present
|
20
|
+
end
|
21
|
+
|
22
|
+
it 'check anniversary_today? correctly' do
|
23
|
+
time_travel_to Date.parse('2011-09-09')
|
24
|
+
@m1.should be_anniversary_today
|
25
|
+
@m2.should_not be_anniversary_today
|
26
|
+
end
|
27
|
+
|
28
|
+
it 'check anniversary_age correctly' do
|
29
|
+
time_travel_to Date.parse('2011-09-08')
|
30
|
+
@m1.anniversary_age.should eq(1)
|
31
|
+
@m2.anniversary_age.should eq(2)
|
32
|
+
end
|
33
|
+
|
34
|
+
it 'finds people\'s by anniversary date' do
|
35
|
+
time_travel_to Date.parse('2011-08-08')
|
36
|
+
anniversaries_today = Marriage.find_anniversaries_for(Date.today)
|
37
|
+
anniversaries_today.should_not include(@m1)
|
38
|
+
anniversaries_today.should include(@m2)
|
39
|
+
end
|
40
|
+
|
41
|
+
it 'finds people\'s by anniversary dates' do
|
42
|
+
anniversaries = Marriage.find_anniversaries_for(Date.parse('2011-08-01'), Date.parse('2011-12-12'))
|
43
|
+
anniversaries.should include(@m1)
|
44
|
+
anniversaries.should include(@m2)
|
45
|
+
end
|
46
|
+
|
47
|
+
it 'finds people\'s by anniversary dates with years overlapping' do
|
48
|
+
anniversaries = Marriage.find_anniversaries_for(Date.parse('2011-09-01'), Date.parse('2012-08-12'))
|
49
|
+
anniversaries.should include(@m1)
|
50
|
+
anniversaries.should include(@m2)
|
51
|
+
end
|
52
|
+
end
|
53
|
+
|
54
|
+
describe Person do
|
55
|
+
|
56
|
+
before :each do
|
57
|
+
@p1 = Person.create(:name => "Twilight Sparkle", :birthday => Date.parse('2006-09-09')).reload
|
58
|
+
@p2 = Person.create(:name => "Rainbow Dash", :birthday => Date.parse('2004-08-08')).reload
|
59
|
+
end
|
60
|
+
|
61
|
+
after :each do
|
62
|
+
back_to_the_present
|
63
|
+
end
|
64
|
+
|
65
|
+
it 'check birthday_today? correctly' do
|
66
|
+
time_travel_to Date.parse('2011-09-09')
|
67
|
+
@p1.should be_birthday_today
|
68
|
+
@p2.should_not be_birthday_today
|
69
|
+
end
|
70
|
+
|
71
|
+
it 'check birthday_age correctly' do
|
72
|
+
time_travel_to Date.parse('2011-09-08')
|
73
|
+
@p1.birthday_age.should eq(4)
|
74
|
+
@p2.birthday_age.should eq(7)
|
75
|
+
end
|
76
|
+
|
77
|
+
it 'finds people\'s by birthday date' do
|
78
|
+
time_travel_to Date.parse('2011-08-08')
|
79
|
+
birthdays_today = Person.find_birthdays_for(Date.today)
|
80
|
+
birthdays_today.should_not include(@p1)
|
81
|
+
birthdays_today.should include(@p2)
|
82
|
+
end
|
83
|
+
|
84
|
+
it 'finds people\'s by birthday dates' do
|
85
|
+
birthdays = Person.find_birthdays_for(Date.parse('2011-08-01'), Date.parse('2011-12-12'))
|
86
|
+
birthdays.should include(@p1)
|
87
|
+
birthdays.should include(@p2)
|
88
|
+
end
|
89
|
+
|
90
|
+
it 'finds people\'s by birthday dates with years overlapping' do
|
91
|
+
birthdays = Person.find_birthdays_for(Date.parse('2011-09-01'), Date.parse('2012-08-12'))
|
92
|
+
birthdays.should include(@p1)
|
93
|
+
birthdays.should include(@p2)
|
94
|
+
end
|
95
|
+
end
|
data/spec/database.yml
ADDED
data/spec/schema.rb
ADDED
@@ -0,0 +1,13 @@
|
|
1
|
+
ActiveRecord::Schema.define(:version => 1) do
|
2
|
+
|
3
|
+
create_table :people, :force => true do |t|
|
4
|
+
t.column :name, :string
|
5
|
+
t.column :birthday, :date
|
6
|
+
end
|
7
|
+
|
8
|
+
create_table :marriages, :force => true do |t|
|
9
|
+
t.column :faithful, :boolean
|
10
|
+
t.column :anniversary, :datetime
|
11
|
+
end
|
12
|
+
|
13
|
+
end
|
data/spec/spec_helper.rb
ADDED
@@ -0,0 +1,50 @@
|
|
1
|
+
$:.unshift(File.dirname(__FILE__))
|
2
|
+
$:.unshift(File.join(File.dirname(__FILE__), '..', 'lib'))
|
3
|
+
|
4
|
+
require 'test/unit'
|
5
|
+
require 'rubygems'
|
6
|
+
require 'rspec'
|
7
|
+
|
8
|
+
def fixture(file_name)
|
9
|
+
File.read(fixture_path(file_name))
|
10
|
+
end
|
11
|
+
|
12
|
+
def fixture_path(file_name)
|
13
|
+
File.expand_path(File.dirname(__FILE__)) + "/fixtures/#{file_name}"
|
14
|
+
end
|
15
|
+
|
16
|
+
if ENV['RAILS'].nil?
|
17
|
+
require File.expand_path(File.join(File.dirname(__FILE__), '../../../../config/environment.rb'))
|
18
|
+
else
|
19
|
+
# specific rails version targeted
|
20
|
+
# load activerecord and activesupport and plugin manually
|
21
|
+
require 'active_record'
|
22
|
+
require 'active_support'
|
23
|
+
$LOAD_PATH << File.join(File.dirname(__FILE__), '..', 'lib')
|
24
|
+
Dir["#{$LOAD_PATH.last}/**/*.rb"].each do |path|
|
25
|
+
require path[$LOAD_PATH.last.size + 1..-1]
|
26
|
+
end
|
27
|
+
require "railslove/acts/birthday/birthday"
|
28
|
+
end
|
29
|
+
require 'delorean'
|
30
|
+
require 'yaml'
|
31
|
+
config = YAML::load(IO.read(File.dirname(__FILE__) + '/database.yml'))
|
32
|
+
adapter = ENV['DB'] || 'mysql'
|
33
|
+
case adapter
|
34
|
+
when 'mysql'
|
35
|
+
require 'mysql2'
|
36
|
+
when 'postgres'
|
37
|
+
require 'pg'
|
38
|
+
else
|
39
|
+
require adapter
|
40
|
+
end
|
41
|
+
|
42
|
+
ActiveRecord::Base.configurations.update config
|
43
|
+
ActiveRecord::Base.establish_connection(adapter)
|
44
|
+
ActiveRecord::Base.default_timezone = :utc
|
45
|
+
|
46
|
+
load(File.dirname(__FILE__) + "/schema.rb")
|
47
|
+
|
48
|
+
RSpec.configure do |config|
|
49
|
+
config.include Delorean
|
50
|
+
end
|
metadata
ADDED
@@ -0,0 +1,186 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: birthday
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
hash: 29
|
5
|
+
prerelease:
|
6
|
+
segments:
|
7
|
+
- 0
|
8
|
+
- 0
|
9
|
+
- 1
|
10
|
+
version: 0.0.1
|
11
|
+
platform: ruby
|
12
|
+
authors:
|
13
|
+
- "Mike Po\xC5\x82tyn"
|
14
|
+
autorequire:
|
15
|
+
bindir: bin
|
16
|
+
cert_chain: []
|
17
|
+
|
18
|
+
date: 2011-10-28 00:00:00 Z
|
19
|
+
dependencies:
|
20
|
+
- !ruby/object:Gem::Dependency
|
21
|
+
name: rake
|
22
|
+
prerelease: false
|
23
|
+
requirement: &id001 !ruby/object:Gem::Requirement
|
24
|
+
none: false
|
25
|
+
requirements:
|
26
|
+
- - ">="
|
27
|
+
- !ruby/object:Gem::Version
|
28
|
+
hash: 3
|
29
|
+
segments:
|
30
|
+
- 0
|
31
|
+
version: "0"
|
32
|
+
type: :development
|
33
|
+
version_requirements: *id001
|
34
|
+
- !ruby/object:Gem::Dependency
|
35
|
+
name: rspec
|
36
|
+
prerelease: false
|
37
|
+
requirement: &id002 !ruby/object:Gem::Requirement
|
38
|
+
none: false
|
39
|
+
requirements:
|
40
|
+
- - ">="
|
41
|
+
- !ruby/object:Gem::Version
|
42
|
+
hash: 3
|
43
|
+
segments:
|
44
|
+
- 0
|
45
|
+
version: "0"
|
46
|
+
type: :development
|
47
|
+
version_requirements: *id002
|
48
|
+
- !ruby/object:Gem::Dependency
|
49
|
+
name: mysql2
|
50
|
+
prerelease: false
|
51
|
+
requirement: &id003 !ruby/object:Gem::Requirement
|
52
|
+
none: false
|
53
|
+
requirements:
|
54
|
+
- - "="
|
55
|
+
- !ruby/object:Gem::Version
|
56
|
+
hash: 31
|
57
|
+
segments:
|
58
|
+
- 0
|
59
|
+
- 3
|
60
|
+
- 6
|
61
|
+
version: 0.3.6
|
62
|
+
type: :development
|
63
|
+
version_requirements: *id003
|
64
|
+
- !ruby/object:Gem::Dependency
|
65
|
+
name: delorean
|
66
|
+
prerelease: false
|
67
|
+
requirement: &id004 !ruby/object:Gem::Requirement
|
68
|
+
none: false
|
69
|
+
requirements:
|
70
|
+
- - ">="
|
71
|
+
- !ruby/object:Gem::Version
|
72
|
+
hash: 3
|
73
|
+
segments:
|
74
|
+
- 0
|
75
|
+
version: "0"
|
76
|
+
type: :development
|
77
|
+
version_requirements: *id004
|
78
|
+
- !ruby/object:Gem::Dependency
|
79
|
+
name: pg
|
80
|
+
prerelease: false
|
81
|
+
requirement: &id005 !ruby/object:Gem::Requirement
|
82
|
+
none: false
|
83
|
+
requirements:
|
84
|
+
- - ">="
|
85
|
+
- !ruby/object:Gem::Version
|
86
|
+
hash: 3
|
87
|
+
segments:
|
88
|
+
- 0
|
89
|
+
version: "0"
|
90
|
+
type: :development
|
91
|
+
version_requirements: *id005
|
92
|
+
- !ruby/object:Gem::Dependency
|
93
|
+
name: activerecord
|
94
|
+
prerelease: false
|
95
|
+
requirement: &id006 !ruby/object:Gem::Requirement
|
96
|
+
none: false
|
97
|
+
requirements:
|
98
|
+
- - ">="
|
99
|
+
- !ruby/object:Gem::Version
|
100
|
+
hash: 3
|
101
|
+
segments:
|
102
|
+
- 0
|
103
|
+
version: "0"
|
104
|
+
type: :runtime
|
105
|
+
version_requirements: *id006
|
106
|
+
- !ruby/object:Gem::Dependency
|
107
|
+
name: activesupport
|
108
|
+
prerelease: false
|
109
|
+
requirement: &id007 !ruby/object:Gem::Requirement
|
110
|
+
none: false
|
111
|
+
requirements:
|
112
|
+
- - ">="
|
113
|
+
- !ruby/object:Gem::Version
|
114
|
+
hash: 3
|
115
|
+
segments:
|
116
|
+
- 0
|
117
|
+
version: "0"
|
118
|
+
type: :runtime
|
119
|
+
version_requirements: *id007
|
120
|
+
description: Birthday gem creates convienent methods for date and datetime fields in ActiveRecord, making it possible to look for birthdays without a hassle.
|
121
|
+
email:
|
122
|
+
- mike@railslove.com
|
123
|
+
executables: []
|
124
|
+
|
125
|
+
extensions: []
|
126
|
+
|
127
|
+
extra_rdoc_files: []
|
128
|
+
|
129
|
+
files:
|
130
|
+
- .gitignore
|
131
|
+
- .rspec
|
132
|
+
- .travis.yml
|
133
|
+
- Gemfile
|
134
|
+
- README.md
|
135
|
+
- RUNNING_UNIT_TESTS
|
136
|
+
- Rakefile
|
137
|
+
- birthday.gemspec
|
138
|
+
- lib/birthday.rb
|
139
|
+
- lib/railslove/acts/birthday/adapters/mysql2_adapter.rb
|
140
|
+
- lib/railslove/acts/birthday/adapters/mysql_adapter.rb
|
141
|
+
- lib/railslove/acts/birthday/adapters/postgresql_adapter.rb
|
142
|
+
- lib/railslove/acts/birthday/birthday.rb
|
143
|
+
- lib/railslove/acts/birthday/version.rb
|
144
|
+
- spec/birthday_spec.rb
|
145
|
+
- spec/database.yml
|
146
|
+
- spec/schema.rb
|
147
|
+
- spec/spec_helper.rb
|
148
|
+
homepage: ""
|
149
|
+
licenses: []
|
150
|
+
|
151
|
+
post_install_message:
|
152
|
+
rdoc_options: []
|
153
|
+
|
154
|
+
require_paths:
|
155
|
+
- lib
|
156
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
157
|
+
none: false
|
158
|
+
requirements:
|
159
|
+
- - ">="
|
160
|
+
- !ruby/object:Gem::Version
|
161
|
+
hash: 3
|
162
|
+
segments:
|
163
|
+
- 0
|
164
|
+
version: "0"
|
165
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
166
|
+
none: false
|
167
|
+
requirements:
|
168
|
+
- - ">="
|
169
|
+
- !ruby/object:Gem::Version
|
170
|
+
hash: 3
|
171
|
+
segments:
|
172
|
+
- 0
|
173
|
+
version: "0"
|
174
|
+
requirements: []
|
175
|
+
|
176
|
+
rubyforge_project: birthday
|
177
|
+
rubygems_version: 1.8.6
|
178
|
+
signing_key:
|
179
|
+
specification_version: 3
|
180
|
+
summary: Birthday gem allows to tag date and datetime fields in ActiveRecord
|
181
|
+
test_files:
|
182
|
+
- spec/birthday_spec.rb
|
183
|
+
- spec/database.yml
|
184
|
+
- spec/schema.rb
|
185
|
+
- spec/spec_helper.rb
|
186
|
+
has_rdoc:
|