nested_fields 0.1.1
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/.document +5 -0
- data/Gemfile +13 -0
- data/Gemfile.lock +20 -0
- data/README.rdoc +1 -0
- data/Rakefile +53 -0
- data/VERSION +1 -0
- data/app/controllers/nested_fields_controller.rb +13 -0
- data/app/helpers/nested_fields_helper.rb +18 -0
- data/app/views/nested_fields/_js.html.erb +1 -0
- data/app/views/nested_fields/_nested_fields.html.erb +16 -0
- data/app/views/nested_fields/add_nested_fields.html.erb +11 -0
- data/config/routes.rb +3 -0
- data/lib/engine.rb +11 -0
- data/lib/nested_fields.rb +1 -0
- data/nested_fields.gemspec +70 -0
- data/public/javascripts/nested_fields.js +18 -0
- data/test/helper.rb +18 -0
- data/test/test_nested_fields.rb +7 -0
- metadata +138 -0
data/.document
ADDED
data/Gemfile
ADDED
@@ -0,0 +1,13 @@
|
|
1
|
+
source "http://rubygems.org"
|
2
|
+
# Add dependencies required to use your gem here.
|
3
|
+
# Example:
|
4
|
+
# gem "activesupport", ">= 2.3.5"
|
5
|
+
|
6
|
+
# Add dependencies to develop your gem here.
|
7
|
+
# Include everything needed to run rake, tests, features, etc.
|
8
|
+
group :development do
|
9
|
+
gem "shoulda", ">= 0"
|
10
|
+
gem "bundler", "~> 1.0.0"
|
11
|
+
gem "jeweler", "~> 1.5.1"
|
12
|
+
gem "rcov", ">= 0"
|
13
|
+
end
|
data/Gemfile.lock
ADDED
@@ -0,0 +1,20 @@
|
|
1
|
+
GEM
|
2
|
+
remote: http://rubygems.org/
|
3
|
+
specs:
|
4
|
+
git (1.2.5)
|
5
|
+
jeweler (1.5.1)
|
6
|
+
bundler (~> 1.0.0)
|
7
|
+
git (>= 1.2.5)
|
8
|
+
rake
|
9
|
+
rake (0.8.7)
|
10
|
+
rcov (0.9.9)
|
11
|
+
shoulda (2.11.3)
|
12
|
+
|
13
|
+
PLATFORMS
|
14
|
+
ruby
|
15
|
+
|
16
|
+
DEPENDENCIES
|
17
|
+
bundler (~> 1.0.0)
|
18
|
+
jeweler (~> 1.5.1)
|
19
|
+
rcov
|
20
|
+
shoulda
|
data/README.rdoc
ADDED
@@ -0,0 +1 @@
|
|
1
|
+
jQuery is required.
|
data/Rakefile
ADDED
@@ -0,0 +1,53 @@
|
|
1
|
+
require 'rubygems'
|
2
|
+
require 'bundler'
|
3
|
+
begin
|
4
|
+
Bundler.setup(:default, :development)
|
5
|
+
rescue Bundler::BundlerError => e
|
6
|
+
$stderr.puts e.message
|
7
|
+
$stderr.puts "Run `bundle install` to install missing gems"
|
8
|
+
exit e.status_code
|
9
|
+
end
|
10
|
+
require 'rake'
|
11
|
+
|
12
|
+
require 'jeweler'
|
13
|
+
Jeweler::Tasks.new do |gem|
|
14
|
+
# gem is a Gem::Specification... see http://docs.rubygems.org/read/chapter/20 for more options
|
15
|
+
gem.name = "nested_fields"
|
16
|
+
gem.homepage = "http://github.com/jrmurad/nested_fields"
|
17
|
+
gem.license = "MIT"
|
18
|
+
gem.summary = %Q{Unobtrusive dynamic nested forms}
|
19
|
+
gem.description = %Q{Unobtrusive dynamic nested forms}
|
20
|
+
gem.email = "jason@thriess.com"
|
21
|
+
gem.authors = ["Jason Murad"]
|
22
|
+
# Include your dependencies below. Runtime dependencies are required when using your gem,
|
23
|
+
# and development dependencies are only needed for development (ie running rake tasks, tests, etc)
|
24
|
+
# gem.add_runtime_dependency 'jabber4r', '> 0.1'
|
25
|
+
# gem.add_development_dependency 'rspec', '> 1.2.3'
|
26
|
+
end
|
27
|
+
Jeweler::RubygemsDotOrgTasks.new
|
28
|
+
|
29
|
+
require 'rake/testtask'
|
30
|
+
Rake::TestTask.new(:test) do |test|
|
31
|
+
test.libs << 'lib' << 'test'
|
32
|
+
test.pattern = 'test/**/test_*.rb'
|
33
|
+
test.verbose = true
|
34
|
+
end
|
35
|
+
|
36
|
+
require 'rcov/rcovtask'
|
37
|
+
Rcov::RcovTask.new do |test|
|
38
|
+
test.libs << 'test'
|
39
|
+
test.pattern = 'test/**/test_*.rb'
|
40
|
+
test.verbose = true
|
41
|
+
end
|
42
|
+
|
43
|
+
task :default => :test
|
44
|
+
|
45
|
+
require 'rake/rdoctask'
|
46
|
+
Rake::RDocTask.new do |rdoc|
|
47
|
+
version = File.exist?('VERSION') ? File.read('VERSION') : ""
|
48
|
+
|
49
|
+
rdoc.rdoc_dir = 'rdoc'
|
50
|
+
rdoc.title = "nested_fields #{version}"
|
51
|
+
rdoc.rdoc_files.include('README*')
|
52
|
+
rdoc.rdoc_files.include('lib/**/*.rb')
|
53
|
+
end
|
data/VERSION
ADDED
@@ -0,0 +1 @@
|
|
1
|
+
0.1.1
|
@@ -0,0 +1,13 @@
|
|
1
|
+
class NestedFieldsController < ActionController::Base
|
2
|
+
def add_nested_fields
|
3
|
+
@parent_class = params[:parent_class].constantize
|
4
|
+
@association = params[:association].to_sym
|
5
|
+
@builder = params[:builder].constantize
|
6
|
+
@object = @parent_class.reflect_on_association(@association).klass.new
|
7
|
+
@index = "#{Time.now.to_i}#{Time.now.usec}"
|
8
|
+
|
9
|
+
respond_to do |format|
|
10
|
+
format.js { render 'nested_fields/add_nested_fields' }
|
11
|
+
end
|
12
|
+
end
|
13
|
+
end
|
@@ -0,0 +1,18 @@
|
|
1
|
+
module NestedFieldsHelper
|
2
|
+
def nested_fields_js
|
3
|
+
render 'nested_fields/js'
|
4
|
+
end
|
5
|
+
|
6
|
+
def nested_fields_for(f, association, nested_partial="#{association}/fields")
|
7
|
+
add = add_nested_fields_path :parent_class => f.object.class, :association => association, :builder => f.class
|
8
|
+
|
9
|
+
render 'nested_fields/nested_fields', :add_url => add,
|
10
|
+
:association => association,
|
11
|
+
:f => f,
|
12
|
+
:nested_partial => nested_partial
|
13
|
+
end
|
14
|
+
|
15
|
+
def link_to_remove_fields(f, text='Remove')
|
16
|
+
link_to text, '#', :class => :remove_nested_fields
|
17
|
+
end
|
18
|
+
end
|
@@ -0,0 +1 @@
|
|
1
|
+
<%= javascript_include_tag 'nested_fields' %>
|
@@ -0,0 +1,16 @@
|
|
1
|
+
<fieldset id="<%= association %>" class="nested_fieldset">
|
2
|
+
<legend><%= association.to_s.titleize %></legend>
|
3
|
+
|
4
|
+
<a href="#" class="add_nested_fields" data-url="<%= add_url %>">Add</a>
|
5
|
+
|
6
|
+
<%= f.fields_for association, :builder => f.class do |nested_f| %>
|
7
|
+
<div class="nested_fields">
|
8
|
+
<%= link_to_remove_fields :nested_f %>
|
9
|
+
|
10
|
+
<div class="nested_fields_inputs">
|
11
|
+
<%= render nested_partial, :f => nested_f %>
|
12
|
+
<%= nested_f.input :_destroy, :as => :hidden %>
|
13
|
+
</div>
|
14
|
+
</div>
|
15
|
+
<% end %>
|
16
|
+
</fieldset>
|
@@ -0,0 +1,11 @@
|
|
1
|
+
<%= fields_for "#{@parent_class.name.underscore}[#{@association}_attributes]",
|
2
|
+
@object, :builder => @builder, :index => @index do |f| %>
|
3
|
+
<div class="nested_fields">
|
4
|
+
<%= link_to_remove_fields :nested_f %>
|
5
|
+
|
6
|
+
<div class="nested_fields_inputs">
|
7
|
+
<%= render "#{@association}/fields", :f => f %>
|
8
|
+
<%= f.input :_destroy, :as => :hidden %>
|
9
|
+
</div>
|
10
|
+
</div>
|
11
|
+
<% end %>
|
data/config/routes.rb
ADDED
data/lib/engine.rb
ADDED
@@ -0,0 +1,11 @@
|
|
1
|
+
module NestedFields
|
2
|
+
class Engine < Rails::Engine
|
3
|
+
initializer 'nested_fields.add_middleware' do |app|
|
4
|
+
app.middleware.use ActionDispatch::Static, "#{root}/public"
|
5
|
+
end
|
6
|
+
|
7
|
+
config.to_prepare do
|
8
|
+
ApplicationController.helper(NestedFieldsHelper)
|
9
|
+
end
|
10
|
+
end
|
11
|
+
end
|
@@ -0,0 +1 @@
|
|
1
|
+
require 'engine'
|
@@ -0,0 +1,70 @@
|
|
1
|
+
# Generated by jeweler
|
2
|
+
# DO NOT EDIT THIS FILE DIRECTLY
|
3
|
+
# Instead, edit Jeweler::Tasks in Rakefile, and run 'rake gemspec'
|
4
|
+
# -*- encoding: utf-8 -*-
|
5
|
+
|
6
|
+
Gem::Specification.new do |s|
|
7
|
+
s.name = %q{nested_fields}
|
8
|
+
s.version = "0.1.1"
|
9
|
+
|
10
|
+
s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
|
11
|
+
s.authors = ["Jason Murad"]
|
12
|
+
s.date = %q{2010-12-15}
|
13
|
+
s.description = %q{Unobtrusive dynamic nested forms}
|
14
|
+
s.email = %q{jason@thriess.com}
|
15
|
+
s.extra_rdoc_files = [
|
16
|
+
"README.rdoc"
|
17
|
+
]
|
18
|
+
s.files = [
|
19
|
+
".document",
|
20
|
+
"Gemfile",
|
21
|
+
"Gemfile.lock",
|
22
|
+
"README.rdoc",
|
23
|
+
"Rakefile",
|
24
|
+
"VERSION",
|
25
|
+
"app/controllers/nested_fields_controller.rb",
|
26
|
+
"app/helpers/nested_fields_helper.rb",
|
27
|
+
"app/views/nested_fields/_js.html.erb",
|
28
|
+
"app/views/nested_fields/_nested_fields.html.erb",
|
29
|
+
"app/views/nested_fields/add_nested_fields.html.erb",
|
30
|
+
"config/routes.rb",
|
31
|
+
"lib/engine.rb",
|
32
|
+
"lib/nested_fields.rb",
|
33
|
+
"nested_fields.gemspec",
|
34
|
+
"public/javascripts/nested_fields.js",
|
35
|
+
"test/helper.rb",
|
36
|
+
"test/test_nested_fields.rb"
|
37
|
+
]
|
38
|
+
s.homepage = %q{http://github.com/jrmurad/nested_fields}
|
39
|
+
s.licenses = ["MIT"]
|
40
|
+
s.require_paths = ["lib"]
|
41
|
+
s.rubygems_version = %q{1.3.7}
|
42
|
+
s.summary = %q{Unobtrusive dynamic nested forms}
|
43
|
+
s.test_files = [
|
44
|
+
"test/helper.rb",
|
45
|
+
"test/test_nested_fields.rb"
|
46
|
+
]
|
47
|
+
|
48
|
+
if s.respond_to? :specification_version then
|
49
|
+
current_version = Gem::Specification::CURRENT_SPECIFICATION_VERSION
|
50
|
+
s.specification_version = 3
|
51
|
+
|
52
|
+
if Gem::Version.new(Gem::VERSION) >= Gem::Version.new('1.2.0') then
|
53
|
+
s.add_development_dependency(%q<shoulda>, [">= 0"])
|
54
|
+
s.add_development_dependency(%q<bundler>, ["~> 1.0.0"])
|
55
|
+
s.add_development_dependency(%q<jeweler>, ["~> 1.5.1"])
|
56
|
+
s.add_development_dependency(%q<rcov>, [">= 0"])
|
57
|
+
else
|
58
|
+
s.add_dependency(%q<shoulda>, [">= 0"])
|
59
|
+
s.add_dependency(%q<bundler>, ["~> 1.0.0"])
|
60
|
+
s.add_dependency(%q<jeweler>, ["~> 1.5.1"])
|
61
|
+
s.add_dependency(%q<rcov>, [">= 0"])
|
62
|
+
end
|
63
|
+
else
|
64
|
+
s.add_dependency(%q<shoulda>, [">= 0"])
|
65
|
+
s.add_dependency(%q<bundler>, ["~> 1.0.0"])
|
66
|
+
s.add_dependency(%q<jeweler>, ["~> 1.5.1"])
|
67
|
+
s.add_dependency(%q<rcov>, [">= 0"])
|
68
|
+
end
|
69
|
+
end
|
70
|
+
|
@@ -0,0 +1,18 @@
|
|
1
|
+
$(function() {
|
2
|
+
$('.add_nested_fields').live('click', function() {
|
3
|
+
link = this;
|
4
|
+
|
5
|
+
$.get(link.getAttribute('data-url'), function(content) {
|
6
|
+
$(link).after(content);
|
7
|
+
$(link).trigger('nested_fields_ready');
|
8
|
+
});
|
9
|
+
|
10
|
+
return false;
|
11
|
+
});
|
12
|
+
|
13
|
+
$('.remove_nested_fields').live('click', function() {
|
14
|
+
$(this).closest('div.nested_fields').find('input[type=hidden]').val('1');
|
15
|
+
$(this).closest('div.nested_fields').hide();
|
16
|
+
return false;
|
17
|
+
});
|
18
|
+
});
|
data/test/helper.rb
ADDED
@@ -0,0 +1,18 @@
|
|
1
|
+
require 'rubygems'
|
2
|
+
require 'bundler'
|
3
|
+
begin
|
4
|
+
Bundler.setup(:default, :development)
|
5
|
+
rescue Bundler::BundlerError => e
|
6
|
+
$stderr.puts e.message
|
7
|
+
$stderr.puts "Run `bundle install` to install missing gems"
|
8
|
+
exit e.status_code
|
9
|
+
end
|
10
|
+
require 'test/unit'
|
11
|
+
require 'shoulda'
|
12
|
+
|
13
|
+
$LOAD_PATH.unshift(File.join(File.dirname(__FILE__), '..', 'lib'))
|
14
|
+
$LOAD_PATH.unshift(File.dirname(__FILE__))
|
15
|
+
require 'nested_fields'
|
16
|
+
|
17
|
+
class Test::Unit::TestCase
|
18
|
+
end
|
metadata
ADDED
@@ -0,0 +1,138 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: nested_fields
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
prerelease: false
|
5
|
+
segments:
|
6
|
+
- 0
|
7
|
+
- 1
|
8
|
+
- 1
|
9
|
+
version: 0.1.1
|
10
|
+
platform: ruby
|
11
|
+
authors:
|
12
|
+
- Jason Murad
|
13
|
+
autorequire:
|
14
|
+
bindir: bin
|
15
|
+
cert_chain: []
|
16
|
+
|
17
|
+
date: 2010-12-15 00:00:00 -05:00
|
18
|
+
default_executable:
|
19
|
+
dependencies:
|
20
|
+
- !ruby/object:Gem::Dependency
|
21
|
+
name: shoulda
|
22
|
+
requirement: &id001 !ruby/object:Gem::Requirement
|
23
|
+
none: false
|
24
|
+
requirements:
|
25
|
+
- - ">="
|
26
|
+
- !ruby/object:Gem::Version
|
27
|
+
segments:
|
28
|
+
- 0
|
29
|
+
version: "0"
|
30
|
+
type: :development
|
31
|
+
prerelease: false
|
32
|
+
version_requirements: *id001
|
33
|
+
- !ruby/object:Gem::Dependency
|
34
|
+
name: bundler
|
35
|
+
requirement: &id002 !ruby/object:Gem::Requirement
|
36
|
+
none: false
|
37
|
+
requirements:
|
38
|
+
- - ~>
|
39
|
+
- !ruby/object:Gem::Version
|
40
|
+
segments:
|
41
|
+
- 1
|
42
|
+
- 0
|
43
|
+
- 0
|
44
|
+
version: 1.0.0
|
45
|
+
type: :development
|
46
|
+
prerelease: false
|
47
|
+
version_requirements: *id002
|
48
|
+
- !ruby/object:Gem::Dependency
|
49
|
+
name: jeweler
|
50
|
+
requirement: &id003 !ruby/object:Gem::Requirement
|
51
|
+
none: false
|
52
|
+
requirements:
|
53
|
+
- - ~>
|
54
|
+
- !ruby/object:Gem::Version
|
55
|
+
segments:
|
56
|
+
- 1
|
57
|
+
- 5
|
58
|
+
- 1
|
59
|
+
version: 1.5.1
|
60
|
+
type: :development
|
61
|
+
prerelease: false
|
62
|
+
version_requirements: *id003
|
63
|
+
- !ruby/object:Gem::Dependency
|
64
|
+
name: rcov
|
65
|
+
requirement: &id004 !ruby/object:Gem::Requirement
|
66
|
+
none: false
|
67
|
+
requirements:
|
68
|
+
- - ">="
|
69
|
+
- !ruby/object:Gem::Version
|
70
|
+
segments:
|
71
|
+
- 0
|
72
|
+
version: "0"
|
73
|
+
type: :development
|
74
|
+
prerelease: false
|
75
|
+
version_requirements: *id004
|
76
|
+
description: Unobtrusive dynamic nested forms
|
77
|
+
email: jason@thriess.com
|
78
|
+
executables: []
|
79
|
+
|
80
|
+
extensions: []
|
81
|
+
|
82
|
+
extra_rdoc_files:
|
83
|
+
- README.rdoc
|
84
|
+
files:
|
85
|
+
- .document
|
86
|
+
- Gemfile
|
87
|
+
- Gemfile.lock
|
88
|
+
- README.rdoc
|
89
|
+
- Rakefile
|
90
|
+
- VERSION
|
91
|
+
- app/controllers/nested_fields_controller.rb
|
92
|
+
- app/helpers/nested_fields_helper.rb
|
93
|
+
- app/views/nested_fields/_js.html.erb
|
94
|
+
- app/views/nested_fields/_nested_fields.html.erb
|
95
|
+
- app/views/nested_fields/add_nested_fields.html.erb
|
96
|
+
- config/routes.rb
|
97
|
+
- lib/engine.rb
|
98
|
+
- lib/nested_fields.rb
|
99
|
+
- nested_fields.gemspec
|
100
|
+
- public/javascripts/nested_fields.js
|
101
|
+
- test/helper.rb
|
102
|
+
- test/test_nested_fields.rb
|
103
|
+
has_rdoc: true
|
104
|
+
homepage: http://github.com/jrmurad/nested_fields
|
105
|
+
licenses:
|
106
|
+
- MIT
|
107
|
+
post_install_message:
|
108
|
+
rdoc_options: []
|
109
|
+
|
110
|
+
require_paths:
|
111
|
+
- lib
|
112
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
113
|
+
none: false
|
114
|
+
requirements:
|
115
|
+
- - ">="
|
116
|
+
- !ruby/object:Gem::Version
|
117
|
+
hash: 3137776754752327024
|
118
|
+
segments:
|
119
|
+
- 0
|
120
|
+
version: "0"
|
121
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
122
|
+
none: false
|
123
|
+
requirements:
|
124
|
+
- - ">="
|
125
|
+
- !ruby/object:Gem::Version
|
126
|
+
segments:
|
127
|
+
- 0
|
128
|
+
version: "0"
|
129
|
+
requirements: []
|
130
|
+
|
131
|
+
rubyforge_project:
|
132
|
+
rubygems_version: 1.3.7
|
133
|
+
signing_key:
|
134
|
+
specification_version: 3
|
135
|
+
summary: Unobtrusive dynamic nested forms
|
136
|
+
test_files:
|
137
|
+
- test/helper.rb
|
138
|
+
- test/test_nested_fields.rb
|