hungryform 0.0.4 → 0.0.6
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/.gitignore +6 -1
- data/.rspec +0 -1
- data/.ruby-version +1 -0
- data/.travis.yml +5 -0
- data/README.md +72 -43
- data/Rakefile +3 -4
- data/hungryform.gemspec +4 -4
- data/lib/hungryform/configuration.rb +31 -0
- data/lib/hungryform/elements/base/active_element.rb +44 -36
- data/lib/hungryform/elements/base/element.rb +40 -49
- data/lib/hungryform/elements/base/group.rb +74 -71
- data/lib/hungryform/elements/base/hashable.rb +32 -30
- data/lib/hungryform/elements/base/options_element.rb +28 -24
- data/lib/hungryform/elements/html.rb +1 -1
- data/lib/hungryform/elements/page.rb +4 -0
- data/lib/hungryform/elements/radio_group.rb +1 -1
- data/lib/hungryform/elements/select_field.rb +14 -18
- data/lib/hungryform/elements/{text_area_field.rb → text_area.rb} +1 -1
- data/lib/hungryform/elements.rb +9 -1
- data/lib/hungryform/exceptions.rb +3 -0
- data/lib/hungryform/form.rb +32 -2
- data/lib/hungryform/resolver.rb +14 -16
- data/lib/hungryform/version.rb +1 -1
- data/lib/hungryform.rb +22 -5
- data/spec/elements/group_spec.rb +10 -1
- data/spec/elements/html_spec.rb +11 -9
- data/spec/elements/page_spec.rb +10 -7
- data/spec/elements/radio_group_spec.rb +9 -15
- data/spec/elements/select_field_spec.rb +19 -33
- data/spec/elements/shared_examples/active_element.rb +52 -0
- data/spec/elements/shared_examples/element.rb +42 -0
- data/spec/elements/shared_examples/group.rb +31 -0
- data/spec/elements/shared_examples/options_element.rb +24 -0
- data/spec/elements/text_area_spec.rb +14 -0
- data/spec/elements/text_field_spec.rb +10 -3
- data/spec/form_spec.rb +68 -1
- data/spec/resolver_spec.rb +7 -7
- data/spec/spec_helper.rb +4 -2
- metadata +29 -40
- data/Gemfile.lock +0 -52
- data/spec/elements/text_area_field_spec.rb +0 -7
- data/spec/support/shared_active_element.rb +0 -65
- data/spec/support/shared_element.rb +0 -62
- data/spec/support/shared_group.rb +0 -42
- data/spec/support/shared_options_element.rb +0 -36
@@ -0,0 +1,42 @@
|
|
1
|
+
RSpec.shared_examples "an element" do
|
2
|
+
describe "#visible?" do
|
3
|
+
it "should be visible" do
|
4
|
+
expect(subject.visible?).to eq true
|
5
|
+
end
|
6
|
+
|
7
|
+
it "should not be visible" do
|
8
|
+
options[:visible] = false
|
9
|
+
expect(subject.visible?).to eq false
|
10
|
+
end
|
11
|
+
|
12
|
+
context "when dependency is present" do
|
13
|
+
it "should not be visible" do
|
14
|
+
options[:dependency] = { eq: [0, 1] }
|
15
|
+
expect(subject.visible?).to eq false
|
16
|
+
end
|
17
|
+
|
18
|
+
it "should be visible" do
|
19
|
+
options[:dependency] = { eq: [1, 1] }
|
20
|
+
expect(subject.visible?).to eq true
|
21
|
+
end
|
22
|
+
end
|
23
|
+
end
|
24
|
+
|
25
|
+
describe "#label" do
|
26
|
+
it "should have a humanized label based on element's name" do
|
27
|
+
expect(subject.label).to eq "Element name"
|
28
|
+
end
|
29
|
+
|
30
|
+
it "should have a label defined in options" do
|
31
|
+
options[:label] = "Special Label"
|
32
|
+
expect(subject.label).to eq "Special Label"
|
33
|
+
end
|
34
|
+
end
|
35
|
+
|
36
|
+
describe "#to_hash" do
|
37
|
+
it "should include visible, dependency, name and label" do
|
38
|
+
options.merge!(dependency: { eq: [1, 1] }, name: 'name')
|
39
|
+
expect(subject.to_hash).to include(:visible, :dependency, :name, :label)
|
40
|
+
end
|
41
|
+
end
|
42
|
+
end
|
@@ -0,0 +1,31 @@
|
|
1
|
+
RSpec.shared_examples "a group" do
|
2
|
+
describe "#group" do
|
3
|
+
it "creates a nested group" do
|
4
|
+
subject.group(:nested, {}) {}
|
5
|
+
expect(subject.elements.first.class).to eq HungryForm::Elements::Group
|
6
|
+
end
|
7
|
+
|
8
|
+
it "concatenates nested element's name with the parent's one" do
|
9
|
+
subject.group(:nested, {}) {}
|
10
|
+
expect(subject.elements.first.name).to end_with "element_name_nested"
|
11
|
+
end
|
12
|
+
end
|
13
|
+
|
14
|
+
describe "#to_hash" do
|
15
|
+
it "should include group elements" do
|
16
|
+
expect(subject.to_hash).to include(:elements)
|
17
|
+
end
|
18
|
+
end
|
19
|
+
|
20
|
+
describe ".method_missing" do
|
21
|
+
it "creates a nested element" do
|
22
|
+
subject.html(:name)
|
23
|
+
expect(subject.elements.first.class).to eq HungryForm::Elements::Html
|
24
|
+
end
|
25
|
+
|
26
|
+
it "concatenates nested element's name with the parent's one" do
|
27
|
+
subject.html(:html)
|
28
|
+
expect(subject.elements.first.name).to end_with "element_name_html"
|
29
|
+
end
|
30
|
+
end
|
31
|
+
end
|
@@ -0,0 +1,24 @@
|
|
1
|
+
RSpec.shared_examples "an element with options" do
|
2
|
+
describe ".new" do
|
3
|
+
it "should raise an exception if there is no options provided" do
|
4
|
+
options.delete(:options)
|
5
|
+
expect { described_class.new(:element_name, group, resolver, options) }.to raise_error(HungryForm::HungryFormException)
|
6
|
+
end
|
7
|
+
|
8
|
+
it "should have options" do
|
9
|
+
options[:options] = {"1" => "First", "2" => "Last"}
|
10
|
+
expect(subject.options).to eq({"1" => "First", "2" => "Last"})
|
11
|
+
end
|
12
|
+
|
13
|
+
it "should convert options to hash" do
|
14
|
+
options[:options] = ->(el) {{"1" => "First", "2" => "Last"}}
|
15
|
+
expect(subject.options).to eq({"1" => "First", "2" => "Last"})
|
16
|
+
end
|
17
|
+
end
|
18
|
+
|
19
|
+
describe "#to_hash" do
|
20
|
+
it "should include options" do
|
21
|
+
expect(subject.to_hash).to include(:options)
|
22
|
+
end
|
23
|
+
end
|
24
|
+
end
|
@@ -0,0 +1,14 @@
|
|
1
|
+
require "spec_helper"
|
2
|
+
|
3
|
+
describe HungryForm::Elements::TextArea do
|
4
|
+
let(:resolver_options) { {} }
|
5
|
+
let(:resolver) { HungryForm::Resolver.new(resolver_options) }
|
6
|
+
let(:group_options) { {} }
|
7
|
+
let(:group) { HungryForm::Elements::Group.new(:group, nil, resolver, group_options) {} }
|
8
|
+
let(:options) { {} }
|
9
|
+
|
10
|
+
subject { HungryForm::Elements::TextArea.new(:element_name, group, resolver, options) {} }
|
11
|
+
|
12
|
+
it_behaves_like 'an element'
|
13
|
+
it_behaves_like 'an active element'
|
14
|
+
end
|
@@ -1,7 +1,14 @@
|
|
1
1
|
require "spec_helper"
|
2
2
|
|
3
3
|
describe HungryForm::Elements::TextField do
|
4
|
-
|
5
|
-
|
6
|
-
|
4
|
+
let(:resolver_options) { {} }
|
5
|
+
let(:resolver) { HungryForm::Resolver.new(resolver_options) }
|
6
|
+
let(:group_options) { {} }
|
7
|
+
let(:group) { HungryForm::Elements::Group.new(:group, nil, resolver, group_options) {} }
|
8
|
+
let(:options) { {} }
|
9
|
+
|
10
|
+
subject { HungryForm::Elements::TextField.new(:element_name, group, resolver, options) {} }
|
11
|
+
|
12
|
+
it_behaves_like 'an element'
|
13
|
+
it_behaves_like 'an active element'
|
7
14
|
end
|
data/spec/form_spec.rb
CHANGED
@@ -15,7 +15,7 @@ describe HungryForm do
|
|
15
15
|
subject do
|
16
16
|
HungryForm::Form.new(options) do
|
17
17
|
page :first do
|
18
|
-
text_field :first_name
|
18
|
+
text_field :first_name, required: true
|
19
19
|
text_field :last_name
|
20
20
|
end
|
21
21
|
page :second, visible: false do
|
@@ -37,6 +37,28 @@ describe HungryForm do
|
|
37
37
|
end
|
38
38
|
end
|
39
39
|
|
40
|
+
describe ".configure" do
|
41
|
+
it "sets a new views prefix" do
|
42
|
+
HungryForm.configure do |config|
|
43
|
+
config.views_prefix = '/new/prefix'
|
44
|
+
end
|
45
|
+
|
46
|
+
expect(HungryForm.configuration.views_prefix).to eq '/new/prefix'
|
47
|
+
end
|
48
|
+
|
49
|
+
it "configures default element options" do
|
50
|
+
HungryForm.configure do |config|
|
51
|
+
config.text_field my_attr: 100
|
52
|
+
end
|
53
|
+
|
54
|
+
expect(HungryForm.configuration.text_field[:my_attr]).to eq 100
|
55
|
+
end
|
56
|
+
|
57
|
+
after do
|
58
|
+
HungryForm.reset_config
|
59
|
+
end
|
60
|
+
end
|
61
|
+
|
40
62
|
describe "#page" do
|
41
63
|
subject(:form) { HungryForm::Form.new() {} }
|
42
64
|
|
@@ -53,4 +75,49 @@ describe HungryForm do
|
|
53
75
|
expect(hash["pages"].first["elements"].size).to eq 2
|
54
76
|
end
|
55
77
|
end
|
78
|
+
|
79
|
+
describe "#values" do
|
80
|
+
it "should generate an array of name => value hashes" do
|
81
|
+
expect(subject.values).to include(
|
82
|
+
first_first_name: "John",
|
83
|
+
first_last_name: "Doe",
|
84
|
+
third_occupation: "programmer"
|
85
|
+
)
|
86
|
+
end
|
87
|
+
end
|
88
|
+
|
89
|
+
describe "#valid?" do
|
90
|
+
it "should be valid" do
|
91
|
+
expect(subject.valid?).to eq true
|
92
|
+
end
|
93
|
+
|
94
|
+
it "should be invalid" do
|
95
|
+
options[:params]["first_first_name"] = ''
|
96
|
+
expect(subject.valid?).to eq false
|
97
|
+
end
|
98
|
+
end
|
99
|
+
|
100
|
+
describe "#next_page" do
|
101
|
+
it "should return the next page" do
|
102
|
+
options[:params][:page] = "first"
|
103
|
+
expect(subject.next_page).to eq subject.pages[1]
|
104
|
+
end
|
105
|
+
|
106
|
+
it "should return nil if there is no next page" do
|
107
|
+
options[:params][:page] = "third"
|
108
|
+
expect(subject.next_page).to be_nil
|
109
|
+
end
|
110
|
+
end
|
111
|
+
|
112
|
+
describe "#prev_page" do
|
113
|
+
it "should return the previous page" do
|
114
|
+
options[:params][:page] = "third"
|
115
|
+
expect(subject.prev_page).to eq subject.pages.first
|
116
|
+
end
|
117
|
+
|
118
|
+
it "should return nil if there is no previous page" do
|
119
|
+
options[:params][:page] = "first"
|
120
|
+
expect(subject.prev_page).to be_nil
|
121
|
+
end
|
122
|
+
end
|
56
123
|
end
|
data/spec/resolver_spec.rb
CHANGED
@@ -40,37 +40,37 @@ describe HungryForm::Resolver do
|
|
40
40
|
|
41
41
|
describe "#resolve_dependency" do
|
42
42
|
it "should resolve EQ dependency" do
|
43
|
-
dependency = {
|
43
|
+
dependency = { eq: ["Text", "Text"] }
|
44
44
|
expect(subject.resolve_dependency(dependency)).to eq true
|
45
45
|
end
|
46
46
|
|
47
47
|
it "should resolve LT dependency" do
|
48
|
-
dependency = {
|
48
|
+
dependency = { lt: ["0", "1"] }
|
49
49
|
expect(subject.resolve_dependency(dependency)).to eq true
|
50
50
|
end
|
51
51
|
|
52
52
|
it "should resolve GT dependency" do
|
53
|
-
dependency = {
|
53
|
+
dependency = { gt: ["1", "0"] }
|
54
54
|
expect(subject.resolve_dependency(dependency)).to eq true
|
55
55
|
end
|
56
56
|
|
57
57
|
it "should resolve SET dependency" do
|
58
|
-
dependency = {
|
58
|
+
dependency = { set: "1" }
|
59
59
|
expect(subject.resolve_dependency(dependency)).to eq true
|
60
60
|
end
|
61
61
|
|
62
62
|
it "should resolve AND dependency" do
|
63
|
-
dependency = {
|
63
|
+
dependency = { and: [{set: "1"}, {set: "1"}] }
|
64
64
|
expect(subject.resolve_dependency(dependency)).to eq true
|
65
65
|
end
|
66
66
|
|
67
67
|
it "should resolve OR dependency" do
|
68
|
-
dependency = {
|
68
|
+
dependency = { or: [{set: ""}, {set: "1"}] }
|
69
69
|
expect(subject.resolve_dependency(dependency)).to eq true
|
70
70
|
end
|
71
71
|
|
72
72
|
it "should resolve NOT dependency" do
|
73
|
-
dependency = {
|
73
|
+
dependency = { not: {set: ""} }
|
74
74
|
expect(subject.resolve_dependency(dependency)).to eq true
|
75
75
|
end
|
76
76
|
end
|
data/spec/spec_helper.rb
CHANGED
@@ -1,9 +1,11 @@
|
|
1
1
|
require 'bundler/setup'
|
2
2
|
Bundler.setup
|
3
3
|
|
4
|
-
require
|
4
|
+
require 'hungryform'
|
5
5
|
|
6
|
-
Dir[
|
6
|
+
Dir['./spec/support/**/*.rb'].each { |f| require f }
|
7
|
+
Dir['./spec/elements/shared_examples/**/*.rb'].each { |f| require f }
|
8
|
+
Dir['./spec/views/shared_examples/**/*.rb'].each { |f| require f }
|
7
9
|
|
8
10
|
RSpec.configure do |config|
|
9
11
|
config.order = :random
|
metadata
CHANGED
@@ -1,37 +1,23 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: hungryform
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
4
|
+
version: 0.0.6
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Andrey Bazhutkin
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2015-03-31 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
|
-
name:
|
15
|
-
requirement: !ruby/object:Gem::Requirement
|
16
|
-
requirements:
|
17
|
-
- - "~>"
|
18
|
-
- !ruby/object:Gem::Version
|
19
|
-
version: '1.6'
|
20
|
-
type: :development
|
21
|
-
prerelease: false
|
22
|
-
version_requirements: !ruby/object:Gem::Requirement
|
23
|
-
requirements:
|
24
|
-
- - "~>"
|
25
|
-
- !ruby/object:Gem::Version
|
26
|
-
version: '1.6'
|
27
|
-
- !ruby/object:Gem::Dependency
|
28
|
-
name: rake
|
14
|
+
name: activesupport
|
29
15
|
requirement: !ruby/object:Gem::Requirement
|
30
16
|
requirements:
|
31
17
|
- - ">="
|
32
18
|
- !ruby/object:Gem::Version
|
33
19
|
version: '0'
|
34
|
-
type: :
|
20
|
+
type: :runtime
|
35
21
|
prerelease: false
|
36
22
|
version_requirements: !ruby/object:Gem::Requirement
|
37
23
|
requirements:
|
@@ -39,21 +25,21 @@ dependencies:
|
|
39
25
|
- !ruby/object:Gem::Version
|
40
26
|
version: '0'
|
41
27
|
- !ruby/object:Gem::Dependency
|
42
|
-
name:
|
28
|
+
name: bundler
|
43
29
|
requirement: !ruby/object:Gem::Requirement
|
44
30
|
requirements:
|
45
|
-
- - "
|
31
|
+
- - ">="
|
46
32
|
- !ruby/object:Gem::Version
|
47
|
-
version:
|
33
|
+
version: 1.0.0
|
48
34
|
type: :development
|
49
35
|
prerelease: false
|
50
36
|
version_requirements: !ruby/object:Gem::Requirement
|
51
37
|
requirements:
|
52
|
-
- - "
|
38
|
+
- - ">="
|
53
39
|
- !ruby/object:Gem::Version
|
54
|
-
version:
|
40
|
+
version: 1.0.0
|
55
41
|
- !ruby/object:Gem::Dependency
|
56
|
-
name:
|
42
|
+
name: rake
|
57
43
|
requirement: !ruby/object:Gem::Requirement
|
58
44
|
requirements:
|
59
45
|
- - ">="
|
@@ -67,19 +53,19 @@ dependencies:
|
|
67
53
|
- !ruby/object:Gem::Version
|
68
54
|
version: '0'
|
69
55
|
- !ruby/object:Gem::Dependency
|
70
|
-
name:
|
56
|
+
name: rspec
|
71
57
|
requirement: !ruby/object:Gem::Requirement
|
72
58
|
requirements:
|
73
59
|
- - ">="
|
74
60
|
- !ruby/object:Gem::Version
|
75
|
-
version: '0'
|
76
|
-
type: :
|
61
|
+
version: '3.0'
|
62
|
+
type: :development
|
77
63
|
prerelease: false
|
78
64
|
version_requirements: !ruby/object:Gem::Requirement
|
79
65
|
requirements:
|
80
66
|
- - ">="
|
81
67
|
- !ruby/object:Gem::Version
|
82
|
-
version: '0'
|
68
|
+
version: '3.0'
|
83
69
|
description:
|
84
70
|
email:
|
85
71
|
- andrey.bazhutkin@gmail.com
|
@@ -89,13 +75,15 @@ extra_rdoc_files: []
|
|
89
75
|
files:
|
90
76
|
- ".gitignore"
|
91
77
|
- ".rspec"
|
78
|
+
- ".ruby-version"
|
79
|
+
- ".travis.yml"
|
92
80
|
- Gemfile
|
93
|
-
- Gemfile.lock
|
94
81
|
- LICENSE
|
95
82
|
- README.md
|
96
83
|
- Rakefile
|
97
84
|
- hungryform.gemspec
|
98
85
|
- lib/hungryform.rb
|
86
|
+
- lib/hungryform/configuration.rb
|
99
87
|
- lib/hungryform/elements.rb
|
100
88
|
- lib/hungryform/elements/base/active_element.rb
|
101
89
|
- lib/hungryform/elements/base/element.rb
|
@@ -107,8 +95,9 @@ files:
|
|
107
95
|
- lib/hungryform/elements/page.rb
|
108
96
|
- lib/hungryform/elements/radio_group.rb
|
109
97
|
- lib/hungryform/elements/select_field.rb
|
110
|
-
- lib/hungryform/elements/
|
98
|
+
- lib/hungryform/elements/text_area.rb
|
111
99
|
- lib/hungryform/elements/text_field.rb
|
100
|
+
- lib/hungryform/exceptions.rb
|
112
101
|
- lib/hungryform/form.rb
|
113
102
|
- lib/hungryform/resolver.rb
|
114
103
|
- lib/hungryform/validator.rb
|
@@ -118,15 +107,15 @@ files:
|
|
118
107
|
- spec/elements/page_spec.rb
|
119
108
|
- spec/elements/radio_group_spec.rb
|
120
109
|
- spec/elements/select_field_spec.rb
|
121
|
-
- spec/elements/
|
110
|
+
- spec/elements/shared_examples/active_element.rb
|
111
|
+
- spec/elements/shared_examples/element.rb
|
112
|
+
- spec/elements/shared_examples/group.rb
|
113
|
+
- spec/elements/shared_examples/options_element.rb
|
114
|
+
- spec/elements/text_area_spec.rb
|
122
115
|
- spec/elements/text_field_spec.rb
|
123
116
|
- spec/form_spec.rb
|
124
117
|
- spec/resolver_spec.rb
|
125
118
|
- spec/spec_helper.rb
|
126
|
-
- spec/support/shared_active_element.rb
|
127
|
-
- spec/support/shared_element.rb
|
128
|
-
- spec/support/shared_group.rb
|
129
|
-
- spec/support/shared_options_element.rb
|
130
119
|
- spec/validator_spec.rb
|
131
120
|
homepage: https://github.com/andrba/hungryform
|
132
121
|
licenses:
|
@@ -158,14 +147,14 @@ test_files:
|
|
158
147
|
- spec/elements/page_spec.rb
|
159
148
|
- spec/elements/radio_group_spec.rb
|
160
149
|
- spec/elements/select_field_spec.rb
|
161
|
-
- spec/elements/
|
150
|
+
- spec/elements/shared_examples/active_element.rb
|
151
|
+
- spec/elements/shared_examples/element.rb
|
152
|
+
- spec/elements/shared_examples/group.rb
|
153
|
+
- spec/elements/shared_examples/options_element.rb
|
154
|
+
- spec/elements/text_area_spec.rb
|
162
155
|
- spec/elements/text_field_spec.rb
|
163
156
|
- spec/form_spec.rb
|
164
157
|
- spec/resolver_spec.rb
|
165
158
|
- spec/spec_helper.rb
|
166
|
-
- spec/support/shared_active_element.rb
|
167
|
-
- spec/support/shared_element.rb
|
168
|
-
- spec/support/shared_group.rb
|
169
|
-
- spec/support/shared_options_element.rb
|
170
159
|
- spec/validator_spec.rb
|
171
160
|
has_rdoc:
|
data/Gemfile.lock
DELETED
@@ -1,52 +0,0 @@
|
|
1
|
-
PATH
|
2
|
-
remote: .
|
3
|
-
specs:
|
4
|
-
hungryform (0.0.4)
|
5
|
-
activesupport
|
6
|
-
|
7
|
-
GEM
|
8
|
-
remote: https://rubygems.org/
|
9
|
-
specs:
|
10
|
-
activesupport (4.1.6)
|
11
|
-
i18n (~> 0.6, >= 0.6.9)
|
12
|
-
json (~> 1.7, >= 1.7.7)
|
13
|
-
minitest (~> 5.1)
|
14
|
-
thread_safe (~> 0.1)
|
15
|
-
tzinfo (~> 1.1)
|
16
|
-
coderay (1.1.0)
|
17
|
-
diff-lcs (1.2.5)
|
18
|
-
i18n (0.6.11)
|
19
|
-
json (1.8.1)
|
20
|
-
method_source (0.8.2)
|
21
|
-
minitest (5.4.2)
|
22
|
-
pry (0.9.12.6)
|
23
|
-
coderay (~> 1.0)
|
24
|
-
method_source (~> 0.8)
|
25
|
-
slop (~> 3.4)
|
26
|
-
rake (10.3.2)
|
27
|
-
rspec (3.1.0)
|
28
|
-
rspec-core (~> 3.1.0)
|
29
|
-
rspec-expectations (~> 3.1.0)
|
30
|
-
rspec-mocks (~> 3.1.0)
|
31
|
-
rspec-core (3.1.7)
|
32
|
-
rspec-support (~> 3.1.0)
|
33
|
-
rspec-expectations (3.1.2)
|
34
|
-
diff-lcs (>= 1.2.0, < 2.0)
|
35
|
-
rspec-support (~> 3.1.0)
|
36
|
-
rspec-mocks (3.1.3)
|
37
|
-
rspec-support (~> 3.1.0)
|
38
|
-
rspec-support (3.1.2)
|
39
|
-
slop (3.6.0)
|
40
|
-
thread_safe (0.3.4)
|
41
|
-
tzinfo (1.2.2)
|
42
|
-
thread_safe (~> 0.1)
|
43
|
-
|
44
|
-
PLATFORMS
|
45
|
-
ruby
|
46
|
-
|
47
|
-
DEPENDENCIES
|
48
|
-
bundler (~> 1.6)
|
49
|
-
hungryform!
|
50
|
-
pry
|
51
|
-
rake
|
52
|
-
rspec (~> 3.0)
|
@@ -1,65 +0,0 @@
|
|
1
|
-
RSpec.shared_examples "an active element" do
|
2
|
-
let(:resolver_options) { {} }
|
3
|
-
let(:resolver) { HungryForm::Resolver.new(resolver_options) }
|
4
|
-
|
5
|
-
let(:group_options) { {} }
|
6
|
-
let(:group) { HungryForm::Elements::Group.new(:group, nil, resolver, group_options) {} }
|
7
|
-
|
8
|
-
let(:element) { described_class.new(:element_name, group, resolver, active_element_options) {} }
|
9
|
-
|
10
|
-
it_behaves_like "an element" do
|
11
|
-
let(:element_options) { active_element_options }
|
12
|
-
end
|
13
|
-
|
14
|
-
describe ".new" do
|
15
|
-
it "should have empty error" do
|
16
|
-
expect(element.error).to eq ""
|
17
|
-
end
|
18
|
-
|
19
|
-
it "should not be required if its parent is not visible" do
|
20
|
-
group_options[:visible] = false
|
21
|
-
active_element_options[:required] = true
|
22
|
-
expect(element.required?).to eq false
|
23
|
-
end
|
24
|
-
|
25
|
-
it "should have a nil value" do
|
26
|
-
expect(element.value).to be nil
|
27
|
-
end
|
28
|
-
|
29
|
-
it "should have a value from form params" do
|
30
|
-
resolver_options[:params]= {"group_element_name" => "element_value" }
|
31
|
-
expect(element.value).to eq "element_value"
|
32
|
-
end
|
33
|
-
|
34
|
-
it "should have a value from element structure" do
|
35
|
-
active_element_options[:value] = "element_value"
|
36
|
-
expect(element.value).to eq "element_value"
|
37
|
-
end
|
38
|
-
end
|
39
|
-
|
40
|
-
describe "#valid?" do
|
41
|
-
describe "when required" do
|
42
|
-
before(:each) do
|
43
|
-
active_element_options[:required] = true
|
44
|
-
end
|
45
|
-
|
46
|
-
it "is valid" do
|
47
|
-
element.value = "value"
|
48
|
-
expect(element.valid?).to eq true
|
49
|
-
end
|
50
|
-
|
51
|
-
it "is invalid" do
|
52
|
-
element.value = ""
|
53
|
-
expect(element.valid?).to eq false
|
54
|
-
end
|
55
|
-
end
|
56
|
-
end
|
57
|
-
|
58
|
-
describe "#to_hash" do
|
59
|
-
it "should include required, value and error" do
|
60
|
-
active_element_options[:value] = ''
|
61
|
-
active_element_options[:required] = true
|
62
|
-
expect(element.to_hash).to include(:required, :value, :error)
|
63
|
-
end
|
64
|
-
end
|
65
|
-
end
|
@@ -1,62 +0,0 @@
|
|
1
|
-
RSpec.shared_examples "an element" do
|
2
|
-
let(:resolver) { HungryForm::Resolver.new() }
|
3
|
-
|
4
|
-
let(:group) { HungryForm::Elements::Group.new(:group, nil, resolver, {}) {} }
|
5
|
-
|
6
|
-
let(:element) { described_class.new(:element_name, group, resolver, element_options) {} }
|
7
|
-
|
8
|
-
describe "#visible?" do
|
9
|
-
it "should be visible" do
|
10
|
-
expect(element.visible?).to eq true
|
11
|
-
end
|
12
|
-
|
13
|
-
it "should not be visible" do
|
14
|
-
element_options[:visible] = false
|
15
|
-
expect(element.visible?).to eq false
|
16
|
-
end
|
17
|
-
|
18
|
-
context "when dependency is present" do
|
19
|
-
it "should not be visible" do
|
20
|
-
element_options[:dependency] = '{"EQ": ["0", "1"]}'
|
21
|
-
expect(element.visible?).to eq false
|
22
|
-
end
|
23
|
-
|
24
|
-
it "should be visible" do
|
25
|
-
element_options[:dependency] = '{"EQ": ["1", "1"]}'
|
26
|
-
expect(element.visible?).to eq true
|
27
|
-
end
|
28
|
-
end
|
29
|
-
end
|
30
|
-
|
31
|
-
describe "#label" do
|
32
|
-
it "should have a humanized label based on element's name" do
|
33
|
-
expect(element.label).to eq "Element name"
|
34
|
-
end
|
35
|
-
|
36
|
-
it "should have a label defined in options" do
|
37
|
-
element_options[:label] = "Special Label"
|
38
|
-
expect(element.label).to eq "Special Label"
|
39
|
-
end
|
40
|
-
end
|
41
|
-
|
42
|
-
describe "#method_missing" do
|
43
|
-
it "should return existing param" do
|
44
|
-
element_options[:html_param] = "param"
|
45
|
-
expect(element.html_param).to eq "param"
|
46
|
-
end
|
47
|
-
|
48
|
-
it "should check whether param exists" do
|
49
|
-
element_options[:html_param] = "param"
|
50
|
-
expect(element.html_param?).to eq true
|
51
|
-
expect(element.other_html_param?).to eq false
|
52
|
-
end
|
53
|
-
end
|
54
|
-
|
55
|
-
describe "#to_hash" do
|
56
|
-
it "should include visible, dependency, name and label" do
|
57
|
-
element_options[:dependency] = '{"EQ": [1, 1]}'
|
58
|
-
element_options[:name] = 'name'
|
59
|
-
expect(element.to_hash).to include(:visible, :dependency, :name, :label)
|
60
|
-
end
|
61
|
-
end
|
62
|
-
end
|
@@ -1,42 +0,0 @@
|
|
1
|
-
RSpec.shared_examples "a group" do
|
2
|
-
let(:resolver) { HungryForm::Resolver.new() }
|
3
|
-
|
4
|
-
let(:page) { described_class.new(:parent_name, nil, resolver, {}) {} }
|
5
|
-
|
6
|
-
let(:group_options) { {} }
|
7
|
-
let(:group) { described_class.new(:name, page, resolver, group_options) {} }
|
8
|
-
|
9
|
-
it_behaves_like "an element" do
|
10
|
-
let(:element_options) { group_options }
|
11
|
-
end
|
12
|
-
|
13
|
-
describe "#group" do
|
14
|
-
it "creates a nested group" do
|
15
|
-
group.group(:nested, {}) {}
|
16
|
-
expect(group.elements.first.class).to eq HungryForm::Elements::Group
|
17
|
-
end
|
18
|
-
|
19
|
-
it "concatenates nested element's name with the parent's one" do
|
20
|
-
group.group(:nested, {}) {}
|
21
|
-
expect(group.elements.first.name).to eq "parent_name_name_nested"
|
22
|
-
end
|
23
|
-
end
|
24
|
-
|
25
|
-
describe "#to_hash" do
|
26
|
-
it "should include group elements" do
|
27
|
-
expect(group.to_hash).to include(:elements)
|
28
|
-
end
|
29
|
-
end
|
30
|
-
|
31
|
-
describe ".method_missing" do
|
32
|
-
it "creates a nested element" do
|
33
|
-
group.html(:name)
|
34
|
-
expect(group.elements.first.class).to eq HungryForm::Elements::Html
|
35
|
-
end
|
36
|
-
|
37
|
-
it "concatenates nested element's name with the parent's one" do
|
38
|
-
group.html(:html)
|
39
|
-
expect(group.elements.first.name).to eq "parent_name_name_html"
|
40
|
-
end
|
41
|
-
end
|
42
|
-
end
|