cocoon 1.2.11 → 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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
- SHA1:
3
- metadata.gz: 1b41a3b05044110e35f9ac65dca30cdcb96455a4
4
- data.tar.gz: b98f78e8fb764b7de9d6aedfd86a1e50f6359390
2
+ SHA256:
3
+ metadata.gz: 5ece48b77f3c2ade4038d9a745ecda7d23ec24d2e1b391a7900c1b040e9800a0
4
+ data.tar.gz: dfd2781be46692cc32726a785d379503c1f1aadd37a015f3d18e1955f2bc893b
5
5
  SHA512:
6
- metadata.gz: '08fcb909826ebaa9728e62e0af6ba8392e655d5cedc03685aeccd90ee60e9247a5b4314b495e3024d82cc8de832569a03c224d6d125923ec4f392bb5870beafb'
7
- data.tar.gz: 1790076ada7fee16d634da3d17fc37cdb9cf5178285fc422285b57fa3ed831811e301c4fbf2ae5731f7ce5e49bb2d83207821105fccf37726310f0a336f8e252
6
+ metadata.gz: 278cc47c1d3cf4bc126f8609cbb4efa945fb59b864f495097e3a1f0d536b6353cc43da3d4e49d2cddbb65c660adfc057a50d3b8639d7acb5bcf1eed761937fd8
7
+ data.tar.gz: 8c9b316114c977cdf62aac3c172cb50bb74444714099751bd4915d8b970a105d6cca61ffe7c41f8369d7bdf2cb6f935ce92b852dba58b1c7e234f32d06daa9fe
data/.travis.yml CHANGED
@@ -3,19 +3,30 @@ rvm:
3
3
  - 2.1.5
4
4
  - 2.2.6
5
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
6
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
+
7
18
  gemfile:
8
19
  - gemfiles/Gemfile.rails-3.2.13
9
20
  - gemfiles/Gemfile.rails-4-r2
10
- - Gemfile
21
+ - gemfiles/Gemfile.default
11
22
 
12
23
  matrix:
13
24
  fast_finish: true
14
25
  exclude:
15
26
  - rvm: 2.0.0
16
- gemfile: Gemfile
27
+ gemfile: gemfiles/Gemfile.default
17
28
  - rvm: 2.1.5
18
- gemfile: Gemfile
29
+ gemfile: gemfiles/Gemfile.default
19
30
  - rvm: 2.2.6
20
31
  gemfile: gemfiles/Gemfile.rails-3.2.13
21
32
  - rvm: 2.2.6
@@ -24,9 +35,29 @@ matrix:
24
35
  gemfile: gemfiles/Gemfile.rails-3.2.13
25
36
  - rvm: 2.3.2
26
37
  gemfile: gemfiles/Gemfile.rails-4-r2
27
- - rvm: 2.4.0
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
28
59
  gemfile: gemfiles/Gemfile.rails-3.2.13
29
- - rvm: 2.4.0
60
+ - rvm: 2.6.3
30
61
  gemfile: gemfiles/Gemfile.rails-4-r2
31
62
  allow_failures:
32
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", ">=4.0.0"
5
+ gem "rails", "~> 4.2"
6
6
  gem "sqlite3", '1.3.13'
7
7
  gem "json_pure"
8
- gem "jeweler", "~> 2.3"
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"
File without changes
data/README.markdown CHANGED
@@ -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 (instead of the default `erb` views).
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: the text to show in the link
222
- - f: the form builder
223
- - association: the name of the association (plural) of which a new instance needs to be added (symbol or string).
224
- - html_options: extra html-options (see [`link_to`](http://api.rubyonrails.org/classes/ActionView/Helpers/UrlHelper.html#method-i-link_to)
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
 
@@ -338,9 +356,9 @@ This should be placed inside the partial `_<association-object-singular>_fields`
338
356
 
339
357
  It takes three parameters:
340
358
 
341
- - name: the text to show in the link
342
- - f: referring to the containing form-object
343
- - html_options: extra html-options (see `link_to`)
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`)
344
362
 
345
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).
346
364
 
@@ -367,13 +385,14 @@ On insertion or removal the following events are triggered:
367
385
  To listen to the events in your JavaScript:
368
386
 
369
387
  ```javascript
370
- $('#container').on('cocoon:before-insert', function(e, insertedItem) {
388
+ $('#container').on('cocoon:before-insert', function(e, insertedItem, originalEvent) {
371
389
  // ... do something
372
390
  });
373
391
  ```
374
392
 
375
393
  ...where `e` is the event and the second parameter is the inserted or removed item. This allows you to change markup, or
376
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)
377
396
 
378
397
 
379
398
  If in your view you have the following snippet to select an `owner`:
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.11
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) {
@@ -85,7 +88,7 @@
85
88
  var contentNode = $(node);
86
89
 
87
90
  var before_insert = jQuery.Event('cocoon:before-insert');
88
- insertionNodeElem.trigger(before_insert, [contentNode]);
91
+ insertionNodeElem.trigger(before_insert, [contentNode, originalEvent]);
89
92
 
90
93
  if (!before_insert.isDefaultPrevented()) {
91
94
  // allow any of the jquery dom manipulation methods (after, before, append, prepend, etc)
@@ -93,7 +96,8 @@
93
96
  // code and doesn't force it to be a sibling like after/before does. default: 'before'
94
97
  var addedContent = insertionNodeElem[insertionMethod](contentNode);
95
98
 
96
- insertionNodeElem.trigger('cocoon:after-insert', [contentNode]);
99
+ insertionNodeElem.trigger('cocoon:after-insert', [contentNode,
100
+ originalEvent]);
97
101
  }
98
102
  });
99
103
  });
@@ -102,24 +106,27 @@
102
106
  var $this = $(this),
103
107
  wrapper_class = $this.data('wrapper-class') || 'nested-fields',
104
108
  node_to_delete = $this.closest('.' + wrapper_class),
105
- trigger_node = node_to_delete.parent();
109
+ trigger_node = node_to_delete.parent(),
110
+ originalEvent = e;
106
111
 
107
112
  e.preventDefault();
113
+ e.stopPropagation();
108
114
 
109
115
  var before_remove = jQuery.Event('cocoon:before-remove');
110
- trigger_node.trigger(before_remove, [node_to_delete]);
116
+ trigger_node.trigger(before_remove, [node_to_delete, originalEvent]);
111
117
 
112
118
  if (!before_remove.isDefaultPrevented()) {
113
119
  var timeout = trigger_node.data('remove-timeout') || 0;
114
120
 
115
121
  setTimeout(function() {
116
122
  if ($this.hasClass('dynamic')) {
117
- node_to_delete.remove();
123
+ node_to_delete.detach();
118
124
  } else {
119
125
  $this.prev("input[type=hidden]").val("1");
120
126
  node_to_delete.hide();
121
127
  }
122
- trigger_node.trigger('cocoon:after-remove', [node_to_delete]);
128
+ trigger_node.trigger('cocoon:after-remove', [node_to_delete,
129
+ originalEvent]);
123
130
  }, timeout);
124
131
  }
125
132
  });
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.11 ruby lib
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.11"
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 = "2017-10-26"
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
- "MIT-LICENSE",
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 = "2.6.14".freeze
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, [">= 4.0.0"])
96
+ s.add_development_dependency(%q<rails>.freeze, ["~> 4.2"])
93
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, ["~> 2.3"])
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"])
@@ -106,10 +110,10 @@ Gem::Specification.new do |s|
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, [">= 4.0.0"])
113
+ s.add_dependency(%q<rails>.freeze, ["~> 4.2"])
110
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, ["~> 2.3"])
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"])
@@ -124,10 +128,10 @@ Gem::Specification.new do |s|
124
128
  s.add_dependency(%q<rubinius-developer_tools>.freeze, [">= 0"])
125
129
  end
126
130
  else
127
- s.add_dependency(%q<rails>.freeze, [">= 4.0.0"])
131
+ s.add_dependency(%q<rails>.freeze, ["~> 4.2"])
128
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, ["~> 2.3"])
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"])
@@ -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'
@@ -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
- hidden_field_tag("#{f.object_name}[_destroy]", f.object._destroy) + link_to(name, '#', html_options)
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, render_options={}, custom_partial=nil)
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 == "Mongoid::Relations::Metadata" || force_non_association_create
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,8 @@
1
+ # cocoon
2
+
3
+ Cocoon is the companion javascript code for the
4
+ rails gem [cocoon](https://github.com/nathanvda/cocoon)
5
+ which offers "dynamic" nested forms.
6
+
7
+ This code depends on jQuery.
8
+
@@ -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
- @html = @tester.link_to_add_association('add something', @form_obj, :people, :render_options => {:wrapper => 'inline', :locals => {:alfred => 'Judoka'}})
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 = double(:object => @post_marked_for_destruction, :object_name => @post_marked_for_destruction.class.name)
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
- result = @tester.create_object(@form_obj, :admin_comments)
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(@form_obj.object.admin_comments).to be_empty
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
- expect(@tester.create_object(@form_obj, :comments, true)).to eq('flappie')
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
 
@@ -4,7 +4,7 @@ class CreatePosts < ActiveRecord::Migration
4
4
  t.string :title
5
5
  t.text :body
6
6
 
7
- t.timestamps
7
+ t.timestamps null: false
8
8
  end
9
9
  end
10
10
 
@@ -5,7 +5,7 @@ class CreateComments < ActiveRecord::Migration
5
5
  t.string :author
6
6
  t.integer :post_id
7
7
 
8
- t.timestamps
8
+ t.timestamps null: false
9
9
  end
10
10
  end
11
11
 
@@ -5,7 +5,7 @@ class CreatePeople < ActiveRecord::Migration
5
5
  t.string :description
6
6
  t.integer :post_id
7
7
 
8
- t.timestamps
8
+ t.timestamps null: false
9
9
  end
10
10
  end
11
11
 
@@ -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 to check this file into your version control system.
12
+ # It's strongly recommended that you check this file into your version control system.
12
13
 
13
- ActiveRecord::Schema.define(:version => 20110306212250) do
14
+ ActiveRecord::Schema.define(version: 20110420222224) do
14
15
 
15
- create_table "comments", :force => true do |t|
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 "posts", :force => true do |t|
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,29 +1,29 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: cocoon
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.2.11
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: 2017-10-26 00:00:00.000000000 Z
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.0.0
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.0.0
26
+ version: '4.2'
27
27
  - !ruby/object:Gem::Dependency
28
28
  name: sqlite3
29
29
  requirement: !ruby/object:Gem::Requirement
@@ -56,16 +56,16 @@ dependencies:
56
56
  name: jeweler
57
57
  requirement: !ruby/object:Gem::Requirement
58
58
  requirements:
59
- - - "~>"
59
+ - - ">="
60
60
  - !ruby/object:Gem::Version
61
- version: '2.3'
61
+ version: '0'
62
62
  type: :development
63
63
  prerelease: false
64
64
  version_requirements: !ruby/object:Gem::Requirement
65
65
  requirements:
66
- - - "~>"
66
+ - - ">="
67
67
  - !ruby/object:Gem::Version
68
- version: '2.3'
68
+ version: '0'
69
69
  - !ruby/object:Gem::Dependency
70
70
  name: rspec-rails
71
71
  requirement: !ruby/object:Gem::Requirement
@@ -240,22 +240,26 @@ email: nathan@dixis.com
240
240
  executables: []
241
241
  extensions: []
242
242
  extra_rdoc_files:
243
+ - LICENSE
243
244
  - README.markdown
244
245
  files:
245
246
  - ".travis.yml"
246
247
  - Gemfile
247
248
  - History.md
248
- - MIT-LICENSE
249
+ - LICENSE
249
250
  - README.markdown
250
251
  - Rakefile
251
252
  - VERSION
252
253
  - app/assets/javascripts/cocoon.js
253
254
  - cocoon.gemspec
255
+ - gemfiles/Gemfile.default
254
256
  - gemfiles/Gemfile.rails-3.2.13
255
257
  - gemfiles/Gemfile.rails-4-r2
256
258
  - lib/cocoon.rb
257
259
  - lib/cocoon/view_helpers.rb
258
260
  - lib/generators/cocoon/install/install_generator.rb
261
+ - npm/README.md
262
+ - npm/package.json.erb
259
263
  - spec/cocoon_spec.rb
260
264
  - spec/dummy/Rakefile
261
265
  - spec/dummy/app/controllers/application_controller.rb
@@ -322,8 +326,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
322
326
  - !ruby/object:Gem::Version
323
327
  version: '0'
324
328
  requirements: []
325
- rubyforge_project:
326
- rubygems_version: 2.6.14
329
+ rubygems_version: 3.0.8
327
330
  signing_key:
328
331
  specification_version: 4
329
332
  summary: gem that enables easier nested forms with standard forms, formtastic and