nested_form_fields 0.7 → 0.8.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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
- SHA1:
3
- metadata.gz: 494b811bb87fd99fa4b579a0007177634e1beadc
4
- data.tar.gz: 2a0cb2875955c11b82eb72ce052cac5ce51444aa
2
+ SHA256:
3
+ metadata.gz: 236d8d7b63143d4f30595622869bee46712a055ef652de7fd57ae6b754d8e19f
4
+ data.tar.gz: fc404d3d852c8d65097a2559478e8fb7057cdf7d4aab93f151accec28366c3b4
5
5
  SHA512:
6
- metadata.gz: d405f5439c1522f6d3b0acb03618d74ec4606125c8f9238b7d1d8fed8bc49d4325ff338bac2e18819a4b3053dc23a2468ee2cf4e9ad8758c640e6c24bdeba078
7
- data.tar.gz: 0a8d58d9e5e1f3b98cd3c87a18978dd2da98c29c01da36b65b7ca4f338212c01a8acc25d2ad60cc10334b3a8c244b6a52c7bf8dc0b9f0740f14fe0e565524371
6
+ metadata.gz: b77de97deb51cbe1022d436f41d22f9fb89a559d22aa02477d5f7cd8c5d08eb500090c6c5a6771bc437567edffeca7a8edba99543b545693f5123f04570e11b4
7
+ data.tar.gz: ea3b05a99b66042edf6e48798bd8be2903dddad0638d7cb89cb0d370a4673abcd762d05d99453335efdd9e858a982c53f0e399e37578b17567e14535546ae44b
data/.travis.yml CHANGED
@@ -1,5 +1,11 @@
1
1
  rvm:
2
- - 2.1.3
2
+ - 2.0.0
3
+ - 2.1.7
4
+ - 2.2.3
5
+ - 2.3.2
6
+
7
+ before_install: gem install bundler -v 1.11.2
8
+
3
9
  before_script:
4
10
  - "export DISPLAY=:99.0"
5
11
  - "sh -e /etc/init.d/xvfb start"
data/Gemfile CHANGED
@@ -1,6 +1,4 @@
1
1
  source 'https://rubygems.org'
2
2
 
3
- ruby '2.1.3'
4
-
5
3
  # Specify your gem's dependencies in nested_form_fields.gemspec
6
4
  gemspec
data/README.md CHANGED
@@ -5,8 +5,8 @@ This Rails gem helps creating forms for models with nested has_many associations
5
5
  It uses jQuery to dynamically add and remove nested associations.
6
6
 
7
7
  - Works for arbitrarily deeply nested associations (tested up to 4 levels).
8
- - Works with form builders like simple_form.
9
- - Requires Ruby 1.9 and the Rails asset pipeline
8
+ - Works with form builders like [simple_form](https://github.com/plataformatec/simple_form).
9
+ - Requires Ruby 1.9+ and the Rails asset pipeline.
10
10
 
11
11
 
12
12
 
@@ -14,115 +14,216 @@ It uses jQuery to dynamically add and remove nested associations.
14
14
 
15
15
  Add this line to your application's Gemfile:
16
16
 
17
- gem 'nested_form_fields'
17
+ ```ruby
18
+ gem 'nested_form_fields'
19
+ ```
18
20
 
19
21
  And then execute:
20
22
 
21
- $ bundle
23
+ ```console
24
+ $ bundle
25
+ ```
22
26
 
23
27
  In your application.js file add:
24
28
 
25
- //= require nested_form_fields
29
+ ```javascript
30
+ //= require nested_form_fields
31
+ ```
32
+
33
+ ### Rails 5.1+
34
+
35
+ You will need to install jQuery as Rails dropped it from its default stack.
36
+
37
+ Add to Gemfile:
38
+
39
+ ```ruby
40
+ gem 'jquery-rails'
41
+ ```
42
+
43
+ Execute:
44
+
45
+ ```console
46
+ $ bundle
47
+ ```
48
+
49
+ Add to application.js:
50
+
51
+ ```javascript
52
+ //= require jquery3
53
+ //= require jquery_ujs
54
+ ```
26
55
 
27
56
  ## Usage
28
57
 
29
58
  Assume you have a user model with nested videos:
30
59
 
31
- class User < ActiveRecord::Base
32
- has_many :videos
33
- accepts_nested_attributes_for :videos, allow_destroy: true
34
- end
60
+ ```ruby
61
+ class User < ActiveRecord::Base
62
+ has_many :videos
63
+ accepts_nested_attributes_for :videos, allow_destroy: true
64
+ end
65
+ ```
66
+
67
+ Use the `nested_fields_for` helper inside your user form to add the video fields:
35
68
 
36
- Use the *nested_fields_for* helper inside your user form to add the video fields:
69
+ ```haml
70
+ = form_for @user do |f|
71
+ = f.nested_fields_for :videos do |ff|
72
+ = ff.text_field :video_title
73
+ ..
74
+ ```
75
+
76
+ Links to add and remove fields can be added using the `add_nested_fields_link` and `remove_nested_fields_link` helpers:
37
77
 
38
- = form_for @user do |f|
39
- = f.nested_fields_for :videos do |ff|
40
- = ff.text_field :video_title
41
- ..
78
+ ```haml
79
+ = form_for @user do |f|
80
+ = f.nested_fields_for :videos do |ff|
81
+ = ff.remove_nested_fields_link
82
+ = ff.text_field :video_title
83
+ ..
84
+ = f.add_nested_fields_link :videos
85
+ ```
42
86
 
43
- Links to add and remove fields can be added using the *add_nested_fields_link* and *remove_nested_fields_link* helpers:
87
+ Note that `remove_nested_fields_link` needs to be called within the `nested_fields_for` call and `add_nested_fields_link` outside of it via the parent builder.
44
88
 
45
- = form_for @user do |f|
46
- = f.nested_fields_for :videos do |ff|
47
- = ff.remove_nested_fields_link
48
- = ff.text_field :video_title
49
- ..
50
- = f.add_nested_fields_link :videos
89
+ ## Link Customization
51
90
 
52
- Note that *remove_nested_fields_link* needs to be called within the *nested_fields_for* call and *add_nested_fields_link* outside of it via the parent builder.
91
+ You can change the link text of `remove_nested_fields_link` and `add_nested_fields_link` like this:
53
92
 
54
- You can change the link text of *remove_nested_fields_link* and *add_nested_fields_link* like this:
93
+ ```haml
94
+ ...
95
+ ff.remove_nested_fields_link 'Remove me'
96
+ ...
97
+ f.add_nested_fields_link :videos, 'Add another funtastic video'
98
+ ```
55
99
 
56
- ...
57
- ff.remove_nested_fields_link 'Remove me'
58
- ...
59
- f.add_nested_fields_link :videos, 'Add another funtastic video'
100
+ You can add classes/attributes to the `remove_nested_fields_link` and `add_nested_fields_link` like this:
60
101
 
61
- You can add classes/attributes to the *remove_nested_fields_link* and *add_nested_fields_link* like this:
102
+ ```haml
103
+ ...
104
+ ff.remove_nested_fields_link 'Remove me', class: 'btn btn-danger', role: 'button'
105
+ ...
106
+ f.add_nested_fields_link :videos, 'Add another funtastic video', class: 'btn btn-primary', role: 'button'
107
+ ```
62
108
 
63
- ...
64
- ff.remove_nested_fields_link 'Remove me', class: 'btn btn-danger', role: 'button'
65
- ...
66
- f.add_nested_fields_link :videos, 'Add another funtastic video', class: 'btn btn-primary', role: 'button'
109
+ You can supply a block to the `remove_nested_fields_link` and the `add_nested_fields_link` helpers, as you can with `link_to`:
67
110
 
68
- You can change the type of the element wrapping the nested fields using the *wrapper_tag* option:
111
+ ```haml
112
+ = ff.remove_nested_fields_link do
113
+ Remove me %span.icon-trash
114
+ ```
69
115
 
70
- = f.nested_fields_for :videos, wrapper_tag: :div do |ff|
116
+ You can add a `data-confirm` attribute to the `remove_nested_fields_link` if you want the user to confirm whenever they remove a nested field:
117
+
118
+ ```haml
119
+ = ff.remove_nested_fields_link 'Remove me', data: { confirm: 'Are you sure?' }
120
+ ```
121
+
122
+ ## Custom Container
123
+
124
+ You can specify a custom container to add nested forms into, by supplying an id via the `data-insert-into` attribute of the `add_nested_fields_link`:
125
+
126
+ ```haml
127
+ f.add_nested_fields_link :videos, 'Add another funtastic video', data: { insert_into: '<container_id>' }
128
+ ```
129
+
130
+ ## Custom Fields Wrapper
131
+
132
+ You can change the type of the element wrapping the nested fields using the `wrapper_tag` option:
133
+
134
+ ```haml
135
+ = f.nested_fields_for :videos, wrapper_tag: :div do |ff|
136
+ ```
71
137
 
72
138
  The default wrapper element is a fieldset. To add legend element to the fieldset use:
73
139
 
74
- = f.nested_fields_for :videos, legend: "Video" do |ff|
140
+ ```haml
141
+ = f.nested_fields_for :videos, legend: "Video" do |ff|
142
+ ```
75
143
 
76
144
  You can pass options like you would to the `content_tag` method by nesting them in a `:wrapper_options` hash:
77
145
 
78
- = f.nested_fields_for :videos, wrapper_options: { class: 'row' } do |ff|
146
+ ```haml
147
+ = f.nested_fields_for :videos, wrapper_options: { class: 'row' } do |ff|
148
+ ```
149
+
150
+ ## Rails 4 Parameter Whitelisting
79
151
 
80
- If you are using Rails 4 remember to add << NESTED_MODEL >>_attributes and the attributes to the permitted params.
81
- Also, if you want to destroy the nested model you should add :_destroy and :id.
152
+ If you are using Rails 4 remember to add {{ NESTED_MODEL }}_attributes and the attributes to the permitted params.
153
+ If you want to destroy the nested model you should add `:_destroy` and `:id`.
82
154
  For example:
83
155
 
84
- # app/views/users/_form.haml.erb
85
- = form_for @user do |f|
86
- = f.nested_fields_for :videos do |ff|
87
- = ff.remove_nested_fields_link
88
- = ff.text_field :video_title
89
- ..
90
- = f.add_nested_fields_link :videos
91
-
92
- # app/controllers/users_controller
156
+ ```haml
157
+ # app/views/users/_form.haml.erb
158
+ = form_for @user do |f|
159
+ = f.nested_fields_for :videos do |ff|
160
+ = ff.remove_nested_fields_link
161
+ = ff.text_field :video_title
93
162
  ..
94
- def user_params
95
- params.require(:user)
96
- .permit(:name,:email,videos_attributes:[:video_title,:_destroy,:id])
97
- # ^^^ ^^^ ^^^
98
- # nested model attrs
99
- # they will let you delete the nested model
100
- end
163
+ = f.add_nested_fields_link :videos
164
+ ```
101
165
 
166
+ ```ruby
167
+ # app/controllers/users_controller
168
+ ..
169
+ def user_params
170
+ params.require(:user)
171
+ .permit(:name,:email,videos_attributes:[:video_title,:_destroy,:id])
172
+ # ^^^ ^^^ ^^^
173
+ # nested model attrs
174
+ # they will let you delete the nested model
175
+ end
176
+ ```
102
177
 
103
- There are 4 javascipt events firing before and after addition/removal of the fields in the *nested_form_fields* namespace. Namely:
104
- fields_adding, fields_added, fields_removing, fields_removed.
178
+ ## Events
105
179
 
106
- The events fields_added and fields_removed are triggered on the element being added or removed. The events bubble up so you can listen for them on any parent element.
107
- This makes it easy to add listeners when you have multiple nested_form_fields on the same page.
180
+ There are four JavaScript events firing before and after addition/removal of the fields in the `nested_form_fields` namespace:
108
181
 
109
- CoffeeScript samples:
182
+ - `fields_adding`
183
+ - `fields_added`
184
+ - `fields_removing`
185
+ - `fields_removed`
110
186
 
111
- # Listen on an element
112
- initializeSortable -> ($el)
113
- $el.sortable(...)
114
- $el.on 'fields_added.nested_form_fields', -> (event, param)
115
- console.log event.target # The added field
116
- console.log $(this) # $el
117
-
118
- # Listen on document
119
- $(document).on "fields_added.nested_form_fields", (event,param) ->
120
- switch param.object_class
121
- when "video"
122
- console.log "Video object added"
123
- else
124
- console.log "INFO: Fields were successfully added, callback not handled."
187
+ The events `fields_added` and `fields_removed` are triggered on the element being added or removed. The events bubble up so you can listen for them on any parent element.
188
+ This makes it easy to add listeners when you have multiple `nested_form_fields` on the same page.
189
+
190
+ CoffeeScript samples:
125
191
 
192
+ ```coffeescript
193
+ # Listen on an element
194
+ initializeSortable -> ($el)
195
+ $el.sortable(...)
196
+ $el.on 'fields_added.nested_form_fields', (event, param) ->
197
+ console.log event.target # The added field
198
+ console.log $(this) # $el
199
+
200
+ # Listen on document
201
+ $(document).on "fields_added.nested_form_fields", (event, param) ->
202
+ switch param.object_class
203
+ when "video"
204
+ console.log "Video object added"
205
+ else
206
+ console.log "INFO: Fields were successfully added, callback not handled."
207
+ ```
208
+
209
+ You can pass any additional data to the event's callback. This may be useful if you trigger them programmatically. Example:
210
+
211
+ ```coffeescript
212
+ # Trigger button click programmatically and pass an object `{hello: 'world'}`
213
+ $('.add_nested_fields_link').trigger('click', [{hello: 'world'}])
214
+
215
+ # Listen for the event
216
+ $(document).on "fields_added.nested_form_fields", (event, param) ->
217
+ console.log param.additional_data #=> {hello: 'world'}
218
+ ```
219
+
220
+ ## Index replacement string
221
+
222
+ Sometimes your code needs to know what index it has when it is instantiated onto the page.
223
+ HTML data elements may need to point to other form elements for instance. This is needed for integration
224
+ with rails3-jquery-autocomplete.
225
+
226
+ To enable string substitution with the current index use the magic string `__nested_field_for_replace_with_index__`.
126
227
 
127
228
  ## Contributing
128
229
 
@@ -2,20 +2,25 @@ window.nested_form_fields or= {}
2
2
 
3
3
  nested_form_fields.bind_nested_forms_links = () ->
4
4
  $('body').off("click", '.add_nested_fields_link')
5
- $('body').on 'click', '.add_nested_fields_link', (event) ->
5
+ $('body').on 'click', '.add_nested_fields_link', (event, additional_data) ->
6
6
  $link = $(this)
7
7
  object_class = $link.data('object-class')
8
8
  association_path = $link.data('association-path')
9
9
  added_index = $(".nested_#{association_path}").length
10
- $.event.trigger("fields_adding.nested_form_fields",{object_class: object_class, added_index: added_index, association_path: association_path});
11
- $template = $("##{association_path}_template")
12
- target = $link.attr('data-insert-into')
10
+ $.event.trigger("fields_adding.nested_form_fields",{object_class: object_class, added_index: added_index, association_path: association_path, additional_data: additional_data});
11
+ if $link.data('scope')
12
+ $template = $("#{$link.data('scope')} ##{association_path}_template")
13
+ else
14
+ $template = $("##{association_path}_template")
15
+ target = $link.data('insert-into')
13
16
 
14
17
  template_html = $template.html()
15
18
 
16
19
  # insert association indexes
17
20
  index_placeholder = "__#{association_path}_index__"
18
21
  template_html = template_html.replace(new RegExp(index_placeholder,"g"), added_index)
22
+ # look for replacements in user defined code and substitute with the index
23
+ template_html = template_html.replace(new RegExp("__nested_field_for_replace_with_index__","g"), added_index)
19
24
 
20
25
  # replace child template div tags with script tags to avoid form submission of templates
21
26
  $parsed_template = $(template_html)
@@ -28,25 +33,30 @@ nested_form_fields.bind_nested_forms_links = () ->
28
33
  $('#' + target).append($parsed_template)
29
34
  else
30
35
  $template.before( $parsed_template )
31
- $parsed_template.trigger("fields_added.nested_form_fields", {object_class: object_class, added_index: added_index, association_path: association_path, event: event});
36
+ $parsed_template.trigger("fields_added.nested_form_fields", {object_class: object_class, added_index: added_index, association_path: association_path, event: event, additional_data: additional_data});
32
37
  false
33
38
 
34
39
  $('body').off("click", '.remove_nested_fields_link')
35
40
  $('body').on 'click', '.remove_nested_fields_link', ->
36
41
  $link = $(this)
37
- return false unless $.rails.allowAction($link)
42
+ return false unless $.rails == undefined || $.rails.allowAction($link)
43
+ return false if $link.attr('disabled')
38
44
  object_class = $link.data('object-class')
39
45
  delete_association_field_name = $link.data('delete-association-field-name')
40
- removed_index = parseInt(delete_association_field_name.match('(\\d+\\]\\[_destroy])')[0][0])
46
+ removed_index = parseInt(delete_association_field_name.match('(\\d+\\]\\[_destroy])')[0].match('\\d+')[0])
41
47
  $.event.trigger("fields_removing.nested_form_fields",{object_class: object_class, delete_association_field_name: delete_association_field_name, removed_index: removed_index });
42
48
  $nested_fields_container = $link.parents(".nested_fields").first()
43
- $nested_fields_container.before "<input type='hidden' name='#{delete_association_field_name}' value='1' />"
49
+ delete_field = $nested_fields_container.find("input[type='hidden'][name='#{delete_association_field_name}']")
50
+ if delete_field.length > 0
51
+ delete_field.val('1')
52
+ else
53
+ $nested_fields_container.before "<input type='hidden' name='#{delete_association_field_name}' value='1' />"
44
54
  $nested_fields_container.hide()
45
- $nested_fields_container.find('input[required]:hidden').removeAttr('required')
55
+ $nested_fields_container.find('input[required]:hidden, select[required]:hidden, textarea[required]:hidden').removeAttr('required')
46
56
  $nested_fields_container.trigger("fields_removed.nested_form_fields",{object_class: object_class, delete_association_field_name: delete_association_field_name, removed_index: removed_index});
47
57
  false
48
58
 
49
- $(document).on "page:change", ->
59
+ $(document).on "page:change turbolinks:load", ->
50
60
  nested_form_fields.bind_nested_forms_links()
51
61
 
52
62
  jQuery ->
@@ -1,3 +1,3 @@
1
1
  module NestedFormFields
2
- VERSION = "0.7"
2
+ VERSION = "0.8.4"
3
3
  end
@@ -24,13 +24,14 @@ module ActionView::Helpers
24
24
 
25
25
 
26
26
  def add_nested_fields_link association, text = nil, html_options = {}, &block
27
+ html_options, text = text, nil if block_given? && text.is_a?(Hash)
27
28
  html_class = html_options.delete(:class) || {}
28
29
  html_data = html_options.delete(:data) || {}
29
30
 
30
31
  args = []
31
32
  args << (text || "Add #{association.to_s.singularize.humanize}") unless block_given?
32
33
  args << ''
33
- args << { class: "#{html_class} add_nested_fields_link",
34
+ args << { class: "#{html_class.empty? ? '' : html_class} add_nested_fields_link",
34
35
  data: { association_path: association_path(association.to_s),
35
36
  object_class: association.to_s.singularize }.merge(html_data)
36
37
  }.merge(html_options)
@@ -39,13 +40,14 @@ module ActionView::Helpers
39
40
  end
40
41
 
41
42
  def remove_nested_fields_link text = nil, html_options = {}, &block
43
+ html_options, text = text, nil if block_given? && text.is_a?(Hash)
42
44
  html_class = html_options.delete(:class) || {}
43
45
  html_data = html_options.delete(:data) || {}
44
46
 
45
47
  args = []
46
48
  args << (text || 'x') unless block_given?
47
49
  args << ''
48
- args << { class: "#{html_class} remove_nested_fields_link",
50
+ args << { class: "#{html_class.empty? ? '' : html_class} remove_nested_fields_link",
49
51
  data: { delete_association_field_name: delete_association_field_name,
50
52
  object_class: @object.class.name.underscore.downcase }.merge(html_data)
51
53
  }.merge(html_options)
@@ -67,10 +69,18 @@ module ActionView::Helpers
67
69
  end
68
70
 
69
71
  output = ActiveSupport::SafeBuffer.new
70
- association.each do |child|
71
- output << nested_fields_wrapper(association_name, options[:wrapper_tag], options[:legend], options[:wrapper_options]) do
72
+ association.each_with_index do |child, index|
73
+ wrapper_options = options[:wrapper_options].clone || {}
74
+ if child._destroy == true
75
+ wrapper_options[:style] = wrapper_options[:style] ? wrapper_options[:style] + ';' + 'display:none' : 'display:none'
76
+ output << destroy_hidden_field(association_name, index)
77
+ end
78
+
79
+ # Build the wrapper + content and do substitution with the current index allows JS functions to have proper references
80
+ wrapped_block = nested_fields_wrapper(association_name, options[:wrapper_tag], options[:legend], wrapper_options) do
72
81
  fields_for_nested_model("#{name}[#{options[:child_index] || nested_child_index(name)}]", child, options, block)
73
82
  end
83
+ output << wrapped_block.gsub('__nested_field_for_replace_with_index__', index.to_s).html_safe
74
84
  end
75
85
 
76
86
  output << nested_model_template(name, association_name, options, block)
@@ -93,7 +103,7 @@ module ActionView::Helpers
93
103
  class: for_template ? 'form_template' : nil,
94
104
  style: for_template ? 'display:none' : nil ) do
95
105
  nested_fields_wrapper(association_name, options[:wrapper_tag], options[:legend], options[:wrapper_options]) do
96
- association_class = (options[:class_name] || association_name).to_s.classify.constantize
106
+ association_class = (options[:class_name] || object.public_send(association_name).klass.name).to_s.classify.constantize
97
107
  fields_for_nested_model("#{name}[#{index_placeholder(association_name)}]",
98
108
  association_class.new,
99
109
  options.merge(for_template: true), block)
@@ -106,7 +116,7 @@ module ActionView::Helpers
106
116
  end
107
117
 
108
118
  def association_path association_name
109
- "#{object_name.gsub('][','_').gsub(/_attributes/,'').sub('[','_').sub(']','')}_#{association_name}"
119
+ "#{object_name.to_s.gsub('][','_').gsub(/_attributes/,'').sub('[','_').sub(']','')}_#{association_name}"
110
120
  end
111
121
 
112
122
  def index_placeholder association_name
@@ -124,6 +134,11 @@ module ActionView::Helpers
124
134
  end
125
135
  end
126
136
 
137
+ def destroy_hidden_field(association_name, index)
138
+ @template.hidden_field "#{object_name}[#{association_name}_attributes][#{index}]",
139
+ :_destroy, value: 1
140
+ end
141
+
127
142
  def add_default_classes_to_wrapper_options(association_name, wrapper_options)
128
143
  default_classes = ["nested_fields", "nested_#{association_path(association_name)}"]
129
144
  wrapper_options[:class] = wrapper_options[:class].is_a?(String) ? wrapper_options[:class].split(" ") : wrapper_options[:class].to_a
@@ -5,7 +5,7 @@ Gem::Specification.new do |gem|
5
5
  gem.authors = ["Nico Ritsche"]
6
6
  gem.email = ["ncrdevmail@gmail.com"]
7
7
  gem.description = %q{Rails gem for dynamically adding and removing nested has_many association fields in a form.
8
- Uses jQuery and supports multiple nesting levels. Requires Ruby 1.9 and the asset pipeline.}
8
+ Uses jQuery and supports multiple nesting levels. Requires Ruby 1.9+ and the asset pipeline.}
9
9
  gem.summary = %q{Rails gem for dynamically adding and removing nested has_many association fields in a form.}
10
10
  gem.homepage = ""
11
11
 
@@ -18,15 +18,19 @@ Gem::Specification.new do |gem|
18
18
  gem.license = 'MIT'
19
19
 
20
20
  gem.add_dependency 'rails', '>= 3.2.0'
21
+ gem.add_dependency 'coffee-rails', '>= 3.2.1'
22
+ gem.add_dependency 'jquery-rails'
21
23
 
22
- gem.add_development_dependency 'jquery-rails'
23
- gem.add_development_dependency 'rspec-rails', '2.9.0'
24
+ gem.add_development_dependency 'rspec-rails', '~> 3.5'
25
+ gem.add_development_dependency 'nokogiri', '1.6.8.1'
24
26
  gem.add_development_dependency 'assert_difference'
25
27
  gem.add_development_dependency 'capybara'
26
- gem.add_development_dependency 'selenium-webdriver'
27
- gem.add_development_dependency 'sqlite3'
28
+ gem.add_development_dependency 'geckodriver-helper'
29
+ gem.add_development_dependency 'selenium-webdriver', '> 3.0.5'
30
+ gem.add_development_dependency 'sqlite3', '~> 1.3.6'
28
31
  gem.add_development_dependency 'haml', '>= 3.1.5'
29
- gem.add_development_dependency 'haml-rails'
32
+ gem.add_development_dependency 'haml-rails', '~> 0.4.0'
30
33
  gem.add_development_dependency 'sass-rails', '~> 3.2.3'
31
- gem.add_development_dependency 'coffee-rails', '~> 3.2.1'
34
+ gem.add_development_dependency 'test-unit', '1.2.3'
35
+ gem.add_development_dependency 'public_suffix', '~> 1.4.6'
32
36
  end
@@ -20,7 +20,8 @@
20
20
  %p
21
21
  %strong Todos
22
22
  = pf.nested_fields_for :todos do |tf|
23
- = tf.remove_nested_fields_link
23
+ = tf.remove_nested_fields_link class: 'test_class' do
24
+ = 'x'
24
25
  %p
25
26
  = tf.label :description
26
27
  = tf.text_field :description
@@ -0,0 +1,273 @@
1
+
2
+
3
+ Started GET "/" for 127.0.0.1 at 2014-07-23 09:59:20 +0300
4
+ Connecting to database specified by database.yml
5
+ Processing by UsersController#new as HTML
6
+ Completed 500 Internal Server Error in 12.6ms
7
+
8
+ ActiveRecord::StatementInvalid (Could not find table 'users'):
9
+ app/controllers/users_controller.rb:23:in `new'
10
+ app/controllers/users_controller.rb:23:in `new'
11
+
12
+
13
+ Rendered /Users/nico/.rvm/gems/ruby-1.9.3-p484/gems/actionpack-3.2.15/lib/action_dispatch/middleware/templates/rescues/_trace.erb (0.9ms)
14
+ Rendered /Users/nico/.rvm/gems/ruby-1.9.3-p484/gems/actionpack-3.2.15/lib/action_dispatch/middleware/templates/rescues/_request_and_response.erb (0.6ms)
15
+ Rendered /Users/nico/.rvm/gems/ruby-1.9.3-p484/gems/actionpack-3.2.15/lib/action_dispatch/middleware/templates/rescues/diagnostics.erb within rescues/layout (6.8ms)
16
+ Connecting to database specified by database.yml
17
+  (1.7ms) select sqlite_version(*)
18
+  (1.2ms) CREATE TABLE "schema_migrations" ("version" varchar(255) NOT NULL)
19
+  (0.7ms) CREATE UNIQUE INDEX "unique_schema_migrations" ON "schema_migrations" ("version")
20
+  (1.1ms) SELECT "schema_migrations"."version" FROM "schema_migrations"
21
+ Migrating to CreateUsers (20120518212100)
22
+  (0.0ms) begin transaction
23
+  (0.2ms) CREATE TABLE "users" ("id" INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL, "name" varchar(255), "created_at" datetime NOT NULL, "updated_at" datetime NOT NULL)
24
+  (0.1ms) INSERT INTO "schema_migrations" ("version") VALUES ('20120518212100')
25
+  (0.8ms) commit transaction
26
+ Migrating to CreateProjects (20120523095218)
27
+  (0.0ms) begin transaction
28
+  (0.2ms) CREATE TABLE "projects" ("id" INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL, "name" varchar(255), "description" text, "user_id" integer)
29
+  (0.1ms) CREATE INDEX "index_projects_on_user_id" ON "projects" ("user_id")
30
+  (0.1ms) INSERT INTO "schema_migrations" ("version") VALUES ('20120523095218')
31
+  (0.7ms) commit transaction
32
+ Migrating to CreateTodos (20120523095357)
33
+  (0.0ms) begin transaction
34
+  (0.2ms) CREATE TABLE "todos" ("id" INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL, "description" varchar(255), "model_with_todos_id" integer, "model_with_todos_type" varchar(255)) 
35
+  (0.1ms) CREATE INDEX "index_todos_on_model_with_todos_id" ON "todos" ("model_with_todos_id")
36
+  (0.1ms) CREATE INDEX "index_todos_on_model_with_todos_type" ON "todos" ("model_with_todos_type")
37
+  (0.1ms) INSERT INTO "schema_migrations" ("version") VALUES ('20120523095357')
38
+  (0.8ms) commit transaction
39
+  (0.1ms) SELECT "schema_migrations"."version" FROM "schema_migrations"
40
+
41
+
42
+ Started GET "/" for 127.0.0.1 at 2014-07-23 10:00:25 +0300
43
+ Connecting to database specified by database.yml
44
+ Processing by UsersController#new as HTML
45
+ Completed 500 Internal Server Error in 38.8ms
46
+
47
+ ActionView::MissingTemplate (Missing template users/edit, application/edit with {:locale=>[:en], :formats=>[:html], :handlers=>[:erb, :builder]}. Searched in:
48
+ * "/Users/nico/Rails/nested_form_fields/spec/dummy/app/views"
49
+ ):
50
+ app/controllers/users_controller.rb:24:in `new'
51
+
52
+
53
+ Rendered /Users/nico/.rvm/gems/ruby-1.9.3-p484/gems/actionpack-3.2.15/lib/action_dispatch/middleware/templates/rescues/missing_template.erb within rescues/layout (1.8ms)
54
+
55
+
56
+ Started GET "/users/new" for 127.0.0.1 at 2014-07-23 10:00:55 +0300
57
+ Processing by UsersController#new as HTML
58
+ Completed 500 Internal Server Error in 0.8ms
59
+
60
+ ActionView::MissingTemplate (Missing template users/edit, application/edit with {:locale=>[:en], :formats=>[:html], :handlers=>[:erb, :builder]}. Searched in:
61
+ * "/Users/nico/Rails/nested_form_fields/spec/dummy/app/views"
62
+ ):
63
+ app/controllers/users_controller.rb:24:in `new'
64
+
65
+
66
+ Rendered /Users/nico/.rvm/gems/ruby-1.9.3-p484/gems/actionpack-3.2.15/lib/action_dispatch/middleware/templates/rescues/missing_template.erb within rescues/layout (0.3ms)
67
+
68
+
69
+ Started GET "/" for 127.0.0.1 at 2014-07-23 10:02:23 +0300
70
+ Processing by UsersController#new as HTML
71
+ Completed 500 Internal Server Error in 0.8ms
72
+
73
+ ActionView::MissingTemplate (Missing template users/edit, application/edit with {:locale=>[:en], :formats=>[:html], :handlers=>[:erb, :builder]}. Searched in:
74
+ * "/Users/nico/Rails/nested_form_fields/spec/dummy/app/views"
75
+ ):
76
+ app/controllers/users_controller.rb:24:in `new'
77
+
78
+
79
+ Rendered /Users/nico/.rvm/gems/ruby-1.9.3-p484/gems/actionpack-3.2.15/lib/action_dispatch/middleware/templates/rescues/missing_template.erb within rescues/layout (0.4ms)
80
+
81
+
82
+ Started GET "/" for 127.0.0.1 at 2014-07-23 10:07:56 +0300
83
+ Connecting to database specified by database.yml
84
+ Processing by UsersController#new as HTML
85
+ Rendered users/edit.html.haml within layouts/application (45.9ms)
86
+ Compiled normalize.css (35ms) (pid 28243)
87
+ Compiled users.css (3ms) (pid 28243)
88
+ Compiled application.css (183ms) (pid 28243)
89
+ Compiled jquery.js (1ms) (pid 28243)
90
+ Compiled jquery_ujs.js (0ms) (pid 28243)
91
+ Compiled nested_form_fields.js (155ms) (pid 28243)
92
+ Compiled users.js (92ms) (pid 28243)
93
+ Compiled application.js (280ms) (pid 28243)
94
+ Rendered layouts/_navigation.html.haml (0.7ms)
95
+ Rendered layouts/_messages.html.haml (0.8ms)
96
+ User Load (0.2ms) SELECT "users".* FROM "users" ORDER BY name
97
+ Completed 200 OK in 567.8ms (Views: 538.3ms | ActiveRecord: 1.8ms)
98
+
99
+
100
+ Started GET "/assets/normalize.css?body=1" for 127.0.0.1 at 2014-07-23 10:07:56 +0300
101
+ Served asset /normalize.css - 200 OK (4ms)
102
+
103
+
104
+ Started GET "/assets/application.css?body=1" for 127.0.0.1 at 2014-07-23 10:07:56 +0300
105
+ Served asset /application.css - 200 OK (3ms)
106
+
107
+
108
+ Started GET "/assets/jquery_ujs.js?body=1" for 127.0.0.1 at 2014-07-23 10:07:56 +0300
109
+ Served asset /jquery_ujs.js - 200 OK (19ms)
110
+
111
+
112
+ Started GET "/assets/jquery.js?body=1" for 127.0.0.1 at 2014-07-23 10:07:56 +0300
113
+ Served asset /jquery.js - 200 OK (1ms)
114
+
115
+
116
+ Started GET "/assets/users.css?body=1" for 127.0.0.1 at 2014-07-23 10:07:56 +0300
117
+ Served asset /users.css - 200 OK (1ms)
118
+
119
+
120
+ Started GET "/assets/nested_form_fields.js?body=1" for 127.0.0.1 at 2014-07-23 10:07:56 +0300
121
+ Served asset /nested_form_fields.js - 200 OK (1ms)
122
+
123
+
124
+ Started GET "/assets/users.js?body=1" for 127.0.0.1 at 2014-07-23 10:07:57 +0300
125
+ Served asset /users.js - 200 OK (1ms)
126
+
127
+
128
+ Started GET "/assets/application.js?body=1" for 127.0.0.1 at 2014-07-23 10:07:57 +0300
129
+ Served asset /application.js - 200 OK (3ms)
130
+
131
+
132
+ Started GET "/" for 127.0.0.1 at 2014-07-23 10:17:46 +0300
133
+ Connecting to database specified by database.yml
134
+ Processing by UsersController#new as HTML
135
+ Rendered users/edit.html.haml within layouts/application (46.4ms)
136
+ Compiled nested_form_fields.js (161ms) (pid 29718)
137
+ Compiled application.js (3ms) (pid 29718)
138
+ Rendered layouts/_navigation.html.haml (0.6ms)
139
+ Rendered layouts/_messages.html.haml (0.7ms)
140
+ User Load (0.1ms) SELECT "users".* FROM "users" ORDER BY name
141
+ Completed 200 OK in 272.5ms (Views: 243.3ms | ActiveRecord: 1.9ms)
142
+
143
+
144
+ Started GET "/assets/jquery.js?body=1" for 127.0.0.1 at 2014-07-23 10:17:46 +0300
145
+ Served asset /jquery.js - 200 OK (3ms)
146
+
147
+
148
+ Started GET "/assets/jquery_ujs.js?body=1" for 127.0.0.1 at 2014-07-23 10:17:46 +0300
149
+ Served asset /jquery_ujs.js - 200 OK (21ms)
150
+
151
+
152
+ Started GET "/assets/application.css?body=1" for 127.0.0.1 at 2014-07-23 10:17:46 +0300
153
+ Served asset /application.css - 200 OK (9ms)
154
+
155
+
156
+ Started GET "/assets/users.css?body=1" for 127.0.0.1 at 2014-07-23 10:17:46 +0300
157
+ Served asset /users.css - 200 OK (1ms)
158
+
159
+
160
+ Started GET "/assets/nested_form_fields.js?body=1" for 127.0.0.1 at 2014-07-23 10:17:46 +0300
161
+ Served asset /nested_form_fields.js - 200 OK (2ms)
162
+
163
+
164
+ Started GET "/assets/normalize.css?body=1" for 127.0.0.1 at 2014-07-23 10:17:46 +0300
165
+ Served asset /normalize.css - 200 OK (1ms)
166
+
167
+
168
+ Started GET "/assets/users.js?body=1" for 127.0.0.1 at 2014-07-23 10:17:46 +0300
169
+ Served asset /users.js - 200 OK (2ms)
170
+
171
+
172
+ Started GET "/assets/application.js?body=1" for 127.0.0.1 at 2014-07-23 10:17:46 +0300
173
+ Served asset /application.js - 200 OK (7ms)
174
+
175
+
176
+ Started POST "/users" for 127.0.0.1 at 2014-07-23 10:18:52 +0300
177
+ Processing by UsersController#create as HTML
178
+ Parameters: {"utf8"=>"✓", "authenticity_token"=>"+9YZ/C5wvq3T0W4YNpL4hQxCZZEtmzQ8My5dcEckEBc=", "user"=>{"name"=>"", "projects_attributes"=>{"0"=>{"_destroy"=>"1", "name"=>"", "description"=>""}}}, "commit"=>"Create User"}
179
+  (0.1ms) begin transaction
180
+ SQL (5.2ms) INSERT INTO "users" ("created_at", "name", "updated_at") VALUES (?, ?, ?) [["created_at", Wed, 23 Jul 2014 07:18:52 UTC +00:00], ["name", ""], ["updated_at", Wed, 23 Jul 2014 07:18:52 UTC +00:00]]
181
+  (0.6ms) commit transaction
182
+ Redirected to http://localhost:3000/users/1/edit
183
+ Completed 302 Found in 9.9ms (ActiveRecord: 5.9ms)
184
+
185
+
186
+ Started GET "/users/1/edit" for 127.0.0.1 at 2014-07-23 10:18:52 +0300
187
+ Processing by UsersController#edit as HTML
188
+ Parameters: {"id"=>"1"}
189
+ User Load (0.2ms) SELECT "users".* FROM "users" WHERE "users"."id" = ? LIMIT 1 [["id", "1"]]
190
+ Project Load (0.1ms) SELECT "projects".* FROM "projects" WHERE "projects"."user_id" = 1
191
+ Rendered users/edit.html.haml within layouts/application (10.1ms)
192
+ Rendered layouts/_navigation.html.haml (0.0ms)
193
+ Rendered layouts/_messages.html.haml (0.1ms)
194
+ User Load (0.1ms) SELECT "users".* FROM "users" ORDER BY name
195
+ Completed 200 OK in 27.9ms (Views: 26.0ms | ActiveRecord: 0.4ms)
196
+
197
+
198
+ Started GET "/assets/application.css?body=1" for 127.0.0.1 at 2014-07-23 10:18:52 +0300
199
+ Served asset /application.css - 304 Not Modified (0ms)
200
+
201
+
202
+ Started GET "/assets/normalize.css?body=1" for 127.0.0.1 at 2014-07-23 10:18:52 +0300
203
+ Served asset /normalize.css - 304 Not Modified (0ms)
204
+
205
+
206
+ Started GET "/assets/users.css?body=1" for 127.0.0.1 at 2014-07-23 10:18:52 +0300
207
+ Served asset /users.css - 304 Not Modified (0ms)
208
+
209
+
210
+ Started GET "/assets/jquery.js?body=1" for 127.0.0.1 at 2014-07-23 10:18:52 +0300
211
+ Served asset /jquery.js - 304 Not Modified (0ms)
212
+
213
+
214
+ Started GET "/assets/jquery_ujs.js?body=1" for 127.0.0.1 at 2014-07-23 10:18:52 +0300
215
+ Served asset /jquery_ujs.js - 304 Not Modified (0ms)
216
+
217
+
218
+ Started GET "/assets/nested_form_fields.js?body=1" for 127.0.0.1 at 2014-07-23 10:18:52 +0300
219
+ Served asset /nested_form_fields.js - 304 Not Modified (0ms)
220
+
221
+
222
+ Started GET "/assets/users.js?body=1" for 127.0.0.1 at 2014-07-23 10:18:52 +0300
223
+ Served asset /users.js - 304 Not Modified (0ms)
224
+
225
+
226
+ Started GET "/assets/application.js?body=1" for 127.0.0.1 at 2014-07-23 10:18:52 +0300
227
+ Served asset /application.js - 304 Not Modified (0ms)
228
+
229
+
230
+ Started PUT "/users/1" for 127.0.0.1 at 2014-07-23 10:20:13 +0300
231
+ Processing by UsersController#update as HTML
232
+ Parameters: {"utf8"=>"✓", "authenticity_token"=>"+9YZ/C5wvq3T0W4YNpL4hQxCZZEtmzQ8My5dcEckEBc=", "user"=>{"name"=>"", "projects_attributes"=>{"0"=>{"_destroy"=>"1", "name"=>"", "description"=>""}}}, "commit"=>"Update User", "id"=>"1"}
233
+ User Load (0.1ms) SELECT "users".* FROM "users" WHERE "users"."id" = ? LIMIT 1 [["id", "1"]]
234
+  (0.0ms) begin transaction
235
+  (0.0ms) commit transaction
236
+ Project Load (0.1ms) SELECT "projects".* FROM "projects" WHERE "projects"."user_id" = 1
237
+ Rendered users/edit.html.haml within layouts/application (5.7ms)
238
+ Rendered layouts/_navigation.html.haml (0.1ms)
239
+ Rendered layouts/_messages.html.haml (0.1ms)
240
+ User Load (0.1ms) SELECT "users".* FROM "users" ORDER BY name
241
+ Completed 200 OK in 30.2ms (Views: 27.5ms | ActiveRecord: 0.4ms)
242
+
243
+
244
+ Started GET "/assets/application.css?body=1" for 127.0.0.1 at 2014-07-23 10:20:13 +0300
245
+ Served asset /application.css - 304 Not Modified (0ms)
246
+
247
+
248
+ Started GET "/assets/normalize.css?body=1" for 127.0.0.1 at 2014-07-23 10:20:13 +0300
249
+ Served asset /normalize.css - 304 Not Modified (0ms)
250
+
251
+
252
+ Started GET "/assets/users.css?body=1" for 127.0.0.1 at 2014-07-23 10:20:13 +0300
253
+ Served asset /users.css - 304 Not Modified (0ms)
254
+
255
+
256
+ Started GET "/assets/jquery.js?body=1" for 127.0.0.1 at 2014-07-23 10:20:13 +0300
257
+ Served asset /jquery.js - 304 Not Modified (0ms)
258
+
259
+
260
+ Started GET "/assets/jquery_ujs.js?body=1" for 127.0.0.1 at 2014-07-23 10:20:13 +0300
261
+ Served asset /jquery_ujs.js - 304 Not Modified (0ms)
262
+
263
+
264
+ Started GET "/assets/nested_form_fields.js?body=1" for 127.0.0.1 at 2014-07-23 10:20:13 +0300
265
+ Served asset /nested_form_fields.js - 304 Not Modified (0ms)
266
+
267
+
268
+ Started GET "/assets/users.js?body=1" for 127.0.0.1 at 2014-07-23 10:20:13 +0300
269
+ Served asset /users.js - 304 Not Modified (0ms)
270
+
271
+
272
+ Started GET "/assets/application.js?body=1" for 127.0.0.1 at 2014-07-23 10:20:13 +0300
273
+ Served asset /application.js - 304 Not Modified (0ms)
@@ -51,7 +51,7 @@ describe 'a form with nested projects with nested todos', :js => true do
51
51
  visit edit_user_path(user)
52
52
 
53
53
  page.should have_css('fieldset.nested_user_projects_0_todos')
54
- page.find('.nested_user_projects_0_todos .remove_nested_fields_link').click
54
+ page.find('.nested_user_projects_0_todos .remove_nested_fields_link.test_class').click
55
55
  page.should_not have_css('fieldset.nested_user_projects_0_todos')
56
56
 
57
57
  page.all('.nested_user_projects .remove_nested_fields_link').count.should == 2
data/spec/spec_helper.rb CHANGED
@@ -9,6 +9,10 @@ ENV["RAILS_ENV"] = 'test'
9
9
  require_relative "dummy/config/environment"
10
10
 
11
11
  require 'rspec/rails'
12
+
13
+ # prevent Test::Unit's AutoRunner from executing during RSpec's rake task see https://github.com/rspec/rspec-rails/issues/1171
14
+ Test::Unit.run = true if defined?(Test::Unit) && Test::Unit.respond_to?(:run=)
15
+
12
16
  require 'assert_difference'
13
17
  require 'sqlite3'
14
18
 
@@ -26,6 +30,7 @@ RSpec.configure do |config|
26
30
  config.include AssertDifference
27
31
  config.use_transactional_fixtures = true
28
32
  config.include Capybara::DSL
33
+ config.infer_spec_type_from_file_location!
29
34
  end
30
35
 
31
36
 
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: nested_form_fields
3
3
  version: !ruby/object:Gem::Version
4
- version: '0.7'
4
+ version: 0.8.4
5
5
  platform: ruby
6
6
  authors:
7
7
  - Nico Ritsche
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2015-05-04 00:00:00.000000000 Z
11
+ date: 2020-07-17 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rails
@@ -24,6 +24,20 @@ dependencies:
24
24
  - - ">="
25
25
  - !ruby/object:Gem::Version
26
26
  version: 3.2.0
27
+ - !ruby/object:Gem::Dependency
28
+ name: coffee-rails
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - ">="
32
+ - !ruby/object:Gem::Version
33
+ version: 3.2.1
34
+ type: :runtime
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - ">="
39
+ - !ruby/object:Gem::Version
40
+ version: 3.2.1
27
41
  - !ruby/object:Gem::Dependency
28
42
  name: jquery-rails
29
43
  requirement: !ruby/object:Gem::Requirement
@@ -31,7 +45,7 @@ dependencies:
31
45
  - - ">="
32
46
  - !ruby/object:Gem::Version
33
47
  version: '0'
34
- type: :development
48
+ type: :runtime
35
49
  prerelease: false
36
50
  version_requirements: !ruby/object:Gem::Requirement
37
51
  requirements:
@@ -40,18 +54,32 @@ dependencies:
40
54
  version: '0'
41
55
  - !ruby/object:Gem::Dependency
42
56
  name: rspec-rails
57
+ requirement: !ruby/object:Gem::Requirement
58
+ requirements:
59
+ - - "~>"
60
+ - !ruby/object:Gem::Version
61
+ version: '3.5'
62
+ type: :development
63
+ prerelease: false
64
+ version_requirements: !ruby/object:Gem::Requirement
65
+ requirements:
66
+ - - "~>"
67
+ - !ruby/object:Gem::Version
68
+ version: '3.5'
69
+ - !ruby/object:Gem::Dependency
70
+ name: nokogiri
43
71
  requirement: !ruby/object:Gem::Requirement
44
72
  requirements:
45
73
  - - '='
46
74
  - !ruby/object:Gem::Version
47
- version: 2.9.0
75
+ version: 1.6.8.1
48
76
  type: :development
49
77
  prerelease: false
50
78
  version_requirements: !ruby/object:Gem::Requirement
51
79
  requirements:
52
80
  - - '='
53
81
  - !ruby/object:Gem::Version
54
- version: 2.9.0
82
+ version: 1.6.8.1
55
83
  - !ruby/object:Gem::Dependency
56
84
  name: assert_difference
57
85
  requirement: !ruby/object:Gem::Requirement
@@ -81,7 +109,7 @@ dependencies:
81
109
  - !ruby/object:Gem::Version
82
110
  version: '0'
83
111
  - !ruby/object:Gem::Dependency
84
- name: selenium-webdriver
112
+ name: geckodriver-helper
85
113
  requirement: !ruby/object:Gem::Requirement
86
114
  requirements:
87
115
  - - ">="
@@ -94,20 +122,34 @@ dependencies:
94
122
  - - ">="
95
123
  - !ruby/object:Gem::Version
96
124
  version: '0'
125
+ - !ruby/object:Gem::Dependency
126
+ name: selenium-webdriver
127
+ requirement: !ruby/object:Gem::Requirement
128
+ requirements:
129
+ - - ">"
130
+ - !ruby/object:Gem::Version
131
+ version: 3.0.5
132
+ type: :development
133
+ prerelease: false
134
+ version_requirements: !ruby/object:Gem::Requirement
135
+ requirements:
136
+ - - ">"
137
+ - !ruby/object:Gem::Version
138
+ version: 3.0.5
97
139
  - !ruby/object:Gem::Dependency
98
140
  name: sqlite3
99
141
  requirement: !ruby/object:Gem::Requirement
100
142
  requirements:
101
- - - ">="
143
+ - - "~>"
102
144
  - !ruby/object:Gem::Version
103
- version: '0'
145
+ version: 1.3.6
104
146
  type: :development
105
147
  prerelease: false
106
148
  version_requirements: !ruby/object:Gem::Requirement
107
149
  requirements:
108
- - - ">="
150
+ - - "~>"
109
151
  - !ruby/object:Gem::Version
110
- version: '0'
152
+ version: 1.3.6
111
153
  - !ruby/object:Gem::Dependency
112
154
  name: haml
113
155
  requirement: !ruby/object:Gem::Requirement
@@ -126,16 +168,16 @@ dependencies:
126
168
  name: haml-rails
127
169
  requirement: !ruby/object:Gem::Requirement
128
170
  requirements:
129
- - - ">="
171
+ - - "~>"
130
172
  - !ruby/object:Gem::Version
131
- version: '0'
173
+ version: 0.4.0
132
174
  type: :development
133
175
  prerelease: false
134
176
  version_requirements: !ruby/object:Gem::Requirement
135
177
  requirements:
136
- - - ">="
178
+ - - "~>"
137
179
  - !ruby/object:Gem::Version
138
- version: '0'
180
+ version: 0.4.0
139
181
  - !ruby/object:Gem::Dependency
140
182
  name: sass-rails
141
183
  requirement: !ruby/object:Gem::Requirement
@@ -151,22 +193,36 @@ dependencies:
151
193
  - !ruby/object:Gem::Version
152
194
  version: 3.2.3
153
195
  - !ruby/object:Gem::Dependency
154
- name: coffee-rails
196
+ name: test-unit
197
+ requirement: !ruby/object:Gem::Requirement
198
+ requirements:
199
+ - - '='
200
+ - !ruby/object:Gem::Version
201
+ version: 1.2.3
202
+ type: :development
203
+ prerelease: false
204
+ version_requirements: !ruby/object:Gem::Requirement
205
+ requirements:
206
+ - - '='
207
+ - !ruby/object:Gem::Version
208
+ version: 1.2.3
209
+ - !ruby/object:Gem::Dependency
210
+ name: public_suffix
155
211
  requirement: !ruby/object:Gem::Requirement
156
212
  requirements:
157
213
  - - "~>"
158
214
  - !ruby/object:Gem::Version
159
- version: 3.2.1
215
+ version: 1.4.6
160
216
  type: :development
161
217
  prerelease: false
162
218
  version_requirements: !ruby/object:Gem::Requirement
163
219
  requirements:
164
220
  - - "~>"
165
221
  - !ruby/object:Gem::Version
166
- version: 3.2.1
222
+ version: 1.4.6
167
223
  description: |-
168
224
  Rails gem for dynamically adding and removing nested has_many association fields in a form.
169
- Uses jQuery and supports multiple nesting levels. Requires Ruby 1.9 and the asset pipeline.
225
+ Uses jQuery and supports multiple nesting levels. Requires Ruby 1.9+ and the asset pipeline.
170
226
  email:
171
227
  - ncrdevmail@gmail.com
172
228
  executables: []
@@ -184,6 +240,9 @@ files:
184
240
  - lib/nested_form_fields.rb
185
241
  - lib/nested_form_fields/version.rb
186
242
  - nested_form_fields.gemspec
243
+ - spec/dummy/.sass-cache/b3239b16cb7e494d5d4e969f1b84625be9aac82c/application.css.scssc
244
+ - spec/dummy/.sass-cache/b3239b16cb7e494d5d4e969f1b84625be9aac82c/normalize.css.scssc
245
+ - spec/dummy/.sass-cache/b3239b16cb7e494d5d4e969f1b84625be9aac82c/users.css.scssc
187
246
  - spec/dummy/README.rdoc
188
247
  - spec/dummy/Rakefile
189
248
  - spec/dummy/app/assets/javascripts/application.js
@@ -225,6 +284,7 @@ files:
225
284
  - spec/dummy/db/test.sqlite3
226
285
  - spec/dummy/lib/assets/.gitkeep
227
286
  - spec/dummy/log/.gitkeep
287
+ - spec/dummy/log/development.log
228
288
  - spec/dummy/public/404.html
229
289
  - spec/dummy/public/422.html
230
290
  - spec/dummy/public/500.html
@@ -251,13 +311,15 @@ required_rubygems_version: !ruby/object:Gem::Requirement
251
311
  - !ruby/object:Gem::Version
252
312
  version: '0'
253
313
  requirements: []
254
- rubyforge_project:
255
- rubygems_version: 2.2.2
314
+ rubygems_version: 3.0.4
256
315
  signing_key:
257
316
  specification_version: 4
258
317
  summary: Rails gem for dynamically adding and removing nested has_many association
259
318
  fields in a form.
260
319
  test_files:
320
+ - spec/dummy/.sass-cache/b3239b16cb7e494d5d4e969f1b84625be9aac82c/application.css.scssc
321
+ - spec/dummy/.sass-cache/b3239b16cb7e494d5d4e969f1b84625be9aac82c/normalize.css.scssc
322
+ - spec/dummy/.sass-cache/b3239b16cb7e494d5d4e969f1b84625be9aac82c/users.css.scssc
261
323
  - spec/dummy/README.rdoc
262
324
  - spec/dummy/Rakefile
263
325
  - spec/dummy/app/assets/javascripts/application.js
@@ -299,6 +361,7 @@ test_files:
299
361
  - spec/dummy/db/test.sqlite3
300
362
  - spec/dummy/lib/assets/.gitkeep
301
363
  - spec/dummy/log/.gitkeep
364
+ - spec/dummy/log/development.log
302
365
  - spec/dummy/public/404.html
303
366
  - spec/dummy/public/422.html
304
367
  - spec/dummy/public/500.html