tolaria 1.1.2 → 1.2.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/README.md +8 -1
- data/app/assets/fonts/admin/fontawesome.eot +0 -0
- data/app/assets/fonts/admin/fontawesome.svg +39 -24
- data/app/assets/fonts/admin/fontawesome.ttf +0 -0
- data/app/assets/fonts/admin/fontawesome.woff +0 -0
- data/app/assets/fonts/admin/fontawesome.woff2 +0 -0
- data/app/assets/javascripts/admin/base.js +1 -0
- data/app/assets/javascripts/admin/lib/autosize.js +262 -0
- data/app/assets/javascripts/admin/lib/backbone.js +242 -216
- data/app/assets/javascripts/admin/lib/jquery.chosen.js +1 -1
- data/app/assets/javascripts/admin/lib/jquery.js +1 -1
- data/app/assets/javascripts/admin/lib/jquery.selection.js +1 -1
- data/app/assets/javascripts/admin/lib/moment.js +301 -189
- data/app/assets/javascripts/admin/views/fields/attachment_field.js +1 -0
- data/app/assets/javascripts/admin/views/fields/textarea.js +9 -0
- data/app/assets/stylesheets/admin/components/_buttons.scss +7 -1
- data/app/assets/stylesheets/admin/components/_navigation.scss +7 -12
- data/app/assets/stylesheets/admin/settings/_icons.scss +81 -1
- data/app/controllers/tolaria/resource_controller.rb +3 -3
- data/app/helpers/admin/table_helper.rb +5 -5
- data/app/views/admin/administrators/_show.html.erb +2 -2
- data/app/views/admin/shared/forms/_markdown_composer.html.erb +3 -1
- data/app/views/admin/tolaria_resource/_form_buttons.html.erb +12 -3
- data/app/views/admin/tolaria_resource/_search_form.html.erb +1 -1
- data/app/views/admin/tolaria_resource/edit.html.erb +7 -1
- data/app/views/admin/tolaria_resource/index.html.erb +11 -4
- data/app/views/admin/tolaria_resource/show.html.erb +13 -4
- data/lib/tasks/admin.rake +16 -7
- data/lib/tolaria/default_config.rb +1 -0
- data/lib/tolaria/form_buildable.rb +3 -2
- data/lib/tolaria/version.rb +1 -1
- data/test/integration/{interface_test.rb → crud_test.rb} +19 -3
- data/test/integration/filter_preservation_test.rb +61 -0
- data/tolaria.gemspec +1 -0
- metadata +9 -6
@@ -13,17 +13,23 @@
|
|
13
13
|
font-weight: bold;
|
14
14
|
height: 32px;
|
15
15
|
line-height: 30px;
|
16
|
+
margin: 0 0 5px 0;
|
16
17
|
padding: 0px 14px 0px 12px;
|
17
|
-
vertical-align: middle;
|
18
18
|
transition: background-color 100ms linear, border-color 100ms linear;
|
19
|
+
vertical-align: middle;
|
19
20
|
white-space: nowrap;
|
20
21
|
|
22
|
+
@include min-width($bpFull) {
|
23
|
+
margin: 0;
|
24
|
+
}
|
25
|
+
|
21
26
|
&.-small {
|
22
27
|
transition: none;
|
23
28
|
font-size: 12px;
|
24
29
|
line-height: 16px;
|
25
30
|
padding: 2px 9px 2px 9px;
|
26
31
|
height: auto;
|
32
|
+
margin: 0;
|
27
33
|
.icon {
|
28
34
|
font-size: 12px;
|
29
35
|
}
|
@@ -4,8 +4,8 @@
|
|
4
4
|
z-index: 99999;
|
5
5
|
|
6
6
|
@include max-width($bpFull - 1px) {
|
7
|
-
@include clearfix;
|
8
7
|
|
8
|
+
@include clearfix;
|
9
9
|
background-color: $cCoolGrey;
|
10
10
|
border-bottom: 3px double $cGrey;
|
11
11
|
margin-left: -20px;
|
@@ -17,26 +17,21 @@
|
|
17
17
|
margin: 0;
|
18
18
|
position: absolute;
|
19
19
|
width: 100%;
|
20
|
-
|
21
|
-
|
22
|
-
transition: transform 300ms cubic-bezier(0.215, 0.61, 0.355, 1);
|
23
|
-
|
24
|
-
-webkit-transform: translateY(-100%);
|
25
|
-
transform: translateY(-100%);
|
26
|
-
|
20
|
+
transition: transform 300ms cubic-bezier(0.215, 0.61, 0.355, 1);
|
21
|
+
transform: translateY(-100%);
|
27
22
|
&.-open {
|
28
|
-
|
29
|
-
transform: translateY(0);
|
23
|
+
transform: translateY(0);
|
30
24
|
}
|
31
25
|
}
|
26
|
+
|
32
27
|
}
|
33
28
|
|
34
29
|
@include min-width($bpFull) {
|
35
|
-
width: 16%;
|
36
30
|
border-bottom: 0;
|
37
|
-
padding: 0;
|
38
31
|
display: table-cell;
|
32
|
+
padding: 0 0 15px 0;
|
39
33
|
vertical-align: top;
|
34
|
+
width: 16%;
|
40
35
|
}
|
41
36
|
|
42
37
|
}
|
@@ -22,7 +22,7 @@
|
|
22
22
|
|
23
23
|
// ----------------------------------------------------------------------------
|
24
24
|
// ICON CLASSES
|
25
|
-
// Modified from Font Awesome 4.
|
25
|
+
// Modified from Font Awesome 4.5.0
|
26
26
|
// ----------------------------------------------------------------------------
|
27
27
|
|
28
28
|
.icon-glass:before {
|
@@ -2453,3 +2453,83 @@
|
|
2453
2453
|
.icon-fonticons:before {
|
2454
2454
|
content: "\f280";
|
2455
2455
|
}
|
2456
|
+
|
2457
|
+
.icon-reddit-alien:before {
|
2458
|
+
content: "\f281";
|
2459
|
+
}
|
2460
|
+
|
2461
|
+
.icon-edge:before {
|
2462
|
+
content: "\f282";
|
2463
|
+
}
|
2464
|
+
|
2465
|
+
.icon-credit-card-alt:before {
|
2466
|
+
content: "\f283";
|
2467
|
+
}
|
2468
|
+
|
2469
|
+
.icon-codiepie:before {
|
2470
|
+
content: "\f284";
|
2471
|
+
}
|
2472
|
+
|
2473
|
+
.icon-modx:before {
|
2474
|
+
content: "\f285";
|
2475
|
+
}
|
2476
|
+
|
2477
|
+
.icon-fort-awesome:before {
|
2478
|
+
content: "\f286";
|
2479
|
+
}
|
2480
|
+
|
2481
|
+
.icon-usb:before {
|
2482
|
+
content: "\f287";
|
2483
|
+
}
|
2484
|
+
|
2485
|
+
.icon-product-hunt:before {
|
2486
|
+
content: "\f288";
|
2487
|
+
}
|
2488
|
+
|
2489
|
+
.icon-mixcloud:before {
|
2490
|
+
content: "\f289";
|
2491
|
+
}
|
2492
|
+
|
2493
|
+
.icon-scribd:before {
|
2494
|
+
content: "\f28a";
|
2495
|
+
}
|
2496
|
+
|
2497
|
+
.icon-pause-circle:before {
|
2498
|
+
content: "\f28b";
|
2499
|
+
}
|
2500
|
+
|
2501
|
+
.icon-pause-circle-o:before {
|
2502
|
+
content: "\f28c";
|
2503
|
+
}
|
2504
|
+
|
2505
|
+
.icon-stop-circle:before {
|
2506
|
+
content: "\f28d";
|
2507
|
+
}
|
2508
|
+
|
2509
|
+
.icon-stop-circle-o:before {
|
2510
|
+
content: "\f28e";
|
2511
|
+
}
|
2512
|
+
|
2513
|
+
.icon-shopping-bag:before {
|
2514
|
+
content: "\f290";
|
2515
|
+
}
|
2516
|
+
|
2517
|
+
.icon-shopping-basket:before {
|
2518
|
+
content: "\f291";
|
2519
|
+
}
|
2520
|
+
|
2521
|
+
.icon-hashtag:before {
|
2522
|
+
content: "\f292";
|
2523
|
+
}
|
2524
|
+
|
2525
|
+
.icon-bluetooth:before {
|
2526
|
+
content: "\f293";
|
2527
|
+
}
|
2528
|
+
|
2529
|
+
.icon-bluetooth-b:before {
|
2530
|
+
content: "\f294";
|
2531
|
+
}
|
2532
|
+
|
2533
|
+
.icon-percent:before {
|
2534
|
+
content: "\f295";
|
2535
|
+
}
|
@@ -1,7 +1,7 @@
|
|
1
1
|
class Tolaria::ResourceController < Tolaria::TolariaController
|
2
2
|
|
3
3
|
before_filter :load_managed_class!
|
4
|
-
before_filter :strip_invalid_ransack_params
|
4
|
+
before_filter :strip_invalid_ransack_params!
|
5
5
|
|
6
6
|
def index
|
7
7
|
@search = @managed_class.klass.ransack(params[:q])
|
@@ -92,8 +92,8 @@ class Tolaria::ResourceController < Tolaria::TolariaController
|
|
92
92
|
# Returns a path we should redirect to when the form is completed successfully.
|
93
93
|
# Handles route forbidding cases.
|
94
94
|
def form_completion_redirect_path(managed_class, resource = nil)
|
95
|
-
if managed_class.allows? :
|
96
|
-
url_for(
|
95
|
+
if managed_class.allows?(:index) && params[:save_and_review].blank?
|
96
|
+
url_for(action:"index", q:params[:q])
|
97
97
|
elsif managed_class.allows?(:show) && resource.present?
|
98
98
|
url_for(action:"show", id:resource.id)
|
99
99
|
elsif managed_class.allows?(:edit) && resource.present?
|
@@ -137,9 +137,9 @@ module Admin::TableHelper
|
|
137
137
|
end
|
138
138
|
|
139
139
|
if @managed_class.allows? :edit
|
140
|
-
link = url_for(action:"edit", id:resource.id)
|
140
|
+
link = url_for(action:"edit", id:resource.id, q:params[:q])
|
141
141
|
elsif @managed_class.allows? :show
|
142
|
-
link = url_for(action:"show", id:resource.id)
|
142
|
+
link = url_for(action:"show", id:resource.id, q:params[:q])
|
143
143
|
else
|
144
144
|
link = "#" # Guh, painted ourseves into a corner here
|
145
145
|
end
|
@@ -162,15 +162,15 @@ module Admin::TableHelper
|
|
162
162
|
links = []
|
163
163
|
|
164
164
|
if @managed_class.allows?(:edit)
|
165
|
-
links << link_to("Edit", url_for(action:"edit", id:resource.id), class:"button -small")
|
165
|
+
links << link_to("Edit", url_for(action:"edit", id:resource.id, q:params[:q]), class:"button -small")
|
166
166
|
end
|
167
167
|
|
168
168
|
if @managed_class.allows?(:show)
|
169
|
-
links << link_to("Inspect", url_for(action:"show", id:resource.id), class:"button -small")
|
169
|
+
links << link_to("Inspect", url_for(action:"show", id:resource.id, q:params[:q]), class:"button -small")
|
170
170
|
end
|
171
171
|
|
172
172
|
if @managed_class.allows?(:destroy)
|
173
|
-
links << link_to("Delete", url_for(action:"destroy", id:resource.id), class: "button -small", method: :delete, :'data-confirm' => deletion_warning(resource))
|
173
|
+
links << link_to("Delete", url_for(action:"destroy", id:resource.id, q:params[:q]), class: "button -small", method: :delete, :'data-confirm' => deletion_warning(resource))
|
174
174
|
end
|
175
175
|
|
176
176
|
return content_tag(:td, links.join("").html_safe, class:"actions-td")
|
@@ -4,11 +4,11 @@
|
|
4
4
|
<%= show_thead_tr %>
|
5
5
|
</thead>
|
6
6
|
<tbody>
|
7
|
-
<%= show_tr "Avatar", image_tag(gravatar_for(@resource.email)) %>
|
8
7
|
<%= show_tr :name %>
|
9
8
|
<%= show_tr :organization %>
|
10
9
|
<%= show_tr :email, class:"monospace" %>
|
11
|
-
<%= show_tr "Created At", @resource.created_at.
|
10
|
+
<%= show_tr "Created At", @resource.created_at.try(:strftime, "%Y-%m-%d %H:%M %Z"), class:"monospace" %>
|
11
|
+
<%= show_tr "Avatar", image_tag(gravatar_for(@resource.email)) %>
|
12
12
|
</tbody>
|
13
13
|
|
14
14
|
<% end %>
|
@@ -22,7 +22,9 @@
|
|
22
22
|
</div>
|
23
23
|
|
24
24
|
<div class="markdown-composer-workspace">
|
25
|
-
|
25
|
+
<% options[:class] = "markdown-composer-textarea #{options[:class]}" %>
|
26
|
+
<% options[:rows] = 20 %>
|
27
|
+
<%= f.text_area method, options %>
|
26
28
|
<div class="markdown-composer-preview markdown-body" style="display:none"></div>
|
27
29
|
</div>
|
28
30
|
|
@@ -1,12 +1,21 @@
|
|
1
1
|
<% if @managed_class.allows? :index %>
|
2
|
-
<%= link_to url_for(
|
2
|
+
<%= link_to url_for(action:"index", q:params[:q]), class:"button -cancel" do %>
|
3
3
|
<%= fontawesome_icon :close %>
|
4
4
|
Cancel
|
5
5
|
<% end %>
|
6
6
|
<% end %>
|
7
7
|
|
8
|
-
|
8
|
+
<% if @managed_class.allows? :show %>
|
9
|
+
<%= button_tag type:"submit", name:"save_and_review", class:"button -primary -save-and-review", value:"Save & Review" do %>
|
10
|
+
<%= fontawesome_icon :check %>
|
11
|
+
<%= @resource.persisted?? "Save" : "Create" %>
|
12
|
+
<%= "& Review" %>
|
13
|
+
<% end %>
|
14
|
+
<% end %>
|
15
|
+
|
16
|
+
<%= button_tag type:"submit", name:"save", class:"button -primary -save", value:"Save" do %>
|
9
17
|
<%= fontawesome_icon :check %>
|
10
18
|
<%= @resource.persisted?? "Save" : "Create" %>
|
11
|
-
<%= @managed_class.model_name.human.titleize %>
|
12
19
|
<% end %>
|
20
|
+
|
21
|
+
|
@@ -6,13 +6,19 @@
|
|
6
6
|
|
7
7
|
<%= form_for [:admin, @resource], url:contextual_form_url, builder:Admin::FormBuilder, html:{class:"resource-form"} do |form_builder| %>
|
8
8
|
|
9
|
+
<% if params[:q].present? %>
|
10
|
+
<% params[:q].each do |key, value| %>
|
11
|
+
<%= hidden_field_tag "q[#{key}]", value %>
|
12
|
+
<% end %>
|
13
|
+
<% end %>
|
14
|
+
|
9
15
|
<div class="main-controls">
|
10
16
|
<div class="main-controls-left">
|
11
17
|
<h1>
|
12
18
|
<span class="crumb">
|
13
19
|
<%= fontawesome_icon @managed_class.icon %>
|
14
20
|
<% if @managed_class.allows? :index %>
|
15
|
-
<%= link_to @managed_class.model_name.human.pluralize.titleize, url_for(action:"index", controller:@managed_class.plural) %>
|
21
|
+
<%= link_to @managed_class.model_name.human.pluralize.titleize, url_for(action:"index", controller:@managed_class.plural, q:params[:q]) %>
|
16
22
|
<% else %>
|
17
23
|
<%= @managed_class.model_name.human.pluralize.titleize %>
|
18
24
|
<% end %>
|
@@ -12,14 +12,21 @@
|
|
12
12
|
<div class="main-controls-right">
|
13
13
|
|
14
14
|
<% unless @managed_class.no_resources? %>
|
15
|
-
|
16
|
-
<%=
|
17
|
-
|
15
|
+
<% if currently_filtering? %>
|
16
|
+
<%= link_to url_for(action:"index"), class:"button" do %>
|
17
|
+
<%= fontawesome_icon :close %>
|
18
|
+
Clear Search
|
19
|
+
<% end %>
|
20
|
+
<% else %>
|
21
|
+
<%= button_tag type:"button", class:"button search-form-toggle" do %>
|
22
|
+
<%= fontawesome_icon :search %>
|
23
|
+
Search
|
24
|
+
<% end %>
|
18
25
|
<% end %>
|
19
26
|
<% end %>
|
20
27
|
|
21
28
|
<% if @managed_class.allows?(:new) %>
|
22
|
-
<%= link_to url_for(action:"new"), class:"button -primary" do %>
|
29
|
+
<%= link_to url_for(action:"new", q:params[:q]), class:"button -primary" do %>
|
23
30
|
<%= fontawesome_icon :plus %>
|
24
31
|
New <%= @managed_class.model_name.human.titleize %>
|
25
32
|
<% end %>
|
@@ -7,7 +7,7 @@
|
|
7
7
|
<span class="crumb">
|
8
8
|
<%= fontawesome_icon @managed_class.icon %>
|
9
9
|
<% if @managed_class.allows? :index %>
|
10
|
-
<%= link_to @managed_class.model_name.human.pluralize.titleize, url_for(action:"index", controller:@managed_class.plural) %>
|
10
|
+
<%= link_to @managed_class.model_name.human.pluralize.titleize, url_for(action:"index", controller:@managed_class.plural, q:params[:q]) %>
|
11
11
|
<% else %>
|
12
12
|
<%= @managed_class.model_name.human.pluralize.titleize %>
|
13
13
|
<% end %>
|
@@ -35,13 +35,22 @@
|
|
35
35
|
<%= show_thead_tr %>
|
36
36
|
</thead>
|
37
37
|
<tbody>
|
38
|
+
<% if @resource.respond_to? :id %>
|
39
|
+
<%= show_tr "ID", @resource.id, class:"monospace" %>
|
40
|
+
<% end %>
|
41
|
+
<% if @resource.respond_to? :uuid %>
|
42
|
+
<%= show_tr "UUID", @resource.uuid, class:"monospace" %>
|
43
|
+
<% end %>
|
38
44
|
<% if @resource.respond_to? :created_at %>
|
39
|
-
<%= show_tr "Created At", @resource.created_at.try(:strftime, "%Y-%m-%d %
|
45
|
+
<%= show_tr "Created At", @resource.created_at.try(:strftime, "%Y-%m-%d %H:%M %Z"), class:"monospace" %>
|
40
46
|
<% end %>
|
41
47
|
<% if @resource.respond_to? :updated_at %>
|
42
|
-
<%= show_tr "Updated At", @resource.updated_at.try(:strftime, "%Y-%m-%d %
|
48
|
+
<%= show_tr "Updated At", @resource.updated_at.try(:strftime, "%Y-%m-%d %H:%M %Z"), class:"monospace" %>
|
49
|
+
<% end %>
|
50
|
+
<% @resource.attributes.each do |attribute, value| %>
|
51
|
+
<% next if attribute.in?(%[id uuid created_at updated_at]) %>
|
52
|
+
<%= show_tr attribute.humanize, value %>
|
43
53
|
<% end %>
|
44
|
-
<%= show_tr "Label", Tolaria.display_name(@resource) %>
|
45
54
|
</tbody>
|
46
55
|
</table>
|
47
56
|
|
data/lib/tasks/admin.rake
CHANGED
@@ -5,16 +5,25 @@ namespace :admin do
|
|
5
5
|
|
6
6
|
@administrator = Administrator.new
|
7
7
|
|
8
|
-
|
8
|
+
if ENV.has_key?("EMAIL") || ENV.has_key?("NAME") || ENV.has_key?("ORGANIZATION")
|
9
9
|
|
10
|
-
|
11
|
-
|
10
|
+
# Get the administrator from environment variables
|
11
|
+
@administrator.email = ENV.fetch("EMAIL").chomp
|
12
|
+
@administrator.name = ENV.fetch("NAME").chomp
|
13
|
+
@administrator.organization = ENV.fetch("ORGANIZATION").chomp
|
12
14
|
|
13
|
-
|
14
|
-
|
15
|
+
else
|
16
|
+
|
17
|
+
# Get the administrator interactively
|
18
|
+
STDOUT.puts "Enter the new administrator’s credentials. All fields are required."
|
19
|
+
STDOUT.print "Email address: "
|
20
|
+
@administrator.email = STDIN.gets.chomp
|
21
|
+
STDOUT.print "Full name: "
|
22
|
+
@administrator.name = STDIN.gets.chomp
|
23
|
+
STDOUT.print "Organization: "
|
24
|
+
@administrator.organization = STDIN.gets.chomp
|
15
25
|
|
16
|
-
|
17
|
-
@administrator.organization = STDIN.gets.chomp
|
26
|
+
end
|
18
27
|
|
19
28
|
if @administrator.save
|
20
29
|
STDOUT.puts %{The administrator "#{@administrator.name}" <#{@administrator.email}> was successfully created.}
|
@@ -3,8 +3,9 @@ module Tolaria
|
|
3
3
|
|
4
4
|
# Returns a `p.hint` used to explain a nearby form field containing
|
5
5
|
# the given `hint_text`.
|
6
|
-
def hint(hint_text)
|
7
|
-
|
6
|
+
def hint(hint_text, options = {})
|
7
|
+
css_class = "hint #{options.delete(:class)}"
|
8
|
+
content_tag(:p, content_tag(:span, hint_text.chomp), class:css_class, **options)
|
8
9
|
end
|
9
10
|
|
10
11
|
# Creates a `<select>` list that can be filtered by typing word fragments.
|
data/lib/tolaria/version.rb
CHANGED
@@ -1,6 +1,6 @@
|
|
1
1
|
require "test_helper"
|
2
2
|
|
3
|
-
class
|
3
|
+
class CrudTest < ActionDispatch::IntegrationTest
|
4
4
|
|
5
5
|
def setup
|
6
6
|
BlogPost.destroy_all
|
@@ -37,7 +37,7 @@ class InterfaceTest < ActionDispatch::IntegrationTest
|
|
37
37
|
assert page.has_content?("live here")
|
38
38
|
end
|
39
39
|
|
40
|
-
test "create a blog post, see it on the index, inspect it" do
|
40
|
+
test "create a blog post, see it on the index, and then inspect it" do
|
41
41
|
|
42
42
|
sign_in_dummy_administrator!
|
43
43
|
visit("/admin/blog_posts")
|
@@ -45,7 +45,7 @@ class InterfaceTest < ActionDispatch::IntegrationTest
|
|
45
45
|
fill_in("blog_post[title]", with:"Neko Atsume")
|
46
46
|
fill_in("blog_post[summary]", with:"Neko Atsume")
|
47
47
|
fill_in("blog_post[body]", with:"Neko Atsume")
|
48
|
-
first(".button
|
48
|
+
first(".button[name=save]").click
|
49
49
|
|
50
50
|
assert page.current_path.include?(admin_blog_posts_path)
|
51
51
|
assert page.has_content?("Neko Atsume")
|
@@ -58,6 +58,22 @@ class InterfaceTest < ActionDispatch::IntegrationTest
|
|
58
58
|
|
59
59
|
end
|
60
60
|
|
61
|
+
test "create a blog post and review it" do
|
62
|
+
|
63
|
+
sign_in_dummy_administrator!
|
64
|
+
visit("/admin/blog_posts")
|
65
|
+
first(".button.-primary").click
|
66
|
+
fill_in("blog_post[title]", with:"Neko Atsume")
|
67
|
+
fill_in("blog_post[summary]", with:"Neko Atsume")
|
68
|
+
fill_in("blog_post[body]", with:"Neko Atsume")
|
69
|
+
first(".button[name=save_and_review]").click
|
70
|
+
|
71
|
+
assert page.current_path.include?(admin_blog_post_path(BlogPost.first.id))
|
72
|
+
assert page.has_content?("Neko Atsume")
|
73
|
+
assert page.has_content?("created the"), "should see flash message"
|
74
|
+
|
75
|
+
end
|
76
|
+
|
61
77
|
test "blog post fails validation and sees flash message" do
|
62
78
|
|
63
79
|
sign_in_dummy_administrator!
|
@@ -0,0 +1,61 @@
|
|
1
|
+
require "test_helper"
|
2
|
+
|
3
|
+
class FilterPreservationTest < ActionDispatch::IntegrationTest
|
4
|
+
|
5
|
+
def setup
|
6
|
+
BlogPost.destroy_all
|
7
|
+
end
|
8
|
+
|
9
|
+
def teardown
|
10
|
+
BlogPost.destroy_all
|
11
|
+
end
|
12
|
+
|
13
|
+
test "after filtering index, should retain filter on edit and back with crumb" do
|
14
|
+
sign_in_dummy_administrator!
|
15
|
+
visit("/admin/administrators")
|
16
|
+
find_link("Organization").click
|
17
|
+
find_link("Nintendo").click
|
18
|
+
first(".crumb a").click
|
19
|
+
assert page.current_url.include?("q[s]=organization+asc"), "filter not retained"
|
20
|
+
end
|
21
|
+
|
22
|
+
test "after filtering index, should retain filter on edit and back with button" do
|
23
|
+
sign_in_dummy_administrator!
|
24
|
+
visit("/admin/administrators")
|
25
|
+
find_link("Organization").click
|
26
|
+
find_link("Nintendo").click
|
27
|
+
first(".button.-cancel").click
|
28
|
+
assert page.current_url.include?("q[s]=organization+asc"), "filter not retained"
|
29
|
+
end
|
30
|
+
|
31
|
+
test "after filtering index, should retain filter on edit and save" do
|
32
|
+
sign_in_dummy_administrator!
|
33
|
+
visit("/admin/administrators")
|
34
|
+
find_link("Organization").click
|
35
|
+
find_link("Nintendo").click
|
36
|
+
first(".button.-save").click
|
37
|
+
assert page.current_url.include?("q[s]=organization+asc"), "filter not retained"
|
38
|
+
end
|
39
|
+
|
40
|
+
test "after filtering index, should retain filter on edit and failed validation" do
|
41
|
+
sign_in_dummy_administrator!
|
42
|
+
visit("/admin/administrators")
|
43
|
+
find_link("Organization").click
|
44
|
+
find_link("Nintendo").click
|
45
|
+
fill_in("administrator[email]", with:"")
|
46
|
+
first(".button.-save").click
|
47
|
+
first(".button.-cancel").click
|
48
|
+
assert page.current_url.include?("q[s]=organization+asc"), "filter retained"
|
49
|
+
end
|
50
|
+
|
51
|
+
test "after filtering index, should NOT retain filter on save and review" do
|
52
|
+
sign_in_dummy_administrator!
|
53
|
+
visit("/admin/administrators")
|
54
|
+
find_link("Organization").click
|
55
|
+
find_link("Nintendo").click
|
56
|
+
first(".button.-save-and-review").click
|
57
|
+
assert page.current_url.exclude?("q[s]=organization+asc"), "filter not retained"
|
58
|
+
end
|
59
|
+
|
60
|
+
end
|
61
|
+
|
data/tolaria.gemspec
CHANGED
@@ -8,6 +8,7 @@ Gem::Specification.new do |s|
|
|
8
8
|
s.platform = Gem::Platform::RUBY
|
9
9
|
s.licenses = ["MIT"]
|
10
10
|
s.authors = ["Corey Csuhta", "Daniel Boggs"]
|
11
|
+
s.email = "hello+tolaria@threespot.com"
|
11
12
|
s.homepage = "https://github.com/threespot/tolaria"
|
12
13
|
s.summary = "A Rails CMS framework for making people happy."
|
13
14
|
s.description = "Tolaria is a content management system (CMS) framework for Ruby on Rails. It greatly speeds up the necessary—but repetitive—task of creating useful admin panels, forms, and model workflow. Includes a library of rich form components, passwordless authentication, and text search tools. Make your editors happy!"
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: tolaria
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.
|
4
|
+
version: 1.2.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Corey Csuhta
|
@@ -9,7 +9,7 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date:
|
12
|
+
date: 2016-01-04 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: bcrypt
|
@@ -183,7 +183,7 @@ description: Tolaria is a content management system (CMS) framework for Ruby on
|
|
183
183
|
It greatly speeds up the necessary—but repetitive—task of creating useful admin
|
184
184
|
panels, forms, and model workflow. Includes a library of rich form components, passwordless
|
185
185
|
authentication, and text search tools. Make your editors happy!
|
186
|
-
email:
|
186
|
+
email: hello+tolaria@threespot.com
|
187
187
|
executables: []
|
188
188
|
extensions: []
|
189
189
|
extra_rdoc_files: []
|
@@ -208,6 +208,7 @@ files:
|
|
208
208
|
- app/assets/images/admin/select_arrows.svg
|
209
209
|
- app/assets/javascripts/admin/admin.js
|
210
210
|
- app/assets/javascripts/admin/base.js
|
211
|
+
- app/assets/javascripts/admin/lib/autosize.js
|
211
212
|
- app/assets/javascripts/admin/lib/backbone.js
|
212
213
|
- app/assets/javascripts/admin/lib/jquery.chosen.js
|
213
214
|
- app/assets/javascripts/admin/lib/jquery.js
|
@@ -225,6 +226,7 @@ files:
|
|
225
226
|
- app/assets/javascripts/admin/views/fields/searchable_select.js
|
226
227
|
- app/assets/javascripts/admin/views/fields/slug_field.js
|
227
228
|
- app/assets/javascripts/admin/views/fields/swatch_field.js
|
229
|
+
- app/assets/javascripts/admin/views/fields/textarea.js
|
228
230
|
- app/assets/javascripts/admin/views/fields/timestamp_field.js
|
229
231
|
- app/assets/javascripts/admin/views/flash_message.js
|
230
232
|
- app/assets/javascripts/admin/views/form_orchestrator.js
|
@@ -395,9 +397,10 @@ files:
|
|
395
397
|
- test/demo/public/422.html
|
396
398
|
- test/demo/public/500.html
|
397
399
|
- test/demo/public/favicon.ico
|
400
|
+
- test/integration/crud_test.rb
|
401
|
+
- test/integration/filter_preservation_test.rb
|
398
402
|
- test/integration/forbidden_routes_test.rb
|
399
403
|
- test/integration/help_link_test.rb
|
400
|
-
- test/integration/interface_test.rb
|
401
404
|
- test/integration/router_test.rb
|
402
405
|
- test/integration/session_test.rb
|
403
406
|
- test/test_helper.rb
|
@@ -488,9 +491,10 @@ test_files:
|
|
488
491
|
- test/demo/public/422.html
|
489
492
|
- test/demo/public/500.html
|
490
493
|
- test/demo/public/favicon.ico
|
494
|
+
- test/integration/crud_test.rb
|
495
|
+
- test/integration/filter_preservation_test.rb
|
491
496
|
- test/integration/forbidden_routes_test.rb
|
492
497
|
- test/integration/help_link_test.rb
|
493
|
-
- test/integration/interface_test.rb
|
494
498
|
- test/integration/router_test.rb
|
495
499
|
- test/integration/session_test.rb
|
496
500
|
- test/test_helper.rb
|
@@ -499,4 +503,3 @@ test_files:
|
|
499
503
|
- test/unit/markdown_test.rb
|
500
504
|
- test/unit/menu_test.rb
|
501
505
|
- test/unit/random_tokens_test.rb
|
502
|
-
has_rdoc:
|