caring_form 1.2.3

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 (69) hide show
  1. checksums.yaml +7 -0
  2. data/.gitignore +19 -0
  3. data/.travis.yml +17 -0
  4. data/Appraisals +18 -0
  5. data/Gemfile +9 -0
  6. data/Guardfile +15 -0
  7. data/LICENSE +22 -0
  8. data/README.md +33 -0
  9. data/Rakefile +12 -0
  10. data/app/assets/javascripts/caring_form/form-observer.coffee +63 -0
  11. data/app/assets/javascripts/caring_form/main.coffee +15 -0
  12. data/app/assets/javascripts/caring_form/remote-validator.coffee +71 -0
  13. data/app/assets/javascripts/caring_form/rule-based-validator.coffee +37 -0
  14. data/app/assets/javascripts/caring_form/setup.coffee +5 -0
  15. data/app/assets/javascripts/caring_form/webshims-customization.coffee +25 -0
  16. data/app/assets/javascripts/caring_forms.js +7 -0
  17. data/caring_form.gemspec +31 -0
  18. data/gemfiles/rails_3_1.gemfile +8 -0
  19. data/gemfiles/rails_3_2.gemfile +8 -0
  20. data/gemfiles/rails_4.gemfile +7 -0
  21. data/gemfiles/rails_4_1.gemfile +8 -0
  22. data/lib/caring_form.rb +20 -0
  23. data/lib/caring_form/action_view_extensions/builder.rb +75 -0
  24. data/lib/caring_form/action_view_extensions/config.rb +4 -0
  25. data/lib/caring_form/action_view_extensions/flash_error_helper.rb +28 -0
  26. data/lib/caring_form/action_view_extensions/form_helper.rb +33 -0
  27. data/lib/caring_form/active_model/monkey_patching.rb +32 -0
  28. data/lib/caring_form/dsl.rb +91 -0
  29. data/lib/caring_form/engine.rb +4 -0
  30. data/lib/caring_form/field/base.rb +145 -0
  31. data/lib/caring_form/field/check_box.rb +23 -0
  32. data/lib/caring_form/field/check_boxes.rb +15 -0
  33. data/lib/caring_form/field/collection.rb +48 -0
  34. data/lib/caring_form/field/dummy.rb +30 -0
  35. data/lib/caring_form/field/email.rb +41 -0
  36. data/lib/caring_form/field/full_name.rb +40 -0
  37. data/lib/caring_form/field/looking_for.rb +37 -0
  38. data/lib/caring_form/field/metadata.rb +26 -0
  39. data/lib/caring_form/field/radio_buttons.rb +15 -0
  40. data/lib/caring_form/field/string.rb +13 -0
  41. data/lib/caring_form/field/submit.rb +83 -0
  42. data/lib/caring_form/field/tel.rb +37 -0
  43. data/lib/caring_form/field/text.rb +13 -0
  44. data/lib/caring_form/field/us_zip_code.rb +37 -0
  45. data/lib/caring_form/field_container.rb +126 -0
  46. data/lib/caring_form/form_builder.rb +51 -0
  47. data/lib/caring_form/model.rb +58 -0
  48. data/lib/caring_form/model/active_model.rb +11 -0
  49. data/lib/caring_form/model/active_record.rb +38 -0
  50. data/lib/caring_form/simple_form/initializer.rb +26 -0
  51. data/lib/caring_form/simple_form/monkey_patching.rb +51 -0
  52. data/lib/caring_form/tools/referee.rb +62 -0
  53. data/lib/caring_form/version.rb +3 -0
  54. data/lib/tasks/webshims.rake +7 -0
  55. data/spec/caring_form/action_view_extensions/flash_error_helper_spec.rb +50 -0
  56. data/spec/caring_form/action_view_extensions/form_helper_spec.rb +72 -0
  57. data/spec/caring_form/dsl_spec.rb +21 -0
  58. data/spec/caring_form/field/base_spec.rb +204 -0
  59. data/spec/caring_form/field/check_boxes_spec.rb +32 -0
  60. data/spec/caring_form/field/collection_spec.rb +28 -0
  61. data/spec/caring_form/field/radio_buttons_spec.rb +29 -0
  62. data/spec/caring_form/field/submit_spec.rb +57 -0
  63. data/spec/caring_form/field_container_spec.rb +85 -0
  64. data/spec/caring_form/form_builder_spec.rb +113 -0
  65. data/spec/caring_form/model_spec.rb +235 -0
  66. data/spec/caring_form/tools/referee_spec.rb +86 -0
  67. data/spec/spec_helper.rb +28 -0
  68. data/spec/support/nokogiri_matcher.rb +204 -0
  69. metadata +278 -0
@@ -0,0 +1,28 @@
1
+ require 'rubygems'
2
+ require 'minitest/autorun'
3
+ require 'minitest/reporters'
4
+ require 'delegate'
5
+ require 'action_view/test_case'
6
+ require 'awesome_print'
7
+ require 'pry'
8
+
9
+ # mathieu 5/22/15: not sure what defines Rails without an `env` method,
10
+ # but when it does, let's kill it
11
+ Object.send(:remove_const, :Rails) if defined?(Rails) && !Rails.respond_to?(:env)
12
+
13
+ Dir[File.expand_path('../support/**/*.rb', __FILE__)].each { |file| require file }
14
+
15
+ class MiniTest::Spec
16
+ include ActiveSupport::Testing::SetupAndTeardown
17
+
18
+ class << self
19
+ alias :context :describe
20
+ end
21
+ end
22
+
23
+ class ControllerSpec < MiniTest::Spec
24
+ include ActionView::TestCase::Behavior
25
+ include NokogiriMatcher::Helper
26
+ end
27
+
28
+ MiniTest::Spec.register_spec_type(/Controller$/, ControllerSpec)
@@ -0,0 +1,204 @@
1
+ # NokogiriMatcher is a class belonging to rspec-html-matchers gem:
2
+ # git://github.com/kucaahbe/rspec-html-matchers.git
3
+
4
+ require 'nokogiri'
5
+
6
+ class NokogiriMatcher
7
+ attr_reader :failure_message, :negative_failure_message
8
+ attr_reader :parent_scope, :current_scope
9
+
10
+ TAG_FOUND_DESC = %Q|have at least 1 element matching "%s"|
11
+ TAG_NOT_FOUND_MSG = %Q|expected following:\n%s\nto #{TAG_FOUND_DESC}, found 0.|
12
+ TAG_FOUND_MSG = %Q|expected following:\n%s\nto NOT have element matching "%s", found %s.|
13
+ COUNT_DESC = %Q|have %s element(s) matching "%s"|
14
+ WRONG_COUNT_MSG = %Q|expected following:\n%s\nto #{COUNT_DESC}, found %s.|
15
+ RIGHT_COUNT_MSG = %Q|expected following:\n%s\nto NOT have %s element(s) matching "%s", but found.|
16
+ BETWEEN_COUNT_MSG = %Q|expected following:\n%s\nto have at least %s and at most %s element(s) matching "%s", found %s.|
17
+ RIGHT_BETWEEN_COUNT_MSG = %Q|expected following:\n%s\nto NOT have at least %s and at most %s element(s) matching "%s", but found %s.|
18
+ AT_MOST_MSG = %Q|expected following:\n%s\nto have at most %s element(s) matching "%s", found %s.|
19
+ RIGHT_AT_MOST_MSG = %Q|expected following:\n%s\nto NOT have at most %s element(s) matching "%s", but found %s.|
20
+ AT_LEAST_MSG = %Q|expected following:\n%s\nto have at least %s element(s) matching "%s", found %s.|
21
+ RIGHT_AT_LEAST_MSG = %Q|expected following:\n%s\nto NOT have at least %s element(s) matching "%s", but found %s.|
22
+ REGEXP_NOT_FOUND_MSG = %Q|%s regexp expected within "%s" in following template:\n%s|
23
+ REGEXP_FOUND_MSG = %Q|%s regexp unexpected within "%s" in following template:\n%s\nbut was found.|
24
+ TEXT_NOT_FOUND_MSG = %Q|"%s" expected within "%s" in following template:\n%s|
25
+ TEXT_FOUND_MSG = %Q|"%s" unexpected within "%s" in following template:\n%s\nbut was found.|
26
+ WRONG_COUNT_ERROR_MSG = %Q|:count with :minimum or :maximum has no sence!|
27
+ MIN_MAX_ERROR_MSG = %Q|:minimum shold be less than :maximum!|
28
+ BAD_RANGE_ERROR_MSG = %Q|Your :count range(%s) has no sence!|
29
+
30
+ PRESERVE_WHITESPACE_TAGS = %w( pre textarea )
31
+
32
+ def initialize tag, options={}, &block
33
+ @tag, @options, @block = tag.to_s, options, block
34
+
35
+ if attrs = @options.delete(:with)
36
+ if classes=attrs.delete(:class)
37
+ classes = case classes
38
+ when Array
39
+ classes.join('.')
40
+ when String
41
+ classes.gsub("\s",'.')
42
+ end
43
+ @tag << '.'+classes
44
+ end
45
+ html_attrs_string=''
46
+ attrs.each_pair { |k,v| html_attrs_string << %Q{[#{k.to_s}='#{v.to_s}']} }
47
+ @tag << html_attrs_string
48
+ end
49
+
50
+ validate_options!
51
+ end
52
+
53
+ def matches? document, &block
54
+ @block = block if block
55
+
56
+ document = document.html if defined?(Capybara) && document.is_a?(Capybara::Session)
57
+
58
+ case document
59
+ when String
60
+ @parent_scope = @current_scope = Nokogiri::HTML(document).css(@tag)
61
+ @document = document
62
+ else
63
+ @parent_scope = document.current_scope
64
+ @current_scope = document.parent_scope.css(@tag)
65
+ @document = @parent_scope.to_html
66
+ end
67
+
68
+ if tag_presents? and content_right? and count_right?
69
+ @current_scope = @parent_scope
70
+ @block.call if @block
71
+ true
72
+ else
73
+ false
74
+ end
75
+ end
76
+ alias :matching :matches?
77
+
78
+ def description
79
+ # TODO should it be more complicated?
80
+ if @options.has_key?(:count)
81
+ COUNT_DESC % [@options[:count],@tag]
82
+ else
83
+ TAG_FOUND_DESC % @tag
84
+ end
85
+ end
86
+
87
+ private
88
+
89
+ def tag_presents?
90
+ if @current_scope.first
91
+ @count = @current_scope.count
92
+ @negative_failure_message = TAG_FOUND_MSG % [@document, @tag, @count]
93
+ true
94
+ else
95
+ @failure_message = TAG_NOT_FOUND_MSG % [@document, @tag]
96
+ false
97
+ end
98
+ end
99
+
100
+ def count_right?
101
+ case @options[:count]
102
+ when Integer
103
+ ((@negative_failure_message=RIGHT_COUNT_MSG % [@document,@count,@tag]) && @count == @options[:count]) || (@failure_message=WRONG_COUNT_MSG % [@document,@options[:count],@tag,@count]; false)
104
+ when Range
105
+ ((@negative_failure_message=RIGHT_BETWEEN_COUNT_MSG % [@document,@options[:count].min,@options[:count].max,@tag,@count]) && @options[:count].member?(@count)) || (@failure_message=BETWEEN_COUNT_MSG % [@document,@options[:count].min,@options[:count].max,@tag,@count]; false)
106
+ when nil
107
+ if @options[:maximum]
108
+ ((@negative_failure_message=RIGHT_AT_MOST_MSG % [@document,@options[:maximum],@tag,@count]) && @count <= @options[:maximum]) || (@failure_message=AT_MOST_MSG % [@document,@options[:maximum],@tag,@count]; false)
109
+ elsif @options[:minimum]
110
+ ((@negative_failure_message=RIGHT_AT_LEAST_MSG % [@document,@options[:minimum],@tag,@count]) && @count >= @options[:minimum]) || (@failure_message=AT_LEAST_MSG % [@document,@options[:minimum],@tag,@count]; false)
111
+ else
112
+ true
113
+ end
114
+ end
115
+ end
116
+
117
+ def content_right?
118
+ return true unless @options[:text]
119
+
120
+ case text=@options[:text]
121
+ when Regexp
122
+ new_scope = @current_scope.css(":regexp()",Class.new {
123
+ def initialize(regex)
124
+ @regex = regex
125
+ end
126
+
127
+ def regexp node_set
128
+ node_set.find_all { |node| node.content =~ @regex }
129
+ end
130
+ }.new(text))
131
+ unless new_scope.empty?
132
+ @count = new_scope.count
133
+ @negative_failure_message = REGEXP_FOUND_MSG % [text.inspect,@tag,@document]
134
+ true
135
+ else
136
+ @failure_message = REGEXP_NOT_FOUND_MSG % [text.inspect,@tag,@document]
137
+ false
138
+ end
139
+ else
140
+ css_param = text.gsub(/'/) { %q{\000027} }
141
+ new_scope = @current_scope.css(":content('#{css_param}')",Class.new {
142
+ def content node_set, text
143
+ match_text = text.gsub(/\\000027/, "'")
144
+ node_set.find_all do |node|
145
+ actual_content = if PRESERVE_WHITESPACE_TAGS.include?(node.name)
146
+ node.content
147
+ else
148
+ node.content.strip.squeeze(' ')
149
+ end
150
+ # remove non-braking spaces:
151
+ actual_content.gsub!("\u00a0", ' ')
152
+ actual_content.gsub!("\302\240", ' ')
153
+ actual_content == match_text
154
+ end
155
+ end
156
+ }.new)
157
+ unless new_scope.empty?
158
+ @count = new_scope.count
159
+ @negative_failure_message = TEXT_FOUND_MSG % [text,@tag,@document]
160
+ true
161
+ else
162
+ @failure_message = TEXT_NOT_FOUND_MSG % [text,@tag,@document]
163
+ false
164
+ end
165
+ end
166
+ end
167
+
168
+ protected
169
+
170
+ def validate_options!
171
+ raise 'wrong :count specified' unless [Range, NilClass].include?(@options[:count].class) or @options[:count].is_a?(Integer)
172
+
173
+ [:min, :minimum, :max, :maximum].each do |key|
174
+ raise WRONG_COUNT_ERROR_MSG if @options.has_key?(key) and @options.has_key?(:count)
175
+ end
176
+
177
+ begin
178
+ raise MIN_MAX_ERROR_MSG if @options[:minimum] > @options[:maximum]
179
+ rescue NoMethodError # nil > 4
180
+ rescue ArgumentError # 2 < nil
181
+ end
182
+
183
+ begin
184
+ begin
185
+ raise BAD_RANGE_ERROR_MSG % [@options[:count].to_s] if @options[:count] && @options[:count].is_a?(Range) && (@options[:count].min.nil? or @options[:count].min < 0)
186
+ rescue ArgumentError, "comparison of String with" # if @options[:count] == 'a'..'z'
187
+ raise BAD_RANGE_ERROR_MSG % [@options[:count].to_s]
188
+ end
189
+ rescue TypeError # fix for 1.8.7 for 'rescue ArgumentError, "comparison of String with"' stroke
190
+ raise BAD_RANGE_ERROR_MSG % [@options[:count].to_s]
191
+ end
192
+
193
+ @options[:minimum] ||= @options.delete(:min)
194
+ @options[:maximum] ||= @options.delete(:max)
195
+
196
+ @options[:text] = @options[:text].to_s if @options.has_key?(:text) && !@options[:text].is_a?(Regexp)
197
+ end
198
+
199
+ module Helper
200
+ def html_matcher(tag, options = {}, &block)
201
+ NokogiriMatcher.new(tag, options, &block)
202
+ end
203
+ end
204
+ end
metadata ADDED
@@ -0,0 +1,278 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: caring_form
3
+ version: !ruby/object:Gem::Version
4
+ version: 1.2.3
5
+ platform: ruby
6
+ authors:
7
+ - Mathieu Lajugie
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2017-02-03 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: simple_form
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - ">="
18
+ - !ruby/object:Gem::Version
19
+ version: '0'
20
+ type: :runtime
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - ">="
25
+ - !ruby/object:Gem::Version
26
+ version: '0'
27
+ - !ruby/object:Gem::Dependency
28
+ name: actionpack
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - ">="
32
+ - !ruby/object:Gem::Version
33
+ version: '0'
34
+ type: :runtime
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - ">="
39
+ - !ruby/object:Gem::Version
40
+ version: '0'
41
+ - !ruby/object:Gem::Dependency
42
+ name: activemodel
43
+ requirement: !ruby/object:Gem::Requirement
44
+ requirements:
45
+ - - ">="
46
+ - !ruby/object:Gem::Version
47
+ version: '0'
48
+ type: :runtime
49
+ prerelease: false
50
+ version_requirements: !ruby/object:Gem::Requirement
51
+ requirements:
52
+ - - ">="
53
+ - !ruby/object:Gem::Version
54
+ version: '0'
55
+ - !ruby/object:Gem::Dependency
56
+ name: webshims-rails
57
+ requirement: !ruby/object:Gem::Requirement
58
+ requirements:
59
+ - - "~>"
60
+ - !ruby/object:Gem::Version
61
+ version: 1.15.6
62
+ type: :runtime
63
+ prerelease: false
64
+ version_requirements: !ruby/object:Gem::Requirement
65
+ requirements:
66
+ - - "~>"
67
+ - !ruby/object:Gem::Version
68
+ version: 1.15.6
69
+ - !ruby/object:Gem::Dependency
70
+ name: appraisal
71
+ requirement: !ruby/object:Gem::Requirement
72
+ requirements:
73
+ - - "~>"
74
+ - !ruby/object:Gem::Version
75
+ version: 0.5.2
76
+ type: :development
77
+ prerelease: false
78
+ version_requirements: !ruby/object:Gem::Requirement
79
+ requirements:
80
+ - - "~>"
81
+ - !ruby/object:Gem::Version
82
+ version: 0.5.2
83
+ - !ruby/object:Gem::Dependency
84
+ name: rake
85
+ requirement: !ruby/object:Gem::Requirement
86
+ requirements:
87
+ - - ">="
88
+ - !ruby/object:Gem::Version
89
+ version: '0'
90
+ type: :development
91
+ prerelease: false
92
+ version_requirements: !ruby/object:Gem::Requirement
93
+ requirements:
94
+ - - ">="
95
+ - !ruby/object:Gem::Version
96
+ version: '0'
97
+ - !ruby/object:Gem::Dependency
98
+ name: minitest
99
+ requirement: !ruby/object:Gem::Requirement
100
+ requirements:
101
+ - - ">="
102
+ - !ruby/object:Gem::Version
103
+ version: '0'
104
+ type: :development
105
+ prerelease: false
106
+ version_requirements: !ruby/object:Gem::Requirement
107
+ requirements:
108
+ - - ">="
109
+ - !ruby/object:Gem::Version
110
+ version: '0'
111
+ - !ruby/object:Gem::Dependency
112
+ name: minitest-reporters
113
+ requirement: !ruby/object:Gem::Requirement
114
+ requirements:
115
+ - - ">="
116
+ - !ruby/object:Gem::Version
117
+ version: '0'
118
+ type: :development
119
+ prerelease: false
120
+ version_requirements: !ruby/object:Gem::Requirement
121
+ requirements:
122
+ - - ">="
123
+ - !ruby/object:Gem::Version
124
+ version: '0'
125
+ - !ruby/object:Gem::Dependency
126
+ name: nokogiri
127
+ requirement: !ruby/object:Gem::Requirement
128
+ requirements:
129
+ - - ">="
130
+ - !ruby/object:Gem::Version
131
+ version: '0'
132
+ type: :development
133
+ prerelease: false
134
+ version_requirements: !ruby/object:Gem::Requirement
135
+ requirements:
136
+ - - ">="
137
+ - !ruby/object:Gem::Version
138
+ version: '0'
139
+ - !ruby/object:Gem::Dependency
140
+ name: awesome_print
141
+ requirement: !ruby/object:Gem::Requirement
142
+ requirements:
143
+ - - ">="
144
+ - !ruby/object:Gem::Version
145
+ version: '0'
146
+ type: :development
147
+ prerelease: false
148
+ version_requirements: !ruby/object:Gem::Requirement
149
+ requirements:
150
+ - - ">="
151
+ - !ruby/object:Gem::Version
152
+ version: '0'
153
+ - !ruby/object:Gem::Dependency
154
+ name: pry-nav
155
+ requirement: !ruby/object:Gem::Requirement
156
+ requirements:
157
+ - - ">="
158
+ - !ruby/object:Gem::Version
159
+ version: '0'
160
+ type: :development
161
+ prerelease: false
162
+ version_requirements: !ruby/object:Gem::Requirement
163
+ requirements:
164
+ - - ">="
165
+ - !ruby/object:Gem::Version
166
+ version: '0'
167
+ description: Build clean, robust and consistent forms for Caring.com.
168
+ email:
169
+ - mathieu@caring.com
170
+ executables: []
171
+ extensions: []
172
+ extra_rdoc_files: []
173
+ files:
174
+ - ".gitignore"
175
+ - ".travis.yml"
176
+ - Appraisals
177
+ - Gemfile
178
+ - Guardfile
179
+ - LICENSE
180
+ - README.md
181
+ - Rakefile
182
+ - app/assets/javascripts/caring_form/form-observer.coffee
183
+ - app/assets/javascripts/caring_form/main.coffee
184
+ - app/assets/javascripts/caring_form/remote-validator.coffee
185
+ - app/assets/javascripts/caring_form/rule-based-validator.coffee
186
+ - app/assets/javascripts/caring_form/setup.coffee
187
+ - app/assets/javascripts/caring_form/webshims-customization.coffee
188
+ - app/assets/javascripts/caring_forms.js
189
+ - caring_form.gemspec
190
+ - gemfiles/rails_3_1.gemfile
191
+ - gemfiles/rails_3_2.gemfile
192
+ - gemfiles/rails_4.gemfile
193
+ - gemfiles/rails_4_1.gemfile
194
+ - lib/caring_form.rb
195
+ - lib/caring_form/action_view_extensions/builder.rb
196
+ - lib/caring_form/action_view_extensions/config.rb
197
+ - lib/caring_form/action_view_extensions/flash_error_helper.rb
198
+ - lib/caring_form/action_view_extensions/form_helper.rb
199
+ - lib/caring_form/active_model/monkey_patching.rb
200
+ - lib/caring_form/dsl.rb
201
+ - lib/caring_form/engine.rb
202
+ - lib/caring_form/field/base.rb
203
+ - lib/caring_form/field/check_box.rb
204
+ - lib/caring_form/field/check_boxes.rb
205
+ - lib/caring_form/field/collection.rb
206
+ - lib/caring_form/field/dummy.rb
207
+ - lib/caring_form/field/email.rb
208
+ - lib/caring_form/field/full_name.rb
209
+ - lib/caring_form/field/looking_for.rb
210
+ - lib/caring_form/field/metadata.rb
211
+ - lib/caring_form/field/radio_buttons.rb
212
+ - lib/caring_form/field/string.rb
213
+ - lib/caring_form/field/submit.rb
214
+ - lib/caring_form/field/tel.rb
215
+ - lib/caring_form/field/text.rb
216
+ - lib/caring_form/field/us_zip_code.rb
217
+ - lib/caring_form/field_container.rb
218
+ - lib/caring_form/form_builder.rb
219
+ - lib/caring_form/model.rb
220
+ - lib/caring_form/model/active_model.rb
221
+ - lib/caring_form/model/active_record.rb
222
+ - lib/caring_form/simple_form/initializer.rb
223
+ - lib/caring_form/simple_form/monkey_patching.rb
224
+ - lib/caring_form/tools/referee.rb
225
+ - lib/caring_form/version.rb
226
+ - lib/tasks/webshims.rake
227
+ - spec/caring_form/action_view_extensions/flash_error_helper_spec.rb
228
+ - spec/caring_form/action_view_extensions/form_helper_spec.rb
229
+ - spec/caring_form/dsl_spec.rb
230
+ - spec/caring_form/field/base_spec.rb
231
+ - spec/caring_form/field/check_boxes_spec.rb
232
+ - spec/caring_form/field/collection_spec.rb
233
+ - spec/caring_form/field/radio_buttons_spec.rb
234
+ - spec/caring_form/field/submit_spec.rb
235
+ - spec/caring_form/field_container_spec.rb
236
+ - spec/caring_form/form_builder_spec.rb
237
+ - spec/caring_form/model_spec.rb
238
+ - spec/caring_form/tools/referee_spec.rb
239
+ - spec/spec_helper.rb
240
+ - spec/support/nokogiri_matcher.rb
241
+ homepage: http://www.caring.com
242
+ licenses: []
243
+ metadata: {}
244
+ post_install_message:
245
+ rdoc_options: []
246
+ require_paths:
247
+ - lib
248
+ required_ruby_version: !ruby/object:Gem::Requirement
249
+ requirements:
250
+ - - ">="
251
+ - !ruby/object:Gem::Version
252
+ version: '0'
253
+ required_rubygems_version: !ruby/object:Gem::Requirement
254
+ requirements:
255
+ - - ">="
256
+ - !ruby/object:Gem::Version
257
+ version: '0'
258
+ requirements: []
259
+ rubyforge_project:
260
+ rubygems_version: 2.5.2
261
+ signing_key:
262
+ specification_version: 4
263
+ summary: Build clean, robust and consistent forms for Caring.com.
264
+ test_files:
265
+ - spec/caring_form/action_view_extensions/flash_error_helper_spec.rb
266
+ - spec/caring_form/action_view_extensions/form_helper_spec.rb
267
+ - spec/caring_form/dsl_spec.rb
268
+ - spec/caring_form/field/base_spec.rb
269
+ - spec/caring_form/field/check_boxes_spec.rb
270
+ - spec/caring_form/field/collection_spec.rb
271
+ - spec/caring_form/field/radio_buttons_spec.rb
272
+ - spec/caring_form/field/submit_spec.rb
273
+ - spec/caring_form/field_container_spec.rb
274
+ - spec/caring_form/form_builder_spec.rb
275
+ - spec/caring_form/model_spec.rb
276
+ - spec/caring_form/tools/referee_spec.rb
277
+ - spec/spec_helper.rb
278
+ - spec/support/nokogiri_matcher.rb