flex_date 0.1.0 → 0.2.0

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.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: d8c5b1d1dd3cb06b8f3fc0c101dc59f00c5c809c
4
- data.tar.gz: 6286c685d1e746ecd0c5259bd94ec3e657a7437d
3
+ metadata.gz: 9b01b6775edbff002323f99584d2216f6815d9df
4
+ data.tar.gz: fa01a22760926075bf081001c28487a968f1c794
5
5
  SHA512:
6
- metadata.gz: 1fcf79ccd39d5da8ffb6afc8bda0f1f6342d05f09e2f3e81cac52c275920a33ca93d09365f712e842601d6056d60b40ac2a0df18b7deecc8ec09aab31d48411b
7
- data.tar.gz: 01bc8e5ae933677cb05ba694d61dbd175ae18016e22c2fa15da36d14447b36bd6083d3724fce061567823f16df8cdc0d5d10d6c84caba072b1f7467b81716d96
6
+ metadata.gz: 48af31940a2e1fa2227722927e21ee3af154d1faa0fe5f9dc575bff0a6934d195c02f497b351cce9768e8745ace03df007f1a6756632b83ad3119c3b31ed1b9f
7
+ data.tar.gz: 0384c9dcadebb7edc5dc5474d674e451ba11c9df7969f8796e9408de9ce990de78b713d1c2adc3f0f36afdcbb1e6d38c51b33923fb071b31f2a1265b52595f5d
data/README.rdoc CHANGED
@@ -1,9 +1,8 @@
1
1
  = FlexDate
2
2
 
3
- Flexible dates for Ruby.
4
-
5
- <b>FlexDate is currently compatible with Rails 2.x and Rails 3.</b>
6
-
3
+ Flexible dates for Ruby, as a gem.
4
+ Originally written by Alex Reisner, packaged as a gem.
5
+ https://github.com/alexreisner/flex_date
7
6
 
8
7
  == The Problem
9
8
 
@@ -29,52 +28,28 @@ Where a full date (year, month, and day) is specified, a FlexDate behaves exactl
29
28
 
30
29
  Comparison operators also (== and <=>) work and I hope to have date arithmetic operators (+ and -) up and running soon.
31
30
 
31
+ == Date parsing
32
32
 
33
- == Installation
34
-
35
- To install FlexDate, use the standard Rails plugin installation script:
33
+ FlexDate also comes with the method `parse` where it will currently create a FlexDate object from a date string that is formatted in the following way:
36
34
 
37
- script/plugin install git://github.com/alexreisner/flex_date.git
38
-
39
-
40
- == Integration with Rails/ActiveRecord
35
+ month day year or month/day/year or month-day-year
36
+ month year or month/year or month-year
37
+ year
41
38
 
42
- The MultipartDate module facilitates integration of FlexDate with ActiveRecord models. It requires that you store each date in three separate columns, each with a _y, _m, or _d suffix. So, if you have a Person model that stores birthdays, the columns required would be (all integers):
39
+ The month can be January, Feb, or 3
40
+ The day must be an integer representing a day of the month
41
+ The year must be a 4 digit number representing a year
43
42
 
44
- birthday_y
45
- birthday_m
46
- birthday_d
47
-
48
- Then, simply put this in your Person model (you can list multiple attributes if needed):
49
-
50
- multipart_date :birthday
51
-
52
- and you'll be able to do things like this:
43
+ == Installation
53
44
 
54
- # Initialize a new Person object (don't know year they were born).
55
- p = Person.new(:birthday_m => 8, :birthday_d => 23)
56
-
57
- # See if their birthday is set.
58
- p.birthday?
59
- => true
45
+ To install FlexDate using Bundler, add it to your Gemfile.
60
46
 
61
- # Get their birthday as a FlexDate object.
62
- b = p.birthday
63
- => #<FlexDate:0xb78b542c ...>
64
-
65
- # Display their birthday nicely.
66
- p.birthday.to_s(:long)
67
- => "August 23"
68
-
69
- # Add the year when you find out.
70
- p.birthday_y = 1964
71
- p.birthday.to_s(:long)
72
- => "August 23, 1964"
73
-
47
+ gem 'flex_date', '0.1.0'
74
48
 
75
- I've also written another Rails plugin called Informant which provides a full-featured FormBuilder class, and includes a <tt>multipart_date_select</tt> field type which is a good compliment to MultipartDate in your Rails application. Install Informant from my Git repository:
76
49
 
77
- script/plugin install git://github.com/alexreisner/informant.git
50
+ == Integration with Rails/ActiveRecord
51
+
52
+ This will be packaged in a different gem called 'flex_date_rails'
78
53
 
79
54
 
80
55
  == Code Discussion
@@ -88,8 +63,6 @@ Any comments or suggestions regarding this design are welcome.
88
63
 
89
64
  == To-do List
90
65
 
91
- * <tt>MultipartDate::multipart_date</tt> should also generate a setter method.
92
66
  * Make date arithmetic work (Date minus FlexDate works, but neither FlexDate minus Date or FlexDate minus FlexDate works).
93
67
 
94
-
95
- Copyright (c) 2008 Alex Reisner (alex@alexreisner.com), released under the MIT license.
68
+ released under the MIT license.
data/Rakefile CHANGED
@@ -25,7 +25,7 @@ spec = Gem::Specification.new do |s|
25
25
 
26
26
  # Change these as appropriate
27
27
  s.name = "flex_date"
28
- s.version = "0.1.0"
28
+ s.version = "0.2.0"
29
29
  s.summary = "Flexible dates for Ruby"
30
30
  s.author = "Sean Gregory"
31
31
  s.email = "seangregory@gmail.com"
data/lib/; ADDED
@@ -0,0 +1,25 @@
1
+ module Mappings
2
+ def mapping
3
+ {:month =>
4
+ {1 => [:january, :jan, 1],
5
+ 2 => [:february, :feb, 2],
6
+ 3 => [:march, :mar, 3],
7
+ 4 => [:april, :apr, 4],
8
+ 5 => [:may, 5],
9
+ 6 => [:june, :jun, 6],
10
+ 7 => [:july, :jul, 7],
11
+ 8 => [:august, :aug, 8],
12
+ 9 => [:september, :sep, 9],
13
+ 10 => [:october, :oct, 10],
14
+
15
+
16
+
17
+ "october 21 1985"
18
+ "october 1985"
19
+ "1985"
20
+ "oct/21/1985"
21
+ "10/21/1985"
22
+ "10-1985"
23
+
24
+ end
25
+ end
data/lib/flex_date.rb CHANGED
@@ -1,6 +1,31 @@
1
+ # Original code written by Alex Reisner
2
+ # http://www.alexreisner.com/code/ruby/flex_date
3
+ # Copyright (c) 2008 Alex Reisner (alex@alexreisner.com), released under the MIT license.
4
+
5
+ require_relative 'flex_date/mappings.rb'
1
6
  require 'date'
2
7
  class FlexDate
8
+ extend Mappings
3
9
  include Comparable
10
+
11
+ ##
12
+ # parse friendly dates
13
+ # expects a format of: month day year, month year, or year
14
+ # can be delimited by spaces, "/" or "-"
15
+ ##
16
+ def self.parse(str)
17
+ one, two, three = str.split(/[\s\-\/]/)
18
+ if(!one.nil? and !two.nil? and !three.nil?)
19
+ m = parse_month(one)
20
+ return self.new(three.to_i, m, two.to_i)
21
+ elsif(!one.nil? and !two.nil?)
22
+ m = parse_month(one)
23
+ return self.new(two.to_i, m, nil)
24
+ elsif(!one.nil?)
25
+ return self.new(one.to_i)
26
+ end
27
+ end
28
+
4
29
 
5
30
  def <=>(other)
6
31
  spaceship = 0 # start assuming equal
@@ -0,0 +1,20 @@
1
+ module Mappings
2
+ MONTHS =
3
+ {1 => ['january', 'jan', '1'],
4
+ 2 => ['february', 'feb', '2'],
5
+ 3 => ['march', 'mar', '3'],
6
+ 4 => ['april', 'apr', '4'],
7
+ 5 => ['may', '5'],
8
+ 6 => ['june', 'jun', '6'],
9
+ 7 => ['july', 'jul', '7'],
10
+ 8 => ['august', 'aug', '8'],
11
+ 9 => ['september', 'sep', '9'],
12
+ 10 => ['october', 'oct', '10'],
13
+ 11 => ['november', 'nov', '11'],
14
+ 12 => ['december', 'dec', '12']}
15
+
16
+ def parse_month(month)
17
+ MONTHS.select{|k,v| v.include? month.downcase }.keys.first
18
+ end
19
+ end
20
+
@@ -59,4 +59,12 @@ class FlexDateTest < Test::Unit::TestCase
59
59
  e = FlexDate.new(1945,6)
60
60
  assert_equal [e,d,c,b,a], [b,e,a,d,c].sort
61
61
  end
62
+
63
+ def test_friendly_date_creation
64
+ assert_equal FlexDate.parse("October 21 1985"), FlexDate.new(1985,10,21)
65
+ assert_equal FlexDate.parse("Nov 2016"), FlexDate.new(2016,11)
66
+ assert_equal FlexDate.parse("2012"), FlexDate.new(2012)
67
+ assert_equal FlexDate.parse("10-21-1985"), FlexDate.new(1985,10,21)
68
+ assert_equal FlexDate.parse("10/21/1985"), FlexDate.new(1985,10,21)
69
+ end
62
70
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: flex_date
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.0
4
+ version: 0.2.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Sean Gregory
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2016-06-18 00:00:00.000000000 Z
11
+ date: 2016-06-19 00:00:00.000000000 Z
12
12
  dependencies: []
13
13
  description:
14
14
  email: seangregory@gmail.com
@@ -20,7 +20,9 @@ files:
20
20
  - MIT-LICENSE
21
21
  - README.rdoc
22
22
  - Rakefile
23
+ - lib/;
23
24
  - lib/flex_date.rb
25
+ - lib/flex_date/mappings.rb
24
26
  - test/flex_date_test.rb
25
27
  homepage: https://github.com/skinnyjames/flex_date
26
28
  licenses: []