simple-admin 0.1.0.pre.alpha
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +7 -0
- data/.codeclimate.yml +3 -0
- data/.gitattributes +1 -0
- data/.gitignore +17 -0
- data/.hound.yml +2 -0
- data/.inch.yml +4 -0
- data/.rspec +2 -0
- data/.rubocop.yml +68 -0
- data/.travis.yml +11 -0
- data/CODE_OF_CONDUCT.md +74 -0
- data/CONTRIBUTING.md +51 -0
- data/Gemfile +27 -0
- data/LICENSE.txt +21 -0
- data/README.md +87 -0
- data/Rakefile +20 -0
- data/app/assets/fonts/Simple-Line-Icons.woff +0 -0
- data/app/assets/javascripts/simple_admin/application.js +28 -0
- data/app/assets/stylesheets/simple_admin/application.scss +48 -0
- data/app/assets/stylesheets/simple_admin/global/buttons.css +473 -0
- data/app/assets/stylesheets/simple_admin/global/errors.css +12 -0
- data/app/assets/stylesheets/simple_admin/global/fontawesome-icons.css +3024 -0
- data/app/assets/stylesheets/simple_admin/global/fonts.css +560 -0
- data/app/assets/stylesheets/simple_admin/global/jquery.dataTables.css +169 -0
- data/app/assets/stylesheets/simple_admin/global/pagination.css +11 -0
- data/app/assets/stylesheets/simple_admin/global/reset.css +197 -0
- data/app/assets/stylesheets/simple_admin/global/simple-line-icons.css +672 -0
- data/app/assets/stylesheets/simple_admin/global/table.css +214 -0
- data/app/assets/stylesheets/simple_admin/global/tags.css +87 -0
- data/app/assets/stylesheets/simple_admin/page/aside.css +324 -0
- data/app/assets/stylesheets/simple_admin/page/header.css +332 -0
- data/app/assets/stylesheets/simple_admin/page/main-container.css +222 -0
- data/app/assets/stylesheets/simple_admin/page/sign_in.css +15 -0
- data/app/assets/stylesheets/simple_admin/tabs.css +26 -0
- data/app/controllers/simple_admin/admin/application_controller.rb +21 -0
- data/app/controllers/simple_admin/admin/search_controller.rb +29 -0
- data/app/controllers/simple_admin/admin/system/entities_controller.rb +37 -0
- data/app/controllers/simple_admin/admin/system/entity_field_types_controller.rb +31 -0
- data/app/controllers/simple_admin/admin/system/entity_fields_controller.rb +20 -0
- data/app/helpers/simple_admin_helper.rb +15 -0
- data/app/models/simple_admin/base.rb +14 -0
- data/app/models/simple_admin/entity.rb +50 -0
- data/app/models/simple_admin/entity_field.rb +77 -0
- data/app/models/simple_admin/entity_field_setting.rb +5 -0
- data/app/models/simple_admin/entity_field_type.rb +79 -0
- data/app/views/kaminari/_next_page.html.erb +5 -0
- data/app/views/kaminari/_page.html.erb +3 -0
- data/app/views/kaminari/_paginator.html.erb +26 -0
- data/app/views/kaminari/_prev_page.html.erb +5 -0
- data/app/views/layouts/devise.html.erb +11 -0
- data/app/views/layouts/simple_admin.html.erb +28 -0
- data/app/views/simple_admin/admin/resource/_form.html.erb +19 -0
- data/app/views/simple_admin/admin/resource/edit.html.erb +21 -0
- data/app/views/simple_admin/admin/resource/index.html.erb +13 -0
- data/app/views/simple_admin/admin/resource/new.html.erb +21 -0
- data/app/views/simple_admin/admin/search/index.html.erb +55 -0
- data/app/views/simple_admin/admin/shared/_aside.html.erb +46 -0
- data/app/views/simple_admin/admin/shared/_footer.html.erb +5 -0
- data/app/views/simple_admin/admin/shared/_header.html.erb +7 -0
- data/app/views/simple_admin/admin/shared/collection/_header.html.erb +12 -0
- data/app/views/simple_admin/admin/shared/collection/_table_body.html.erb +29 -0
- data/app/views/simple_admin/admin/shared/collection/_table_header.html.erb +11 -0
- data/app/views/simple_admin/admin/shared/components/_logout.html.erb +6 -0
- data/app/views/simple_admin/admin/shared/components/_search.html.erb +14 -0
- data/app/views/simple_admin/admin/shared/messages/_errors.html.erb +9 -0
- data/app/views/simple_admin/admin/shared/messages/_flash.html.erb +8 -0
- data/app/views/simple_admin/admin/system/entities/_form.html.erb +32 -0
- data/app/views/simple_admin/admin/system/entities/edit.html.erb +27 -0
- data/app/views/simple_admin/admin/system/entities/entity_fields/_form.html.erb +62 -0
- data/app/views/simple_admin/admin/system/entities/entity_fields/edit.html.erb +9 -0
- data/app/views/simple_admin/admin/system/entities/entity_fields/index.html.erb +39 -0
- data/app/views/simple_admin/admin/system/entities/entity_fields/new.html.erb +12 -0
- data/app/views/simple_admin/admin/system/entities/index.html.erb +59 -0
- data/app/views/simple_admin/admin/system/entities/new.html.erb +21 -0
- data/app/views/simple_admin/admin/system/entity_field_types/_form.html.erb +21 -0
- data/app/views/simple_admin/admin/system/entity_field_types/edit.html.erb +24 -0
- data/app/views/simple_admin/admin/system/entity_field_types/index.html.erb +55 -0
- data/app/views/simple_admin/admin/system/entity_field_types/new.html.erb +21 -0
- data/app/views/simple_admin/admin/system/entity_fields/create.js.erb +18 -0
- data/app/views/simple_admin/admin/system/entity_fields/destroy.js.erb +18 -0
- data/app/views/simple_admin/admin/system/entity_fields/update.js.erb +1 -0
- data/app/views/simple_admin/fields/boolean/_form.html.erb +6 -0
- data/app/views/simple_admin/fields/boolean/_index.html.erb +5 -0
- data/app/views/simple_admin/fields/image/_collection.html.erb +5 -0
- data/app/views/simple_admin/fields/image/_form.html.erb +6 -0
- data/app/views/simple_admin/fields/number/_collection.html.erb +5 -0
- data/app/views/simple_admin/fields/number/_form.html.erb +6 -0
- data/app/views/simple_admin/fields/password/_form.html.erb +6 -0
- data/app/views/simple_admin/fields/relation/_collection.html.erb +3 -0
- data/app/views/simple_admin/fields/relation/_form.html.erb +6 -0
- data/app/views/simple_admin/fields/select/_form.html.erb +8 -0
- data/app/views/simple_admin/fields/select/_index.html.erb +5 -0
- data/app/views/simple_admin/fields/string/_collection.html.erb +3 -0
- data/app/views/simple_admin/fields/string/_form.html.erb +6 -0
- data/app/views/simple_admin/fields/tags/_collection.html.erb +3 -0
- data/app/views/simple_admin/fields/tags/_form.html.erb +6 -0
- data/app/views/simple_admin/fields/text/_collection.html.erb +3 -0
- data/app/views/simple_admin/fields/text/_form.html.erb +6 -0
- data/bin/bundle +4 -0
- data/bin/rails +5 -0
- data/codecov.yml +21 -0
- data/config/locales/en.yml +23 -0
- data/config/locales/ru.yml +20 -0
- data/config/routes.rb +19 -0
- data/lib/generators/simple_admin/install_generator.rb +41 -0
- data/lib/generators/simple_admin/migration_generator.rb +24 -0
- data/lib/generators/templates/application_controller.rb +20 -0
- data/lib/generators/templates/initializers/simple_admin.rb.erb +3 -0
- data/lib/generators/templates/migrations/core_data_migration.rb +12 -0
- data/lib/generators/templates/migrations/core_migrations/entities_migration.rb +13 -0
- data/lib/generators/templates/migrations/core_migrations/entity_field_settings_migration.rb +12 -0
- data/lib/generators/templates/migrations/core_migrations/entity_field_types_migration.rb +12 -0
- data/lib/generators/templates/migrations/core_migrations/entity_fields_migration.rb +18 -0
- data/lib/generators/templates/user.rb +24 -0
- data/lib/generators/templates/views/devise/registrations/new.html.erb +46 -0
- data/lib/generators/templates/views/devise/sessions/new.html.erb +35 -0
- data/lib/generators/templates/views/devise/shared/_footer.html.erb +3 -0
- data/lib/simple_admin.rb +39 -0
- data/lib/simple_admin/config.rb +19 -0
- data/lib/simple_admin/engine.rb +15 -0
- data/lib/simple_admin/helpers/boolean_helper.rb +36 -0
- data/lib/simple_admin/helpers/url_helper.rb +29 -0
- data/lib/simple_admin/refinements/boolean.rb +36 -0
- data/lib/simple_admin/resource_controller/actions_builder.rb +40 -0
- data/lib/simple_admin/resource_controller/controller_builder.rb +31 -0
- data/lib/simple_admin/resource_controller/crudify.rb +111 -0
- data/lib/simple_admin/resource_controller/crudify_dynamic_resource.rb +55 -0
- data/lib/simple_admin/resource_controller/dynamic_fields.rb +53 -0
- data/lib/simple_admin/search.rb +23 -0
- data/lib/simple_admin/version.rb +3 -0
- data/simple_admin.gemspec +38 -0
- data/vendor/assets/fonts/Simple-Line-Icons.eot +0 -0
- data/vendor/assets/fonts/Simple-Line-Icons.ttf +0 -0
- data/vendor/assets/fonts/Simple-Line-Icons.woff +0 -0
- data/vendor/assets/fonts/fontawesome-webfont.eot +0 -0
- data/vendor/assets/fonts/fontawesome-webfont.svg +2671 -0
- data/vendor/assets/fonts/fontawesome-webfont.ttf +0 -0
- data/vendor/assets/fonts/fontawesome-webfont.woff +0 -0
- data/vendor/assets/fonts/fontawesome-webfont.woff2 +0 -0
- metadata +307 -0
@@ -0,0 +1,36 @@
|
|
1
|
+
module SimpleAdmin
|
2
|
+
module Helpers
|
3
|
+
module BooleanHelper
|
4
|
+
extend ActiveSupport::Concern
|
5
|
+
|
6
|
+
included do
|
7
|
+
using Refinements::Boolean
|
8
|
+
|
9
|
+
class << self
|
10
|
+
def boolean_fields(*model_column_names)
|
11
|
+
model_column_names.each do |column_name|
|
12
|
+
build_humanized_method!(column_name)
|
13
|
+
build_predicate_method!(column_name)
|
14
|
+
end
|
15
|
+
end
|
16
|
+
|
17
|
+
private
|
18
|
+
|
19
|
+
def build_humanized_method!(column_name)
|
20
|
+
postfix = :humanized
|
21
|
+
|
22
|
+
define_method "#{column_name}_#{postfix}" do
|
23
|
+
public_send(column_name).humanize
|
24
|
+
end
|
25
|
+
end
|
26
|
+
|
27
|
+
def build_predicate_method!(column_name)
|
28
|
+
define_method "#{column_name}?" do
|
29
|
+
public_send(column_name)
|
30
|
+
end
|
31
|
+
end
|
32
|
+
end
|
33
|
+
end
|
34
|
+
end
|
35
|
+
end
|
36
|
+
end
|
@@ -0,0 +1,29 @@
|
|
1
|
+
module SimpleAdmin
|
2
|
+
module Helpers
|
3
|
+
module UrlHelper
|
4
|
+
def resource_link(resource, method, namespace=:admin)
|
5
|
+
singular_name = resource.class.model_name.element
|
6
|
+
plural_name = singular_name.pluralize
|
7
|
+
|
8
|
+
postfix = :path
|
9
|
+
|
10
|
+
case method
|
11
|
+
when :index
|
12
|
+
resource_path = "#{namespace}_#{plural_name}_#{postfix}"
|
13
|
+
when :new
|
14
|
+
resource_path = "#{method}_#{namespace}_#{singular_name}_#{postfix}"
|
15
|
+
when :create
|
16
|
+
resource_path = "#{namespace}_#{plural_name}_#{postfix}"
|
17
|
+
when :edit
|
18
|
+
resource_path = "#{method}_#{namespace}_#{singular_name}_#{postfix}"
|
19
|
+
when :update
|
20
|
+
resource_path = "#{namespace}_#{singular_name}_#{postfix}"
|
21
|
+
when :destroy
|
22
|
+
resource_path = "#{namespace}_#{singular_name}_#{postfix}"
|
23
|
+
end
|
24
|
+
|
25
|
+
public_send(resource_path, resource)
|
26
|
+
end
|
27
|
+
end
|
28
|
+
end
|
29
|
+
end
|
@@ -0,0 +1,36 @@
|
|
1
|
+
module SimpleAdmin
|
2
|
+
module Refinements
|
3
|
+
module Boolean
|
4
|
+
# Module with refinements for Boolean classes
|
5
|
+
# @since 0.1.0
|
6
|
+
|
7
|
+
refine TrueClass do
|
8
|
+
# Refinement for TrueClass, add humanize method
|
9
|
+
#
|
10
|
+
# @example True class humanize
|
11
|
+
# true.humanize
|
12
|
+
# => Yes
|
13
|
+
# true.humanize('Example')
|
14
|
+
# => Example
|
15
|
+
#
|
16
|
+
def humanize(format='Yes')
|
17
|
+
format
|
18
|
+
end
|
19
|
+
end
|
20
|
+
|
21
|
+
refine FalseClass do
|
22
|
+
# Refinement for FalseClass, add humanize method
|
23
|
+
#
|
24
|
+
# @example False class humanize
|
25
|
+
# false.humanize
|
26
|
+
# => No
|
27
|
+
# true.humanize('Example')
|
28
|
+
# => Example
|
29
|
+
#
|
30
|
+
def humanize(format='No')
|
31
|
+
format
|
32
|
+
end
|
33
|
+
end
|
34
|
+
end
|
35
|
+
end
|
36
|
+
end
|
@@ -0,0 +1,40 @@
|
|
1
|
+
module SimpleAdmin
|
2
|
+
module ResourceController
|
3
|
+
class ActionsBuilder
|
4
|
+
# Build CRUD actions for controller
|
5
|
+
#
|
6
|
+
# @since 0.1.0
|
7
|
+
|
8
|
+
def self.initialize_actions!(controller_klass, model_name)
|
9
|
+
controller_klass.class_eval do
|
10
|
+
include ResourceController::DynamicFields
|
11
|
+
include ResourceController::Crudify
|
12
|
+
|
13
|
+
include Helpers::UrlHelper
|
14
|
+
|
15
|
+
def after_create_path
|
16
|
+
resource_link(model_klass.new, :index)
|
17
|
+
end
|
18
|
+
|
19
|
+
def after_update_path
|
20
|
+
resource_link(model_klass.new, :index)
|
21
|
+
end
|
22
|
+
|
23
|
+
def after_destroy_path
|
24
|
+
resource_link(model_klass.new, :index)
|
25
|
+
end
|
26
|
+
|
27
|
+
define_method :model_klass do
|
28
|
+
model_name.constantize
|
29
|
+
end
|
30
|
+
|
31
|
+
private
|
32
|
+
|
33
|
+
def template_path(controller_action=nil)
|
34
|
+
"simple_admin/admin/resource/#{controller_action || params[:action]}"
|
35
|
+
end
|
36
|
+
end
|
37
|
+
end
|
38
|
+
end
|
39
|
+
end
|
40
|
+
end
|
@@ -0,0 +1,31 @@
|
|
1
|
+
module SimpleAdmin
|
2
|
+
module ResourceController
|
3
|
+
class ControllerBuilder
|
4
|
+
# Build controller class by resource name
|
5
|
+
# @example ArticlesController
|
6
|
+
# controller_builder = SimpleAdmin::ResourceController::ControllerBuilder.new(:articles)
|
7
|
+
# controller_builder.build!
|
8
|
+
#
|
9
|
+
# => controller_builder.controller_klass
|
10
|
+
# => SimpleAdmin::Admin::ArticlesController
|
11
|
+
#
|
12
|
+
# @since 0.1.0
|
13
|
+
|
14
|
+
attr_reader :controller_name
|
15
|
+
|
16
|
+
def initialize(resource_name)
|
17
|
+
@controller_name = "#{resource_name.camelize}Controller"
|
18
|
+
end
|
19
|
+
|
20
|
+
def build!
|
21
|
+
unless SimpleAdmin::Admin.const_defined?(controller_name)
|
22
|
+
Admin.const_set(controller_name, Class.new(SimpleAdmin::Admin::ApplicationController))
|
23
|
+
end
|
24
|
+
end
|
25
|
+
|
26
|
+
def controller_klass
|
27
|
+
Admin.const_get(controller_name)
|
28
|
+
end
|
29
|
+
end
|
30
|
+
end
|
31
|
+
end
|
@@ -0,0 +1,111 @@
|
|
1
|
+
module SimpleAdmin
|
2
|
+
module ResourceController
|
3
|
+
module Crudify
|
4
|
+
# Concern that include all CRUD methods
|
5
|
+
#
|
6
|
+
# @example
|
7
|
+
# class PostsController
|
8
|
+
# include SimpleAdmin::ResourceController::Crudify
|
9
|
+
#
|
10
|
+
# def model_klass
|
11
|
+
# SimpleAdmin::Post
|
12
|
+
# end
|
13
|
+
#
|
14
|
+
# def after_create_path
|
15
|
+
# admin_posts_path
|
16
|
+
# end
|
17
|
+
#
|
18
|
+
# def after_update_path
|
19
|
+
# admin_posts_path
|
20
|
+
# end
|
21
|
+
#
|
22
|
+
# def after_destroy_path
|
23
|
+
# admin_posts_path
|
24
|
+
# end
|
25
|
+
#
|
26
|
+
# private
|
27
|
+
#
|
28
|
+
# def resource_params
|
29
|
+
# params.require(:simple_admin_post).permit(:title, :description)
|
30
|
+
# end
|
31
|
+
# end
|
32
|
+
#
|
33
|
+
# @since 0.1.0
|
34
|
+
|
35
|
+
extend ActiveSupport::Concern
|
36
|
+
|
37
|
+
included do
|
38
|
+
def index
|
39
|
+
@resources = model_klass.page(params[:page]).per(per_page)
|
40
|
+
@resource_name = resource_name
|
41
|
+
|
42
|
+
render template_path
|
43
|
+
end
|
44
|
+
|
45
|
+
def new
|
46
|
+
@resource = model_klass.new
|
47
|
+
@resource_name = resource_name
|
48
|
+
|
49
|
+
render template_path
|
50
|
+
end
|
51
|
+
|
52
|
+
def edit
|
53
|
+
@resource = model_klass.find(params[:id])
|
54
|
+
@resource_name = resource_name
|
55
|
+
|
56
|
+
render template_path
|
57
|
+
end
|
58
|
+
|
59
|
+
def update
|
60
|
+
@resource = model_klass.find(params[:id])
|
61
|
+
|
62
|
+
if @resource.update(resource_params)
|
63
|
+
redirect_to after_update_path, notice: t('simple_admin.resource.update.success', resource_name: resource_name)
|
64
|
+
else
|
65
|
+
render template: template_path(:edit)
|
66
|
+
end
|
67
|
+
end
|
68
|
+
|
69
|
+
def create
|
70
|
+
@resource =
|
71
|
+
if defined?(resource_modificator)
|
72
|
+
resource_modificator.build(resource_params)
|
73
|
+
else
|
74
|
+
model_klass.new(resource_params)
|
75
|
+
end
|
76
|
+
|
77
|
+
if @resource.save
|
78
|
+
redirect_to after_create_path, notice: t('simple_admin.resource.create.success', resource_name: resource_name)
|
79
|
+
else
|
80
|
+
render template: template_path(:new)
|
81
|
+
end
|
82
|
+
end
|
83
|
+
|
84
|
+
def destroy
|
85
|
+
@resource = model_klass.find(params[:id])
|
86
|
+
@resource.destroy
|
87
|
+
|
88
|
+
redirect_to after_destroy_path, notice: t('simple_admin.resource.destroy.success', resource_name: resource_name)
|
89
|
+
end
|
90
|
+
|
91
|
+
private
|
92
|
+
|
93
|
+
def resource_params
|
94
|
+
params.require(resource_params_name).permit(resource_attributes)
|
95
|
+
end
|
96
|
+
|
97
|
+
def resource_name
|
98
|
+
model_klass.model_name.element.capitalize
|
99
|
+
end
|
100
|
+
|
101
|
+
def template_path(controller_action=nil)
|
102
|
+
"#{params[:controller]}/#{controller_action || params[:action]}"
|
103
|
+
end
|
104
|
+
|
105
|
+
def per_page
|
106
|
+
SimpleAdmin::Config.per_page
|
107
|
+
end
|
108
|
+
end
|
109
|
+
end
|
110
|
+
end
|
111
|
+
end
|
@@ -0,0 +1,55 @@
|
|
1
|
+
module SimpleAdmin
|
2
|
+
module ResourceController
|
3
|
+
module CrudifyDynamicResource
|
4
|
+
# Concern that include methods for remote actions
|
5
|
+
#
|
6
|
+
# @example
|
7
|
+
# class PostsController
|
8
|
+
# include SimpleAdmin::ResourceController::CrudifyDynamicResource
|
9
|
+
#
|
10
|
+
# def model_klass
|
11
|
+
# Post
|
12
|
+
# end
|
13
|
+
#
|
14
|
+
# private
|
15
|
+
#
|
16
|
+
# def resource_params
|
17
|
+
# params.require(:simple_admin_post).permit(:title, :description)
|
18
|
+
# end
|
19
|
+
# end
|
20
|
+
#
|
21
|
+
# @since 0.1.0
|
22
|
+
|
23
|
+
extend ActiveSupport::Concern
|
24
|
+
|
25
|
+
included do
|
26
|
+
def create
|
27
|
+
@resource = model_klass.new(resource_params)
|
28
|
+
@resource.save
|
29
|
+
|
30
|
+
respond_to do |format|
|
31
|
+
format.js { render layout: false }
|
32
|
+
end
|
33
|
+
end
|
34
|
+
|
35
|
+
def update
|
36
|
+
@resource = model_klass.find(params[:id])
|
37
|
+
@resource.update(resource_params)
|
38
|
+
|
39
|
+
respond_to do |format|
|
40
|
+
format.js { render layout: false }
|
41
|
+
end
|
42
|
+
end
|
43
|
+
|
44
|
+
def destroy
|
45
|
+
@resource = model_klass.find(params[:id])
|
46
|
+
@resource.destroy
|
47
|
+
|
48
|
+
respond_to do |format|
|
49
|
+
format.js { render layout: false }
|
50
|
+
end
|
51
|
+
end
|
52
|
+
end
|
53
|
+
end
|
54
|
+
end
|
55
|
+
end
|
@@ -0,0 +1,53 @@
|
|
1
|
+
module SimpleAdmin
|
2
|
+
module ResourceController
|
3
|
+
module DynamicFields
|
4
|
+
# Concern that include methods for getting entity and entity fields
|
5
|
+
# Working together with ResourceCrud
|
6
|
+
# @example PostsController with ResourceCrud and ResourceFields
|
7
|
+
# class PostsController
|
8
|
+
# include ResourceController::Crudify
|
9
|
+
# include SimpleAdmin::ResourceFields
|
10
|
+
#
|
11
|
+
# ...
|
12
|
+
# end
|
13
|
+
# @since 0.1.0
|
14
|
+
|
15
|
+
extend ActiveSupport::Concern
|
16
|
+
|
17
|
+
included do
|
18
|
+
before_action :initialize_fields_entities!
|
19
|
+
|
20
|
+
# Receives entity and entity fields by model class and field_presentation
|
21
|
+
#
|
22
|
+
# @since 0.1.0
|
23
|
+
def initialize_fields_entities!
|
24
|
+
@entity = SimpleAdmin::Entity.find_by(model_klass_name: model_klass.to_s)
|
25
|
+
@entity_fields = @entity.entity_fields.where(presentation: field_presentation)
|
26
|
+
end
|
27
|
+
|
28
|
+
private
|
29
|
+
|
30
|
+
def field_presentation
|
31
|
+
case params[:action]
|
32
|
+
when 'index'
|
33
|
+
:collection
|
34
|
+
when 'new'
|
35
|
+
:form
|
36
|
+
when 'create'
|
37
|
+
:form
|
38
|
+
when 'edit'
|
39
|
+
:form
|
40
|
+
end
|
41
|
+
end
|
42
|
+
|
43
|
+
def resource_params_name
|
44
|
+
model_klass.model_name.singular
|
45
|
+
end
|
46
|
+
|
47
|
+
def resource_attributes
|
48
|
+
SimpleAdmin::Entity.form_attributes(model_klass)
|
49
|
+
end
|
50
|
+
end
|
51
|
+
end
|
52
|
+
end
|
53
|
+
end
|
@@ -0,0 +1,23 @@
|
|
1
|
+
module SimpleAdmin
|
2
|
+
class Search
|
3
|
+
attr_reader :search_query, :resource_klass, :model_attributes
|
4
|
+
|
5
|
+
def initialize(search_query, resource_klass)
|
6
|
+
@search_query = search_query
|
7
|
+
@resource_klass = resource_klass
|
8
|
+
|
9
|
+
@model_attributes = SimpleAdmin::EntityField.joins(:entity)
|
10
|
+
.where(simple_admin_entities: { model_klass_name: resource_klass.to_s })
|
11
|
+
.search_indexable_columns
|
12
|
+
end
|
13
|
+
|
14
|
+
def process
|
15
|
+
return [] if model_attributes.empty?
|
16
|
+
|
17
|
+
query = model_attributes.map { |model_attribute| "#{model_attribute} LIKE ?" }.join(' OR ')
|
18
|
+
query_arguments = model_attributes.map { "%#{search_query}%" }
|
19
|
+
|
20
|
+
resource_klass.where(query, *query_arguments)
|
21
|
+
end
|
22
|
+
end
|
23
|
+
end
|
@@ -0,0 +1,38 @@
|
|
1
|
+
# coding: utf-8
|
2
|
+
|
3
|
+
lib = File.expand_path('../lib', __FILE__)
|
4
|
+
$LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
|
5
|
+
|
6
|
+
require 'simple_admin/version'
|
7
|
+
|
8
|
+
Gem::Specification.new do |spec|
|
9
|
+
spec.name = 'simple-admin'
|
10
|
+
spec.version = SimpleAdmin::VERSION
|
11
|
+
spec.authors = ['Dmitriy Strukov']
|
12
|
+
spec.email = ['dmitiry_strukov2011@mail.ru']
|
13
|
+
|
14
|
+
spec.summary = 'simple-admin'
|
15
|
+
spec.description = 'simple-admin'
|
16
|
+
spec.homepage = 'https://evil-raccoon.github.io/'
|
17
|
+
spec.license = 'MIT'
|
18
|
+
|
19
|
+
spec.files = `git ls-files -z`.split("\x0").reject do |f|
|
20
|
+
f.match(%r{^(test|spec|features)/})
|
21
|
+
end
|
22
|
+
|
23
|
+
spec.bindir = 'exe'
|
24
|
+
spec.executables = spec.files.grep(%r{^exe/}) { |f| File.basename(f) }
|
25
|
+
spec.require_paths = ['lib']
|
26
|
+
|
27
|
+
spec.add_development_dependency 'bundler', '~> 1.15'
|
28
|
+
spec.add_development_dependency 'rake', '~> 10.0'
|
29
|
+
spec.add_development_dependency 'rspec', '~> 3.0'
|
30
|
+
|
31
|
+
spec.add_development_dependency 'actionpack'
|
32
|
+
spec.add_development_dependency 'actionview'
|
33
|
+
spec.add_development_dependency 'activerecord'
|
34
|
+
|
35
|
+
spec.add_dependency 'bootstrap-sass'
|
36
|
+
spec.add_dependency 'jquery-ui-rails'
|
37
|
+
spec.add_dependency 'kaminari'
|
38
|
+
end
|