eots 0.0.3 → 0.0.4
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 +4 -4
- data/MIT-LICENSE +1 -1
- data/app/models/eots/email.rb +13 -2
- data/app/models/eots/field.rb +2 -1
- data/lib/eots/version.rb +1 -1
- data/spec/dummy/Gemfile.lock +2 -2
- data/spec/dummy/log/test.log +80 -0
- data/spec/dummy/spec/feature/end_to_end_spec.rb +15 -2
- metadata +3 -4
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 7c34e8989da8f7298f12e708af62be46a4392a2c
|
4
|
+
data.tar.gz: bbc994de39a28e60338a1075fcd64211add19425
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: ec89ba3845b92a1ac9876cb34d8d61bdab8d567f029a4fba6f284c74b60c8c8fb51f7cccb00af46587e122c44048702285715efe6124bb7beee853153c142e30
|
7
|
+
data.tar.gz: ce6ec1ca9a3ebf3d941e7498259ee37fc5d0779a5d51f11c59fc86839464907d25080cf433f3ddd7e3de00b457d100dfabd936e064bae6e255c20d45ddc587b3
|
data/MIT-LICENSE
CHANGED
data/app/models/eots/email.rb
CHANGED
@@ -1,6 +1,7 @@
|
|
1
1
|
class EOTS::Email # an instance, as opposed to the whole kind
|
2
2
|
|
3
3
|
MissingRequiredFieldsError = Class.new(RuntimeError)
|
4
|
+
MismatchedFieldError = Class.new(RuntimeError)
|
4
5
|
|
5
6
|
attr_reader :kind, :values
|
6
7
|
|
@@ -25,6 +26,7 @@ class EOTS::Email # an instance, as opposed to the whole kind
|
|
25
26
|
%w(action controller authenticity_token commit kind utf8).each { |k| values.delete k }
|
26
27
|
check_value_names(values, kind) if values.any?
|
27
28
|
check_required_fields(values, kind)
|
29
|
+
check_required_matches(values, kind)
|
28
30
|
self.new(kind, values)
|
29
31
|
end
|
30
32
|
|
@@ -46,9 +48,7 @@ class EOTS::Email # an instance, as opposed to the whole kind
|
|
46
48
|
|
47
49
|
def self.check_required_fields(values, kind)
|
48
50
|
required = kind.form_fields.values.flatten.select { |f| f.required? }.map(&:name)
|
49
|
-
puts "required: #{ required.map { |n| "#{n} (#{n.class.name})" }.join(", ") }"
|
50
51
|
given = values.keys
|
51
|
-
puts "given: #{ given.map { |n| "#{n} (#{n.class.name})" }.join(", ") }"
|
52
52
|
missing = required - given
|
53
53
|
if missing.any?
|
54
54
|
raise(MissingRequiredFieldsError,
|
@@ -56,6 +56,17 @@ class EOTS::Email # an instance, as opposed to the whole kind
|
|
56
56
|
end
|
57
57
|
end
|
58
58
|
|
59
|
+
def self.check_required_matches(values, kind)
|
60
|
+
mismatches = kind.form_fields.values.flatten.select do |f|
|
61
|
+
(reqd = f.must_match) && values[f.name] != reqd
|
62
|
+
end
|
63
|
+
if mismatches.any?
|
64
|
+
list = mismatches.map { |f| "'#{f.name}'" }.join(", ")
|
65
|
+
raise(EOTS::Email::MismatchedFieldError,
|
66
|
+
"Incorrect answers on field(s) #{list}")
|
67
|
+
end
|
68
|
+
end
|
69
|
+
|
59
70
|
def self.check_value_names(values, kind)
|
60
71
|
field_names = kind.form_fields.values.flatten.map &:name
|
61
72
|
errs = values.keys.reject { |key| field_names.include? key }
|
data/app/models/eots/field.rb
CHANGED
@@ -3,7 +3,7 @@ class EOTS::Field
|
|
3
3
|
AlreadyDefinedError = Class.new(RuntimeError)
|
4
4
|
InvalidSectionError = Class.new(RuntimeError)
|
5
5
|
|
6
|
-
attr_reader :name, :label, :caption, :section, :html_options
|
6
|
+
attr_reader :name, :label, :caption, :section, :html_options, :must_match
|
7
7
|
|
8
8
|
def initialize(name, label, options={})
|
9
9
|
@name = name.to_s
|
@@ -11,6 +11,7 @@ class EOTS::Field
|
|
11
11
|
opts = options.dup
|
12
12
|
@caption = opts.delete(:caption)
|
13
13
|
@section = opts.delete(:section) || :body
|
14
|
+
@must_match = opts.delete(:must_match)
|
14
15
|
unless [:header, :body, :footer].include? @section
|
15
16
|
raise(InvalidSectionError,
|
16
17
|
"Invalid section '#{@section}' -- must be :header, :body, or :footer")
|
data/lib/eots/version.rb
CHANGED
data/spec/dummy/Gemfile.lock
CHANGED
data/spec/dummy/log/test.log
CHANGED
@@ -695,3 +695,83 @@ Processing by EOTS::EOTSController#show as HTML
|
|
695
695
|
Rendered /Users/dave/computer/opensource/eots/app/views/eots/eots/_field.html.erb (0.2ms)
|
696
696
|
Rendered /Users/dave/computer/opensource/eots/app/views/eots/eots/show.html.erb within layouts/application (8.0ms)
|
697
697
|
Completed 200 OK in 143ms (Views: 139.9ms)
|
698
|
+
Started GET "/contact_emails/inner_kind" for 127.0.0.1 at 2016-07-24 19:17:02 -0400
|
699
|
+
Processing by EOTS::EOTSController#show as HTML
|
700
|
+
Parameters: {"kind"=>"inner_kind"}
|
701
|
+
Rendered /Users/dave/computer/opensource/eots/app/views/eots/eots/_field.html.erb (0.6ms)
|
702
|
+
Rendered /Users/dave/computer/opensource/eots/app/views/eots/eots/_field.html.erb (0.2ms)
|
703
|
+
Rendered /Users/dave/computer/opensource/eots/app/views/eots/eots/_field.html.erb (0.2ms)
|
704
|
+
Rendered /Users/dave/computer/opensource/eots/app/views/eots/eots/show.html.erb within layouts/application (6.2ms)
|
705
|
+
Completed 200 OK in 145ms (Views: 141.4ms)
|
706
|
+
Started GET "/contact_emails/inner_kind" for 127.0.0.1 at 2016-07-24 19:21:06 -0400
|
707
|
+
Processing by EOTS::EOTSController#show as HTML
|
708
|
+
Parameters: {"kind"=>"inner_kind"}
|
709
|
+
Rendered /Users/dave/computer/opensource/eots/app/views/eots/eots/_field.html.erb (0.5ms)
|
710
|
+
Rendered /Users/dave/computer/opensource/eots/app/views/eots/eots/_field.html.erb (0.2ms)
|
711
|
+
Rendered /Users/dave/computer/opensource/eots/app/views/eots/eots/_field.html.erb (0.2ms)
|
712
|
+
Rendered /Users/dave/computer/opensource/eots/app/views/eots/eots/show.html.erb within layouts/application (5.6ms)
|
713
|
+
Completed 200 OK in 141ms (Views: 137.9ms)
|
714
|
+
Started GET "/contact_emails/inner_kind" for 127.0.0.1 at 2017-06-14 12:50:50 -0400
|
715
|
+
Processing by EOTS::EOTSController#show as HTML
|
716
|
+
Parameters: {"kind"=>"inner_kind"}
|
717
|
+
Rendered /Users/dave/computer/opensource/eots/app/views/eots/eots/_field.html.erb (0.8ms)
|
718
|
+
Rendered /Users/dave/computer/opensource/eots/app/views/eots/eots/_field.html.erb (0.2ms)
|
719
|
+
Rendered /Users/dave/computer/opensource/eots/app/views/eots/eots/_field.html.erb (0.2ms)
|
720
|
+
Rendered /Users/dave/computer/opensource/eots/app/views/eots/eots/show.html.erb within layouts/application (8.6ms)
|
721
|
+
Completed 200 OK in 171ms (Views: 166.7ms)
|
722
|
+
Started GET "/contact_emails/inner_kind" for 127.0.0.1 at 2017-06-14 13:01:58 -0400
|
723
|
+
Processing by EOTS::EOTSController#show as HTML
|
724
|
+
Parameters: {"kind"=>"inner_kind"}
|
725
|
+
Rendered /Users/dave/computer/opensource/eots/app/views/eots/eots/_field.html.erb (0.6ms)
|
726
|
+
Rendered /Users/dave/computer/opensource/eots/app/views/eots/eots/_field.html.erb (0.2ms)
|
727
|
+
Rendered /Users/dave/computer/opensource/eots/app/views/eots/eots/_field.html.erb (0.2ms)
|
728
|
+
Rendered /Users/dave/computer/opensource/eots/app/views/eots/eots/show.html.erb within layouts/application (6.8ms)
|
729
|
+
Completed 200 OK in 157ms (Views: 153.7ms)
|
730
|
+
Started GET "/contact_emails/inner_kind" for 127.0.0.1 at 2017-06-14 13:03:06 -0400
|
731
|
+
Processing by EOTS::EOTSController#show as HTML
|
732
|
+
Parameters: {"kind"=>"inner_kind"}
|
733
|
+
Rendered /Users/dave/computer/opensource/eots/app/views/eots/eots/_field.html.erb (0.6ms)
|
734
|
+
Rendered /Users/dave/computer/opensource/eots/app/views/eots/eots/_field.html.erb (0.2ms)
|
735
|
+
Rendered /Users/dave/computer/opensource/eots/app/views/eots/eots/_field.html.erb (0.3ms)
|
736
|
+
Rendered /Users/dave/computer/opensource/eots/app/views/eots/eots/show.html.erb within layouts/application (5.8ms)
|
737
|
+
Completed 200 OK in 148ms (Views: 145.0ms)
|
738
|
+
Started GET "/contact_emails/inner_kind" for 127.0.0.1 at 2017-06-14 13:03:52 -0400
|
739
|
+
Processing by EOTS::EOTSController#show as HTML
|
740
|
+
Parameters: {"kind"=>"inner_kind"}
|
741
|
+
Rendered /Users/dave/computer/opensource/eots/app/views/eots/eots/_field.html.erb (0.7ms)
|
742
|
+
Rendered /Users/dave/computer/opensource/eots/app/views/eots/eots/_field.html.erb (0.3ms)
|
743
|
+
Rendered /Users/dave/computer/opensource/eots/app/views/eots/eots/_field.html.erb (0.3ms)
|
744
|
+
Rendered /Users/dave/computer/opensource/eots/app/views/eots/eots/show.html.erb within layouts/application (8.5ms)
|
745
|
+
Completed 200 OK in 168ms (Views: 164.6ms)
|
746
|
+
Started GET "/contact_emails/inner_kind" for 127.0.0.1 at 2017-06-14 13:04:44 -0400
|
747
|
+
Processing by EOTS::EOTSController#show as HTML
|
748
|
+
Parameters: {"kind"=>"inner_kind"}
|
749
|
+
Rendered /Users/dave/computer/opensource/eots/app/views/eots/eots/_field.html.erb (0.5ms)
|
750
|
+
Rendered /Users/dave/computer/opensource/eots/app/views/eots/eots/_field.html.erb (0.2ms)
|
751
|
+
Rendered /Users/dave/computer/opensource/eots/app/views/eots/eots/_field.html.erb (0.2ms)
|
752
|
+
Rendered /Users/dave/computer/opensource/eots/app/views/eots/eots/show.html.erb within layouts/application (5.7ms)
|
753
|
+
Completed 200 OK in 151ms (Views: 147.7ms)
|
754
|
+
Started GET "/contact_emails/inner_kind" for 127.0.0.1 at 2017-06-14 13:04:52 -0400
|
755
|
+
Processing by EOTS::EOTSController#show as HTML
|
756
|
+
Parameters: {"kind"=>"inner_kind"}
|
757
|
+
Rendered /Users/dave/computer/opensource/eots/app/views/eots/eots/_field.html.erb (0.5ms)
|
758
|
+
Rendered /Users/dave/computer/opensource/eots/app/views/eots/eots/_field.html.erb (0.2ms)
|
759
|
+
Rendered /Users/dave/computer/opensource/eots/app/views/eots/eots/_field.html.erb (0.2ms)
|
760
|
+
Rendered /Users/dave/computer/opensource/eots/app/views/eots/eots/show.html.erb within layouts/application (5.6ms)
|
761
|
+
Completed 200 OK in 141ms (Views: 138.6ms)
|
762
|
+
Started GET "/contact_emails/inner_kind" for 127.0.0.1 at 2017-06-14 13:05:44 -0400
|
763
|
+
Processing by EOTS::EOTSController#show as HTML
|
764
|
+
Parameters: {"kind"=>"inner_kind"}
|
765
|
+
Rendered /Users/dave/computer/opensource/eots/app/views/eots/eots/_field.html.erb (0.6ms)
|
766
|
+
Rendered /Users/dave/computer/opensource/eots/app/views/eots/eots/_field.html.erb (0.2ms)
|
767
|
+
Rendered /Users/dave/computer/opensource/eots/app/views/eots/eots/_field.html.erb (0.3ms)
|
768
|
+
Rendered /Users/dave/computer/opensource/eots/app/views/eots/eots/show.html.erb within layouts/application (5.9ms)
|
769
|
+
Completed 200 OK in 153ms (Views: 149.3ms)
|
770
|
+
Started GET "/contact_emails/inner_kind" for 127.0.0.1 at 2017-06-14 13:06:12 -0400
|
771
|
+
Processing by EOTS::EOTSController#show as HTML
|
772
|
+
Parameters: {"kind"=>"inner_kind"}
|
773
|
+
Rendered /Users/dave/computer/opensource/eots/app/views/eots/eots/_field.html.erb (0.6ms)
|
774
|
+
Rendered /Users/dave/computer/opensource/eots/app/views/eots/eots/_field.html.erb (0.2ms)
|
775
|
+
Rendered /Users/dave/computer/opensource/eots/app/views/eots/eots/_field.html.erb (0.2ms)
|
776
|
+
Rendered /Users/dave/computer/opensource/eots/app/views/eots/eots/show.html.erb within layouts/application (5.9ms)
|
777
|
+
Completed 200 OK in 143ms (Views: 140.0ms)
|
@@ -20,6 +20,10 @@ describe EOTS do
|
|
20
20
|
required: true,
|
21
21
|
section: :footer)
|
22
22
|
|
23
|
+
EOTS::field("captcha", "CAPTCHA",
|
24
|
+
must_match: "Captcha",
|
25
|
+
section: :footer)
|
26
|
+
|
23
27
|
EOTS::email_kind("general") do
|
24
28
|
EOTS::field("body", "What do you want to tell or ask us?",
|
25
29
|
type: :textarea, rows: 5, columns: 60, maxlength: 1024,
|
@@ -87,12 +91,21 @@ describe EOTS do
|
|
87
91
|
describe "#send_email" do
|
88
92
|
describe "checks requiredness of fields" do
|
89
93
|
it "barfs if any are missing" do
|
90
|
-
params = HashWithIndifferentAccess.new({ kind: "general"
|
94
|
+
params = HashWithIndifferentAccess.new({ kind: "general",
|
95
|
+
captcha: "Captcha" })
|
91
96
|
expect { EOTS::Email.create_from_params(params) }.
|
92
97
|
to raise_error(EOTS::Email::MissingRequiredFieldsError)
|
93
98
|
end
|
94
|
-
it "
|
99
|
+
it "barfs if any mismatch a required specific answer" do
|
100
|
+
params = HashWithIndifferentAccess.new({ kind: "general",
|
101
|
+
captcha: "something else",
|
102
|
+
not_spambot: true })
|
103
|
+
expect { EOTS::Email.create_from_params(params) }.
|
104
|
+
to raise_error(EOTS::Email::MismatchedFieldError)
|
105
|
+
end
|
106
|
+
it "doesn't barfs if all are supplied and correct" do
|
95
107
|
params = HashWithIndifferentAccess.new({ kind: "general",
|
108
|
+
captcha: "Captcha",
|
96
109
|
not_spambot: true })
|
97
110
|
expect { EOTS::Email.create_from_params(params) }.not_to raise_error
|
98
111
|
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: eots
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
4
|
+
version: 0.0.4
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Dave Aronson
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2017-06-14 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: rails
|
@@ -40,8 +40,7 @@ dependencies:
|
|
40
40
|
version: '0'
|
41
41
|
description: Gem to programmatically declare multiples kinds of email and automagically
|
42
42
|
construct forms, including view, routes, controller, etc.
|
43
|
-
email:
|
44
|
-
- github.2.trex@codosaur.us
|
43
|
+
email:
|
45
44
|
executables: []
|
46
45
|
extensions: []
|
47
46
|
extra_rdoc_files: []
|