manage 1.3.21 → 1.3.22
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
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 80ddb3f33e8c26c57deb60f1eae3ad8470601c35
|
4
|
+
data.tar.gz: a4c557c81b2a8c491c5bc369cbf545355dda8358
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: b7b579db7b3ba7aaf89e4cb32b9540563a11dcdef91d061812c060286a1b5ff86f483cd9f460a8b03f779f167fb1357ccef4986969f0da1451eb9cf08f31a70a
|
7
|
+
data.tar.gz: 4cf49d981a924481c665541ef7d9643d20704d9c6e8bb923e0c8d6dc301a6133d6fcd993b0d38feca878a4d04f98df0081fdeb4323f5e575ee5122872b8ef492
|
@@ -1,45 +1,50 @@
|
|
1
|
-
.main {
|
2
|
-
margin: 0 10px;
|
3
|
-
}
|
4
|
-
|
5
|
-
.row {
|
6
|
-
width: auto;
|
7
|
-
max-width: none;
|
8
|
-
margin-left: -10px;
|
9
|
-
margin-right: -10px;
|
10
|
-
margin-bottom: 0;
|
11
|
-
}
|
12
|
-
.row .columns, .row .row .columns {
|
13
|
-
padding-left: 10px;
|
14
|
-
padding-right: 10px;
|
15
|
-
}
|
16
|
-
|
17
|
-
table {
|
18
|
-
width: 100%;
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
}
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
}
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
-
|
37
|
-
|
38
|
-
}
|
39
|
-
|
40
|
-
|
41
|
-
|
42
|
-
|
43
|
-
|
44
|
-
|
1
|
+
.main {
|
2
|
+
margin: 0 10px;
|
3
|
+
}
|
4
|
+
|
5
|
+
.row {
|
6
|
+
width: auto;
|
7
|
+
max-width: none;
|
8
|
+
margin-left: -10px;
|
9
|
+
margin-right: -10px;
|
10
|
+
margin-bottom: 0;
|
11
|
+
}
|
12
|
+
.row .columns, .row .row .columns {
|
13
|
+
padding-left: 10px;
|
14
|
+
padding-right: 10px;
|
15
|
+
}
|
16
|
+
|
17
|
+
table {
|
18
|
+
width: 100%;
|
19
|
+
|
20
|
+
td {
|
21
|
+
max-width: 700px;
|
22
|
+
word-break: break-word;
|
23
|
+
}
|
24
|
+
|
25
|
+
ul.inline-list {
|
26
|
+
margin-bottom: 0;
|
27
|
+
line-height: inherit;
|
28
|
+
}
|
29
|
+
}
|
30
|
+
|
31
|
+
.pagination li.active {
|
32
|
+
@extend .current;
|
33
|
+
}
|
34
|
+
|
35
|
+
body.index {
|
36
|
+
.panel {
|
37
|
+
padding: 0 10px;
|
38
|
+
}
|
39
|
+
|
40
|
+
fieldset {
|
41
|
+
margin: 0;
|
42
|
+
}
|
43
|
+
}
|
44
|
+
|
45
|
+
|
46
|
+
.collection_actions {
|
47
|
+
form {
|
48
|
+
display: inline-block;
|
49
|
+
}
|
45
50
|
}
|
@@ -1,125 +1,125 @@
|
|
1
|
-
require_dependency "manage/application_controller"
|
2
|
-
require_dependency 'kaminari'
|
3
|
-
|
4
|
-
class Manage::ResourceController < Manage::ApplicationController
|
5
|
-
inherit_resources
|
6
|
-
|
7
|
-
cattr_accessor :per_page
|
8
|
-
|
9
|
-
self.responder = Manage::Responder
|
10
|
-
|
11
|
-
layout 'manage/application'
|
12
|
-
|
13
|
-
respond_to :html
|
14
|
-
|
15
|
-
helper_method :list_index_fields, :list_edit_fields, :list_search_fields, :list_action_links, :resource_actions, :collection_actions
|
16
|
-
|
17
|
-
def end_of_association_chain
|
18
|
-
if self.resources_configuration[:self][:search_fields].blank?
|
19
|
-
self.class.search_fields :all
|
20
|
-
end
|
21
|
-
|
22
|
-
config = self.resources_configuration[:self]
|
23
|
-
@search = config[:search].new(clean_search_params(params[:f]))
|
24
|
-
|
25
|
-
@search.results
|
26
|
-
end
|
27
|
-
|
28
|
-
protected
|
29
|
-
|
30
|
-
def clean_search_params(search_params)
|
31
|
-
return {} unless search_params.is_a?(Hash)
|
32
|
-
search_params = search_params.dup
|
33
|
-
search_params.delete_if do |key, value|
|
34
|
-
value == ''
|
35
|
-
end
|
36
|
-
search_params
|
37
|
-
end
|
38
|
-
|
39
|
-
def collection
|
40
|
-
assocation = end_of_association_chain.page(params[:page] || 1)
|
41
|
-
per_page ? assocation.per(per_page) : assocation
|
42
|
-
end
|
43
|
-
|
44
|
-
def permitted_params
|
45
|
-
params.permit!
|
46
|
-
end
|
47
|
-
|
48
|
-
def self.index_fields(*fields)
|
49
|
-
setup_fields(:index_fields, *fields)
|
50
|
-
end
|
51
|
-
|
52
|
-
def self.edit_fields(*fields)
|
53
|
-
setup_fields(:edit_fields, *fields)
|
54
|
-
end
|
55
|
-
|
56
|
-
def self.search_fields(*fields)
|
57
|
-
setup_fields(:search_fields, *fields)
|
58
|
-
|
59
|
-
config = self.resources_configuration[:self]
|
60
|
-
config[:search] = Manage::Fields::Searcher.generate_search_object(resource_class, config[:search_fields])
|
61
|
-
end
|
62
|
-
|
63
|
-
def self.action_links(*fields)
|
64
|
-
setup_fields(:action_links, *fields)
|
65
|
-
end
|
66
|
-
|
67
|
-
def list_index_fields
|
68
|
-
list_fields(:index_fields)
|
69
|
-
end
|
70
|
-
|
71
|
-
def list_edit_fields
|
72
|
-
list_fields(:edit_fields)
|
73
|
-
end
|
74
|
-
|
75
|
-
def list_search_fields
|
76
|
-
list_fields(:search_fields)
|
77
|
-
end
|
78
|
-
|
79
|
-
def list_action_links
|
80
|
-
if self.resources_configuration[:self][:action_links].blank?
|
81
|
-
[]
|
82
|
-
else
|
83
|
-
self.resources_configuration[:self][:action_links]
|
84
|
-
end
|
85
|
-
end
|
86
|
-
|
87
|
-
#
|
88
|
-
# This doubles the list_action_links.
|
89
|
-
# It provides actions on existing resource.
|
90
|
-
# actions are used in index/show/edit screens
|
91
|
-
# returns html string
|
92
|
-
def resource_actions resource
|
93
|
-
nil
|
94
|
-
end
|
95
|
-
|
96
|
-
# This method provides links on which to submit all collection / selected items
|
97
|
-
# Example:
|
98
|
-
#
|
99
|
-
def collection_actions resource
|
100
|
-
nil
|
101
|
-
end
|
102
|
-
|
103
|
-
private
|
104
|
-
def self.setup_fields(key, *fields)
|
105
|
-
# :all means all the fields - default
|
106
|
-
if not fields.first.is_a?(Hash) and fields.first.to_sym == :all
|
107
|
-
options = fields.extract_options!
|
108
|
-
options[:except] ||= []
|
109
|
-
options[:include] ||= []
|
110
|
-
|
111
|
-
self.resources_configuration[:self][key] = (resource_class.attribute_names + Array(options[:include])) - Array(options[:except]).map(&:to_s)
|
112
|
-
else
|
113
|
-
self.resources_configuration[:self][key] = fields
|
114
|
-
end
|
115
|
-
end
|
116
|
-
|
117
|
-
def list_fields(key)
|
118
|
-
if self.resources_configuration[:self][key].blank?
|
119
|
-
resource_class.attribute_names - %w(id created_at updated_at)
|
120
|
-
else
|
121
|
-
self.resources_configuration[:self][key]
|
122
|
-
end
|
123
|
-
end
|
124
|
-
|
125
|
-
end
|
1
|
+
require_dependency "manage/application_controller"
|
2
|
+
require_dependency 'kaminari'
|
3
|
+
|
4
|
+
class Manage::ResourceController < Manage::ApplicationController
|
5
|
+
inherit_resources
|
6
|
+
|
7
|
+
cattr_accessor :per_page
|
8
|
+
|
9
|
+
self.responder = Manage::Responder
|
10
|
+
|
11
|
+
layout 'manage/application'
|
12
|
+
|
13
|
+
respond_to :html
|
14
|
+
|
15
|
+
helper_method :list_index_fields, :list_edit_fields, :list_search_fields, :list_action_links, :resource_actions, :collection_actions
|
16
|
+
|
17
|
+
def end_of_association_chain
|
18
|
+
if self.resources_configuration[:self][:search_fields].blank?
|
19
|
+
self.class.search_fields :all
|
20
|
+
end
|
21
|
+
|
22
|
+
config = self.resources_configuration[:self]
|
23
|
+
@search = config[:search].new(clean_search_params(params[:f]))
|
24
|
+
|
25
|
+
@search.results
|
26
|
+
end
|
27
|
+
|
28
|
+
protected
|
29
|
+
|
30
|
+
def clean_search_params(search_params)
|
31
|
+
return {} unless search_params.is_a?(Hash)
|
32
|
+
search_params = search_params.dup
|
33
|
+
search_params.delete_if do |key, value|
|
34
|
+
value == ''
|
35
|
+
end
|
36
|
+
search_params
|
37
|
+
end
|
38
|
+
|
39
|
+
def collection
|
40
|
+
assocation = end_of_association_chain.page(params[:page] || 1)
|
41
|
+
per_page ? assocation.per(per_page) : assocation
|
42
|
+
end
|
43
|
+
|
44
|
+
def permitted_params
|
45
|
+
params.permit!
|
46
|
+
end
|
47
|
+
|
48
|
+
def self.index_fields(*fields)
|
49
|
+
setup_fields(:index_fields, *fields)
|
50
|
+
end
|
51
|
+
|
52
|
+
def self.edit_fields(*fields)
|
53
|
+
setup_fields(:edit_fields, *fields)
|
54
|
+
end
|
55
|
+
|
56
|
+
def self.search_fields(*fields)
|
57
|
+
setup_fields(:search_fields, *fields)
|
58
|
+
|
59
|
+
config = self.resources_configuration[:self]
|
60
|
+
config[:search] = Manage::Fields::Searcher.generate_search_object(resource_class, config[:search_fields])
|
61
|
+
end
|
62
|
+
|
63
|
+
def self.action_links(*fields)
|
64
|
+
setup_fields(:action_links, *fields)
|
65
|
+
end
|
66
|
+
|
67
|
+
def list_index_fields
|
68
|
+
list_fields(:index_fields)
|
69
|
+
end
|
70
|
+
|
71
|
+
def list_edit_fields
|
72
|
+
list_fields(:edit_fields)
|
73
|
+
end
|
74
|
+
|
75
|
+
def list_search_fields
|
76
|
+
list_fields(:search_fields)
|
77
|
+
end
|
78
|
+
|
79
|
+
def list_action_links
|
80
|
+
if self.resources_configuration[:self][:action_links].blank?
|
81
|
+
[]
|
82
|
+
else
|
83
|
+
self.resources_configuration[:self][:action_links]
|
84
|
+
end
|
85
|
+
end
|
86
|
+
|
87
|
+
#
|
88
|
+
# This doubles the list_action_links.
|
89
|
+
# It provides actions on existing resource.
|
90
|
+
# actions are used in index/show/edit screens
|
91
|
+
# returns html string
|
92
|
+
def resource_actions resource
|
93
|
+
nil
|
94
|
+
end
|
95
|
+
|
96
|
+
# This method provides links on which to submit all collection / selected items
|
97
|
+
# Example:
|
98
|
+
#
|
99
|
+
def collection_actions resource
|
100
|
+
nil
|
101
|
+
end
|
102
|
+
|
103
|
+
private
|
104
|
+
def self.setup_fields(key, *fields)
|
105
|
+
# :all means all the fields - default
|
106
|
+
if not fields.first.is_a?(Hash) and fields.first.to_sym == :all
|
107
|
+
options = fields.extract_options!
|
108
|
+
options[:except] ||= []
|
109
|
+
options[:include] ||= []
|
110
|
+
|
111
|
+
self.resources_configuration[:self][key] = (resource_class.attribute_names + Array(options[:include])) - Array(options[:except]).map(&:to_s)
|
112
|
+
else
|
113
|
+
self.resources_configuration[:self][key] = fields
|
114
|
+
end
|
115
|
+
end
|
116
|
+
|
117
|
+
def list_fields(key)
|
118
|
+
if self.resources_configuration[:self][key].blank?
|
119
|
+
resource_class.attribute_names - %w(id created_at updated_at)
|
120
|
+
else
|
121
|
+
self.resources_configuration[:self][key]
|
122
|
+
end
|
123
|
+
end
|
124
|
+
|
125
|
+
end
|
@@ -1,22 +1,22 @@
|
|
1
|
-
= manage_form_for @search, as: :f, method: :get, url: "#{resource_class.name.underscore.pluralize}", html: {id: 'search-form'} do |f|
|
2
|
-
fieldset
|
3
|
-
legend Filter
|
4
|
-
- list_search_fields.each do |field|
|
5
|
-
.row
|
6
|
-
.columns.large-12
|
7
|
-
- label_text = resource_class.human_attribute_name(field)
|
8
|
-
- if resource_class.columns_hash[field.to_s].blank?
|
9
|
-
label #{label_text}
|
10
|
-
= f.search_field field.to_sym, placeholder: label_text
|
11
|
-
- elsif resource_class.columns_hash[field.to_s].type == :datetime
|
12
|
-
label #{label_text}
|
13
|
-
= f.date_field field.to_sym, placeholder: label_text
|
14
|
-
- elsif resource_class.columns_hash[field.to_s].type == :integer
|
15
|
-
label #{label_text}
|
16
|
-
= f.number_field field.to_sym, placeholder: label_text
|
17
|
-
- else
|
18
|
-
label #{label_text}
|
19
|
-
= f.search_field field.to_sym, placeholder: label_text
|
20
|
-
.row
|
21
|
-
.columns.large-12
|
22
|
-
= f.submit 'Search', class: 'button small'
|
1
|
+
= manage_form_for @search, as: :f, method: :get, url: "#{resource_class.name.underscore.pluralize}", html: {id: 'search-form'} do |f|
|
2
|
+
fieldset
|
3
|
+
legend Filter
|
4
|
+
- list_search_fields.each do |field|
|
5
|
+
.row
|
6
|
+
.columns.large-12
|
7
|
+
- label_text = resource_class.human_attribute_name(field)
|
8
|
+
- if resource_class.columns_hash[field.to_s].blank?
|
9
|
+
label #{label_text}
|
10
|
+
= f.search_field field.to_sym, placeholder: label_text
|
11
|
+
- elsif resource_class.columns_hash[field.to_s].type == :datetime
|
12
|
+
label #{label_text}
|
13
|
+
= f.date_field field.to_sym, placeholder: label_text, value: (f.object.params[field.to_s] ? Date.parse(f.object.params[field.to_s]) : nil)
|
14
|
+
- elsif resource_class.columns_hash[field.to_s].type == :integer
|
15
|
+
label #{label_text}
|
16
|
+
= f.number_field field.to_sym, placeholder: label_text
|
17
|
+
- else
|
18
|
+
label #{label_text}
|
19
|
+
= f.search_field field.to_sym, placeholder: label_text
|
20
|
+
.row
|
21
|
+
.columns.large-12
|
22
|
+
= f.submit 'Search', class: 'button small'
|
@@ -1,51 +1,51 @@
|
|
1
|
-
module Manage
|
2
|
-
module Fields
|
3
|
-
class Searcher
|
4
|
-
class << self
|
5
|
-
def generate_search_object(resource_class, search_fields)
|
6
|
-
search_class = Class.new do
|
7
|
-
include SearchObject.module(:model, :sorting)
|
8
|
-
|
9
|
-
def escape_search_term(term)
|
10
|
-
"%#{term.gsub(/\s+/, '%')}%".downcase
|
11
|
-
end
|
12
|
-
|
13
|
-
def parse_date(date)
|
14
|
-
Date.strptime(date, '%Y-%m-%d') rescue nil
|
15
|
-
end
|
16
|
-
end
|
17
|
-
|
18
|
-
|
19
|
-
search_class.scope { resource_class.all }
|
20
|
-
Object.const_set("#{resource_class.name.gsub(/:/, '')}Searcher", search_class)
|
21
|
-
|
22
|
-
search_fields.select {|f| not f.to_s.include?('.')}.each do |field|
|
23
|
-
field_type = resource_class.columns_hash[field.to_s].type
|
24
|
-
case field_type
|
25
|
-
when *[:text, :string]
|
26
|
-
search_class.option field.to_sym do |scope, value|
|
27
|
-
value.blank? ? scope : scope.where("lower(#{field.to_s}) LIKE lower(?)", escape_search_term(value))
|
28
|
-
end
|
29
|
-
when :datetime
|
30
|
-
search_class.option field.to_sym do |scope, value|
|
31
|
-
date = parse_date value
|
32
|
-
scope.where("DATE(#{field.to_s}) >= ?", date) if date.present?
|
33
|
-
end
|
34
|
-
when :integer
|
35
|
-
search_class.option field.to_sym
|
36
|
-
when :boolean
|
37
|
-
search_class.option field.to_sym
|
38
|
-
else
|
39
|
-
search_class.option field.to_sym do |scope, value|
|
40
|
-
scope.where "#{field.to_s} = '?'", escape_search_term(value)
|
41
|
-
end
|
42
|
-
end
|
43
|
-
end
|
44
|
-
|
45
|
-
search_class
|
46
|
-
end
|
47
|
-
end
|
48
|
-
end
|
49
|
-
end
|
50
|
-
end
|
51
|
-
|
1
|
+
module Manage
|
2
|
+
module Fields
|
3
|
+
class Searcher
|
4
|
+
class << self
|
5
|
+
def generate_search_object(resource_class, search_fields)
|
6
|
+
search_class = Class.new do
|
7
|
+
include SearchObject.module(:model, :sorting)
|
8
|
+
|
9
|
+
def escape_search_term(term)
|
10
|
+
"%#{term.gsub(/\s+/, '%')}%".downcase
|
11
|
+
end
|
12
|
+
|
13
|
+
def parse_date(date)
|
14
|
+
Date.strptime(date, '%Y-%m-%d') rescue nil
|
15
|
+
end
|
16
|
+
end
|
17
|
+
|
18
|
+
|
19
|
+
search_class.scope { resource_class.all }
|
20
|
+
Object.const_set("#{resource_class.name.gsub(/:/, '')}Searcher", search_class)
|
21
|
+
|
22
|
+
search_fields.select {|f| not f.to_s.include?('.')}.each do |field|
|
23
|
+
field_type = resource_class.columns_hash[field.to_s].type
|
24
|
+
case field_type
|
25
|
+
when *[:text, :string]
|
26
|
+
search_class.option field.to_sym do |scope, value|
|
27
|
+
value.blank? ? scope : scope.where("lower(#{field.to_s}) LIKE lower(?)", escape_search_term(value))
|
28
|
+
end
|
29
|
+
when :datetime
|
30
|
+
search_class.option field.to_sym do |scope, value|
|
31
|
+
date = parse_date value
|
32
|
+
scope.where("DATE(#{field.to_s}) >= ?", date) if date.present?
|
33
|
+
end
|
34
|
+
when :integer
|
35
|
+
search_class.option field.to_sym
|
36
|
+
when :boolean
|
37
|
+
search_class.option field.to_sym
|
38
|
+
else
|
39
|
+
search_class.option field.to_sym do |scope, value|
|
40
|
+
scope.where "#{field.to_s} = '?'", escape_search_term(value)
|
41
|
+
end
|
42
|
+
end
|
43
|
+
end
|
44
|
+
|
45
|
+
search_class
|
46
|
+
end
|
47
|
+
end
|
48
|
+
end
|
49
|
+
end
|
50
|
+
end
|
51
|
+
|
data/lib/manage/version.rb
CHANGED
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: manage
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.3.
|
4
|
+
version: 1.3.22
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Empower United
|
@@ -9,7 +9,7 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2014-02-
|
12
|
+
date: 2014-02-18 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: rails
|