express_pigeon 1.0.1 → 1.0.2

Sign up to get free protection for your applications and to get access to all the features.
data/CHANGELOG ADDED
@@ -0,0 +1,6 @@
1
+ 1.0.2
2
+
3
+ * Added support for date types and valid date strings to date of birth on
4
+ web form.
5
+ * Format the date as MM/DD/YYYY to the web form.
6
+
@@ -17,4 +17,5 @@ Gem::Specification.new do |gem|
17
17
 
18
18
  gem.add_runtime_dependency("activemodel")
19
19
  gem.add_runtime_dependency("curb-fu")
20
+ gem.add_runtime_dependency("chronic")
20
21
  end
@@ -0,0 +1,20 @@
1
+ # encoding: utf-8
2
+
3
+ require 'chronic'
4
+
5
+ module ActiveModel
6
+ module Validations
7
+ class DateFormatValidator < ActiveModel::Validator
8
+ def validate(record)
9
+
10
+ return if [DateTime, Date, Time].include? record.date_of_birth.class
11
+
12
+ return if record.date_of_birth.blank?
13
+
14
+ unless Chronic.parse(record.date_of_birth)
15
+ record.errors[:base] << (options[:message] || "is not a valid date format")
16
+ end
17
+ end
18
+ end
19
+ end
20
+ end
@@ -1,12 +1,12 @@
1
1
  require "express_pigeon/version"
2
- require 'active_support'
3
- require 'time'
4
2
  require 'active_model'
5
- require 'awesome_print'
3
+ require 'curb-fu'
4
+ require 'active_model/validations/date_format_validator'
6
5
 
7
6
  module ExpressPigeon
8
7
  class WebForm
9
8
  include ActiveModel::Validations
9
+
10
10
  include ActiveModel::Dirty
11
11
 
12
12
  define_attribute_methods [
@@ -38,31 +38,22 @@ module ExpressPigeon
38
38
  # required and just check bounds.
39
39
  validates :address1, :length => 0..255, :allow_blank => true
40
40
  validates :address2, :length => 0..255, :allow_blank => true
41
- validates :city, :length => 0..128, :allow_blank => true
42
- validates :company, :length => 0..128, :allow_blank => true
43
- validates :country, :length => 0..128, :allow_blank => true
41
+ validates :city, :length => 0..128, :allow_blank => true
42
+ validates :company, :length => 0..128, :allow_blank => true
43
+ validates :country, :length => 0..128, :allow_blank => true
44
44
 
45
45
  # now sure why we can put 255 chars into date of birth but that's what it is.
46
46
  # TODO validate and require date format, submit as MM/DD/YYYY
47
- validates :date_of_birth, :length => 0..255, :allow_blank => true
47
+ validates :date_of_birth, :length => 0..255, :allow_blank => true, :date_format => true
48
48
 
49
49
  # will email_form be a submittable field?
50
-
51
50
  validates :first_name, :length => 0..50, :allow_blank => true
52
51
  validates :last_name, :length => 0..50, :allow_blank => true
53
-
54
52
  validates :phone, :length => 0..30, :allow_blank => true
55
-
56
- # state is 48?
57
- validates :state, :length => 0..48, :allow_blank => true
58
-
53
+ validates :state, :length => 0..48, :allow_blank => true # state is 48?
59
54
  validates :title, :length => 0..30, :allow_blank => true
55
+ validates :zip, :length => 0..24, :allow_blank => true # zip is 24?
60
56
 
61
- # zip is 24?
62
- validates :zip, :length => 0..24, :allow_blank => true
63
-
64
-
65
- # TODO validate date format MM/DD/YYYY
66
57
  # TODO validate state
67
58
  # TODO validate field sizes
68
59
 
@@ -116,7 +107,7 @@ module ExpressPigeon
116
107
  :city => self.city,
117
108
  :company => self.company,
118
109
  :country => self.country,
119
- :date_of_birth => self.date_of_birth,
110
+ :date_of_birth => format_date(self.date_of_birth),
120
111
  :email => self.email,
121
112
  :first_name => self.first_name,
122
113
  :guid => self.guid,
@@ -127,11 +118,15 @@ module ExpressPigeon
127
118
  :zip => self.zip,
128
119
  }
129
120
 
130
- require 'curb-fu'
131
-
132
121
  response = CurbFu.post({:url => url}, params)
133
122
 
134
123
  response
135
124
  end
125
+
126
+ def format_date(date)
127
+ return "" if date.blank?
128
+
129
+ date.strftime("%m/%d/%Y")
130
+ end
136
131
  end
137
132
  end
@@ -1,3 +1,3 @@
1
1
  module ExpressPigeon
2
- VERSION = "1.0.1"
2
+ VERSION = "1.0.2"
3
3
  end
@@ -8,15 +8,19 @@ describe ExpressPigeon::WebForm do
8
8
  it { should validate_presence_of :email }
9
9
  it { should validate_presence_of :guid }
10
10
 
11
+
11
12
  describe "specific validations" do
12
13
  # TODO add the matchers to activemodel-rspec
13
14
  # that will make this section easier
14
15
  let(:form) do
15
- f = ExpressPigeon::WebForm.new
16
- f.guid = "51697971-48b4-45d3-ab80-3b23152999ed"
17
- f.email = "valid@just3ws.com"
18
- f.should be_valid
19
- f
16
+ wf = ExpressPigeon::WebForm.new
17
+
18
+ wf.guid = "51697971-48b4-45d3-ab80-3b23152999ed"
19
+ wf.email = "valid@just3ws.com"
20
+
21
+ wf.should be_valid
22
+
23
+ wf
20
24
  end
21
25
 
22
26
  it "checks email field" do
@@ -33,13 +37,45 @@ describe ExpressPigeon::WebForm do
33
37
  form.should_not be_valid
34
38
  end
35
39
 
40
+ it "only rejects non-date date of births" do
41
+ form.date_of_birth = "this is invalid"
42
+
43
+ form.should_not be_valid
44
+ end
45
+
46
+ it "accepts date of birth as MM/DD/YYYY" do
47
+ form.date_of_birth = "05/30/2008"
48
+ form.should be_valid
49
+ form.date_of_birth.should == "05/30/2008"
50
+ end
51
+
52
+ it "accepts a date object as date of birth" do
53
+ form.date_of_birth = Chronic.parse("2011-2-22")
54
+ form.should be_valid
55
+ form
56
+ end
57
+
58
+ it "accepts DateTime for date of birth" do
59
+ form.date_of_birth = DateTime.now
60
+ form.should be_valid
61
+ end
62
+
63
+ it "accepts Time for date of birth" do
64
+ form.date_of_birth = Time.now
65
+ form.should be_valid
66
+ end
67
+
68
+ it "accepts Date for date of birth" do
69
+ form.date_of_birth = Date.today
70
+ form.should be_valid
71
+ end
72
+
36
73
 
37
74
  {"address1" => 255,
38
75
  "address2" => 255,
39
76
  "city" => 128,
40
77
  "company" => 128,
41
78
  "country" => 128,
42
- "date_of_birth" => 255,
43
79
  "first_name" => 50,
44
80
  "last_name" => 50,
45
81
  "phone" => 30,
@@ -75,52 +111,54 @@ describe ExpressPigeon::WebForm do
75
111
 
76
112
  it "resets changed after successfully saving" do
77
113
  wf = ExpressPigeon::WebForm.new
114
+
78
115
  wf.email = "doesnt@matter.com"
79
116
  wf.guid = "doesn't matter"
117
+
80
118
  wf.stub(:push_to_express_pigeon!).and_return(true)
119
+
81
120
  wf.save
121
+
82
122
  wf.should_not be_changed
83
123
  end
84
124
 
85
125
  it "remains changed when save fails" do
86
126
  wf = ExpressPigeon::WebForm.new
127
+
87
128
  wf.email = "doesnt@matter.com"
88
129
  wf.guid = "doesn't matter"
89
130
  wf.stub(:push_to_express_pigeon!).and_return(false)
131
+
90
132
  wf.save
133
+
91
134
  wf.should be_changed
92
135
  end
93
136
  end
94
137
 
95
138
  it "pushes to expresspigeon.com", :live => true do
96
139
  wf = ExpressPigeon::WebForm.new
97
- wf.guid = "51697971-48b4-45d3-ab80-3b23152999ed"
98
-
99
- wf.first_name = "Michael"
100
- wf.last_name = "Hall"
101
-
102
- wf.email = "mdh+rspec@just3ws.com"
103
-
104
- wf.address1 = "1 Way Street"
105
- wf.address1 = "Suite #0"
106
-
107
- wf.city = "Springfield"
108
- wf.state = "Illinois"
109
- wf.zip = "60606"
110
- wf.country = "United States"
111
140
 
141
+ wf.guid = "51697971-48b4-45d3-ab80-3b23152999ed"
142
+ wf.first_name = "Michael"
143
+ wf.last_name = "Hall"
144
+ wf.email = "mdh+rspec@just3ws.com"
145
+ wf.address1 = "1 Way Street"
146
+ wf.address1 = "Suite #0"
147
+ wf.city = "Springfield"
148
+ wf.state = "Illinois"
149
+ wf.zip = "60606"
150
+ wf.country = "United States"
112
151
  wf.date_of_birth = "1/1/1900"
152
+ wf.phone = "888-555-1212"
153
+ wf.title = "Emperor of Mankind"
154
+ wf.company = "Imperium of Man"
113
155
 
114
- wf.phone = "888-555-1212"
115
-
116
- wf.title = "Emperor of Mankind"
117
- wf.company = "Imperium of Man"
118
-
156
+ wf.save
119
157
 
120
- #wf.should_receive(:push_to_express_pigeon!)
158
+ pending "Need to get the actual push to EP working first"
121
159
 
122
- wf.save
123
- pending "need to get the actual push to EP working first"
124
160
  wf.should be_changed
125
161
  end
162
+
163
+
126
164
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: express_pigeon
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.0.1
4
+ version: 1.0.2
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -9,7 +9,7 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2012-05-23 00:00:00.000000000 Z
12
+ date: 2012-05-25 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: activemodel
@@ -43,6 +43,22 @@ dependencies:
43
43
  - - ! '>='
44
44
  - !ruby/object:Gem::Version
45
45
  version: '0'
46
+ - !ruby/object:Gem::Dependency
47
+ name: chronic
48
+ requirement: !ruby/object:Gem::Requirement
49
+ none: false
50
+ requirements:
51
+ - - ! '>='
52
+ - !ruby/object:Gem::Version
53
+ version: '0'
54
+ type: :runtime
55
+ prerelease: false
56
+ version_requirements: !ruby/object:Gem::Requirement
57
+ none: false
58
+ requirements:
59
+ - - ! '>='
60
+ - !ruby/object:Gem::Version
61
+ version: '0'
46
62
  description: Light-weight wrapper around ExpressPigeon.
47
63
  email:
48
64
  - mdh@just3ws.com
@@ -55,12 +71,14 @@ files:
55
71
  - .rspec
56
72
  - .rvmrc
57
73
  - .travis.yml
74
+ - CHANGELOG
58
75
  - Gemfile
59
76
  - LICENSE
60
77
  - README.md
61
78
  - Rakefile
62
79
  - bin/console
63
80
  - express_pigeon.gemspec
81
+ - lib/active_model/validations/date_format_validator.rb
64
82
  - lib/express_pigeon.rb
65
83
  - lib/express_pigeon/version.rb
66
84
  - script/lint