cocoon 1.2.10 → 1.2.15
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 +5 -13
- data/.travis.yml +36 -6
- data/Gemfile +5 -4
- data/{MIT-LICENSE → LICENSE} +0 -0
- data/README.markdown +50 -15
- data/Rakefile +48 -1
- data/VERSION +1 -1
- data/app/assets/javascripts/cocoon.js +35 -22
- data/cocoon.gemspec +21 -17
- data/gemfiles/Gemfile.default +31 -0
- data/lib/cocoon/view_helpers.rb +4 -3
- data/npm/README.md +8 -0
- data/npm/package.json.erb +21 -0
- data/spec/cocoon_spec.rb +15 -7
- data/spec/dummy/db/migrate/20110306212208_create_posts.rb +1 -1
- data/spec/dummy/db/migrate/20110306212250_create_comments.rb +1 -1
- data/spec/dummy/db/migrate/20110420222224_create_people.rb +1 -1
- data/spec/dummy/db/schema.rb +17 -8
- metadata +53 -54
checksums.yaml
CHANGED
@@ -1,15 +1,7 @@
|
|
1
1
|
---
|
2
|
-
|
3
|
-
metadata.gz:
|
4
|
-
|
5
|
-
data.tar.gz: !binary |-
|
6
|
-
NzBmOTNkOTIzZjY0YmMxY2I3NjM0OTNiNTU1MDUzMzhjYzgxNDcwNA==
|
2
|
+
SHA256:
|
3
|
+
metadata.gz: 5ece48b77f3c2ade4038d9a745ecda7d23ec24d2e1b391a7900c1b040e9800a0
|
4
|
+
data.tar.gz: dfd2781be46692cc32726a785d379503c1f1aadd37a015f3d18e1955f2bc893b
|
7
5
|
SHA512:
|
8
|
-
metadata.gz:
|
9
|
-
|
10
|
-
MDM5NWI2NDBlNmEzZTMzNWI2N2E5NWUzM2YxZWVmYzgyZTIyZDJiMmIxYzU2
|
11
|
-
ZjgxZjIzODQ4ZWYxNDVhZGYyNjc0NGU5NzQxMGVhNDA2NzhhNmU=
|
12
|
-
data.tar.gz: !binary |-
|
13
|
-
YjZlYTBmYzc0NzljYWM1ODU5M2NjZWEyNzYyNWUxZmUwYzkyZWIzMWE1ZDg1
|
14
|
-
NTA4YTViYWNkYTYyMmUzY2MyZTljNWMzODhlM2E5MzgwMjA1NTBmMDI1NTY5
|
15
|
-
M2IyMzBhZGY2ODlhMzc1MzhkNjMyNmU3ZTE2MzljODQ5OTRmNDI=
|
6
|
+
metadata.gz: 278cc47c1d3cf4bc126f8609cbb4efa945fb59b864f495097e3a1f0d536b6353cc43da3d4e49d2cddbb65c660adfc057a50d3b8639d7acb5bcf1eed761937fd8
|
7
|
+
data.tar.gz: 8c9b316114c977cdf62aac3c172cb50bb74444714099751bd4915d8b970a105d6cca61ffe7c41f8369d7bdf2cb6f935ce92b852dba58b1c7e234f32d06daa9fe
|
data/.travis.yml
CHANGED
@@ -1,22 +1,32 @@
|
|
1
1
|
language: ruby
|
2
2
|
rvm:
|
3
|
-
- 2.0.0
|
4
3
|
- 2.1.5
|
5
4
|
- 2.2.6
|
6
5
|
- 2.3.2
|
6
|
+
- 2.4.1
|
7
|
+
- 2.4.5
|
8
|
+
- 2.4.6
|
9
|
+
- 2.5.4
|
10
|
+
- 2.5.5
|
11
|
+
- 2.6.3
|
7
12
|
- rbx-2
|
13
|
+
|
14
|
+
before_install:
|
15
|
+
- gem uninstall -v '>= 2' -i $(rvm gemdir)@global -ax bundler || true
|
16
|
+
- gem install bundler -v '< 2'
|
17
|
+
|
8
18
|
gemfile:
|
9
19
|
- gemfiles/Gemfile.rails-3.2.13
|
10
20
|
- gemfiles/Gemfile.rails-4-r2
|
11
|
-
- Gemfile
|
21
|
+
- gemfiles/Gemfile.default
|
12
22
|
|
13
23
|
matrix:
|
14
24
|
fast_finish: true
|
15
25
|
exclude:
|
16
26
|
- rvm: 2.0.0
|
17
|
-
gemfile: Gemfile
|
27
|
+
gemfile: gemfiles/Gemfile.default
|
18
28
|
- rvm: 2.1.5
|
19
|
-
gemfile: Gemfile
|
29
|
+
gemfile: gemfiles/Gemfile.default
|
20
30
|
- rvm: 2.2.6
|
21
31
|
gemfile: gemfiles/Gemfile.rails-3.2.13
|
22
32
|
- rvm: 2.2.6
|
@@ -25,9 +35,29 @@ matrix:
|
|
25
35
|
gemfile: gemfiles/Gemfile.rails-3.2.13
|
26
36
|
- rvm: 2.3.2
|
27
37
|
gemfile: gemfiles/Gemfile.rails-4-r2
|
28
|
-
- rvm: 2.4.
|
38
|
+
- rvm: 2.4.1
|
39
|
+
gemfile: gemfiles/Gemfile.rails-3.2.13
|
40
|
+
- rvm: 2.4.1
|
41
|
+
gemfile: gemfiles/Gemfile.rails-4-r2
|
42
|
+
- rvm: 2.4.6
|
43
|
+
gemfile: gemfiles/Gemfile.rails-3.2.13
|
44
|
+
- rvm: 2.4.6
|
45
|
+
gemfile: gemfiles/Gemfile.rails-4-r2
|
46
|
+
- rvm: 2.4.5
|
47
|
+
gemfile: gemfiles/Gemfile.rails-3.2.13
|
48
|
+
- rvm: 2.4.5
|
49
|
+
gemfile: gemfiles/Gemfile.rails-4-r2
|
50
|
+
- rvm: 2.5.4
|
51
|
+
gemfile: gemfiles/Gemfile.rails-3.2.13
|
52
|
+
- rvm: 2.5.4
|
53
|
+
gemfile: gemfiles/Gemfile.rails-4-r2
|
54
|
+
- rvm: 2.5.5
|
55
|
+
gemfile: gemfiles/Gemfile.rails-3.2.13
|
56
|
+
- rvm: 2.5.5
|
57
|
+
gemfile: gemfiles/Gemfile.rails-4-r2
|
58
|
+
- rvm: 2.6.3
|
29
59
|
gemfile: gemfiles/Gemfile.rails-3.2.13
|
30
|
-
- rvm: 2.
|
60
|
+
- rvm: 2.6.3
|
31
61
|
gemfile: gemfiles/Gemfile.rails-4-r2
|
32
62
|
allow_failures:
|
33
63
|
- rvm: rbx-2
|
data/Gemfile
CHANGED
@@ -2,10 +2,11 @@ source "http://rubygems.org"
|
|
2
2
|
|
3
3
|
|
4
4
|
group :development, :test do
|
5
|
-
gem "rails", "
|
6
|
-
gem "sqlite3"
|
5
|
+
gem "rails", "~> 4.2"
|
6
|
+
gem "sqlite3", '1.3.13'
|
7
7
|
gem "json_pure"
|
8
|
-
gem "jeweler",
|
8
|
+
gem "jeweler", git: 'git@github.com:technicalpickles/jeweler'
|
9
|
+
# gem "jeweler", "~> 2.3"
|
9
10
|
gem "rspec-rails", "~> 3.0.0"
|
10
11
|
gem "rspec", "~> 3.0.0"
|
11
12
|
gem "actionpack", ">=4.0.0"
|
@@ -19,7 +20,7 @@ group :development, :test do
|
|
19
20
|
platforms :rbx do
|
20
21
|
gem 'rubysl'
|
21
22
|
gem 'rubysl-test-unit'
|
22
|
-
gem 'psych'
|
23
|
+
gem 'psych', '~> 2.2'
|
23
24
|
gem 'racc'
|
24
25
|
gem 'rubinius-developer_tools'
|
25
26
|
end
|
data/{MIT-LICENSE → LICENSE}
RENAMED
File without changes
|
data/README.markdown
CHANGED
@@ -8,13 +8,13 @@ Nested forms are forms that handle nested models and attributes in one form;
|
|
8
8
|
e.g. a project with its tasks or an invoice with its line items.
|
9
9
|
|
10
10
|
Cocoon is form builder-agnostic, so it works with standard Rails, [Formtastic](https://github.com/justinfrench/formtastic), or [SimpleForm](https://github.com/plataformatec/simple_form).
|
11
|
-
It is compatible with rails 3 and
|
11
|
+
It is compatible with rails 3, 4 and 5.
|
12
12
|
|
13
13
|
This project is not related to [Apache Cocoon](http://cocoon.apache.org/).
|
14
14
|
|
15
15
|
## Prerequisites
|
16
16
|
|
17
|
-
This gem depends on jQuery, so it's most useful in a Rails
|
17
|
+
This gem depends on jQuery, so it's most useful in a Rails project where you are already using jQuery.
|
18
18
|
Furthermore, I would advise you to use either [Formtastic](https://github.com/justinfrench/formtastic) or [SimpleForm](https://github.com/plataformatec/simple_form).
|
19
19
|
|
20
20
|
## Installation
|
@@ -27,6 +27,23 @@ gem "cocoon"
|
|
27
27
|
|
28
28
|
> Please note that for rails 4 you will need at least v1.2.0 or later.
|
29
29
|
|
30
|
+
### Rails 6/Webpacker
|
31
|
+
|
32
|
+
Add the componanion package
|
33
|
+
|
34
|
+
yarn add @nathanvda/cocoon
|
35
|
+
|
36
|
+
and then in your `app/javascripts/packs/application.js` you should add
|
37
|
+
|
38
|
+
require("jquery")
|
39
|
+
require("@nathanvda/cocoon")
|
40
|
+
|
41
|
+
|
42
|
+
> Note: there are alternative npm packages, which might better suit your needs.
|
43
|
+
E.g. some offer the cocoon functionality without using jquery (search for `cocoon + vanilla` --I found three packages on npm already).
|
44
|
+
Obviously you are free to use those, however the code samples in this README will (still) rely on jquery.
|
45
|
+
|
46
|
+
|
30
47
|
### Rails 3.1+/Rails 4/Rails 5
|
31
48
|
|
32
49
|
Add the following to `application.js` so it compiles to the asset pipeline:
|
@@ -109,7 +126,7 @@ E.g. in your `ProjectsController`:
|
|
109
126
|
Cocoon's default configuration requires `link_to_add_association` and associated partials to
|
110
127
|
be properly wrapped with elements. The examples below illustrate simple layouts.
|
111
128
|
|
112
|
-
Please note these examples rely on the `haml` gem (
|
129
|
+
Please note these examples rely on the `haml` gem ([click here](https://github.com/nathanvda/cocoon/wiki/ERB-examples) for the default `erb` views).
|
113
130
|
|
114
131
|
### Formtastic
|
115
132
|
|
@@ -218,10 +235,10 @@ This should be called within the form builder.
|
|
218
235
|
|
219
236
|
`link_to_add_association` takes four parameters:
|
220
237
|
|
221
|
-
- name
|
222
|
-
- f
|
223
|
-
- association
|
224
|
-
- html_options
|
238
|
+
- **name**: the text to show in the link
|
239
|
+
- **f**: the form builder
|
240
|
+
- **association**: the name of the association (plural) of which a new instance needs to be added (symbol or string).
|
241
|
+
- **html_options**: extra html-options (see [`link_to`](http://api.rubyonrails.org/classes/ActionView/Helpers/UrlHelper.html#method-i-link_to)
|
225
242
|
There are some special options, the first three allow to control the placement of the new link-data:
|
226
243
|
- `data-association-insertion-traversal` : the jquery traversal method to allow node selection relative to the link. `closest`, `next`, `children`, etc. Default: absolute selection
|
227
244
|
- `data-association-insertion-node` : the jquery selector of the node as string, or a function that takes the `link_to_add_association` node as the parameter and returns a node. Default: parent node
|
@@ -234,6 +251,7 @@ This should be called within the form builder.
|
|
234
251
|
- `wrap_object` : a proc that will allow to wrap your object, especially useful if you are using decorators (e.g. draper). See example lower.
|
235
252
|
- `force_non_association_create`: if true, it will _not_ create the new object using the association (see lower)
|
236
253
|
- `form_name` : the name of the form parameter in your nested partial. By default this is `f`.
|
254
|
+
- `count` : the number of nested items to insert at once. Default `1`.
|
237
255
|
|
238
256
|
Optionally, you can omit the name and supply a block that is captured to render the link body (if you want to do something more complicated).
|
239
257
|
|
@@ -318,8 +336,9 @@ a new nested object.
|
|
318
336
|
This used to have a side-effect: for each call of `link_to_add_association` a new element was added to the association.
|
319
337
|
This is no longer the case.
|
320
338
|
|
321
|
-
For backward compatibility we keep this option for now. Or if for some specific reason you would
|
322
|
-
|
339
|
+
For backward compatibility we keep this option for now. Or if for some specific reason you would really need an object
|
340
|
+
to be _not_ created on the association, for example if you did not want `after_add` callback to be triggered on
|
341
|
+
the association.
|
323
342
|
|
324
343
|
Example use:
|
325
344
|
|
@@ -337,9 +356,9 @@ This should be placed inside the partial `_<association-object-singular>_fields`
|
|
337
356
|
|
338
357
|
It takes three parameters:
|
339
358
|
|
340
|
-
- name
|
341
|
-
- f
|
342
|
-
- html_options
|
359
|
+
- **name**: the text to show in the link
|
360
|
+
- **f**: referring to the containing form-object
|
361
|
+
- **html_options**: extra html-options (see `link_to`)
|
343
362
|
|
344
363
|
Optionally you could also leave out the name and supply a block that is captured to give the name (if you want to do something more complicated).
|
345
364
|
|
@@ -358,21 +377,22 @@ Example:
|
|
358
377
|
|
359
378
|
On insertion or removal the following events are triggered:
|
360
379
|
|
361
|
-
* `cocoon:before-insert`: called before inserting a new nested child
|
380
|
+
* `cocoon:before-insert`: called before inserting a new nested child, can be [canceled](#canceling-a-callback)
|
362
381
|
* `cocoon:after-insert`: called after inserting
|
363
|
-
* `cocoon:before-remove`: called before removing the nested child
|
382
|
+
* `cocoon:before-remove`: called before removing the nested child, can be [canceled](#canceling-a-callback)
|
364
383
|
* `cocoon:after-remove`: called after removal
|
365
384
|
|
366
385
|
To listen to the events in your JavaScript:
|
367
386
|
|
368
387
|
```javascript
|
369
|
-
$('#container').on('cocoon:before-insert', function(e, insertedItem) {
|
388
|
+
$('#container').on('cocoon:before-insert', function(e, insertedItem, originalEvent) {
|
370
389
|
// ... do something
|
371
390
|
});
|
372
391
|
```
|
373
392
|
|
374
393
|
...where `e` is the event and the second parameter is the inserted or removed item. This allows you to change markup, or
|
375
394
|
add effects/animations (see example below).
|
395
|
+
`originalEvent` is also passed and references the event that triggered an insertion or removal (e.g. the `click` event on the link to add an association)
|
376
396
|
|
377
397
|
|
378
398
|
If in your view you have the following snippet to select an `owner`:
|
@@ -435,6 +455,21 @@ $(this).data('remove-timeout', 1000);
|
|
435
455
|
|
436
456
|
You could also immediately add this to your view, on the `.nested-fields` container (or the `wrapper_class` element you are using).
|
437
457
|
|
458
|
+
#### Canceling a Callback
|
459
|
+
|
460
|
+
You can cancel an action from occurring, either an insertion or removal, within the `before-<action>` callback by calling `event.preventDefault()` anywhere within the callback.
|
461
|
+
|
462
|
+
For example:
|
463
|
+
|
464
|
+
```javascript
|
465
|
+
$('#container').on('cocoon:before-insert', function(event, insertedItem) {
|
466
|
+
var confirmation = confirm("Are you sure?");
|
467
|
+
if( confirmation === false ){
|
468
|
+
event.preventDefault();
|
469
|
+
}
|
470
|
+
});
|
471
|
+
```
|
472
|
+
|
438
473
|
### Control the Insertion Behaviour
|
439
474
|
|
440
475
|
The default insertion location is at the back of the current container. But we have added two `data-` attributes that are read to determine the insertion-node and -method.
|
data/Rakefile
CHANGED
@@ -11,6 +11,9 @@ require 'rdoc/task'
|
|
11
11
|
|
12
12
|
require 'rspec/core'
|
13
13
|
require 'rspec/core/rake_task'
|
14
|
+
require 'erb'
|
15
|
+
require 'JSON'
|
16
|
+
|
14
17
|
|
15
18
|
RSpec::Core::RakeTask.new(:spec)
|
16
19
|
|
@@ -39,4 +42,48 @@ begin
|
|
39
42
|
Jeweler::GemcutterTasks.new
|
40
43
|
rescue LoadError
|
41
44
|
puts "Jeweler (or a dependency) not available. Install it with: gem install jeweler"
|
42
|
-
end
|
45
|
+
end
|
46
|
+
|
47
|
+
|
48
|
+
require 'bundler/gem_tasks'
|
49
|
+
|
50
|
+
spec = Bundler.load_gemspec('./cocoon.gemspec')
|
51
|
+
|
52
|
+
|
53
|
+
npm_src_dir = './npm'
|
54
|
+
npm_dest_dir = './dist'
|
55
|
+
CLOBBER.include 'dist'
|
56
|
+
|
57
|
+
assets_dir = './app/assets/'
|
58
|
+
|
59
|
+
npm_files = {
|
60
|
+
File.join(npm_dest_dir, 'cocoon.js') => File.join(assets_dir, 'javascripts', 'cocoon.js'),
|
61
|
+
File.join(npm_dest_dir, 'README.md') => File.join(npm_src_dir, 'README.md'),
|
62
|
+
File.join(npm_dest_dir, 'LICENSE') => './LICENSE'
|
63
|
+
}
|
64
|
+
|
65
|
+
namespace :npm do
|
66
|
+
npm_files.each do |dest, src|
|
67
|
+
file dest => src do
|
68
|
+
cp src, dest
|
69
|
+
end
|
70
|
+
end
|
71
|
+
|
72
|
+
task :'package-json' do
|
73
|
+
template = ERB.new(File.read(File.join(npm_src_dir, 'package.json.erb')))
|
74
|
+
content = template.result_with_hash(spec: spec)
|
75
|
+
File.write(File.join(npm_dest_dir, 'package.json'),
|
76
|
+
JSON.pretty_generate(JSON.parse(content)))
|
77
|
+
end
|
78
|
+
|
79
|
+
desc "Build nathanvda-cocoon-#{spec.version}.tgz into the pkg directory"
|
80
|
+
task build: (%i[package-json] + npm_files.keys) do
|
81
|
+
system("cd #{npm_dest_dir} && npm pack && mv ./nathanvda-cocoon-#{spec.version}.tgz ../pkg/")
|
82
|
+
end
|
83
|
+
|
84
|
+
desc "Build and push nathanvda-cocoon-#{spec.version}.tgz to https://npmjs.org"
|
85
|
+
task release: %i[build] do
|
86
|
+
system("npm publish ./pkg/nathanvda-cocoon-#{spec.version}.tgz --access public")
|
87
|
+
end
|
88
|
+
end
|
89
|
+
|
data/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
1.2.
|
1
|
+
1.2.15
|
@@ -39,6 +39,8 @@
|
|
39
39
|
|
40
40
|
$(document).on('click', '.add_fields', function(e) {
|
41
41
|
e.preventDefault();
|
42
|
+
e.stopPropagation();
|
43
|
+
|
42
44
|
var $this = $(this),
|
43
45
|
assoc = $this.data('association'),
|
44
46
|
assocs = $this.data('associations'),
|
@@ -51,7 +53,8 @@
|
|
51
53
|
regexp_underscord = new RegExp('_new_' + assoc + '_(\\w*)', 'g'),
|
52
54
|
new_id = create_new_id(),
|
53
55
|
new_content = content.replace(regexp_braced, newcontent_braced(new_id)),
|
54
|
-
new_contents = []
|
56
|
+
new_contents = [],
|
57
|
+
originalEvent = e;
|
55
58
|
|
56
59
|
|
57
60
|
if (new_content == content) {
|
@@ -84,14 +87,18 @@
|
|
84
87
|
$.each(new_contents, function(i, node) {
|
85
88
|
var contentNode = $(node);
|
86
89
|
|
87
|
-
|
90
|
+
var before_insert = jQuery.Event('cocoon:before-insert');
|
91
|
+
insertionNodeElem.trigger(before_insert, [contentNode, originalEvent]);
|
88
92
|
|
89
|
-
|
90
|
-
|
91
|
-
|
92
|
-
|
93
|
+
if (!before_insert.isDefaultPrevented()) {
|
94
|
+
// allow any of the jquery dom manipulation methods (after, before, append, prepend, etc)
|
95
|
+
// to be called on the node. allows the insertion node to be the parent of the inserted
|
96
|
+
// code and doesn't force it to be a sibling like after/before does. default: 'before'
|
97
|
+
var addedContent = insertionNodeElem[insertionMethod](contentNode);
|
93
98
|
|
94
|
-
|
99
|
+
insertionNodeElem.trigger('cocoon:after-insert', [contentNode,
|
100
|
+
originalEvent]);
|
101
|
+
}
|
95
102
|
});
|
96
103
|
});
|
97
104
|
|
@@ -99,23 +106,29 @@
|
|
99
106
|
var $this = $(this),
|
100
107
|
wrapper_class = $this.data('wrapper-class') || 'nested-fields',
|
101
108
|
node_to_delete = $this.closest('.' + wrapper_class),
|
102
|
-
trigger_node = node_to_delete.parent()
|
109
|
+
trigger_node = node_to_delete.parent(),
|
110
|
+
originalEvent = e;
|
103
111
|
|
104
112
|
e.preventDefault();
|
105
|
-
|
106
|
-
|
107
|
-
|
108
|
-
|
109
|
-
|
110
|
-
|
111
|
-
|
112
|
-
|
113
|
-
|
114
|
-
|
115
|
-
|
116
|
-
|
117
|
-
|
118
|
-
|
113
|
+
e.stopPropagation();
|
114
|
+
|
115
|
+
var before_remove = jQuery.Event('cocoon:before-remove');
|
116
|
+
trigger_node.trigger(before_remove, [node_to_delete, originalEvent]);
|
117
|
+
|
118
|
+
if (!before_remove.isDefaultPrevented()) {
|
119
|
+
var timeout = trigger_node.data('remove-timeout') || 0;
|
120
|
+
|
121
|
+
setTimeout(function() {
|
122
|
+
if ($this.hasClass('dynamic')) {
|
123
|
+
node_to_delete.detach();
|
124
|
+
} else {
|
125
|
+
$this.prev("input[type=hidden]").val("1");
|
126
|
+
node_to_delete.hide();
|
127
|
+
}
|
128
|
+
trigger_node.trigger('cocoon:after-remove', [node_to_delete,
|
129
|
+
originalEvent]);
|
130
|
+
}, timeout);
|
131
|
+
}
|
119
132
|
});
|
120
133
|
|
121
134
|
|
data/cocoon.gemspec
CHANGED
@@ -2,36 +2,40 @@
|
|
2
2
|
# DO NOT EDIT THIS FILE DIRECTLY
|
3
3
|
# Instead, edit Jeweler::Tasks in Rakefile, and run 'rake gemspec'
|
4
4
|
# -*- encoding: utf-8 -*-
|
5
|
-
# stub: cocoon 1.2.
|
5
|
+
# stub: cocoon 1.2.15 ruby lib
|
6
6
|
|
7
7
|
Gem::Specification.new do |s|
|
8
8
|
s.name = "cocoon".freeze
|
9
|
-
s.version = "1.2.
|
9
|
+
s.version = "1.2.15"
|
10
10
|
|
11
11
|
s.required_rubygems_version = Gem::Requirement.new(">= 0".freeze) if s.respond_to? :required_rubygems_version=
|
12
12
|
s.require_paths = ["lib".freeze]
|
13
13
|
s.authors = ["Nathan Van der Auwera".freeze]
|
14
|
-
s.date = "
|
14
|
+
s.date = "2020-09-08"
|
15
15
|
s.description = "Unobtrusive nested forms handling, using jQuery. Use this and discover cocoon-heaven.".freeze
|
16
16
|
s.email = "nathan@dixis.com".freeze
|
17
17
|
s.extra_rdoc_files = [
|
18
|
+
"LICENSE",
|
18
19
|
"README.markdown"
|
19
20
|
]
|
20
21
|
s.files = [
|
21
22
|
".travis.yml",
|
22
23
|
"Gemfile",
|
23
24
|
"History.md",
|
24
|
-
"
|
25
|
+
"LICENSE",
|
25
26
|
"README.markdown",
|
26
27
|
"Rakefile",
|
27
28
|
"VERSION",
|
28
29
|
"app/assets/javascripts/cocoon.js",
|
29
30
|
"cocoon.gemspec",
|
31
|
+
"gemfiles/Gemfile.default",
|
30
32
|
"gemfiles/Gemfile.rails-3.2.13",
|
31
33
|
"gemfiles/Gemfile.rails-4-r2",
|
32
34
|
"lib/cocoon.rb",
|
33
35
|
"lib/cocoon/view_helpers.rb",
|
34
36
|
"lib/generators/cocoon/install/install_generator.rb",
|
37
|
+
"npm/README.md",
|
38
|
+
"npm/package.json.erb",
|
35
39
|
"spec/cocoon_spec.rb",
|
36
40
|
"spec/dummy/Rakefile",
|
37
41
|
"spec/dummy/app/controllers/application_controller.rb",
|
@@ -82,17 +86,17 @@ Gem::Specification.new do |s|
|
|
82
86
|
]
|
83
87
|
s.homepage = "http://github.com/nathanvda/cocoon".freeze
|
84
88
|
s.licenses = ["MIT".freeze]
|
85
|
-
s.rubygems_version = "
|
89
|
+
s.rubygems_version = "3.0.8".freeze
|
86
90
|
s.summary = "gem that enables easier nested forms with standard forms, formtastic and simple-form".freeze
|
87
91
|
|
88
92
|
if s.respond_to? :specification_version then
|
89
93
|
s.specification_version = 4
|
90
94
|
|
91
95
|
if Gem::Version.new(Gem::VERSION) >= Gem::Version.new('1.2.0') then
|
92
|
-
s.add_development_dependency(%q<rails>.freeze, ["
|
93
|
-
s.add_development_dependency(%q<sqlite3>.freeze, ["
|
96
|
+
s.add_development_dependency(%q<rails>.freeze, ["~> 4.2"])
|
97
|
+
s.add_development_dependency(%q<sqlite3>.freeze, ["= 1.3.13"])
|
94
98
|
s.add_development_dependency(%q<json_pure>.freeze, [">= 0"])
|
95
|
-
s.add_development_dependency(%q<jeweler>.freeze, ["
|
99
|
+
s.add_development_dependency(%q<jeweler>.freeze, [">= 0"])
|
96
100
|
s.add_development_dependency(%q<rspec-rails>.freeze, ["~> 3.0.0"])
|
97
101
|
s.add_development_dependency(%q<rspec>.freeze, ["~> 3.0.0"])
|
98
102
|
s.add_development_dependency(%q<actionpack>.freeze, [">= 4.0.0"])
|
@@ -102,14 +106,14 @@ Gem::Specification.new do |s|
|
|
102
106
|
s.add_development_dependency(%q<generator_spec>.freeze, [">= 0"])
|
103
107
|
s.add_development_dependency(%q<rubysl>.freeze, [">= 0"])
|
104
108
|
s.add_development_dependency(%q<rubysl-test-unit>.freeze, [">= 0"])
|
105
|
-
s.add_development_dependency(%q<psych>.freeze, ["
|
109
|
+
s.add_development_dependency(%q<psych>.freeze, ["~> 2.2"])
|
106
110
|
s.add_development_dependency(%q<racc>.freeze, [">= 0"])
|
107
111
|
s.add_development_dependency(%q<rubinius-developer_tools>.freeze, [">= 0"])
|
108
112
|
else
|
109
|
-
s.add_dependency(%q<rails>.freeze, ["
|
110
|
-
s.add_dependency(%q<sqlite3>.freeze, ["
|
113
|
+
s.add_dependency(%q<rails>.freeze, ["~> 4.2"])
|
114
|
+
s.add_dependency(%q<sqlite3>.freeze, ["= 1.3.13"])
|
111
115
|
s.add_dependency(%q<json_pure>.freeze, [">= 0"])
|
112
|
-
s.add_dependency(%q<jeweler>.freeze, ["
|
116
|
+
s.add_dependency(%q<jeweler>.freeze, [">= 0"])
|
113
117
|
s.add_dependency(%q<rspec-rails>.freeze, ["~> 3.0.0"])
|
114
118
|
s.add_dependency(%q<rspec>.freeze, ["~> 3.0.0"])
|
115
119
|
s.add_dependency(%q<actionpack>.freeze, [">= 4.0.0"])
|
@@ -119,15 +123,15 @@ Gem::Specification.new do |s|
|
|
119
123
|
s.add_dependency(%q<generator_spec>.freeze, [">= 0"])
|
120
124
|
s.add_dependency(%q<rubysl>.freeze, [">= 0"])
|
121
125
|
s.add_dependency(%q<rubysl-test-unit>.freeze, [">= 0"])
|
122
|
-
s.add_dependency(%q<psych>.freeze, ["
|
126
|
+
s.add_dependency(%q<psych>.freeze, ["~> 2.2"])
|
123
127
|
s.add_dependency(%q<racc>.freeze, [">= 0"])
|
124
128
|
s.add_dependency(%q<rubinius-developer_tools>.freeze, [">= 0"])
|
125
129
|
end
|
126
130
|
else
|
127
|
-
s.add_dependency(%q<rails>.freeze, ["
|
128
|
-
s.add_dependency(%q<sqlite3>.freeze, ["
|
131
|
+
s.add_dependency(%q<rails>.freeze, ["~> 4.2"])
|
132
|
+
s.add_dependency(%q<sqlite3>.freeze, ["= 1.3.13"])
|
129
133
|
s.add_dependency(%q<json_pure>.freeze, [">= 0"])
|
130
|
-
s.add_dependency(%q<jeweler>.freeze, ["
|
134
|
+
s.add_dependency(%q<jeweler>.freeze, [">= 0"])
|
131
135
|
s.add_dependency(%q<rspec-rails>.freeze, ["~> 3.0.0"])
|
132
136
|
s.add_dependency(%q<rspec>.freeze, ["~> 3.0.0"])
|
133
137
|
s.add_dependency(%q<actionpack>.freeze, [">= 4.0.0"])
|
@@ -137,7 +141,7 @@ Gem::Specification.new do |s|
|
|
137
141
|
s.add_dependency(%q<generator_spec>.freeze, [">= 0"])
|
138
142
|
s.add_dependency(%q<rubysl>.freeze, [">= 0"])
|
139
143
|
s.add_dependency(%q<rubysl-test-unit>.freeze, [">= 0"])
|
140
|
-
s.add_dependency(%q<psych>.freeze, ["
|
144
|
+
s.add_dependency(%q<psych>.freeze, ["~> 2.2"])
|
141
145
|
s.add_dependency(%q<racc>.freeze, [">= 0"])
|
142
146
|
s.add_dependency(%q<rubinius-developer_tools>.freeze, [">= 0"])
|
143
147
|
end
|
@@ -0,0 +1,31 @@
|
|
1
|
+
source "http://rubygems.org"
|
2
|
+
|
3
|
+
|
4
|
+
group :development, :test do
|
5
|
+
gem "rails", "~> 4.2"
|
6
|
+
gem "sqlite3", '~> 1.3.13'
|
7
|
+
gem "json_pure"
|
8
|
+
gem "jeweler"
|
9
|
+
gem "rspec-rails", "~> 3.0.0"
|
10
|
+
gem "rspec", "~> 3.0.0"
|
11
|
+
gem "simplecov", :require => false
|
12
|
+
gem "rake", "~> 10.1"
|
13
|
+
|
14
|
+
gem 'nokogiri'
|
15
|
+
|
16
|
+
gem "generator_spec"
|
17
|
+
|
18
|
+
platforms :rbx do
|
19
|
+
gem 'rubysl'
|
20
|
+
gem 'rubysl-test-unit'
|
21
|
+
gem 'psych'
|
22
|
+
gem 'racc'
|
23
|
+
gem 'rubinius-developer_tools'
|
24
|
+
end
|
25
|
+
|
26
|
+
end
|
27
|
+
|
28
|
+
|
29
|
+
# To use debugger (ruby-debug for Ruby 1.8.7+, ruby-debug19 for Ruby 1.9.2+)
|
30
|
+
# gem 'ruby-debug'
|
31
|
+
# gem 'ruby-debug19'
|
data/lib/cocoon/view_helpers.rb
CHANGED
@@ -37,13 +37,14 @@ module Cocoon
|
|
37
37
|
wrapper_class = html_options.delete(:wrapper_class)
|
38
38
|
html_options[:'data-wrapper-class'] = wrapper_class if wrapper_class.present?
|
39
39
|
|
40
|
-
|
40
|
+
f.hidden_field(:_destroy, value: f.object._destroy) + link_to(name, '#', html_options)
|
41
41
|
end
|
42
42
|
end
|
43
43
|
|
44
44
|
# :nodoc:
|
45
|
-
def render_association(association, f, new_object, form_name,
|
45
|
+
def render_association(association, f, new_object, form_name, received_render_options={}, custom_partial=nil)
|
46
46
|
partial = get_partial_path(custom_partial, association)
|
47
|
+
render_options = received_render_options.dup
|
47
48
|
locals = render_options.delete(:locals) || {}
|
48
49
|
ancestors = f.class.ancestors.map{|c| c.to_s}
|
49
50
|
method_name = ancestors.include?('SimpleForm::FormBuilder') ? :simple_fields_for : (ancestors.include?('Formtastic::FormBuilder') ? :semantic_fields_for : :fields_for)
|
@@ -126,7 +127,7 @@ module Cocoon
|
|
126
127
|
end
|
127
128
|
|
128
129
|
def create_object_on_association(f, association, instance, force_non_association_create)
|
129
|
-
if instance.class.name
|
130
|
+
if instance.class.name.starts_with?('Mongoid::') || force_non_association_create
|
130
131
|
create_object_with_conditions(instance)
|
131
132
|
else
|
132
133
|
assoc_obj = nil
|
data/npm/README.md
ADDED
@@ -0,0 +1,21 @@
|
|
1
|
+
{
|
2
|
+
"name": "@nathanvda/cocoon",
|
3
|
+
"version": "<%= spec.version %>",
|
4
|
+
"license": "MIT",
|
5
|
+
|
6
|
+
"description": "Companion package for the cocoon Ruby gem.",
|
7
|
+
"homepage": "https://github.com/nathanvda/cocoon",
|
8
|
+
"repository": "https://github.com/nathanvda/cocoon",
|
9
|
+
"bugs": {
|
10
|
+
"url": "https://github.com/nathanvda/cocoon/issues"
|
11
|
+
},
|
12
|
+
|
13
|
+
"author": "nathan@dixis.com",
|
14
|
+
|
15
|
+
"main": "cocoon.js",
|
16
|
+
"files": ["cocoon.js", "README", "LICENSE", "package.json"],
|
17
|
+
|
18
|
+
"dependencies": {
|
19
|
+
"jquery": "^3.3.1"
|
20
|
+
}
|
21
|
+
}
|
data/spec/cocoon_spec.rb
CHANGED
@@ -14,12 +14,12 @@ describe Cocoon do
|
|
14
14
|
before(:each) do
|
15
15
|
@tester = TestClass.new
|
16
16
|
@post = Post.new
|
17
|
-
@form_obj = double(:object => @post, :object_name => @post.class.name)
|
18
17
|
end
|
19
18
|
|
20
19
|
|
21
20
|
context "link_to_add_association" do
|
22
21
|
before(:each) do
|
22
|
+
@form_obj = double(:object => @post, :object_name => @post.class.name)
|
23
23
|
allow(@tester).to receive(:render_association).and_return('form<tag>')
|
24
24
|
end
|
25
25
|
|
@@ -198,9 +198,13 @@ describe Cocoon do
|
|
198
198
|
allow(@tester).to receive(:render_association).and_call_original
|
199
199
|
expect(@form_obj).to receive(:fields_for) { | association, new_object, options_hash, &block| block.call }
|
200
200
|
expect(@tester).to receive(:render).with("person_fields", {:f=>nil, :dynamic=>true, :alfred=>"Judoka"}).and_return ("partiallll")
|
201
|
-
@
|
201
|
+
@render_options = {:wrapper => 'inline', :locals => {:alfred => 'Judoka'}}
|
202
|
+
@html = @tester.link_to_add_association('add something', @form_obj, :people, :render_options => @render_options)
|
202
203
|
end
|
203
204
|
it_behaves_like "a correctly rendered add link", {template: 'partiallll', association: 'person', associations: 'people' }
|
205
|
+
it "does not afffect render-options" do
|
206
|
+
expect(@render_options[:locals]).to eq({alfred: 'Judoka'})
|
207
|
+
end
|
204
208
|
end
|
205
209
|
context "if no locals are given it still works" do
|
206
210
|
before do
|
@@ -272,6 +276,9 @@ describe Cocoon do
|
|
272
276
|
end
|
273
277
|
|
274
278
|
context "link_to_remove_association" do
|
279
|
+
before do
|
280
|
+
@form_obj = @tester.send(:instantiate_builder, @post.class.name, @post, {})
|
281
|
+
end
|
275
282
|
context "without a block" do
|
276
283
|
context "accepts a name" do
|
277
284
|
before do
|
@@ -326,7 +333,7 @@ describe Cocoon do
|
|
326
333
|
before do
|
327
334
|
@post_marked_for_destruction = Post.new
|
328
335
|
@post_marked_for_destruction.mark_for_destruction
|
329
|
-
@form_obj_destroyed =
|
336
|
+
@form_obj_destroyed = @tester.send(:instantiate_builder, @post_marked_for_destruction.class.name, @post_marked_for_destruction, {})
|
330
337
|
@html = @tester.link_to_remove_association('remove something', @form_obj_destroyed)
|
331
338
|
end
|
332
339
|
|
@@ -387,11 +394,11 @@ describe Cocoon do
|
|
387
394
|
# I submitted a bug for this: https://github.com/rails/rails/issues/11376
|
388
395
|
if Rails.rails4?
|
389
396
|
@post = Post.create(title: 'Testing')
|
390
|
-
@form_obj = double(:object => @post, :object_name => @post.class.name)
|
391
397
|
end
|
392
|
-
|
398
|
+
form_obj = double(:object => @post, :object_name => @post.class.name)
|
399
|
+
result = @tester.create_object(form_obj, :admin_comments)
|
393
400
|
expect(result.author).to eq("Admin")
|
394
|
-
expect(
|
401
|
+
expect(form_obj.object.admin_comments).to be_empty
|
395
402
|
end
|
396
403
|
|
397
404
|
it "creates correct association for belongs_to associations" do
|
@@ -420,7 +427,8 @@ describe Cocoon do
|
|
420
427
|
|
421
428
|
it "can create using only conditions not the association" do
|
422
429
|
expect(@tester).to receive(:create_object_with_conditions).and_return('flappie')
|
423
|
-
|
430
|
+
form_obj = @tester.send(:instantiate_builder, @post.class.name, @post, {})
|
431
|
+
expect(@tester.create_object(form_obj, :comments, true)).to eq('flappie')
|
424
432
|
end
|
425
433
|
end
|
426
434
|
|
data/spec/dummy/db/schema.rb
CHANGED
@@ -1,3 +1,4 @@
|
|
1
|
+
# encoding: UTF-8
|
1
2
|
# This file is auto-generated from the current state of the database. Instead
|
2
3
|
# of editing this file, please use the migrations feature of Active Record to
|
3
4
|
# incrementally modify your database, and then regenerate this schema definition.
|
@@ -8,23 +9,31 @@
|
|
8
9
|
# from scratch. The latter is a flawed and unsustainable approach (the more migrations
|
9
10
|
# you'll amass, the slower it'll run and the greater likelihood for issues).
|
10
11
|
#
|
11
|
-
# It's strongly recommended
|
12
|
+
# It's strongly recommended that you check this file into your version control system.
|
12
13
|
|
13
|
-
ActiveRecord::Schema.define(:
|
14
|
+
ActiveRecord::Schema.define(version: 20110420222224) do
|
14
15
|
|
15
|
-
create_table "comments", :
|
16
|
+
create_table "comments", force: :cascade do |t|
|
16
17
|
t.text "body"
|
17
18
|
t.string "author"
|
18
19
|
t.integer "post_id"
|
19
|
-
t.datetime "created_at"
|
20
|
-
t.datetime "updated_at"
|
20
|
+
t.datetime "created_at", null: false
|
21
|
+
t.datetime "updated_at", null: false
|
21
22
|
end
|
22
23
|
|
23
|
-
create_table "
|
24
|
+
create_table "people", force: :cascade do |t|
|
25
|
+
t.string "name"
|
26
|
+
t.string "description"
|
27
|
+
t.integer "post_id"
|
28
|
+
t.datetime "created_at", null: false
|
29
|
+
t.datetime "updated_at", null: false
|
30
|
+
end
|
31
|
+
|
32
|
+
create_table "posts", force: :cascade do |t|
|
24
33
|
t.string "title"
|
25
34
|
t.text "body"
|
26
|
-
t.datetime "created_at"
|
27
|
-
t.datetime "updated_at"
|
35
|
+
t.datetime "created_at", null: false
|
36
|
+
t.datetime "updated_at", null: false
|
28
37
|
end
|
29
38
|
|
30
39
|
end
|
metadata
CHANGED
@@ -1,241 +1,237 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: cocoon
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.2.
|
4
|
+
version: 1.2.15
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Nathan Van der Auwera
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2020-09-08 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: rails
|
15
15
|
requirement: !ruby/object:Gem::Requirement
|
16
16
|
requirements:
|
17
|
-
- -
|
17
|
+
- - "~>"
|
18
18
|
- !ruby/object:Gem::Version
|
19
|
-
version: 4.
|
19
|
+
version: '4.2'
|
20
20
|
type: :development
|
21
21
|
prerelease: false
|
22
22
|
version_requirements: !ruby/object:Gem::Requirement
|
23
23
|
requirements:
|
24
|
-
- -
|
24
|
+
- - "~>"
|
25
25
|
- !ruby/object:Gem::Version
|
26
|
-
version: 4.
|
26
|
+
version: '4.2'
|
27
27
|
- !ruby/object:Gem::Dependency
|
28
28
|
name: sqlite3
|
29
29
|
requirement: !ruby/object:Gem::Requirement
|
30
30
|
requirements:
|
31
|
-
- -
|
31
|
+
- - '='
|
32
32
|
- !ruby/object:Gem::Version
|
33
|
-
version:
|
33
|
+
version: 1.3.13
|
34
34
|
type: :development
|
35
35
|
prerelease: false
|
36
36
|
version_requirements: !ruby/object:Gem::Requirement
|
37
37
|
requirements:
|
38
|
-
- -
|
38
|
+
- - '='
|
39
39
|
- !ruby/object:Gem::Version
|
40
|
-
version:
|
40
|
+
version: 1.3.13
|
41
41
|
- !ruby/object:Gem::Dependency
|
42
42
|
name: json_pure
|
43
43
|
requirement: !ruby/object:Gem::Requirement
|
44
44
|
requirements:
|
45
|
-
- -
|
45
|
+
- - ">="
|
46
46
|
- !ruby/object:Gem::Version
|
47
47
|
version: '0'
|
48
48
|
type: :development
|
49
49
|
prerelease: false
|
50
50
|
version_requirements: !ruby/object:Gem::Requirement
|
51
51
|
requirements:
|
52
|
-
- -
|
52
|
+
- - ">="
|
53
53
|
- !ruby/object:Gem::Version
|
54
54
|
version: '0'
|
55
55
|
- !ruby/object:Gem::Dependency
|
56
56
|
name: jeweler
|
57
57
|
requirement: !ruby/object:Gem::Requirement
|
58
58
|
requirements:
|
59
|
-
- -
|
59
|
+
- - ">="
|
60
60
|
- !ruby/object:Gem::Version
|
61
|
-
version:
|
62
|
-
MS44
|
61
|
+
version: '0'
|
63
62
|
type: :development
|
64
63
|
prerelease: false
|
65
64
|
version_requirements: !ruby/object:Gem::Requirement
|
66
65
|
requirements:
|
67
|
-
- -
|
66
|
+
- - ">="
|
68
67
|
- !ruby/object:Gem::Version
|
69
|
-
version:
|
70
|
-
MS44
|
68
|
+
version: '0'
|
71
69
|
- !ruby/object:Gem::Dependency
|
72
70
|
name: rspec-rails
|
73
71
|
requirement: !ruby/object:Gem::Requirement
|
74
72
|
requirements:
|
75
|
-
- - ~>
|
73
|
+
- - "~>"
|
76
74
|
- !ruby/object:Gem::Version
|
77
75
|
version: 3.0.0
|
78
76
|
type: :development
|
79
77
|
prerelease: false
|
80
78
|
version_requirements: !ruby/object:Gem::Requirement
|
81
79
|
requirements:
|
82
|
-
- - ~>
|
80
|
+
- - "~>"
|
83
81
|
- !ruby/object:Gem::Version
|
84
82
|
version: 3.0.0
|
85
83
|
- !ruby/object:Gem::Dependency
|
86
84
|
name: rspec
|
87
85
|
requirement: !ruby/object:Gem::Requirement
|
88
86
|
requirements:
|
89
|
-
- - ~>
|
87
|
+
- - "~>"
|
90
88
|
- !ruby/object:Gem::Version
|
91
89
|
version: 3.0.0
|
92
90
|
type: :development
|
93
91
|
prerelease: false
|
94
92
|
version_requirements: !ruby/object:Gem::Requirement
|
95
93
|
requirements:
|
96
|
-
- - ~>
|
94
|
+
- - "~>"
|
97
95
|
- !ruby/object:Gem::Version
|
98
96
|
version: 3.0.0
|
99
97
|
- !ruby/object:Gem::Dependency
|
100
98
|
name: actionpack
|
101
99
|
requirement: !ruby/object:Gem::Requirement
|
102
100
|
requirements:
|
103
|
-
- -
|
101
|
+
- - ">="
|
104
102
|
- !ruby/object:Gem::Version
|
105
103
|
version: 4.0.0
|
106
104
|
type: :development
|
107
105
|
prerelease: false
|
108
106
|
version_requirements: !ruby/object:Gem::Requirement
|
109
107
|
requirements:
|
110
|
-
- -
|
108
|
+
- - ">="
|
111
109
|
- !ruby/object:Gem::Version
|
112
110
|
version: 4.0.0
|
113
111
|
- !ruby/object:Gem::Dependency
|
114
112
|
name: simplecov
|
115
113
|
requirement: !ruby/object:Gem::Requirement
|
116
114
|
requirements:
|
117
|
-
- -
|
115
|
+
- - ">="
|
118
116
|
- !ruby/object:Gem::Version
|
119
117
|
version: '0'
|
120
118
|
type: :development
|
121
119
|
prerelease: false
|
122
120
|
version_requirements: !ruby/object:Gem::Requirement
|
123
121
|
requirements:
|
124
|
-
- -
|
122
|
+
- - ">="
|
125
123
|
- !ruby/object:Gem::Version
|
126
124
|
version: '0'
|
127
125
|
- !ruby/object:Gem::Dependency
|
128
126
|
name: rake
|
129
127
|
requirement: !ruby/object:Gem::Requirement
|
130
128
|
requirements:
|
131
|
-
- - ~>
|
129
|
+
- - "~>"
|
132
130
|
- !ruby/object:Gem::Version
|
133
|
-
version:
|
134
|
-
MTAuMQ==
|
131
|
+
version: '10.1'
|
135
132
|
type: :development
|
136
133
|
prerelease: false
|
137
134
|
version_requirements: !ruby/object:Gem::Requirement
|
138
135
|
requirements:
|
139
|
-
- - ~>
|
136
|
+
- - "~>"
|
140
137
|
- !ruby/object:Gem::Version
|
141
|
-
version:
|
142
|
-
MTAuMQ==
|
138
|
+
version: '10.1'
|
143
139
|
- !ruby/object:Gem::Dependency
|
144
140
|
name: nokogiri
|
145
141
|
requirement: !ruby/object:Gem::Requirement
|
146
142
|
requirements:
|
147
|
-
- -
|
143
|
+
- - ">="
|
148
144
|
- !ruby/object:Gem::Version
|
149
145
|
version: '0'
|
150
146
|
type: :development
|
151
147
|
prerelease: false
|
152
148
|
version_requirements: !ruby/object:Gem::Requirement
|
153
149
|
requirements:
|
154
|
-
- -
|
150
|
+
- - ">="
|
155
151
|
- !ruby/object:Gem::Version
|
156
152
|
version: '0'
|
157
153
|
- !ruby/object:Gem::Dependency
|
158
154
|
name: generator_spec
|
159
155
|
requirement: !ruby/object:Gem::Requirement
|
160
156
|
requirements:
|
161
|
-
- -
|
157
|
+
- - ">="
|
162
158
|
- !ruby/object:Gem::Version
|
163
159
|
version: '0'
|
164
160
|
type: :development
|
165
161
|
prerelease: false
|
166
162
|
version_requirements: !ruby/object:Gem::Requirement
|
167
163
|
requirements:
|
168
|
-
- -
|
164
|
+
- - ">="
|
169
165
|
- !ruby/object:Gem::Version
|
170
166
|
version: '0'
|
171
167
|
- !ruby/object:Gem::Dependency
|
172
168
|
name: rubysl
|
173
169
|
requirement: !ruby/object:Gem::Requirement
|
174
170
|
requirements:
|
175
|
-
- -
|
171
|
+
- - ">="
|
176
172
|
- !ruby/object:Gem::Version
|
177
173
|
version: '0'
|
178
174
|
type: :development
|
179
175
|
prerelease: false
|
180
176
|
version_requirements: !ruby/object:Gem::Requirement
|
181
177
|
requirements:
|
182
|
-
- -
|
178
|
+
- - ">="
|
183
179
|
- !ruby/object:Gem::Version
|
184
180
|
version: '0'
|
185
181
|
- !ruby/object:Gem::Dependency
|
186
182
|
name: rubysl-test-unit
|
187
183
|
requirement: !ruby/object:Gem::Requirement
|
188
184
|
requirements:
|
189
|
-
- -
|
185
|
+
- - ">="
|
190
186
|
- !ruby/object:Gem::Version
|
191
187
|
version: '0'
|
192
188
|
type: :development
|
193
189
|
prerelease: false
|
194
190
|
version_requirements: !ruby/object:Gem::Requirement
|
195
191
|
requirements:
|
196
|
-
- -
|
192
|
+
- - ">="
|
197
193
|
- !ruby/object:Gem::Version
|
198
194
|
version: '0'
|
199
195
|
- !ruby/object:Gem::Dependency
|
200
196
|
name: psych
|
201
197
|
requirement: !ruby/object:Gem::Requirement
|
202
198
|
requirements:
|
203
|
-
- -
|
199
|
+
- - "~>"
|
204
200
|
- !ruby/object:Gem::Version
|
205
|
-
version: '
|
201
|
+
version: '2.2'
|
206
202
|
type: :development
|
207
203
|
prerelease: false
|
208
204
|
version_requirements: !ruby/object:Gem::Requirement
|
209
205
|
requirements:
|
210
|
-
- -
|
206
|
+
- - "~>"
|
211
207
|
- !ruby/object:Gem::Version
|
212
|
-
version: '
|
208
|
+
version: '2.2'
|
213
209
|
- !ruby/object:Gem::Dependency
|
214
210
|
name: racc
|
215
211
|
requirement: !ruby/object:Gem::Requirement
|
216
212
|
requirements:
|
217
|
-
- -
|
213
|
+
- - ">="
|
218
214
|
- !ruby/object:Gem::Version
|
219
215
|
version: '0'
|
220
216
|
type: :development
|
221
217
|
prerelease: false
|
222
218
|
version_requirements: !ruby/object:Gem::Requirement
|
223
219
|
requirements:
|
224
|
-
- -
|
220
|
+
- - ">="
|
225
221
|
- !ruby/object:Gem::Version
|
226
222
|
version: '0'
|
227
223
|
- !ruby/object:Gem::Dependency
|
228
224
|
name: rubinius-developer_tools
|
229
225
|
requirement: !ruby/object:Gem::Requirement
|
230
226
|
requirements:
|
231
|
-
- -
|
227
|
+
- - ">="
|
232
228
|
- !ruby/object:Gem::Version
|
233
229
|
version: '0'
|
234
230
|
type: :development
|
235
231
|
prerelease: false
|
236
232
|
version_requirements: !ruby/object:Gem::Requirement
|
237
233
|
requirements:
|
238
|
-
- -
|
234
|
+
- - ">="
|
239
235
|
- !ruby/object:Gem::Version
|
240
236
|
version: '0'
|
241
237
|
description: Unobtrusive nested forms handling, using jQuery. Use this and discover
|
@@ -244,22 +240,26 @@ email: nathan@dixis.com
|
|
244
240
|
executables: []
|
245
241
|
extensions: []
|
246
242
|
extra_rdoc_files:
|
243
|
+
- LICENSE
|
247
244
|
- README.markdown
|
248
245
|
files:
|
249
|
-
- .travis.yml
|
246
|
+
- ".travis.yml"
|
250
247
|
- Gemfile
|
251
248
|
- History.md
|
252
|
-
-
|
249
|
+
- LICENSE
|
253
250
|
- README.markdown
|
254
251
|
- Rakefile
|
255
252
|
- VERSION
|
256
253
|
- app/assets/javascripts/cocoon.js
|
257
254
|
- cocoon.gemspec
|
255
|
+
- gemfiles/Gemfile.default
|
258
256
|
- gemfiles/Gemfile.rails-3.2.13
|
259
257
|
- gemfiles/Gemfile.rails-4-r2
|
260
258
|
- lib/cocoon.rb
|
261
259
|
- lib/cocoon/view_helpers.rb
|
262
260
|
- lib/generators/cocoon/install/install_generator.rb
|
261
|
+
- npm/README.md
|
262
|
+
- npm/package.json.erb
|
263
263
|
- spec/cocoon_spec.rb
|
264
264
|
- spec/dummy/Rakefile
|
265
265
|
- spec/dummy/app/controllers/application_controller.rb
|
@@ -317,17 +317,16 @@ require_paths:
|
|
317
317
|
- lib
|
318
318
|
required_ruby_version: !ruby/object:Gem::Requirement
|
319
319
|
requirements:
|
320
|
-
- -
|
320
|
+
- - ">="
|
321
321
|
- !ruby/object:Gem::Version
|
322
322
|
version: '0'
|
323
323
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
324
324
|
requirements:
|
325
|
-
- -
|
325
|
+
- - ">="
|
326
326
|
- !ruby/object:Gem::Version
|
327
327
|
version: '0'
|
328
328
|
requirements: []
|
329
|
-
|
330
|
-
rubygems_version: 2.6.10
|
329
|
+
rubygems_version: 3.0.8
|
331
330
|
signing_key:
|
332
331
|
specification_version: 4
|
333
332
|
summary: gem that enables easier nested forms with standard forms, formtastic and
|