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.
Files changed (42) hide show
  1. checksums.yaml +4 -4
  2. data/.rspec +1 -0
  3. data/Gemfile.lock +9 -1
  4. data/README.md +48 -12
  5. data/Rakefile +3 -1
  6. data/hungryform.gemspec +3 -0
  7. data/lib/hungryform/elements/base/active_element.rb +53 -0
  8. data/lib/hungryform/elements/base/element.rb +57 -0
  9. data/lib/hungryform/elements/base/group.rb +89 -0
  10. data/lib/hungryform/elements/base/hashable.rb +39 -0
  11. data/lib/hungryform/elements/base/options_element.rb +35 -0
  12. data/lib/hungryform/elements/group.rb +5 -3
  13. data/lib/hungryform/elements/html.rb +12 -3
  14. data/lib/hungryform/elements/page.rb +28 -24
  15. data/lib/hungryform/elements/radio_group.rb +17 -0
  16. data/lib/hungryform/elements/select_field.rb +33 -0
  17. data/lib/hungryform/elements/text_area_field.rb +6 -0
  18. data/lib/hungryform/elements/text_field.rb +5 -3
  19. data/lib/hungryform/elements.rb +13 -5
  20. data/lib/hungryform/form.rb +86 -0
  21. data/lib/hungryform/resolver.rb +30 -25
  22. data/lib/hungryform/validator.rb +8 -5
  23. data/lib/hungryform/version.rb +2 -2
  24. data/lib/hungryform.rb +8 -77
  25. data/spec/elements/group_spec.rb +1 -1
  26. data/spec/elements/html_spec.rb +5 -6
  27. data/spec/elements/page_spec.rb +4 -4
  28. data/spec/elements/radio_group_spec.rb +29 -0
  29. data/spec/elements/select_field_spec.rb +47 -0
  30. data/spec/elements/text_area_field_spec.rb +7 -0
  31. data/spec/elements/text_field_spec.rb +2 -2
  32. data/spec/{hungryform_spec.rb → form_spec.rb} +9 -8
  33. data/spec/resolver_spec.rb +1 -1
  34. data/spec/support/shared_active_element.rb +9 -1
  35. data/spec/support/shared_element.rb +9 -1
  36. data/spec/support/shared_group.rb +8 -2
  37. data/spec/support/shared_options_element.rb +36 -0
  38. data/spec/validator_spec.rb +2 -2
  39. metadata +38 -9
  40. data/lib/hungryform/elements/base_active_element.rb +0 -44
  41. data/lib/hungryform/elements/base_element.rb +0 -34
  42. 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.2
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-19 00:00:00.000000000 Z
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/base_active_element.rb
87
- - lib/hungryform/elements/base_element.rb
88
- - lib/hungryform/elements/base_group.rb
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/hungryform_spec.rb
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: '0'
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.4.4
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/hungryform_spec.rb
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