brightcontent-core 2.3.4 → 2.4.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.
- checksums.yaml +4 -4
- data/app/assets/javascripts/brightcontent/brightcontent.js.erb +4 -0
- data/app/assets/javascripts/brightcontent/core.js +3 -0
- data/app/assets/stylesheets/brightcontent/brightcontent.css.erb +1 -0
- data/app/controllers/brightcontent/application_controller.rb +6 -2
- data/app/controllers/brightcontent/base_controller.rb +4 -27
- data/app/models/brightcontent/admin_user.rb +4 -0
- data/app/views/brightcontent/application/_user_menu.html.erb +1 -1
- data/app/views/brightcontent/base/_form.html.erb +2 -2
- data/app/views/brightcontent/base/_list_actions.html.erb +2 -2
- data/app/views/brightcontent/base/_list_filters.html.erb +1 -0
- data/app/views/brightcontent/base/_list_header.html.erb +1 -1
- data/app/views/brightcontent/base/_list_item.html.erb +1 -1
- data/app/views/brightcontent/base/_page_sizes.html.erb +9 -0
- data/app/views/brightcontent/base/form_fields/_date.html.erb +10 -0
- data/app/views/brightcontent/base/form_fields/_datetime.html.erb +10 -0
- data/app/views/brightcontent/base/index.html.erb +2 -1
- data/app/views/layouts/brightcontent/application.html.erb +0 -3
- data/brightcontent-core.gemspec +2 -1
- data/lib/brightcontent/base_controller_ext/default_actions.rb +95 -10
- data/lib/brightcontent/base_controller_ext/filtering.rb +2 -2
- data/lib/brightcontent/base_controller_ext/pagination.rb +54 -5
- data/lib/brightcontent/core.rb +2 -1
- data/lib/brightcontent/view_lookup/filter_field.rb +1 -1
- data/spec/dummy/app/controllers/brightcontent/comments_controller.rb +19 -1
- data/spec/dummy/app/controllers/brightcontent/grouped_blogs_controller.rb +5 -0
- data/spec/dummy/app/models/grouped_blog.rb +9 -0
- data/spec/dummy/config/routes.rb +2 -0
- data/spec/dummy/db/migrate/20160623142310_create_grouped_blogs.rb +12 -0
- data/spec/factories.rb +14 -0
- data/spec/features/grouped_resources_index_spec.rb +37 -0
- data/spec/features/resources_index_spec.rb +105 -0
- metadata +33 -9
- data/Gemfile +0 -3
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: a59c7387cca9c17d2cdd1a2172f14732fac39181
|
4
|
+
data.tar.gz: b35f502da97a126b6f1dd2d5553564bbcec67149
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: e51652e0b7c53f62e023f2c01fda8ddddf55d30e43feaa8ae2d29d710c703e3696deac162132dc18c7377762df3e6bcc46402d214a59edef3ec3698a054f7ca3
|
7
|
+
data.tar.gz: b4fa46b6fc1c9331ad112831e0ed4c2a00182c537b940fc5df6de05f4f1b56dc5fb5f04293913a953d67bb0df61a28f673a01fca08dafc30c79dc3f467c90cc5
|
@@ -1,6 +1,10 @@
|
|
1
1
|
//= require jquery
|
2
2
|
//= require jquery_ujs
|
3
3
|
//= require bootstrap
|
4
|
+
//= require moment
|
5
|
+
//= require bootstrap-datetimepicker
|
6
|
+
//= require moment/nl
|
7
|
+
//= require locales/bootstrap-datetimepicker.nl.js
|
4
8
|
|
5
9
|
<% (Brightcontent.extensions + ['custom']).each do |name|
|
6
10
|
require_asset("brightcontent/#{name}")
|
@@ -10,10 +10,14 @@ module Brightcontent
|
|
10
10
|
redirect_to polymorphic_url(user_resources.first.klass)
|
11
11
|
end
|
12
12
|
|
13
|
+
def default_url_options(options = {})
|
14
|
+
{ locale: I18n.locale }.merge options
|
15
|
+
end
|
16
|
+
|
13
17
|
private
|
14
18
|
|
15
19
|
def set_locale
|
16
|
-
I18n.locale = Brightcontent.locale
|
20
|
+
I18n.locale = params[:locale] || Brightcontent.locale
|
17
21
|
end
|
18
22
|
|
19
23
|
def current_user
|
@@ -24,7 +28,7 @@ module Brightcontent
|
|
24
28
|
helper_method :current_user
|
25
29
|
|
26
30
|
def user_resources
|
27
|
-
@user_resources ||=
|
31
|
+
@user_resources ||= @current_user.resources
|
28
32
|
end
|
29
33
|
helper_method :user_resources
|
30
34
|
|
@@ -3,37 +3,14 @@ require_dependency "brightcontent/application_controller"
|
|
3
3
|
|
4
4
|
module Brightcontent
|
5
5
|
class BaseController < ApplicationController
|
6
|
-
inherit_resources
|
7
|
-
respond_to :all
|
8
|
-
|
9
6
|
include BaseControllerExt::DefaultActions
|
7
|
+
include BaseControllerExt::Filtering
|
10
8
|
include BaseControllerExt::Pagination
|
11
9
|
include BaseControllerExt::Fields
|
12
|
-
include BaseControllerExt::Filtering
|
13
|
-
|
14
|
-
def permitted_params
|
15
|
-
params.permit!
|
16
|
-
end
|
17
|
-
|
18
|
-
def resource_params
|
19
|
-
[permitted_params[resource_instance_name]]
|
20
|
-
end
|
21
|
-
|
22
|
-
protected
|
23
|
-
|
24
|
-
def parent
|
25
|
-
super if parent?
|
26
|
-
end
|
27
|
-
helper_method :parent
|
28
|
-
|
29
|
-
def resource_item_path
|
30
|
-
[parent, resource]
|
31
|
-
end
|
32
|
-
helper_method :resource_item_path
|
33
10
|
|
34
|
-
|
35
|
-
|
11
|
+
# deprecated; included for compatibility with inherited_resources
|
12
|
+
def end_of_association_chain
|
13
|
+
base_collection
|
36
14
|
end
|
37
|
-
helper_method :resource_index_path
|
38
15
|
end
|
39
16
|
end
|
@@ -1,4 +1,4 @@
|
|
1
1
|
<li><%= link_to "Homepage", "/" %></li>
|
2
|
-
<li><%= link_to Brightcontent
|
2
|
+
<li><%= link_to nominative_plural(Brightcontent.user_model), admin_users_path %></li>
|
3
3
|
<li class="divider"></li>
|
4
4
|
<li><%= link_to t('brightcontent.logout'), logout_path %></li>
|
@@ -1,4 +1,4 @@
|
|
1
|
-
<%= simple_form_for
|
1
|
+
<%= simple_form_for resource_path do |form| %>
|
2
2
|
<%= form.error_notification %>
|
3
3
|
|
4
4
|
<div class="page-header">
|
@@ -16,7 +16,7 @@
|
|
16
16
|
<%= form.button :submit, t('brightcontent.save_and_continue'), class: "btn btn-default", name: "commit_and_continue" %>
|
17
17
|
|
18
18
|
<% unless resource.new_record? %>
|
19
|
-
<%= link_to t('brightcontent.delete'),
|
19
|
+
<%= link_to t('brightcontent.delete'), resource_path, class: "btn btn-danger pull-right", method: :delete, data: { confirm: 'Are you sure?' } %>
|
20
20
|
<% end %>
|
21
21
|
</div>
|
22
22
|
<% end %>
|
@@ -1,2 +1,2 @@
|
|
1
|
-
<%= link_to t('brightcontent.edit'),
|
2
|
-
<%= link_to t('brightcontent.delete'),
|
1
|
+
<%= link_to t('brightcontent.edit'), resource_edit_path(item), class: "btn btn-xs btn-primary" %>
|
2
|
+
<%= link_to t('brightcontent.delete'), resource_path(item), class: "btn btn-xs btn-danger", data: {confirm: t('brightcontent.are_you_sure')}, method: :delete %>
|
@@ -1,6 +1,7 @@
|
|
1
1
|
<% if filter_fields.present? %>
|
2
2
|
<div class="panel-body">
|
3
3
|
<%= search_form_for ransack_search, class: "form-inline" do |form| %>
|
4
|
+
<%= hidden_field_tag :per_page, items_per_page %>
|
4
5
|
<% normalized_filter_fields.each do |field, options| %>
|
5
6
|
<%= render_filter_field form, field, options %>
|
6
7
|
<% end %>
|
@@ -1,5 +1,5 @@
|
|
1
1
|
<div class="page-header">
|
2
|
-
<%= link_to "#{I18n.t('brightcontent.create_new', model: resource_class.model_name.human).capitalize}",
|
2
|
+
<%= link_to "#{I18n.t('brightcontent.create_new', model: resource_class.model_name.human).capitalize}", url_for(action: :new), class: "btn btn-primary pull-right" %>
|
3
3
|
<h1><%= nominative_plural(resource_class).capitalize %></h1>
|
4
4
|
</div>
|
5
5
|
|
@@ -0,0 +1,9 @@
|
|
1
|
+
<% if page_sizes_visible?(collection) %>
|
2
|
+
<ul class="pagination page-sizes pull-left">
|
3
|
+
<% page_sizes.each do |size| %>
|
4
|
+
<li class="<%= :active if size == items_per_page %>">
|
5
|
+
<%= link_to size, params.permit!.merge({ per_page: size, page: corrected_page(size) }) %>
|
6
|
+
</li>
|
7
|
+
<% end %>
|
8
|
+
</ul>
|
9
|
+
<% end %>
|
@@ -0,0 +1,10 @@
|
|
1
|
+
<div class="form-group">
|
2
|
+
<%= form.label field %>
|
3
|
+
<div class="col-sm-10">
|
4
|
+
<%= form.text_field field, class: 'form-control', data: {behaviour: 'datepicker', format: "dd/MM/yyyy"} %>
|
5
|
+
<span class="add-on">
|
6
|
+
<i data-date-icon="icon-calendar">
|
7
|
+
</i>
|
8
|
+
</span>
|
9
|
+
</div>
|
10
|
+
</div>
|
@@ -0,0 +1,10 @@
|
|
1
|
+
<div class="form-group">
|
2
|
+
<%= form.label field %>
|
3
|
+
<div class="col-sm-10">
|
4
|
+
<%= form.text_field field, class: 'form-control', data: {behaviour: 'datetimepicker', format: "dd/MM/yyyy HH:mm"} %>
|
5
|
+
<span class="add-on">
|
6
|
+
<i data-time-icon="icon-clock" data-date-icon="icon-calendar">
|
7
|
+
</i>
|
8
|
+
</span>
|
9
|
+
</div>
|
10
|
+
</div>
|
@@ -19,5 +19,6 @@
|
|
19
19
|
</div>
|
20
20
|
|
21
21
|
<div class="panel-footer panel-footer-pagination">
|
22
|
-
<%=
|
22
|
+
<%= render partial: "page_sizes" %>
|
23
|
+
<%= will_paginate collection, class: :pages, renderer: BootstrapPagination::Rails %>
|
23
24
|
</div>
|
@@ -7,9 +7,6 @@
|
|
7
7
|
<%= stylesheet_link_tag "brightcontent/brightcontent", :media => "all" %>
|
8
8
|
<%= yield :head %>
|
9
9
|
<%= csrf_meta_tags %>
|
10
|
-
<!--[if lt IE 9]>
|
11
|
-
<script src="https://html5shim.googlecode.com/svn/trunk/html5.js"></script>
|
12
|
-
<![endif]-->
|
13
10
|
</head>
|
14
11
|
|
15
12
|
<body data-editor-locale="<%=t('brightcontent.editor_locale')%>">
|
data/brightcontent-core.gemspec
CHANGED
@@ -19,7 +19,8 @@ Gem::Specification.new do |s|
|
|
19
19
|
s.add_dependency "bcrypt"
|
20
20
|
s.add_dependency "bootstrap-sass", ">= 3.1"
|
21
21
|
s.add_dependency "bootstrap-wysihtml5-rails", ">= 0.3.2"
|
22
|
-
s.add_dependency "
|
22
|
+
s.add_dependency "momentjs-rails", "~> 2.5.0"
|
23
|
+
s.add_dependency "bootstrap3-datetimepicker-rails", "~> 3.0.0"
|
23
24
|
s.add_dependency "jquery-rails"
|
24
25
|
s.add_dependency "sass-rails", ">= 4.0.2"
|
25
26
|
s.add_dependency "simple_form"
|
@@ -1,35 +1,120 @@
|
|
1
|
+
require 'active_support/concern'
|
2
|
+
|
1
3
|
module Brightcontent
|
2
4
|
module BaseControllerExt
|
3
5
|
module DefaultActions
|
6
|
+
extend ActiveSupport::Concern
|
7
|
+
|
8
|
+
included do
|
9
|
+
before_action :set_collection
|
10
|
+
before_action :set_resource, only: [:show, :edit, :update, :destroy]
|
11
|
+
helper_method :resource, :resource_class, :resource_index_path, :resource_path, :collection, :resource_edit_path
|
12
|
+
end
|
13
|
+
|
14
|
+
def base_collection
|
15
|
+
instance_variable_get :"@#{resource_name.pluralize}"
|
16
|
+
end
|
17
|
+
|
18
|
+
def collection
|
19
|
+
base_collection
|
20
|
+
end
|
21
|
+
|
22
|
+
def collection=(val)
|
23
|
+
instance_variable_set :"@#{resource_name.pluralize}", val
|
24
|
+
end
|
25
|
+
|
26
|
+
def resource
|
27
|
+
instance_variable_get :"@#{resource_instance_name}"
|
28
|
+
end
|
29
|
+
|
30
|
+
def resource=(val)
|
31
|
+
instance_variable_set :"@#{resource_instance_name}", val
|
32
|
+
end
|
33
|
+
|
34
|
+
def resource_class
|
35
|
+
controller_name.classify.constantize
|
36
|
+
end
|
37
|
+
|
38
|
+
def resource_name
|
39
|
+
controller_name
|
40
|
+
end
|
41
|
+
|
42
|
+
def resource_instance_name
|
43
|
+
resource_name.singularize
|
44
|
+
end
|
45
|
+
|
46
|
+
def index
|
47
|
+
end
|
48
|
+
|
4
49
|
def show
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
|
50
|
+
redirect_to action: :edit
|
51
|
+
end
|
52
|
+
|
53
|
+
def new
|
54
|
+
self.resource = base_collection.new
|
55
|
+
end
|
56
|
+
|
57
|
+
def edit
|
10
58
|
end
|
11
59
|
|
12
60
|
def create
|
13
|
-
|
61
|
+
self.resource = base_collection.new(resource_params)
|
62
|
+
if resource.save
|
63
|
+
redirect_to resource_redirect_path, notice: t("flash.actions.create.notice", resource_name: resource_instance_name.capitalize)
|
64
|
+
else
|
65
|
+
render :new
|
66
|
+
end
|
14
67
|
end
|
15
68
|
|
16
69
|
def update
|
17
|
-
update
|
70
|
+
if resource.update(resource_params)
|
71
|
+
redirect_to resource_redirect_path, notice: t("flash.actions.update.notice", resource_name: resource_instance_name.capitalize)
|
72
|
+
else
|
73
|
+
render :edit
|
74
|
+
end
|
18
75
|
end
|
19
76
|
|
20
77
|
def destroy
|
21
|
-
destroy
|
78
|
+
if resource.destroy
|
79
|
+
redirect_to resource_index_path, notice: t("flash.actions.destroy.notice", resource_name: resource_instance_name.capitalize)
|
80
|
+
else
|
81
|
+
redirect_to resource_index_path, alert: t("flash.actions.destroy.alert", resource_name: resource_instance_name.capitalize)
|
82
|
+
end
|
22
83
|
end
|
23
84
|
|
24
85
|
private
|
25
86
|
|
87
|
+
def set_collection
|
88
|
+
self.collection = resource_class.all
|
89
|
+
end
|
90
|
+
|
91
|
+
def set_resource
|
92
|
+
self.resource = base_collection.find(params[:id])
|
93
|
+
end
|
94
|
+
|
95
|
+
def resource_params
|
96
|
+
params.require(resource_instance_name).permit!
|
97
|
+
end
|
98
|
+
|
99
|
+
def resource_index_path
|
100
|
+
[brightcontent, resource_class]
|
101
|
+
end
|
102
|
+
|
103
|
+
def resource_edit_path(res = resource)
|
104
|
+
[brightcontent, :edit, res]
|
105
|
+
end
|
106
|
+
|
26
107
|
def resource_redirect_path
|
27
|
-
if params[
|
28
|
-
|
108
|
+
if params[:commit_and_continue].present?
|
109
|
+
resource_edit_path
|
29
110
|
else
|
30
111
|
resource_index_path
|
31
112
|
end
|
32
113
|
end
|
114
|
+
|
115
|
+
def resource_path(res = resource)
|
116
|
+
[brightcontent, res]
|
117
|
+
end
|
33
118
|
end
|
34
119
|
end
|
35
120
|
end
|
@@ -10,11 +10,11 @@ module Brightcontent
|
|
10
10
|
end
|
11
11
|
|
12
12
|
def ransack_search
|
13
|
-
@_ransack_search ||=
|
13
|
+
@_ransack_search ||= base_collection.ransack(params[:q])
|
14
14
|
end
|
15
15
|
|
16
16
|
def collection
|
17
|
-
@_collection ||= ransack_search.result
|
17
|
+
@_collection ||= ransack_search.result
|
18
18
|
end
|
19
19
|
end
|
20
20
|
end
|
@@ -5,21 +5,70 @@ module Brightcontent
|
|
5
5
|
module Pagination
|
6
6
|
extend ActiveSupport::Concern
|
7
7
|
|
8
|
+
included do
|
9
|
+
helper_method :items_per_page
|
10
|
+
helper_method :current_page
|
11
|
+
helper_method :page_sizes
|
12
|
+
helper_method :corrected_page
|
13
|
+
helper_method :page_sizes_visible?
|
14
|
+
end
|
15
|
+
|
8
16
|
module ClassMethods
|
9
17
|
def per_page_count
|
10
|
-
@
|
18
|
+
@page_size = page_sizes.min
|
11
19
|
end
|
12
20
|
|
13
21
|
def per_page(number)
|
14
|
-
@
|
22
|
+
@page_sizes = [number]
|
23
|
+
end
|
24
|
+
|
25
|
+
def page_size_options(sizes)
|
26
|
+
return unless sizes.is_a? Array
|
27
|
+
@page_sizes = sizes
|
28
|
+
end
|
29
|
+
|
30
|
+
def page_sizes
|
31
|
+
@page_sizes ||= [30]
|
15
32
|
end
|
16
33
|
end
|
17
34
|
|
18
35
|
private
|
19
36
|
|
20
|
-
def
|
21
|
-
|
22
|
-
|
37
|
+
def items_per_page
|
38
|
+
per_page = params[:per_page].try(:to_i)
|
39
|
+
@items_per_page =
|
40
|
+
if per_page && page_sizes.include?(per_page)
|
41
|
+
per_page.to_i
|
42
|
+
else
|
43
|
+
self.class.per_page_count
|
44
|
+
end
|
45
|
+
end
|
46
|
+
|
47
|
+
def page_sizes_visible?(collection)
|
48
|
+
total_entries = collection.count
|
49
|
+
|
50
|
+
if total_entries.respond_to?(:size) && !total_entries.is_a?(Integer)
|
51
|
+
total_entries = total_entries.size
|
52
|
+
end
|
53
|
+
|
54
|
+
page_sizes.length > 1 && total_entries > page_sizes.min
|
55
|
+
end
|
56
|
+
|
57
|
+
def current_page
|
58
|
+
params[:page].try(:to_i) || 1
|
59
|
+
end
|
60
|
+
|
61
|
+
def corrected_page(size)
|
62
|
+
(current_page - 1) * items_per_page / size + 1
|
63
|
+
end
|
64
|
+
|
65
|
+
def page_sizes
|
66
|
+
self.class.page_sizes
|
67
|
+
end
|
68
|
+
|
69
|
+
def collection
|
70
|
+
if action_name == "index" && items_per_page > 0
|
71
|
+
super.paginate(page: params[:page], per_page: items_per_page)
|
23
72
|
else
|
24
73
|
super
|
25
74
|
end
|
data/lib/brightcontent/core.rb
CHANGED
@@ -5,7 +5,8 @@ ENV['RANSACK_FORM_BUILDER'] ||= '::SimpleForm::FormBuilder'
|
|
5
5
|
|
6
6
|
require "bootstrap-sass"
|
7
7
|
require "bootstrap-wysihtml5-rails"
|
8
|
-
require "
|
8
|
+
require "momentjs-rails"
|
9
|
+
require "bootstrap3-datetimepicker-rails"
|
9
10
|
require "ransack"
|
10
11
|
require "jquery-rails"
|
11
12
|
require "simple_form"
|
@@ -1,3 +1,21 @@
|
|
1
1
|
class Brightcontent::CommentsController < Brightcontent::BaseController
|
2
|
-
|
2
|
+
def blog
|
3
|
+
Blog.find(params[:blog_id])
|
4
|
+
end
|
5
|
+
|
6
|
+
def base_collection
|
7
|
+
blog.comments
|
8
|
+
end
|
9
|
+
|
10
|
+
def resource_path(res = resource)
|
11
|
+
[brightcontent, blog, res]
|
12
|
+
end
|
13
|
+
|
14
|
+
def resource_index_path
|
15
|
+
[brightcontent, blog, resource_class]
|
16
|
+
end
|
17
|
+
|
18
|
+
def resource_edit_path(res = resource)
|
19
|
+
[brightcontent, :edit, blog, res]
|
20
|
+
end
|
3
21
|
end
|
data/spec/dummy/config/routes.rb
CHANGED
data/spec/factories.rb
CHANGED
@@ -19,6 +19,11 @@ FactoryGirl.define do
|
|
19
19
|
end
|
20
20
|
end
|
21
21
|
|
22
|
+
factory :grouped_blog do
|
23
|
+
name "Blogname"
|
24
|
+
body "Inhoud"
|
25
|
+
end
|
26
|
+
|
22
27
|
factory :author do
|
23
28
|
factory :author_with_blogs do
|
24
29
|
transient do
|
@@ -27,6 +32,15 @@ FactoryGirl.define do
|
|
27
32
|
after(:create) do |author, evaluator|
|
28
33
|
create_list(:blog, evaluator.blogs_count, author: author)
|
29
34
|
end
|
35
|
+
|
36
|
+
end
|
37
|
+
factory :author_with_grouped_blogs do
|
38
|
+
transient do
|
39
|
+
blogs_count 5
|
40
|
+
end
|
41
|
+
after(:create) do |author, evaluator|
|
42
|
+
create_list(:grouped_blog, evaluator.blogs_count, author: author)
|
43
|
+
end
|
30
44
|
end
|
31
45
|
end
|
32
46
|
|
@@ -0,0 +1,37 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
feature "Grouped resources index" do
|
4
|
+
background do
|
5
|
+
sign_in
|
6
|
+
end
|
7
|
+
|
8
|
+
scenario "Visit the index view of resource" do
|
9
|
+
given_authors_with_blogs(authors: 3, blogs: 2)
|
10
|
+
given_page_sizes [2, 3]
|
11
|
+
|
12
|
+
visit_grouped_blogs_page
|
13
|
+
|
14
|
+
page_should_have_n_rows 2
|
15
|
+
|
16
|
+
# 2 numbered links and previous/next links
|
17
|
+
page.should have_css(".pagination.pages li", count: 4)
|
18
|
+
end
|
19
|
+
|
20
|
+
def visit_grouped_blogs_page
|
21
|
+
click_link "Grouped blogs"
|
22
|
+
end
|
23
|
+
|
24
|
+
def given_authors_with_blogs(authors: 2, blogs: 5)
|
25
|
+
authors.times do |num|
|
26
|
+
create(:author_with_grouped_blogs, blogs_count: blogs, name: "Blogger #{num}")
|
27
|
+
end
|
28
|
+
end
|
29
|
+
|
30
|
+
def given_page_sizes(sizes = [2, 6, 10])
|
31
|
+
Brightcontent::GroupedBlogsController.class_eval { page_size_options sizes }
|
32
|
+
end
|
33
|
+
|
34
|
+
def page_should_have_n_rows(n)
|
35
|
+
page.should have_css("tbody tr", :count => n)
|
36
|
+
end
|
37
|
+
end
|
@@ -66,6 +66,103 @@ feature "Resources index" do
|
|
66
66
|
page_should_have_n_rows 1
|
67
67
|
end
|
68
68
|
|
69
|
+
scenario "shows no page size options" do
|
70
|
+
given_blog_items
|
71
|
+
visit_blogs_page
|
72
|
+
page.should_not have_css(".pagination.page-sizes")
|
73
|
+
end
|
74
|
+
|
75
|
+
context "with adjustable pagination page size" do
|
76
|
+
scenario "shows pagination size options" do
|
77
|
+
given_page_sizes
|
78
|
+
given_blog_items
|
79
|
+
visit_blogs_page
|
80
|
+
|
81
|
+
page.should have_css(".pagination.page-sizes li", count: 3)
|
82
|
+
within ".pagination.page-sizes .active" do
|
83
|
+
page.should have_content "2"
|
84
|
+
end
|
85
|
+
end
|
86
|
+
|
87
|
+
scenario "shows 2 items" do
|
88
|
+
given_page_sizes
|
89
|
+
given_blog_items
|
90
|
+
visit_blogs_page
|
91
|
+
page_should_have_n_rows 2
|
92
|
+
end
|
93
|
+
|
94
|
+
scenario "can switch to different page size" do
|
95
|
+
given_page_sizes [3, 6, 9]
|
96
|
+
given_blog_items
|
97
|
+
visit_blogs_page
|
98
|
+
within ".pagination.page-sizes" do
|
99
|
+
click_link "6"
|
100
|
+
end
|
101
|
+
|
102
|
+
page_should_have_n_rows 6
|
103
|
+
end
|
104
|
+
|
105
|
+
scenario "adjusts active page to page size" do
|
106
|
+
given_page_sizes [2, 4, 8]
|
107
|
+
given_blog_items 16
|
108
|
+
visit_blogs_page
|
109
|
+
|
110
|
+
within ".pagination.pages" do
|
111
|
+
click_link "4"
|
112
|
+
end
|
113
|
+
|
114
|
+
within ".pagination.page-sizes" do
|
115
|
+
click_link "4"
|
116
|
+
end
|
117
|
+
|
118
|
+
within ".pagination.pages .active" do
|
119
|
+
page.should have_content "2"
|
120
|
+
end
|
121
|
+
end
|
122
|
+
|
123
|
+
scenario "retains page size after applying filter" do
|
124
|
+
given_page_sizes [2, 4, 8]
|
125
|
+
given_blog_items 9
|
126
|
+
visit_blogs_page
|
127
|
+
within ".pagination.page-sizes" do
|
128
|
+
click_link "4"
|
129
|
+
end
|
130
|
+
|
131
|
+
fill_in "Name", with: "Blog"
|
132
|
+
click_button "Search"
|
133
|
+
|
134
|
+
within ".pagination.page-sizes .active" do
|
135
|
+
page.should have_content "4"
|
136
|
+
end
|
137
|
+
end
|
138
|
+
|
139
|
+
scenario "retains filter after applying page size" do
|
140
|
+
given_page_sizes [2, 4, 8]
|
141
|
+
given_blog_items 14
|
142
|
+
visit_blogs_page
|
143
|
+
fill_in "Name", with: "Blog 1"
|
144
|
+
click_button "Search"
|
145
|
+
|
146
|
+
# 3 numbered links and previous/next links
|
147
|
+
page.should have_css(".pagination.pages li", count: 5)
|
148
|
+
|
149
|
+
within ".pagination.page-sizes" do
|
150
|
+
click_link "4"
|
151
|
+
end
|
152
|
+
|
153
|
+
# 2 numbered links and previous/next links
|
154
|
+
page.should have_css(".pagination.pages li", count: 4)
|
155
|
+
end
|
156
|
+
|
157
|
+
scenario "hides page size options when there is only a single page" do
|
158
|
+
given_page_sizes [5, 6, 7]
|
159
|
+
given_blog_items 4
|
160
|
+
visit_blogs_page
|
161
|
+
|
162
|
+
page.should_not have_css(".pagination.page-sizes")
|
163
|
+
end
|
164
|
+
end
|
165
|
+
|
69
166
|
def visit_blogs_page
|
70
167
|
click_link "Blogs"
|
71
168
|
end
|
@@ -112,4 +209,12 @@ feature "Resources index" do
|
|
112
209
|
create :blog, name: "Foo", active: false
|
113
210
|
create :blog, name: "Bar", active: true
|
114
211
|
end
|
212
|
+
|
213
|
+
def given_page_sizes(sizes = [2, 6, 10])
|
214
|
+
Brightcontent::BlogsController.class_eval { page_size_options sizes }
|
215
|
+
end
|
216
|
+
|
217
|
+
def given_blog_items(num = 10)
|
218
|
+
num.times { |num| create [:blog, :featured_blog].sample, name: "Blog #{num}" }
|
219
|
+
end
|
115
220
|
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: brightcontent-core
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 2.
|
4
|
+
version: 2.4.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Developers at Brightin
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2016-
|
11
|
+
date: 2016-08-08 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: rails
|
@@ -67,19 +67,33 @@ dependencies:
|
|
67
67
|
- !ruby/object:Gem::Version
|
68
68
|
version: 0.3.2
|
69
69
|
- !ruby/object:Gem::Dependency
|
70
|
-
name:
|
70
|
+
name: momentjs-rails
|
71
71
|
requirement: !ruby/object:Gem::Requirement
|
72
72
|
requirements:
|
73
|
-
- - "
|
73
|
+
- - "~>"
|
74
74
|
- !ruby/object:Gem::Version
|
75
|
-
version:
|
75
|
+
version: 2.5.0
|
76
76
|
type: :runtime
|
77
77
|
prerelease: false
|
78
78
|
version_requirements: !ruby/object:Gem::Requirement
|
79
79
|
requirements:
|
80
|
-
- - "
|
80
|
+
- - "~>"
|
81
|
+
- !ruby/object:Gem::Version
|
82
|
+
version: 2.5.0
|
83
|
+
- !ruby/object:Gem::Dependency
|
84
|
+
name: bootstrap3-datetimepicker-rails
|
85
|
+
requirement: !ruby/object:Gem::Requirement
|
86
|
+
requirements:
|
87
|
+
- - "~>"
|
88
|
+
- !ruby/object:Gem::Version
|
89
|
+
version: 3.0.0
|
90
|
+
type: :runtime
|
91
|
+
prerelease: false
|
92
|
+
version_requirements: !ruby/object:Gem::Requirement
|
93
|
+
requirements:
|
94
|
+
- - "~>"
|
81
95
|
- !ruby/object:Gem::Version
|
82
|
-
version:
|
96
|
+
version: 3.0.0
|
83
97
|
- !ruby/object:Gem::Dependency
|
84
98
|
name: jquery-rails
|
85
99
|
requirement: !ruby/object:Gem::Requirement
|
@@ -269,7 +283,6 @@ extensions: []
|
|
269
283
|
extra_rdoc_files: []
|
270
284
|
files:
|
271
285
|
- ".gitignore"
|
272
|
-
- Gemfile
|
273
286
|
- Rakefile
|
274
287
|
- app/assets/javascripts/brightcontent/brightcontent.js.erb
|
275
288
|
- app/assets/javascripts/brightcontent/core.js
|
@@ -296,8 +309,11 @@ files:
|
|
296
309
|
- app/views/brightcontent/base/_list_filters.html.erb
|
297
310
|
- app/views/brightcontent/base/_list_header.html.erb
|
298
311
|
- app/views/brightcontent/base/_list_item.html.erb
|
312
|
+
- app/views/brightcontent/base/_page_sizes.html.erb
|
299
313
|
- app/views/brightcontent/base/edit.html.erb
|
300
314
|
- app/views/brightcontent/base/form_fields/_belongs_to.html.erb
|
315
|
+
- app/views/brightcontent/base/form_fields/_date.html.erb
|
316
|
+
- app/views/brightcontent/base/form_fields/_datetime.html.erb
|
301
317
|
- app/views/brightcontent/base/form_fields/_file.html.erb
|
302
318
|
- app/views/brightcontent/base/form_fields/_has_and_belongs_to_many.html.erb
|
303
319
|
- app/views/brightcontent/base/form_fields/_has_many.html.erb
|
@@ -350,6 +366,7 @@ files:
|
|
350
366
|
- spec/dummy/app/controllers/application_controller.rb
|
351
367
|
- spec/dummy/app/controllers/brightcontent/blogs_controller.rb
|
352
368
|
- spec/dummy/app/controllers/brightcontent/comments_controller.rb
|
369
|
+
- spec/dummy/app/controllers/brightcontent/grouped_blogs_controller.rb
|
353
370
|
- spec/dummy/app/controllers/pages_controller.rb
|
354
371
|
- spec/dummy/app/helpers/application_helper.rb
|
355
372
|
- spec/dummy/app/mailers/.gitkeep
|
@@ -357,6 +374,7 @@ files:
|
|
357
374
|
- spec/dummy/app/models/author.rb
|
358
375
|
- spec/dummy/app/models/blog.rb
|
359
376
|
- spec/dummy/app/models/comment.rb
|
377
|
+
- spec/dummy/app/models/grouped_blog.rb
|
360
378
|
- spec/dummy/app/views/layouts/application.html.erb
|
361
379
|
- spec/dummy/app/views/pages/index.html.erb
|
362
380
|
- spec/dummy/config.ru
|
@@ -383,6 +401,7 @@ files:
|
|
383
401
|
- spec/dummy/db/migrate/20140512085432_add_author_id_to_blogs.rb
|
384
402
|
- spec/dummy/db/migrate/20140512090832_create_authors.rb
|
385
403
|
- spec/dummy/db/migrate/20150219130156_add_active_to_blogs.rb
|
404
|
+
- spec/dummy/db/migrate/20160623142310_create_grouped_blogs.rb
|
386
405
|
- spec/dummy/lib/assets/.gitkeep
|
387
406
|
- spec/dummy/public/404.html
|
388
407
|
- spec/dummy/public/422.html
|
@@ -393,6 +412,7 @@ files:
|
|
393
412
|
- spec/dummy/test/unit/comments_test.rb
|
394
413
|
- spec/factories.rb
|
395
414
|
- spec/features/export_spec.rb
|
415
|
+
- spec/features/grouped_resources_index_spec.rb
|
396
416
|
- spec/features/login_spec.rb
|
397
417
|
- spec/features/menu_spec.rb
|
398
418
|
- spec/features/nested_resource_spec.rb
|
@@ -425,7 +445,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
425
445
|
version: '0'
|
426
446
|
requirements: []
|
427
447
|
rubyforge_project:
|
428
|
-
rubygems_version: 2.
|
448
|
+
rubygems_version: 2.6.6
|
429
449
|
signing_key:
|
430
450
|
specification_version: 4
|
431
451
|
summary: Brightcontent core
|
@@ -439,6 +459,7 @@ test_files:
|
|
439
459
|
- spec/dummy/app/controllers/application_controller.rb
|
440
460
|
- spec/dummy/app/controllers/brightcontent/blogs_controller.rb
|
441
461
|
- spec/dummy/app/controllers/brightcontent/comments_controller.rb
|
462
|
+
- spec/dummy/app/controllers/brightcontent/grouped_blogs_controller.rb
|
442
463
|
- spec/dummy/app/controllers/pages_controller.rb
|
443
464
|
- spec/dummy/app/helpers/application_helper.rb
|
444
465
|
- spec/dummy/app/mailers/.gitkeep
|
@@ -446,6 +467,7 @@ test_files:
|
|
446
467
|
- spec/dummy/app/models/author.rb
|
447
468
|
- spec/dummy/app/models/blog.rb
|
448
469
|
- spec/dummy/app/models/comment.rb
|
470
|
+
- spec/dummy/app/models/grouped_blog.rb
|
449
471
|
- spec/dummy/app/views/layouts/application.html.erb
|
450
472
|
- spec/dummy/app/views/pages/index.html.erb
|
451
473
|
- spec/dummy/config.ru
|
@@ -472,6 +494,7 @@ test_files:
|
|
472
494
|
- spec/dummy/db/migrate/20140512085432_add_author_id_to_blogs.rb
|
473
495
|
- spec/dummy/db/migrate/20140512090832_create_authors.rb
|
474
496
|
- spec/dummy/db/migrate/20150219130156_add_active_to_blogs.rb
|
497
|
+
- spec/dummy/db/migrate/20160623142310_create_grouped_blogs.rb
|
475
498
|
- spec/dummy/lib/assets/.gitkeep
|
476
499
|
- spec/dummy/public/404.html
|
477
500
|
- spec/dummy/public/422.html
|
@@ -482,6 +505,7 @@ test_files:
|
|
482
505
|
- spec/dummy/test/unit/comments_test.rb
|
483
506
|
- spec/factories.rb
|
484
507
|
- spec/features/export_spec.rb
|
508
|
+
- spec/features/grouped_resources_index_spec.rb
|
485
509
|
- spec/features/login_spec.rb
|
486
510
|
- spec/features/menu_spec.rb
|
487
511
|
- spec/features/nested_resource_spec.rb
|
data/Gemfile
DELETED