birthday 0.1.0 → 0.1.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- data/README.md +70 -4
- data/lib/railslove/acts/birthday/birthday.rb +1 -0
- data/lib/railslove/acts/birthday/version.rb +1 -1
- metadata +4 -4
data/README.md
CHANGED
|
@@ -4,19 +4,78 @@ This is a small gem that hooks into ActiveRecord and allows to tag a database fi
|
|
|
4
4
|
|
|
5
5
|
## How To Install
|
|
6
6
|
|
|
7
|
-
|
|
7
|
+
To install this gem, fire this command from your terminal:
|
|
8
8
|
|
|
9
9
|
gem install birthday
|
|
10
10
|
|
|
11
|
-
or
|
|
11
|
+
or add this line to your Gemfile:
|
|
12
12
|
|
|
13
13
|
gem 'birthday', '~> 0.1.0'
|
|
14
14
|
|
|
15
15
|
## Synopsis
|
|
16
16
|
|
|
17
|
-
|
|
17
|
+
After installing this gem, you are able to work with anniversaries, such as birthdays in such a manner:
|
|
18
18
|
|
|
19
|
-
|
|
19
|
+
class User < ActiveRecord::Base
|
|
20
|
+
|
|
21
|
+
acts_as_birthday :birthday
|
|
22
|
+
|
|
23
|
+
end
|
|
24
|
+
|
|
25
|
+
Add `acts_as_birthday :field_name` to your ActiveRecord model (or symbols for multiple fields, if you need to), and right away you can access methods:
|
|
26
|
+
|
|
27
|
+
* `birthday_age` - which will calculate current anniversary/age from the point in time,
|
|
28
|
+
* `birthday_today?` - which will return true or false, depending on whether the anniversary happens today.
|
|
29
|
+
|
|
30
|
+
### Created instance methods
|
|
31
|
+
|
|
32
|
+
If you add more fields to `acts_as_birthday` method, like:
|
|
33
|
+
|
|
34
|
+
acts_as_birthday :birthday, :anniversary, :something_else
|
|
35
|
+
|
|
36
|
+
it will automatically create methods: `birthday_age`, `birthday_today?`, `anniversary_age`, `anniversary_today?`, `something_else_age`, `something_else_today?`.
|
|
37
|
+
|
|
38
|
+
### Created scopes
|
|
39
|
+
|
|
40
|
+
On top of that you get useful scopes: `find_birthdays_for`, `find_anniversaries_for` and `find_something_elses_for`.
|
|
41
|
+
|
|
42
|
+
These scopes accept maximum of two parameters, which have to respond to method `to_date` (by default objects of class Date, Time and DateTime). Thanks to these now you can search for birthdays...
|
|
43
|
+
|
|
44
|
+
* on a specific date:
|
|
45
|
+
|
|
46
|
+
> User.find_birthdays_for(Date.parse('04-04-2000'))
|
|
47
|
+
=> [#<User id: 23, birthday: "1961-04-04">, #<User id: 34, birthday: "1985-04-04">]
|
|
48
|
+
|
|
49
|
+
* between a specific range:
|
|
50
|
+
|
|
51
|
+
> User.find_birthdays_for(Date.parse('04-04-2000'), Date.parse('05-04-2000'))
|
|
52
|
+
=> [#<User id: 23, birthday: "1961-04-04">, #<User id: 34, birthday: "1985-04-04">, #<User id: 56, birthday: "1976-04-24">, #<User id: 57, birthday: "1958-04-30">, #<User id: 60, birthday: "1986-05-04">]
|
|
53
|
+
|
|
54
|
+
* and even at the turn of the years:
|
|
55
|
+
|
|
56
|
+
# This will search for birthdays between 12.12 and 3.01
|
|
57
|
+
> User.find_birthdays_for(Date.parse('12-12-2000'), Date.parse('03-01-2001'))
|
|
58
|
+
=> [#<User id: 1, birthday: "1961-12-14">, #<User id: 12, birthday: "1985-12-15">, #<User id: 25, birthday: "1961-12-24">, #<User id: 27, birthday: "1985-01-01">, #<User id: 40, birthday: "1961-01-02">]
|
|
59
|
+
|
|
60
|
+
Since all these are essentially scopes, there's nothing stopping you from chaining them with other scopes:
|
|
61
|
+
|
|
62
|
+
class User < ActiveRecord::Base
|
|
63
|
+
|
|
64
|
+
acts_as_birthday :birthday
|
|
65
|
+
|
|
66
|
+
scope :admins, {:is_admin => true}
|
|
67
|
+
scope :named_like, lambda { |name| { :conditions => [ "first_name LIKE :q OR email LIKE :q OR last_name LIKE :q", { :q => "%#{name}%" } ] } }
|
|
68
|
+
|
|
69
|
+
end
|
|
70
|
+
|
|
71
|
+
|
|
72
|
+
> User.admins.named_like("Mike").find_birthdays_for(Date.parse('12-12-2000'), Date.parse('03-01-2001'))
|
|
73
|
+
|
|
74
|
+
### Your own adapters
|
|
75
|
+
|
|
76
|
+
At this moment, this gem supports only MySQL and PostgreSQL databases. If you want to support another type of database (perhaps SQLite), you can write your own adapter.
|
|
77
|
+
|
|
78
|
+
You can create your own birthday adapters for the ORM adapters we're not supporting yet by writing a class with a class method `scope_hash`, which will return a hash normally used in `active_record` scopes.
|
|
20
79
|
|
|
21
80
|
module Railslove
|
|
22
81
|
module Acts
|
|
@@ -36,6 +95,8 @@ You can create your own adapters for the ORM adapters we're not supporting yet b
|
|
|
36
95
|
|
|
37
96
|
With this namespacing (`Railslove::Acts::Birthday::Adapter`) and naming the class after `active_record`'s ORM adapter (like `SqliteAdapter` in the example above) you can automatically use your own adapters with this gem.
|
|
38
97
|
|
|
98
|
+
If you happen to write one of the adapters, don't hesitate to [make a pull request](https://github.com/railslove/birthday/pull/new/master)! You will help the whole Ruby community with it!
|
|
99
|
+
|
|
39
100
|
### To do
|
|
40
101
|
|
|
41
102
|
* kick class_eval?
|
|
@@ -58,6 +119,11 @@ Copyright (c) 2011 Railslove
|
|
|
58
119
|
* [@Holek (Mike Połtyn)](http://github.com/Holek)
|
|
59
120
|
* [@Bumi (Michael Bumann)](http://github.com/bumi)
|
|
60
121
|
|
|
122
|
+
## External links
|
|
123
|
+
|
|
124
|
+
* [Railslove blog post about the usage of this gem](http://blog.railslove.com/2011/10/17/birthday-gem-easy-anniversaries-handling-ruby/)
|
|
125
|
+
* [Rubygems.org site for `birthday` gem](http://rubygems.org/gems/birthday)
|
|
126
|
+
|
|
61
127
|
## License
|
|
62
128
|
|
|
63
129
|
The MIT License
|
metadata
CHANGED
|
@@ -1,13 +1,13 @@
|
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
|
2
2
|
name: birthday
|
|
3
3
|
version: !ruby/object:Gem::Version
|
|
4
|
-
hash:
|
|
4
|
+
hash: 25
|
|
5
5
|
prerelease:
|
|
6
6
|
segments:
|
|
7
7
|
- 0
|
|
8
8
|
- 1
|
|
9
|
-
-
|
|
10
|
-
version: 0.1.
|
|
9
|
+
- 1
|
|
10
|
+
version: 0.1.1
|
|
11
11
|
platform: ruby
|
|
12
12
|
authors:
|
|
13
13
|
- "Mike Po\xC5\x82tyn"
|
|
@@ -15,7 +15,7 @@ autorequire:
|
|
|
15
15
|
bindir: bin
|
|
16
16
|
cert_chain: []
|
|
17
17
|
|
|
18
|
-
date: 2011-11-
|
|
18
|
+
date: 2011-11-23 00:00:00 Z
|
|
19
19
|
dependencies:
|
|
20
20
|
- !ruby/object:Gem::Dependency
|
|
21
21
|
name: rake
|