puffer 0.0.32 → 0.1.0
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/.gitignore +7 -0
- data/Gemfile +1 -26
- data/Gemfile.lock +66 -64
- data/README.md +34 -23
- data/Rakefile +1 -11
- data/VERSION +1 -1
- data/app/assets/javascripts/puffer/application.js +6 -1
- data/app/assets/javascripts/puffer/associations.js +18 -0
- data/app/assets/javascripts/puffer/puffer.js +7 -0
- data/app/assets/javascripts/puffer/right-calendar-src.js +19 -3
- data/app/assets/javascripts/puffer/right-dnd-src.js +591 -0
- data/app/assets/javascripts/puffer/right-in-edit-src.js +373 -0
- data/app/assets/javascripts/puffer/right-keys-src.js +87 -0
- data/app/assets/javascripts/puffer/{paginator.js → right-paginator-src.js} +0 -0
- data/app/assets/javascripts/puffer/right-slider-src.js +29 -32
- data/app/assets/javascripts/puffer/right-sortable-src.js +430 -0
- data/app/assets/javascripts/puffer/right-src.js +358 -99
- data/app/assets/stylesheets/puffer/puffer.css +29 -4
- data/app/components/base/form.html.erb +8 -14
- data/app/components/base_component.rb +1 -1
- data/app/components/boolean/form.html.erb +5 -3
- data/app/components/boolean/index.html.erb +6 -2
- data/app/components/boolean_component.rb +2 -2
- data/app/components/date_time/filter.html.erb +9 -0
- data/app/components/date_time/form.html.erb +8 -4
- data/app/components/date_time_component.rb +21 -5
- data/app/components/file/form.html.erb +8 -4
- data/app/components/hidden/form.html.erb +3 -1
- data/app/components/nested_attributes_many/form.html.erb +47 -0
- data/app/components/nested_attributes_many_component.rb +7 -0
- data/app/components/nested_attributes_one/form.html.erb +48 -0
- data/app/components/nested_attributes_one_component.rb +7 -0
- data/app/components/password/form.html.erb +8 -4
- data/app/components/password_component.rb +1 -1
- data/app/components/references_many/index.html.erb +1 -1
- data/app/components/references_one/choose.html.erb +1 -1
- data/app/components/references_one/form.html.erb +10 -9
- data/app/components/references_one_component.rb +0 -1
- data/app/components/render_component.rb +13 -0
- data/app/components/select/filter.html.erb +4 -2
- data/app/components/select/form.html.erb +8 -4
- data/app/components/text/form.html.erb +8 -4
- data/app/controllers/admin/sessions_controller.rb +1 -21
- data/app/controllers/puffer/base.rb +10 -3
- data/app/controllers/puffer/dashboard_base.rb +7 -1
- data/app/controllers/puffer/{sessions_base.rb → sessions/base.rb} +10 -7
- data/app/controllers/puffer/sessions/clearance.rb +29 -0
- data/app/controllers/puffer/{sessions_devise_base.rb → sessions/devise.rb} +1 -1
- data/app/controllers/puffer/sessions/simple.rb +28 -0
- data/app/controllers/puffer/tree_base.rb +1 -1
- data/app/models/puffer_user.rb +3 -0
- data/app/views/layouts/puffer.html.erb +3 -3
- data/app/views/puffer/base/_edit.html.erb +15 -0
- data/app/views/puffer/base/_index.html.erb +26 -0
- data/app/views/puffer/base/_show.html.erb +13 -0
- data/app/views/puffer/base/_table.html.erb +1 -1
- data/app/views/puffer/base/edit.html.erb +1 -15
- data/app/views/puffer/base/edit.js.erb +1 -0
- data/app/views/puffer/base/index.html.erb +1 -20
- data/app/views/puffer/base/index.js.erb +1 -0
- data/app/views/puffer/base/new.html.erb +1 -1
- data/app/views/puffer/base/show.html.erb +1 -22
- data/app/views/puffer/base/show.js.erb +1 -0
- data/app/views/puffer/base/update.js.erb +1 -0
- data/app/views/puffer/sessions/base/new.html.erb +11 -0
- data/app/views/puffer/tree_base/_record.html.erb +1 -1
- data/lib/puffer/component.rb +14 -47
- data/lib/puffer/controller/auth.rb +13 -9
- data/lib/puffer/controller/config.rb +18 -0
- data/lib/puffer/controller/mutate.rb +8 -8
- data/lib/puffer/engine.rb +5 -0
- data/lib/puffer/field.rb +5 -11
- data/lib/puffer/filters.rb +86 -56
- data/lib/puffer/helpers/component_helper.rb +24 -0
- data/lib/puffer/helpers/puffer_helper.rb +65 -0
- data/lib/puffer/helpers/puffer_tree_helper.rb +19 -0
- data/lib/puffer/orm_adapter/active_record.rb +40 -11
- data/lib/puffer/orm_adapter/base.rb +9 -0
- data/lib/puffer/orm_adapter/mongoid.rb +32 -9
- data/lib/puffer/resource/node.rb +2 -2
- data/lib/puffer/resource/routing.rb +30 -16
- data/lib/puffer/resource.rb +20 -20
- data/lib/puffer/version.rb +3 -0
- data/lib/puffer.rb +26 -5
- data/puffer.gemspec +34 -296
- data/spec/app/components/base_component_spec.rb +1 -1
- data/spec/app/components/boolean_component_spec.rb +2 -0
- data/spec/app/components/date_time_component_spec.rb +1 -0
- data/spec/app/components/file_component_spec.rb +1 -0
- data/spec/app/components/hidden_component_spec.rb +1 -0
- data/spec/app/components/password_component_spec.rb +2 -0
- data/spec/app/components/select_component_spec.rb +1 -0
- data/spec/app/components/string_component_spec.rb +1 -0
- data/spec/app/components/text_component_spec.rb +1 -0
- data/spec/dummy/app/controllers/admin/news_controller.rb +2 -0
- data/spec/dummy/app/controllers/admin/profiles_controller.rb +1 -1
- data/spec/dummy/app/controllers/admin/users_controller.rb +2 -0
- data/spec/dummy/app/controllers/orms/active_record_orm_primals_controller.rb +8 -0
- data/spec/dummy/app/helpers/news_helper.rb +7 -0
- data/spec/dummy/app/models/active_record_orm/has_many_reference.rb +5 -0
- data/spec/dummy/app/models/active_record_orm/has_one_reference.rb +5 -0
- data/spec/dummy/app/models/active_record_orm/primal.rb +4 -0
- data/spec/dummy/config/environments/development.rb +1 -1
- data/spec/dummy/db/migrate/20111120144025_create_active_record_orm_has_one_references.rb +10 -0
- data/spec/dummy/db/migrate/20111122203304_create_active_record_orm_has_many_references.rb +10 -0
- data/spec/dummy/db/schema.rb +15 -1
- data/spec/helpers/puffer_helper_spec.rb +1 -1
- data/spec/lib/fields_spec.rb +0 -9
- data/spec/lib/filters_spec.rb +4 -8
- data/spec/lib/orm_adapter/base_shared.rb +22 -0
- data/spec/spec_helper.rb +1 -1
- metadata +89 -60
- data/app/components/string/form.html.erb +0 -5
- data/app/helpers/puffer_helper.rb +0 -51
- data/app/helpers/puffer_tree_helper.rb +0 -15
- data/app/views/puffer/sessions_base/new.html.erb +0 -11
- data/lib/puffer/extensions/form.rb +0 -16
|
@@ -20,15 +20,15 @@ a:hover
|
|
|
20
20
|
text-decoration: none;
|
|
21
21
|
}
|
|
22
22
|
|
|
23
|
-
h1
|
|
23
|
+
h1, h1 *
|
|
24
24
|
{
|
|
25
|
-
font-size: 21px;
|
|
25
|
+
font-size: 21px !important;
|
|
26
26
|
margin-bottom: 10px;
|
|
27
27
|
}
|
|
28
28
|
|
|
29
|
-
h2
|
|
29
|
+
h2, h2 *
|
|
30
30
|
{
|
|
31
|
-
font-size: 17px;
|
|
31
|
+
font-size: 17px !important;
|
|
32
32
|
margin-bottom: 10px;
|
|
33
33
|
}
|
|
34
34
|
|
|
@@ -168,6 +168,11 @@ h2
|
|
|
168
168
|
margin-bottom: 8px;
|
|
169
169
|
}
|
|
170
170
|
|
|
171
|
+
.sidebar .navigation > li .additional dd.date_range input[type=text]
|
|
172
|
+
{
|
|
173
|
+
width: 48%;
|
|
174
|
+
}
|
|
175
|
+
|
|
171
176
|
.sidebar .navigation > li .additional, .dashboard .navigation > li ul.additional
|
|
172
177
|
{
|
|
173
178
|
padding: 10px 12px;
|
|
@@ -273,6 +278,8 @@ h2
|
|
|
273
278
|
.list_table *
|
|
274
279
|
{
|
|
275
280
|
font-size: 8pt;
|
|
281
|
+
margin: 0;
|
|
282
|
+
padding: 0;
|
|
276
283
|
}
|
|
277
284
|
|
|
278
285
|
.list_table tr
|
|
@@ -412,6 +419,13 @@ select
|
|
|
412
419
|
height: 60px;
|
|
413
420
|
}
|
|
414
421
|
|
|
422
|
+
.nested_attributes li
|
|
423
|
+
{
|
|
424
|
+
border-left: 1px solid #ccc;
|
|
425
|
+
padding-left: 20px;
|
|
426
|
+
margin-bottom: 15px;
|
|
427
|
+
}
|
|
428
|
+
|
|
415
429
|
.field_error
|
|
416
430
|
{
|
|
417
431
|
color: #C83E3E;
|
|
@@ -464,3 +478,14 @@ select
|
|
|
464
478
|
{
|
|
465
479
|
display: block;
|
|
466
480
|
}
|
|
481
|
+
|
|
482
|
+
.show_entry
|
|
483
|
+
{
|
|
484
|
+
min-width: 900px;
|
|
485
|
+
}
|
|
486
|
+
|
|
487
|
+
.show_entry li
|
|
488
|
+
{
|
|
489
|
+
list-style: none;
|
|
490
|
+
margin-bottom: 10px;
|
|
491
|
+
}
|
|
@@ -1,15 +1,9 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
<% end unless content_for? :error %>
|
|
8
|
-
|
|
9
|
-
<div class="label">
|
|
10
|
-
<%= yield :label %>
|
|
11
|
-
<div class="field_error">
|
|
12
|
-
<%= yield :error %>
|
|
1
|
+
<%= component_fields_for @record do |f| %>
|
|
2
|
+
<div class="label">
|
|
3
|
+
<%= f.label field %>
|
|
4
|
+
<div class="field_error">
|
|
5
|
+
<%= f.object.errors[field.name.to_sym].first %>
|
|
6
|
+
</div>
|
|
13
7
|
</div>
|
|
14
|
-
|
|
15
|
-
|
|
8
|
+
<%= f.text_field field, field.input_options %>
|
|
9
|
+
<% end %>
|
|
@@ -1,3 +1,5 @@
|
|
|
1
|
-
<%=
|
|
2
|
-
<%=
|
|
3
|
-
<%=
|
|
1
|
+
<%= component_fields_for @record do |f| %>
|
|
2
|
+
<%= f.check_box field, field.input_options %>
|
|
3
|
+
<%= f.label field %>
|
|
4
|
+
<%= @record.errors[field.name.to_sym].first %>
|
|
5
|
+
<% end %>
|
|
@@ -1,3 +1,7 @@
|
|
|
1
|
-
|
|
2
|
-
<%=
|
|
1
|
+
<% if field.options[:editable] && field.column %>
|
|
2
|
+
<%= component_wrap do %>
|
|
3
|
+
<%= link_to @record.call_chain(field.to_s) ? 'True' : 'False', event_path(:change, :id => @record.to_param), :remote => true %>
|
|
4
|
+
<% end %>
|
|
5
|
+
<% else %>
|
|
6
|
+
<%= check_box_tag '', '', @record.call_chain(field.to_s), :disabled => true %>
|
|
3
7
|
<% end %>
|
|
@@ -5,8 +5,8 @@ class BooleanComponent < BaseComponent
|
|
|
5
5
|
end
|
|
6
6
|
|
|
7
7
|
def change
|
|
8
|
-
|
|
9
|
-
|
|
8
|
+
@record = resource.member
|
|
9
|
+
@record.update_attributes field.to_s => !@record.call_chain(field.to_s)
|
|
10
10
|
replace :index
|
|
11
11
|
end
|
|
12
12
|
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
<%= component_fields_for @record do |f| %>
|
|
2
|
+
<dt><%= f.label field.field_name %></dt>
|
|
3
|
+
<dd class="date_range">
|
|
4
|
+
<%= f.fields_for field.to_s do |fields| %>
|
|
5
|
+
<%= fields.text_field :from, field.input_options.merge("data-calendar" => "{showButtons: true, listYears: true, format: '#{@format}'}", :autocomplete => :off) %>
|
|
6
|
+
<%= fields.text_field :till, field.input_options.merge("data-calendar" => "{showButtons: true, listYears: true, format: '#{@format}'}", :autocomplete => :off) %>
|
|
7
|
+
<% end %>
|
|
8
|
+
</dd>
|
|
9
|
+
<% end %>
|
|
@@ -1,5 +1,9 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
1
|
+
<%= component_fields_for @record do |f| %>
|
|
2
|
+
<div class="label">
|
|
3
|
+
<%= f.label field %>
|
|
4
|
+
<div class="field_error">
|
|
5
|
+
<%= @record.errors[field.name.to_sym].first %>
|
|
6
|
+
</div>
|
|
7
|
+
</div>
|
|
8
|
+
<%= f.text_field field, field.input_options.merge("data-calendar" => "{showButtons: true, listYears: true, format: '#{@format}'}", :autocomplete => :off) %>
|
|
3
9
|
<% end %>
|
|
4
|
-
|
|
5
|
-
<%= render :file => 'base/form' %>
|
|
@@ -1,12 +1,28 @@
|
|
|
1
1
|
class DateTimeComponent < BaseComponent
|
|
2
2
|
|
|
3
|
+
def index
|
|
4
|
+
date = super
|
|
5
|
+
date.to_s(field.options[:format].presence || :db) if date.present?
|
|
6
|
+
end
|
|
7
|
+
|
|
3
8
|
def form
|
|
4
|
-
@format =
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
9
|
+
@format = time_format
|
|
10
|
+
render
|
|
11
|
+
end
|
|
12
|
+
|
|
13
|
+
def filter
|
|
14
|
+
@format = time_format
|
|
15
|
+
render
|
|
16
|
+
end
|
|
17
|
+
|
|
18
|
+
private
|
|
19
|
+
|
|
20
|
+
def time_format
|
|
21
|
+
@format ||= case field.type
|
|
22
|
+
when :date then '%Y-%m-%d'
|
|
23
|
+
when :time then '%H:%M:%S'
|
|
24
|
+
when :datetime, :date_time, :timestamp then '%Y-%m-%d %H:%M:%S'
|
|
8
25
|
end
|
|
9
|
-
super
|
|
10
26
|
end
|
|
11
27
|
|
|
12
28
|
end
|
|
@@ -1,5 +1,9 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
1
|
+
<%= component_fields_for @record do |f| %>
|
|
2
|
+
<div class="label">
|
|
3
|
+
<%= f.label field %>
|
|
4
|
+
<div class="field_error">
|
|
5
|
+
<%= @record.errors[field.name.to_sym].first %>
|
|
6
|
+
</div>
|
|
7
|
+
</div>
|
|
8
|
+
<%= f.file_field field, field.input_options %>
|
|
3
9
|
<% end %>
|
|
4
|
-
|
|
5
|
-
<%= render :file => 'base/form' %>
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
<%= component_fields_for @record do |f| %>
|
|
2
|
+
<h2><%= f.label field %></h2>
|
|
3
|
+
|
|
4
|
+
<ul class="nested_attributes" id="<%= "#{field.name}_nested_attributes" %>">
|
|
5
|
+
<% f.object.send(field.name).each_with_index do |nested_record, index| -%>
|
|
6
|
+
<%= f.fields_for field.name, nested_record, :child_index => index do |nested_builder| %>
|
|
7
|
+
<li id="<%= "#{field.name}_#{index}_attributes" %>">
|
|
8
|
+
<% field.children.each do |field| %>
|
|
9
|
+
<%= field.render :form, parent_controller, nested_builder.object, :builder => nested_builder %>
|
|
10
|
+
<% end %>
|
|
11
|
+
<%= nested_builder.hidden_field :id if nested_builder.object.persisted? %>
|
|
12
|
+
|
|
13
|
+
<% destroy_nested_record = capture do %>
|
|
14
|
+
<%= nested_builder.hidden_field :_destroy, :value => true %>
|
|
15
|
+
<%= nested_builder.hidden_field :id %>
|
|
16
|
+
<% end.to_s.strip.gsub("\n", ' ') %>
|
|
17
|
+
|
|
18
|
+
<%= link_to t('.destroy'), '#',
|
|
19
|
+
:data => {:insert => {
|
|
20
|
+
:content => destroy_nested_record,
|
|
21
|
+
:element => "#{field.name}_marked_for_destroy",
|
|
22
|
+
:remove => "#{field.name}_#{index}_attributes"
|
|
23
|
+
}} %>
|
|
24
|
+
</li>
|
|
25
|
+
<% end %>
|
|
26
|
+
<% end -%>
|
|
27
|
+
</ul>
|
|
28
|
+
|
|
29
|
+
<div id="<%= field.name %>_marked_for_destroy" style="display: none">
|
|
30
|
+
</div>
|
|
31
|
+
|
|
32
|
+
<% new_nested_record = capture do %>
|
|
33
|
+
<%= f.fields_for field.name, field.reflection.klass.new, :child_index => "new_nested_index" do |nested_builder| %>
|
|
34
|
+
<li id="<%= "#{field.name}_new_nested_index_attributes" %>">
|
|
35
|
+
<% field.children.each do |field| %>
|
|
36
|
+
<%= field.render :form, parent_controller, nested_builder.object, :builder => nested_builder %>
|
|
37
|
+
<% end %>
|
|
38
|
+
|
|
39
|
+
<%= link_to t('.destroy'), '#',
|
|
40
|
+
:data => {:insert => {:remove => "#{field.name}_new_nested_index_attributes"}} %>
|
|
41
|
+
</li>
|
|
42
|
+
<% end %>
|
|
43
|
+
<% end.to_s.strip.gsub("\n", ' ') %>
|
|
44
|
+
|
|
45
|
+
<%= link_to t('.add'), '#',
|
|
46
|
+
:data => {:insert => {:content => new_nested_record, :element => "#{field.name}_nested_attributes"}} %>
|
|
47
|
+
<% end %>
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
<%= component_fields_for @record do |f| %>
|
|
2
|
+
<h2><%= f.label field %></h2>
|
|
3
|
+
|
|
4
|
+
<ul class="nested_attributes" id="<%= "#{field.name}_nested_attributes" %>">
|
|
5
|
+
<% if f.object.send(field.name) -%>
|
|
6
|
+
<%= f.fields_for field.name do |nested_builder| %>
|
|
7
|
+
<li id="<%= "#{field.name}_attributes" %>">
|
|
8
|
+
<% field.children.each do |field| %>
|
|
9
|
+
<%= field.render :form, parent_controller, nested_builder.object, :builder => nested_builder %>
|
|
10
|
+
<% end %>
|
|
11
|
+
|
|
12
|
+
<% destroy_nested_record = capture do %>
|
|
13
|
+
<%= nested_builder.hidden_field :_destroy, :value => true %>
|
|
14
|
+
<%= nested_builder.hidden_field :id %>
|
|
15
|
+
<% end.to_s.strip.gsub("\n", ' ') %>
|
|
16
|
+
|
|
17
|
+
<%= link_to t('.destroy'), '#',
|
|
18
|
+
:data => {:insert => {
|
|
19
|
+
:content => destroy_nested_record,
|
|
20
|
+
:element => "#{field.name}_marked_for_destroy",
|
|
21
|
+
:remove => "#{field.name}_attributes",
|
|
22
|
+
:show => "#{field.name}_attributes_add"
|
|
23
|
+
}} %>
|
|
24
|
+
</li>
|
|
25
|
+
<% end %>
|
|
26
|
+
<% end -%>
|
|
27
|
+
</ul>
|
|
28
|
+
|
|
29
|
+
<div id="<%= field.name %>_marked_for_destroy" style="display: none">
|
|
30
|
+
</div>
|
|
31
|
+
|
|
32
|
+
<% new_nested_record = capture do %>
|
|
33
|
+
<%= f.fields_for field.name, field.reflection.klass.new do |nested_builder| %>
|
|
34
|
+
<li id="<%= "#{field.name}_attributes" %>">
|
|
35
|
+
<% field.children.each do |field| %>
|
|
36
|
+
<%= field.render :form, parent_controller, nested_builder.object, :builder => nested_builder %>
|
|
37
|
+
<% end %>
|
|
38
|
+
|
|
39
|
+
<%= link_to t('.destroy'), '#',
|
|
40
|
+
:data => {:insert => {:remove => "#{field.name}_attributes", :show => "#{field.name}_attributes_add"}} %>
|
|
41
|
+
</li>
|
|
42
|
+
<% end %>
|
|
43
|
+
<% end.to_s.strip.gsub("\n", ' ') %>
|
|
44
|
+
|
|
45
|
+
<%= link_to t('.add'), '#',
|
|
46
|
+
:style => ('display: none' if f.object.send(field.name)), :id => "#{field.name}_attributes_add",
|
|
47
|
+
:data => {:insert => {:content => new_nested_record, :element => "#{field.name}_nested_attributes", :hide => "#{field.name}_attributes_add"}} %>
|
|
48
|
+
<% end %>
|
|
@@ -1,5 +1,9 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
1
|
+
<%= component_fields_for @record do |f| %>
|
|
2
|
+
<div class="label">
|
|
3
|
+
<%= f.label field %>
|
|
4
|
+
<div class="field_error">
|
|
5
|
+
<%= @record.errors[field.name.to_sym].first %>
|
|
6
|
+
</div>
|
|
7
|
+
</div>
|
|
8
|
+
<%= f.password_field field, field.input_options %>
|
|
3
9
|
<% end %>
|
|
4
|
-
|
|
5
|
-
<%= render :file => 'base/form' %>
|
|
@@ -1 +1 @@
|
|
|
1
|
-
<%= link_to field.human, resource.children_hash[field.name].collection_path %>
|
|
1
|
+
<%= link_to "#{field.human} (#{@record.send(field.to_s).size})", resource.children_hash[field.name].collection_path %>
|
|
@@ -5,5 +5,5 @@
|
|
|
5
5
|
<div id="paginator"></div>
|
|
6
6
|
|
|
7
7
|
<%= javascript_tag do %>
|
|
8
|
-
new Paginator({total: <%= records.num_pages %>, current: <%= params[:page] || 1 %>, link: {'data-dialog-uri': '<%= event_path(:choose, :page => '%{page}') %>'}}).insertTo('paginator', 'instead');
|
|
8
|
+
new Paginator({total: <%= @records.num_pages %>, current: <%= params[:page] || 1 %>, link: {'data-dialog-uri': '<%= event_path(:choose, :page => '%{page}') %>'}}).insertTo('paginator', 'instead');
|
|
9
9
|
<% end %>
|
|
@@ -1,10 +1,11 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
1
|
+
<%= component_fields_for @record do |f| %>
|
|
2
|
+
<div class="label">
|
|
3
|
+
<%= f.label field %>
|
|
4
|
+
<div class="field_error">
|
|
5
|
+
<%= @record.errors[field.reflection.foreign_key.to_sym].first ||
|
|
6
|
+
@record.errors[field.name.to_sym].first.presence %>
|
|
7
|
+
</div>
|
|
8
|
+
</div>
|
|
9
|
+
<%#= f.hidden_field field, field.input_options %>
|
|
10
|
+
<%= link_to "Choose", '#', :data => {"new-dialog-uri" => event_path(:choose)} %>
|
|
3
11
|
<% end %>
|
|
4
|
-
|
|
5
|
-
<% content_for :error do %>
|
|
6
|
-
<%= opts[:form].object.errors[field.reflection.foreign_key.to_sym].first ||
|
|
7
|
-
opts[:form].object.errors[field.name.to_sym].first.presence %>
|
|
8
|
-
<% end %>
|
|
9
|
-
|
|
10
|
-
<%= render :file => 'base/form' %>
|
|
@@ -5,7 +5,6 @@ class ReferencesOneComponent < Puffer::Component::Base
|
|
|
5
5
|
end
|
|
6
6
|
|
|
7
7
|
def choose
|
|
8
|
-
#@records = field.reflection.klass.includes(field.children.includes).where(field.children.searches(params[:search])).page(params[:page])
|
|
9
8
|
@records = field.reflection.klass.to_adapter.filter(field.reflection.klass, field.children, :search => params[:puffer_search]).page(params[:page])
|
|
10
9
|
render
|
|
11
10
|
end
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
class RenderComponent < Puffer::Component::Base
|
|
2
|
+
|
|
3
|
+
def action_missing name
|
|
4
|
+
case field.options[:render]
|
|
5
|
+
when Symbol then
|
|
6
|
+
view_context.send(field.options[:render])
|
|
7
|
+
when Proc then
|
|
8
|
+
field.options[:render].bind(view_context).call
|
|
9
|
+
else ''
|
|
10
|
+
end
|
|
11
|
+
end
|
|
12
|
+
|
|
13
|
+
end
|
|
@@ -1,2 +1,4 @@
|
|
|
1
|
-
|
|
2
|
-
<
|
|
1
|
+
<%= component_fields_for @record do |f| %>
|
|
2
|
+
<dt><%= f.label field.field_name %></dt>
|
|
3
|
+
<dd><%= f.select field.field_name, @options, :include_blank => true %></dd>
|
|
4
|
+
<% end %>
|
|
@@ -1,5 +1,9 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
1
|
+
<%= component_fields_for @record do |f| %>
|
|
2
|
+
<div class="label">
|
|
3
|
+
<%= f.label field %>
|
|
4
|
+
<div class="field_error">
|
|
5
|
+
<%= @record.errors[field.name.to_sym].first %>
|
|
6
|
+
</div>
|
|
7
|
+
</div>
|
|
8
|
+
<%= f.select field, @options, {:include_blank => field.options.key?(:include_blank) ? field.options[:include_blank] : true }, field.input_options %>
|
|
3
9
|
<% end %>
|
|
4
|
-
|
|
5
|
-
<%= render :file => 'base/form' %>
|
|
@@ -1,5 +1,9 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
1
|
+
<%= component_fields_for @record do |f| %>
|
|
2
|
+
<div class="label">
|
|
3
|
+
<%= f.label field %>
|
|
4
|
+
<div class="field_error">
|
|
5
|
+
<%= @record.errors[field.name.to_sym].first %>
|
|
6
|
+
</div>
|
|
7
|
+
</div>
|
|
8
|
+
<%= f.text_area field, field.input_options %>
|
|
3
9
|
<% end %>
|
|
4
|
-
|
|
5
|
-
<%= render :file => 'base/form' %>
|
|
@@ -1,26 +1,6 @@
|
|
|
1
1
|
# Implemented basic rails auth with custom PufferUser model.
|
|
2
2
|
# Admin::SessionsController could be redefined in application.
|
|
3
3
|
# See Puffer::SessionsBase docs for additional info.
|
|
4
|
-
class Admin::SessionsController < Puffer::
|
|
5
|
-
|
|
6
|
-
def new
|
|
7
|
-
@record = PufferUser.new
|
|
8
|
-
end
|
|
9
|
-
|
|
10
|
-
def create
|
|
11
|
-
@record = PufferUser.to_adapter.find_first(:conditions => {:email => params[:puffer_user][:email]})
|
|
12
|
-
if @record && @record.authenticate(params[:puffer_user][:password])
|
|
13
|
-
session[:puffer_user_id] = @record.id
|
|
14
|
-
redirect_to admin_root_url
|
|
15
|
-
else
|
|
16
|
-
@record = PufferUser.new :email => params[:puffer_user][:email]
|
|
17
|
-
render 'new'
|
|
18
|
-
end
|
|
19
|
-
end
|
|
20
|
-
|
|
21
|
-
def destroy
|
|
22
|
-
session.delete(:puffer_user_id)
|
|
23
|
-
redirect_to new_admin_session_url
|
|
24
|
-
end
|
|
4
|
+
class Admin::SessionsController < Puffer::Sessions::Simple
|
|
25
5
|
|
|
26
6
|
end
|
|
@@ -8,23 +8,30 @@ module Puffer
|
|
|
8
8
|
define_fieldset :index, :form
|
|
9
9
|
define_fieldset :show, :fallbacks => :index
|
|
10
10
|
define_fieldset :create, :update, :fallbacks => :form
|
|
11
|
+
define_fieldset :filter, :fallbacks => :index
|
|
12
|
+
|
|
13
|
+
layout 'puffer'
|
|
11
14
|
|
|
12
15
|
respond_to :html, :js
|
|
13
16
|
|
|
14
17
|
def index
|
|
15
18
|
@records = resource.collection.page(params[:page])
|
|
19
|
+
respond_with @records
|
|
16
20
|
end
|
|
17
21
|
|
|
18
22
|
def show
|
|
19
23
|
@record = resource.member
|
|
24
|
+
respond_with @record
|
|
20
25
|
end
|
|
21
26
|
|
|
22
27
|
def new
|
|
23
28
|
@record = resource.new_member
|
|
29
|
+
respond_with @record
|
|
24
30
|
end
|
|
25
31
|
|
|
26
32
|
def edit
|
|
27
33
|
@record = resource.member
|
|
34
|
+
respond_with @record
|
|
28
35
|
end
|
|
29
36
|
|
|
30
37
|
def create
|
|
@@ -42,17 +49,17 @@ module Puffer
|
|
|
42
49
|
def destroy
|
|
43
50
|
@record = resource.member
|
|
44
51
|
@record.destroy
|
|
45
|
-
|
|
52
|
+
respond_with @records, :location => (request.referrer || resource.collection_path)
|
|
46
53
|
end
|
|
47
54
|
|
|
48
55
|
def event
|
|
49
|
-
render :text => fields(params[:fieldset])[params[:field]].render(
|
|
56
|
+
render :text => fields(params[:fieldset])[params[:field]].render(params[:event], self)
|
|
50
57
|
end
|
|
51
58
|
|
|
52
59
|
private
|
|
53
60
|
|
|
54
61
|
def puffer_saving_location
|
|
55
|
-
params[:commit] == t('puffer.save') ? resource.edit_path(record) : resource.collection_path
|
|
62
|
+
@record.persisted? && params[:commit] == t('puffer.save') ? resource.edit_path(record) : resource.collection_path
|
|
56
63
|
end
|
|
57
64
|
|
|
58
65
|
end
|
|
@@ -1,31 +1,35 @@
|
|
|
1
1
|
# Puffer::SessionsBase is a base class for any Admin::SessionsController
|
|
2
2
|
# implementation by default implemented basic auth through PufferUser.
|
|
3
3
|
# See Puffer::SessionsDeviseBase for alternative implementation example.
|
|
4
|
-
class Puffer::
|
|
4
|
+
class Puffer::Sessions::Base < ApplicationController
|
|
5
5
|
unloadable
|
|
6
6
|
pufferize!
|
|
7
7
|
|
|
8
8
|
before_filter :require_puffer_user, :only => :destroy
|
|
9
9
|
|
|
10
|
-
define_fieldset :create
|
|
10
|
+
define_fieldset :create, :fallbacks => :form
|
|
11
11
|
|
|
12
12
|
layout 'puffer_sessions'
|
|
13
13
|
|
|
14
14
|
respond_to :html
|
|
15
15
|
|
|
16
|
+
setup do
|
|
17
|
+
group nil
|
|
18
|
+
end
|
|
19
|
+
|
|
16
20
|
create do
|
|
17
21
|
field :email, :type => :string
|
|
18
22
|
field :password, :type => :password
|
|
19
23
|
end
|
|
20
24
|
|
|
21
25
|
def new
|
|
22
|
-
# @record =
|
|
26
|
+
# @record = resource.new_member
|
|
23
27
|
end
|
|
24
28
|
|
|
25
29
|
def create
|
|
26
|
-
# @record =
|
|
30
|
+
# @record = resource.new_member
|
|
27
31
|
# if @record.save
|
|
28
|
-
#
|
|
32
|
+
# redirect_back_or admin_root_url
|
|
29
33
|
# else
|
|
30
34
|
# render 'new'
|
|
31
35
|
# end
|
|
@@ -33,7 +37,6 @@ class Puffer::SessionsBase < ApplicationController
|
|
|
33
37
|
|
|
34
38
|
def destroy
|
|
35
39
|
# current_user_session.destroy
|
|
36
|
-
# redirect_to
|
|
40
|
+
# redirect_to new_admin_session_url
|
|
37
41
|
end
|
|
38
|
-
|
|
39
42
|
end
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
# Puffer::Sessions::Clearance integrates Puffer admin interface
|
|
2
|
+
# builder with the Clearance authentication & authorization solution.
|
|
3
|
+
class Puffer::Sessions::Clearance < Puffer::Sessions::Base
|
|
4
|
+
|
|
5
|
+
setup do
|
|
6
|
+
model_name :user
|
|
7
|
+
end
|
|
8
|
+
|
|
9
|
+
def new
|
|
10
|
+
@record = resource.new_member
|
|
11
|
+
end
|
|
12
|
+
|
|
13
|
+
def create
|
|
14
|
+
# I used to follow the Clearance conventions
|
|
15
|
+
params[:session] = params.delete resource.attributes_key
|
|
16
|
+
|
|
17
|
+
if @record = authenticate(params) and sign_in(@record)
|
|
18
|
+
redirect_back_or admin_root_url
|
|
19
|
+
else
|
|
20
|
+
@record = resource.new_member :email => params[:session][:email]
|
|
21
|
+
render 'new'
|
|
22
|
+
end
|
|
23
|
+
end
|
|
24
|
+
|
|
25
|
+
def destroy
|
|
26
|
+
sign_out
|
|
27
|
+
redirect_to new_admin_session_url
|
|
28
|
+
end
|
|
29
|
+
end
|