hungryform 0.0.2 → 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/.rspec +1 -0
- data/Gemfile.lock +9 -1
- data/README.md +48 -12
- data/Rakefile +3 -1
- data/hungryform.gemspec +3 -0
- data/lib/hungryform/elements/base/active_element.rb +53 -0
- data/lib/hungryform/elements/base/element.rb +57 -0
- data/lib/hungryform/elements/base/group.rb +89 -0
- data/lib/hungryform/elements/base/hashable.rb +39 -0
- data/lib/hungryform/elements/base/options_element.rb +35 -0
- data/lib/hungryform/elements/group.rb +5 -3
- data/lib/hungryform/elements/html.rb +12 -3
- data/lib/hungryform/elements/page.rb +28 -24
- data/lib/hungryform/elements/radio_group.rb +17 -0
- data/lib/hungryform/elements/select_field.rb +33 -0
- data/lib/hungryform/elements/text_area_field.rb +6 -0
- data/lib/hungryform/elements/text_field.rb +5 -3
- data/lib/hungryform/elements.rb +13 -5
- data/lib/hungryform/form.rb +86 -0
- data/lib/hungryform/resolver.rb +30 -25
- data/lib/hungryform/validator.rb +8 -5
- data/lib/hungryform/version.rb +2 -2
- data/lib/hungryform.rb +8 -77
- data/spec/elements/group_spec.rb +1 -1
- data/spec/elements/html_spec.rb +5 -6
- data/spec/elements/page_spec.rb +4 -4
- data/spec/elements/radio_group_spec.rb +29 -0
- data/spec/elements/select_field_spec.rb +47 -0
- data/spec/elements/text_area_field_spec.rb +7 -0
- data/spec/elements/text_field_spec.rb +2 -2
- data/spec/{hungryform_spec.rb → form_spec.rb} +9 -8
- data/spec/resolver_spec.rb +1 -1
- data/spec/support/shared_active_element.rb +9 -1
- data/spec/support/shared_element.rb +9 -1
- data/spec/support/shared_group.rb +8 -2
- data/spec/support/shared_options_element.rb +36 -0
- data/spec/validator_spec.rb +2 -2
- metadata +38 -9
- data/lib/hungryform/elements/base_active_element.rb +0 -44
- data/lib/hungryform/elements/base_element.rb +0 -34
- data/lib/hungryform/elements/base_group.rb +0 -76
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
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.4
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Andrey Bazhutkin
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2014-
|
11
|
+
date: 2014-12-17 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bundler
|
@@ -52,6 +52,20 @@ dependencies:
|
|
52
52
|
- - "~>"
|
53
53
|
- !ruby/object:Gem::Version
|
54
54
|
version: '3.0'
|
55
|
+
- !ruby/object:Gem::Dependency
|
56
|
+
name: pry
|
57
|
+
requirement: !ruby/object:Gem::Requirement
|
58
|
+
requirements:
|
59
|
+
- - ">="
|
60
|
+
- !ruby/object:Gem::Version
|
61
|
+
version: '0'
|
62
|
+
type: :development
|
63
|
+
prerelease: false
|
64
|
+
version_requirements: !ruby/object:Gem::Requirement
|
65
|
+
requirements:
|
66
|
+
- - ">="
|
67
|
+
- !ruby/object:Gem::Version
|
68
|
+
version: '0'
|
55
69
|
- !ruby/object:Gem::Dependency
|
56
70
|
name: activesupport
|
57
71
|
requirement: !ruby/object:Gem::Requirement
|
@@ -83,26 +97,36 @@ files:
|
|
83
97
|
- hungryform.gemspec
|
84
98
|
- lib/hungryform.rb
|
85
99
|
- lib/hungryform/elements.rb
|
86
|
-
- lib/hungryform/elements/
|
87
|
-
- lib/hungryform/elements/
|
88
|
-
- lib/hungryform/elements/
|
100
|
+
- lib/hungryform/elements/base/active_element.rb
|
101
|
+
- lib/hungryform/elements/base/element.rb
|
102
|
+
- lib/hungryform/elements/base/group.rb
|
103
|
+
- lib/hungryform/elements/base/hashable.rb
|
104
|
+
- lib/hungryform/elements/base/options_element.rb
|
89
105
|
- lib/hungryform/elements/group.rb
|
90
106
|
- lib/hungryform/elements/html.rb
|
91
107
|
- lib/hungryform/elements/page.rb
|
108
|
+
- lib/hungryform/elements/radio_group.rb
|
109
|
+
- lib/hungryform/elements/select_field.rb
|
110
|
+
- lib/hungryform/elements/text_area_field.rb
|
92
111
|
- lib/hungryform/elements/text_field.rb
|
112
|
+
- lib/hungryform/form.rb
|
93
113
|
- lib/hungryform/resolver.rb
|
94
114
|
- lib/hungryform/validator.rb
|
95
115
|
- lib/hungryform/version.rb
|
96
116
|
- spec/elements/group_spec.rb
|
97
117
|
- spec/elements/html_spec.rb
|
98
118
|
- spec/elements/page_spec.rb
|
119
|
+
- spec/elements/radio_group_spec.rb
|
120
|
+
- spec/elements/select_field_spec.rb
|
121
|
+
- spec/elements/text_area_field_spec.rb
|
99
122
|
- spec/elements/text_field_spec.rb
|
100
|
-
- spec/
|
123
|
+
- spec/form_spec.rb
|
101
124
|
- spec/resolver_spec.rb
|
102
125
|
- spec/spec_helper.rb
|
103
126
|
- spec/support/shared_active_element.rb
|
104
127
|
- spec/support/shared_element.rb
|
105
128
|
- spec/support/shared_group.rb
|
129
|
+
- spec/support/shared_options_element.rb
|
106
130
|
- spec/validator_spec.rb
|
107
131
|
homepage: https://github.com/andrba/hungryform
|
108
132
|
licenses:
|
@@ -116,7 +140,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
116
140
|
requirements:
|
117
141
|
- - ">="
|
118
142
|
- !ruby/object:Gem::Version
|
119
|
-
version:
|
143
|
+
version: 1.9.2
|
120
144
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
121
145
|
requirements:
|
122
146
|
- - ">="
|
@@ -124,7 +148,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
124
148
|
version: '0'
|
125
149
|
requirements: []
|
126
150
|
rubyforge_project:
|
127
|
-
rubygems_version: 2.
|
151
|
+
rubygems_version: 2.2.2
|
128
152
|
signing_key:
|
129
153
|
specification_version: 4
|
130
154
|
summary: A Ruby Library for working with multi page forms
|
@@ -132,11 +156,16 @@ test_files:
|
|
132
156
|
- spec/elements/group_spec.rb
|
133
157
|
- spec/elements/html_spec.rb
|
134
158
|
- spec/elements/page_spec.rb
|
159
|
+
- spec/elements/radio_group_spec.rb
|
160
|
+
- spec/elements/select_field_spec.rb
|
161
|
+
- spec/elements/text_area_field_spec.rb
|
135
162
|
- spec/elements/text_field_spec.rb
|
136
|
-
- spec/
|
163
|
+
- spec/form_spec.rb
|
137
164
|
- spec/resolver_spec.rb
|
138
165
|
- spec/spec_helper.rb
|
139
166
|
- spec/support/shared_active_element.rb
|
140
167
|
- spec/support/shared_element.rb
|
141
168
|
- spec/support/shared_group.rb
|
169
|
+
- spec/support/shared_options_element.rb
|
142
170
|
- spec/validator_spec.rb
|
171
|
+
has_rdoc:
|
@@ -1,44 +0,0 @@
|
|
1
|
-
class HungryForm
|
2
|
-
class BaseActiveElement < BaseElement
|
3
|
-
|
4
|
-
attr_accessor :error, :value, :required
|
5
|
-
alias_method :required?, :required
|
6
|
-
|
7
|
-
def initialize(name, parent, resolver, options = {}, &block)
|
8
|
-
super
|
9
|
-
|
10
|
-
self.error = ''
|
11
|
-
|
12
|
-
# Filter only the options that are present in the HungryForm::Validator singleton class
|
13
|
-
@validation_rules = options.select { |key, val| HungryForm::Validator.respond_to?(key) }
|
14
|
-
|
15
|
-
if parent.visible?
|
16
|
-
self.required = options[:required] || false
|
17
|
-
else
|
18
|
-
self.required = false
|
19
|
-
end
|
20
|
-
|
21
|
-
self.value = resolver.params.has_key?(self.name)? resolver.params[self.name] : options[:value]
|
22
|
-
end
|
23
|
-
|
24
|
-
def valid?
|
25
|
-
self.error = ''
|
26
|
-
|
27
|
-
return true if !visible?
|
28
|
-
|
29
|
-
is_valid = true
|
30
|
-
|
31
|
-
@validation_rules.each do |key, rule|
|
32
|
-
error = HungryForm::Validator.send(key, self, rule) || ''
|
33
|
-
unless error.empty?
|
34
|
-
is_valid = false
|
35
|
-
break
|
36
|
-
end
|
37
|
-
end
|
38
|
-
|
39
|
-
is_valid
|
40
|
-
end
|
41
|
-
|
42
|
-
|
43
|
-
end
|
44
|
-
end
|
@@ -1,34 +0,0 @@
|
|
1
|
-
class HungryForm
|
2
|
-
class BaseElement
|
3
|
-
attr_accessor :name, :placeholders, :resolver, :visible, :label, :dependency
|
4
|
-
alias_method :visible?, :visible
|
5
|
-
|
6
|
-
def initialize(name, parent, resolver, options = {})
|
7
|
-
@_options = options
|
8
|
-
|
9
|
-
@placeholders ||= {}
|
10
|
-
@resolver = resolver
|
11
|
-
|
12
|
-
# The element is visible if no visible parameter passed or
|
13
|
-
# visible param equals true and the dependency is resolved positively
|
14
|
-
self.visible = options.has_key?(:visible)? options[:visible] : true
|
15
|
-
self.visible &&= resolver.resolve_dependency(::JSON.parse(options[:dependency])) if options[:dependency]
|
16
|
-
self.dependency = options[:dependency] || ''
|
17
|
-
self.name = (parent.nil?? "" : "#{parent.name}_") + resolver.get_value(name, self)
|
18
|
-
|
19
|
-
unless options[:label]
|
20
|
-
self.label = resolver.get_value(name, self).humanize
|
21
|
-
else
|
22
|
-
self.label = resolver.get_value(options[:label], self)
|
23
|
-
end
|
24
|
-
end
|
25
|
-
|
26
|
-
def method_missing(name, *args, &block)
|
27
|
-
# Check if an option exists
|
28
|
-
return @_options.has_key?(name.to_s[0..-2].to_sym) if name.to_s[-1] == '?'
|
29
|
-
# Return an option
|
30
|
-
return @_options[name] if @_options.has_key?(name)
|
31
|
-
super
|
32
|
-
end
|
33
|
-
end
|
34
|
-
end
|
@@ -1,76 +0,0 @@
|
|
1
|
-
class HungryForm
|
2
|
-
# A base group object is used to handle nested elements.
|
3
|
-
# Nested element can be a regular BaseElement or BaseActiveElement, as well as a BaseGroup element.
|
4
|
-
#
|
5
|
-
# The following sample has three BaseGroup elements (page, group and nested group) that define a structure
|
6
|
-
# of a single form page
|
7
|
-
#
|
8
|
-
# page :about do
|
9
|
-
# group :about_yourself do
|
10
|
-
# html :about, value: "Tell us about yourself"
|
11
|
-
# group :address do
|
12
|
-
# text_field :street
|
13
|
-
# text_field :city
|
14
|
-
# end
|
15
|
-
# group :contact do
|
16
|
-
# text_field :phone
|
17
|
-
# end
|
18
|
-
# end
|
19
|
-
# end
|
20
|
-
#
|
21
|
-
# Every group element except for a nested group is
|
22
|
-
class BaseGroup < BaseElement
|
23
|
-
attr_accessor :elements, :errors
|
24
|
-
|
25
|
-
def initialize(name, parent, resolver, options = {}, &block)
|
26
|
-
raise HungryFormException, 'No group structure block given' unless block_given?
|
27
|
-
|
28
|
-
super
|
29
|
-
|
30
|
-
@elements = []
|
31
|
-
@errors = {}
|
32
|
-
|
33
|
-
instance_eval(&block)
|
34
|
-
end
|
35
|
-
|
36
|
-
# Validates an entire group. If a group consists of nested groups
|
37
|
-
# they will be validated recursively
|
38
|
-
def valid?
|
39
|
-
errors.clear
|
40
|
-
is_valid = true
|
41
|
-
|
42
|
-
elements.each do |el|
|
43
|
-
if el.invalid?
|
44
|
-
is_valid = false
|
45
|
-
case el
|
46
|
-
when BaseActiveElement
|
47
|
-
errors[el.name] = el.error
|
48
|
-
when BaseGroupObject
|
49
|
-
errors.merge!(el.errors)
|
50
|
-
end
|
51
|
-
end
|
52
|
-
end
|
53
|
-
|
54
|
-
is_valid
|
55
|
-
end
|
56
|
-
|
57
|
-
def invalid?
|
58
|
-
!valid?
|
59
|
-
end
|
60
|
-
|
61
|
-
def method_missing(name, *args, &block)
|
62
|
-
#Find a matching class
|
63
|
-
klass = HungryForm.constants.find {|c| Class === HungryForm.const_get(c) && c.to_s.underscore.to_sym == name}
|
64
|
-
return super if klass.nil?
|
65
|
-
|
66
|
-
# Create a new element based on a symbol provided and push it into the group elements array
|
67
|
-
element = HungryForm::const_get(klass).send(:new, args[0], self, @resolver, *(args[1..-1]), &block)
|
68
|
-
elements << element
|
69
|
-
|
70
|
-
#Resolver keeps a hash of all elements of the form
|
71
|
-
@resolver.elements[element.name] = element
|
72
|
-
|
73
|
-
element
|
74
|
-
end
|
75
|
-
end
|
76
|
-
end
|