hungryform 0.0.2 → 0.0.4

Sign up to get free protection for your applications and to get access to all the features.
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