cocoon 1.0.13 → 1.0.14
Sign up to get free protection for your applications and to get access to all the features.
- 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
|