cocoon 1.0.13 → 1.0.14
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.
- data/History.md +9 -0
- data/README.markdown +7 -0
- data/VERSION +1 -1
- data/cocoon.gemspec +2 -2
- data/lib/cocoon/view_helpers.rb +7 -3
- data/spec/cocoon_spec.rb +41 -0
- data/spec/dummy/app/models/person.rb +1 -0
- metadata +4 -4
data/History.md
CHANGED
@@ -1,5 +1,14 @@
|
|
1
1
|
# Change History / Release Notes
|
2
2
|
|
3
|
+
## Version 1.0.14
|
4
|
+
|
5
|
+
* When playing with `simple_form` and `twitter-bootstrap`, I noticed it is crucial that I call the correct nested-fields function.
|
6
|
+
That is: `fields_for` for standard forms, `semantic_fields_for` in formtastic and `simple_fields_for` for simple_form.
|
7
|
+
Secondly, this was not enough, I needed to be able to hand down options to that method. So in the `link_to_add_association` method you
|
8
|
+
can now an extra option `:render_options` and that hash will be handed to the association-builder.
|
9
|
+
|
10
|
+
This allows the nested fields to be built correctly with `simple_form` for `twitter-bootstrap`.
|
11
|
+
|
3
12
|
## Version 1.0.13
|
4
13
|
|
5
14
|
* A while ago we added the option to add a javascript callback on inserting a new associated object, I now made sure we can add a callback on insertion
|
data/README.markdown
CHANGED
@@ -149,6 +149,13 @@ It takes three parameters:
|
|
149
149
|
|
150
150
|
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).
|
151
151
|
|
152
|
+
Inside the `html_options` you can add an option `:render_options`, and the containing hash will be handed down to the form-builder for the inserted
|
153
|
+
form. E.g. especially when using `twitter-bootstrap` and `simple_form` together, the `simple_fields_for` needs the option `:wrapper => 'inline'` which can
|
154
|
+
be handed down as follows:
|
155
|
+
|
156
|
+
= link_to_add_association 'add something', f, :something, :render_options => {:wrapper => 'inline' }
|
157
|
+
|
158
|
+
|
152
159
|
### Callbacks (upon insert and remove of items)
|
153
160
|
|
154
161
|
There is an option to add a callback on insertion or removal. If in your view you have the following snippet to select an `onwer`
|
data/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
1.0.
|
1
|
+
1.0.14
|
data/cocoon.gemspec
CHANGED
@@ -5,11 +5,11 @@
|
|
5
5
|
|
6
6
|
Gem::Specification.new do |s|
|
7
7
|
s.name = %q{cocoon}
|
8
|
-
s.version = "1.0.
|
8
|
+
s.version = "1.0.14"
|
9
9
|
|
10
10
|
s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
|
11
11
|
s.authors = ["Nathan Van der Auwera"]
|
12
|
-
s.date = %q{2011-10-
|
12
|
+
s.date = %q{2011-10-22}
|
13
13
|
s.description = %q{Unobtrusive nested forms handling, using jQuery. Use this and discover cocoon-heaven.}
|
14
14
|
s.email = %q{nathan@dixis.com}
|
15
15
|
s.extra_rdoc_files = [
|
data/lib/cocoon/view_helpers.rb
CHANGED
@@ -31,8 +31,9 @@ module Cocoon
|
|
31
31
|
end
|
32
32
|
|
33
33
|
# :nodoc:
|
34
|
-
def render_association(association, f, new_object)
|
35
|
-
f.
|
34
|
+
def render_association(association, f, new_object, render_options={})
|
35
|
+
method_name = f.respond_to?(:semantic_fields_for) ? :semantic_fields_for : (f.respond_to?(:simple_fields_for) ? :simple_fields_for : :fields_for)
|
36
|
+
f.send(method_name, association, new_object, {:child_index => "new_#{association}"}.merge(render_options)) do |builder|
|
36
37
|
render(association.to_s.singularize + "_fields", :f => builder, :dynamic => true)
|
37
38
|
end
|
38
39
|
end
|
@@ -57,12 +58,15 @@ module Cocoon
|
|
57
58
|
association = args[2]
|
58
59
|
html_options = args[3] || {}
|
59
60
|
|
61
|
+
render_options = html_options.delete(:render_options)
|
62
|
+
render_options ||={}
|
63
|
+
|
60
64
|
html_options[:class] = [html_options[:class], "add_fields"].compact.join(' ')
|
61
65
|
html_options[:'data-association'] = association.to_s.singularize
|
62
66
|
html_options[:'data-associations'] = association.to_s.pluralize
|
63
67
|
|
64
68
|
new_object = f.object.class.reflect_on_association(association).klass.new
|
65
|
-
html_options[:'data-template'] = CGI.escapeHTML(render_association(association, f, new_object)).html_safe
|
69
|
+
html_options[:'data-template'] = CGI.escapeHTML(render_association(association, f, new_object, render_options)).html_safe
|
66
70
|
|
67
71
|
link_to(name, '#', html_options )
|
68
72
|
end
|
data/spec/cocoon_spec.rb
CHANGED
@@ -52,7 +52,48 @@ describe Cocoon do
|
|
52
52
|
result = @tester.link_to_add_association('add something', @form_obj, :people)
|
53
53
|
result.to_s.should == '<a href="#" class="add_fields" data-association="person" data-associations="people" data-template="form<tag>">add something</a>'
|
54
54
|
end
|
55
|
+
end
|
56
|
+
|
57
|
+
it "tttt" do
|
58
|
+
@post.class.reflect_on_association(:people).klass.new.should be_a(Person)
|
59
|
+
end
|
60
|
+
|
61
|
+
context "with extra render-options for rendering the child relation" do
|
62
|
+
it "should use the correct plural" do
|
63
|
+
@tester.should_receive(:render_association).with(:people, @form_obj, anything, {:wrapper => 'inline'})
|
64
|
+
result = @tester.link_to_add_association('add something', @form_obj, :people, :render_options => {:wrapper => 'inline'})
|
65
|
+
result.to_s.should == '<a href="#" class="add_fields" data-association="person" data-associations="people" data-template="form<tag>">add something</a>'
|
66
|
+
end
|
67
|
+
end
|
68
|
+
|
69
|
+
context "when using formtastic" do
|
70
|
+
before(:each) do
|
71
|
+
@tester.unstub(:render_association)
|
72
|
+
@form_obj.stub(:semantic_fields_for).and_return('form<tagzzz>')
|
73
|
+
end
|
74
|
+
it "calls semantic_fields_for and not fields_for" do
|
75
|
+
@form_obj.should_receive(:semantic_fields_for)
|
76
|
+
@form_obj.should_receive(:fields_for).never
|
77
|
+
result = @tester.link_to_add_association('add something', @form_obj, :people)
|
78
|
+
result.to_s.should == '<a href="#" class="add_fields" data-association="person" data-associations="people" data-template="form<tagzzz>">add something</a>'
|
55
79
|
|
80
|
+
end
|
81
|
+
end
|
82
|
+
context "when using simple_form" do
|
83
|
+
before(:each) do
|
84
|
+
@tester.unstub(:render_association)
|
85
|
+
@form_obj.stub(:simple_fields_for).and_return('form<tagxxx>')
|
86
|
+
end
|
87
|
+
it "responds_to :simple_fields_for" do
|
88
|
+
@form_obj.should respond_to(:simple_fields_for)
|
89
|
+
end
|
90
|
+
it "calls simple_fields_for and not fields_for" do
|
91
|
+
@form_obj.should_receive(:simple_fields_for)
|
92
|
+
@form_obj.should_receive(:fields_for).never
|
93
|
+
result = @tester.link_to_add_association('add something', @form_obj, :people)
|
94
|
+
result.to_s.should == '<a href="#" class="add_fields" data-association="person" data-associations="people" data-template="form<tagxxx>">add something</a>'
|
95
|
+
|
96
|
+
end
|
56
97
|
end
|
57
98
|
|
58
99
|
end
|
metadata
CHANGED
@@ -1,13 +1,13 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: cocoon
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
hash:
|
4
|
+
hash: 11
|
5
5
|
prerelease:
|
6
6
|
segments:
|
7
7
|
- 1
|
8
8
|
- 0
|
9
|
-
-
|
10
|
-
version: 1.0.
|
9
|
+
- 14
|
10
|
+
version: 1.0.14
|
11
11
|
platform: ruby
|
12
12
|
authors:
|
13
13
|
- Nathan Van der Auwera
|
@@ -15,7 +15,7 @@ autorequire:
|
|
15
15
|
bindir: bin
|
16
16
|
cert_chain: []
|
17
17
|
|
18
|
-
date: 2011-10-
|
18
|
+
date: 2011-10-22 00:00:00 +02:00
|
19
19
|
default_executable:
|
20
20
|
dependencies:
|
21
21
|
- !ruby/object:Gem::Dependency
|