edgarj 0.01.12
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +7 -0
- data/MIT-LICENSE +20 -0
- data/README.rdoc +23 -0
- data/Rakefile +40 -0
- data/app/assets/javascripts/edgarj/base.js +49 -0
- data/app/assets/javascripts/edgarj/menu.js +39 -0
- data/app/assets/javascripts/edgarj/operator_selection.js +133 -0
- data/app/assets/stylesheets/edgarj/base.css +304 -0
- data/app/assets/stylesheets/edgarj/menu.css +65 -0
- data/app/controllers/edgarj/authentication_mixin.rb.sample +30 -0
- data/app/controllers/edgarj/controller_mixin_common.rb +80 -0
- data/app/controllers/edgarj/controller_mixin_for_app.rb +71 -0
- data/app/controllers/edgarj/edgarj_controller.rb +535 -0
- data/app/controllers/edgarj/model_permissions_controller.rb +8 -0
- data/app/controllers/edgarj/permission_mixin.rb +84 -0
- data/app/controllers/edgarj/popup_controller.rb +128 -0
- data/app/controllers/edgarj/rescue_mixin.rb +37 -0
- data/app/controllers/edgarj/user_group_users_controller.rb +8 -0
- data/app/controllers/edgarj/user_groups_controller.rb +9 -0
- data/app/controllers/edgarj/user_groups_popup_controller.rb +8 -0
- data/app/helpers/edgarj/assoc_helper.rb +369 -0
- data/app/helpers/edgarj/common_helper.rb +37 -0
- data/app/helpers/edgarj/edgarj_helper.rb +20 -0
- data/app/helpers/edgarj/field_helper.rb +397 -0
- data/app/helpers/edgarj/form_drawer.rb +322 -0
- data/app/helpers/edgarj/list_drawer.rb +169 -0
- data/app/helpers/edgarj/menu_helper.rb +92 -0
- data/app/helpers/edgarj/model_permissions_helper.rb +9 -0
- data/app/helpers/edgarj/popup_helper.rb +40 -0
- data/app/helpers/edgarj/search_helper.rb +14 -0
- data/app/helpers/edgarj/sessions_helper.rb +9 -0
- data/app/helpers/edgarj/user_group_users_helper.rb +9 -0
- data/app/helpers/edgarj/user_groups_helper.rb +9 -0
- data/app/helpers/edgarj/user_groups_popup_helper.rb +9 -0
- data/app/models/edgarj/drawer/base.rb +234 -0
- data/app/models/edgarj/drawer/normal.rb +6 -0
- data/app/models/edgarj/drawer/popup.rb +47 -0
- data/app/models/edgarj/drawer.rb +13 -0
- data/app/models/edgarj/model_permission.rb +41 -0
- data/app/models/edgarj/page_info.rb +47 -0
- data/app/models/edgarj/search.rb +81 -0
- data/app/models/edgarj/search_form.rb +255 -0
- data/app/models/edgarj/search_popup.rb +44 -0
- data/app/models/edgarj/sssn.rb +120 -0
- data/app/models/edgarj/user_group.rb +67 -0
- data/app/models/edgarj/user_group_user.rb +18 -0
- data/app/models/edgarj.rb +5 -0
- data/app/views/edgarj/edgarj/_form.html.erb +25 -0
- data/app/views/edgarj/edgarj/_list.html.erb +52 -0
- data/app/views/edgarj/edgarj/_message_popup.html.erb +15 -0
- data/app/views/edgarj/edgarj/_search_form.html.erb +64 -0
- data/app/views/edgarj/edgarj/_search_operator.html.erb +17 -0
- data/app/views/edgarj/edgarj/_search_operator_selection.html.erb +12 -0
- data/app/views/edgarj/edgarj/clear.js.erb +1 -0
- data/app/views/edgarj/edgarj/create.js.erb +4 -0
- data/app/views/edgarj/edgarj/destroy.js.erb +2 -0
- data/app/views/edgarj/edgarj/index.html.erb +37 -0
- data/app/views/edgarj/edgarj/index.js.erb +1 -0
- data/app/views/edgarj/edgarj/message_popup.js.erb +3 -0
- data/app/views/edgarj/edgarj/page_info_save.js.erb +1 -0
- data/app/views/edgarj/edgarj/search.js.erb +4 -0
- data/app/views/edgarj/edgarj/search_clear.js.erb +1 -0
- data/app/views/edgarj/edgarj/show.js.erb +1 -0
- data/app/views/edgarj/edgarj/top.html.erb +4 -0
- data/app/views/edgarj/edgarj/update.js.erb +4 -0
- data/app/views/edgarj/popup/_index.html.erb +16 -0
- data/app/views/edgarj/popup/_list.html.erb +42 -0
- data/app/views/edgarj/popup/_message_popup.html.erb +15 -0
- data/app/views/edgarj/popup/_search.html.erb +42 -0
- data/app/views/edgarj/popup/_search_save_popup.html.erb +16 -0
- data/app/views/edgarj/popup/index.js.erb +5 -0
- data/app/views/edgarj/popup/message_popup.js.erb +3 -0
- data/app/views/edgarj/popup/page_info_save.js.erb +1 -0
- data/app/views/edgarj/popup/search.js.erb +15 -0
- data/app/views/edgarj/popup/view_status_save.js.erb +1 -0
- data/config/routes.rb +15 -0
- data/config/settings.yml +5 -0
- data/db/migrate/20131118084600_create_edgar_sssns.rb +14 -0
- data/db/migrate/20131123124730_create_edgar_page_infos.rb +15 -0
- data/db/migrate/20140116062252_create_edgar_user_groups.rb +18 -0
- data/db/migrate/20140116062327_create_edgar_user_group_users.rb +10 -0
- data/db/migrate/20140206222308_create_edgar_model_permissions.rb +14 -0
- data/db/migrate/20141209053055_rename_edgar_to_edgarj.rb +17 -0
- data/lib/core_ext/active_record.rb +123 -0
- data/lib/core_ext/resources.rb +71 -0
- data/lib/edgarj/engine.rb +64 -0
- data/lib/edgarj/enum_cache.rb +46 -0
- data/lib/edgarj/templates/rails/helper/helper.rb +10 -0
- data/lib/edgarj/templates/test_unit/scaffold/functional_test.rb +575 -0
- data/lib/edgarj/version.rb +3 -0
- data/lib/edgarj.rb +14 -0
- data/lib/generators/edgarj/popup_scaffold/USAGE +6 -0
- data/lib/generators/edgarj/popup_scaffold/popup_scaffold_generator.rb +35 -0
- data/lib/generators/edgarj/popup_scaffold/templates/controller.rb +13 -0
- data/lib/generators/edgarj/popup_scaffold/templates/functional_test.rb +197 -0
- data/lib/generators/edgarj/popup_scaffold/templates/helper.rb +9 -0
- data/lib/generators/edgarj/scaffold/USAGE +17 -0
- data/lib/generators/edgarj/scaffold/scaffold_generator.rb +40 -0
- data/lib/generators/edgarj/scaffold/templates/controller.rb +13 -0
- data/lib/tasks/edgarj_tasks.rake +32 -0
- data/lib/tasks/pakcage.rake +18 -0
- data/locale/en.yml +94 -0
- data/locale/ja.yml +100 -0
- data/test/dummy/README.rdoc +28 -0
- data/test/dummy/Rakefile +6 -0
- data/test/dummy/app/assets/javascripts/application.js +21 -0
- data/test/dummy/app/assets/javascripts/authors.js +2 -0
- data/test/dummy/app/assets/stylesheets/application.css +16 -0
- data/test/dummy/app/assets/stylesheets/authors.css +4 -0
- data/test/dummy/app/assets/stylesheets/scaffold.css +56 -0
- data/test/dummy/app/controllers/application_controller.rb +15 -0
- data/test/dummy/app/controllers/authors_controller.rb +6 -0
- data/test/dummy/app/controllers/authors_popup_controller.rb +6 -0
- data/test/dummy/app/controllers/books_controller.rb +6 -0
- data/test/dummy/app/controllers/dummy_auth_mixin.rb +36 -0
- data/test/dummy/app/decorators/models/edgarj/user_group_decorator.rb +1 -0
- data/test/dummy/app/helpers/application_helper.rb +3 -0
- data/test/dummy/app/helpers/authors_helper.rb +7 -0
- data/test/dummy/app/helpers/authors_popup_helper.rb +7 -0
- data/test/dummy/app/helpers/books_helper.rb +7 -0
- data/test/dummy/app/models/author.rb +32 -0
- data/test/dummy/app/models/book.rb +5 -0
- data/test/dummy/app/models/user.rb +13 -0
- data/test/dummy/app/views/layouts/application.html.erb +32 -0
- data/test/dummy/app/views/layouts/login.html.erb +20 -0
- data/test/dummy/bin/bundle +3 -0
- data/test/dummy/bin/rails +4 -0
- data/test/dummy/bin/rake +4 -0
- data/test/dummy/config/application.rb +59 -0
- data/test/dummy/config/boot.rb +10 -0
- data/test/dummy/config/database.yml +15 -0
- data/test/dummy/config/edgarj/menu_config.rb +28 -0
- data/test/dummy/config/environment.rb +5 -0
- data/test/dummy/config/environments/development.rb +42 -0
- data/test/dummy/config/environments/production.rb +79 -0
- data/test/dummy/config/environments/test.rb +34 -0
- data/test/dummy/config/initializers/backtrace_silencers.rb +7 -0
- data/test/dummy/config/initializers/filter_parameter_logging.rb +4 -0
- data/test/dummy/config/initializers/inflections.rb +16 -0
- data/test/dummy/config/initializers/mime_types.rb +5 -0
- data/test/dummy/config/initializers/secret_token.rb +12 -0
- data/test/dummy/config/initializers/session_store.rb +3 -0
- data/test/dummy/config/initializers/strong_parameter.rb +3 -0
- data/test/dummy/config/initializers/wrap_parameters.rb +14 -0
- data/test/dummy/config/locales/en.yml +26 -0
- data/test/dummy/config/routes.rb +60 -0
- data/test/dummy/config.ru +4 -0
- data/test/dummy/db/migrate/20131107120635_create_authors.rb +9 -0
- data/test/dummy/db/migrate/20131218011851_create_books.rb +10 -0
- data/test/dummy/db/migrate/20140201000000_add_user_group_id_to_authors.rb +5 -0
- data/test/dummy/db/migrate/20140807065420_create_users.rb +10 -0
- data/test/dummy/db/schema.rb +93 -0
- data/test/dummy/public/404.html +58 -0
- data/test/dummy/public/422.html +58 -0
- data/test/dummy/public/500.html +57 -0
- data/test/dummy/public/favicon.ico +0 -0
- data/test/dummy/script/rails +6 -0
- data/test/dummy/test/functional/authors_controller_test.rb +631 -0
- data/test/dummy/test/functional/books_controller_test.rb +516 -0
- data/test/dummy/test/helpers/authors_helper_test.rb +4 -0
- data/test/dummy/test/unit/author_test.rb +7 -0
- data/test/dummy/test/unit/book_test.rb +7 -0
- data/test/edgar_test.rb +7 -0
- data/test/fixtures/authors.yml +32 -0
- data/test/fixtures/books.yml +56 -0
- data/test/fixtures/edgarj/model_permissions.yml +97 -0
- data/test/fixtures/edgarj/page_infos.yml +84 -0
- data/test/fixtures/edgarj/sssns.yml +38 -0
- data/test/fixtures/edgarj/user_group_users.yml +114 -0
- data/test/fixtures/edgarj/user_groups.yml +95 -0
- data/test/fixtures/users.yml +49 -0
- data/test/functional/edgarj/edgarj_controller_test.rb +24 -0
- data/test/functional/edgarj/model_permissions_controller_test.rb +554 -0
- data/test/functional/edgarj/user_group_users_controller_test.rb +567 -0
- data/test/integration/navigation_test.rb +10 -0
- data/test/support/edgarj/controller_supporter.rb +23 -0
- data/test/test_helper.rb +23 -0
- data/test/unit/edgarj/model_permission_test.rb +27 -0
- data/test/unit/edgarj/page_info_test.rb +7 -0
- data/test/unit/edgarj/sssn_test.rb +10 -0
- data/test/unit/edgarj/user_group_test.rb +32 -0
- data/test/unit/edgarj/user_group_user_test.rb +9 -0
- data/test/unit/helpers/edgarj/model_permissions_helper_test.rb +6 -0
- data/test/unit/helpers/edgarj/user_group_users_helper_test.rb +6 -0
- metadata +456 -0
@@ -0,0 +1,30 @@
|
|
1
|
+
module Edgarj
|
2
|
+
module AuthenticationMixin
|
3
|
+
def self.included(klass)
|
4
|
+
klass.helper_method :current_user
|
5
|
+
end
|
6
|
+
|
7
|
+
private
|
8
|
+
def access_denied
|
9
|
+
flash.now[:error] = v('login_failed')
|
10
|
+
#redirect_to login_path
|
11
|
+
respond_to do |format|
|
12
|
+
format.html {
|
13
|
+
render '/edgarj/sssns/new', layout: 'login'
|
14
|
+
}
|
15
|
+
format.js {
|
16
|
+
render '/edgarj/sssns/new'
|
17
|
+
}
|
18
|
+
end
|
19
|
+
end
|
20
|
+
|
21
|
+
# before_filter to enforce a login requirement.
|
22
|
+
def require_login
|
23
|
+
!!current_user || access_denied
|
24
|
+
end
|
25
|
+
|
26
|
+
def current_user
|
27
|
+
@current_user ||= User.find(session[:user_id]) if session[:user_id]
|
28
|
+
end
|
29
|
+
end
|
30
|
+
end
|
@@ -0,0 +1,80 @@
|
|
1
|
+
module Edgarj
|
2
|
+
# Common module for EdgarjController and PopupController.
|
3
|
+
module ControllerMixinCommon
|
4
|
+
def self.included(klass)
|
5
|
+
klass.before_filter :intern_sssn
|
6
|
+
end
|
7
|
+
|
8
|
+
# page is reset to 1 since order and/or lines/page are/is changed.
|
9
|
+
def page_info_save
|
10
|
+
if (@page_info = @sssn.page_infos.find_by_id(params[:id]))
|
11
|
+
@page_info.update_attributes(page_info_params)
|
12
|
+
@page_info.update_attribute(:page, 1)
|
13
|
+
end
|
14
|
+
prepare_list
|
15
|
+
end
|
16
|
+
|
17
|
+
private
|
18
|
+
# return page related infomation for each controller x session.
|
19
|
+
#
|
20
|
+
# search_form may depend on each controller so that search_form
|
21
|
+
# method should be defined for each controller.
|
22
|
+
def page_info
|
23
|
+
@page_info ||= PageInfo.intern(@sssn, controller_name, search_form)
|
24
|
+
end
|
25
|
+
|
26
|
+
# Only allow a trusted parameter "white list" through.
|
27
|
+
def page_info_params
|
28
|
+
params.require(:edgarj_page_info).permit(
|
29
|
+
:view,
|
30
|
+
:order_by,
|
31
|
+
:dir,
|
32
|
+
:page,
|
33
|
+
:lines,
|
34
|
+
:record_data)
|
35
|
+
end
|
36
|
+
|
37
|
+
# prepare followings:
|
38
|
+
# 1. @page_info
|
39
|
+
# 1. @count
|
40
|
+
# 1. @list (with user_scoped if defined)
|
41
|
+
#
|
42
|
+
# This private method is called from both EdgarjController and
|
43
|
+
# EdgarjPopupController to draw list.
|
44
|
+
#
|
45
|
+
# You can overwrite prepare_list() to show list at your controller.
|
46
|
+
def prepare_list
|
47
|
+
page_info
|
48
|
+
@list = user_scoped.where(@page_info.record.conditions).
|
49
|
+
page(@page_info.page).
|
50
|
+
per(@page_info.lines)
|
51
|
+
if !@page_info.order_by.blank?
|
52
|
+
@list = @list.order(@page_info.order_by + ' ' + @page_info.dir)
|
53
|
+
end
|
54
|
+
|
55
|
+
@count = user_scoped.where(@page_info.record.conditions).count
|
56
|
+
end
|
57
|
+
|
58
|
+
# provide 2nd parameter for Model.user_scoped(user, context).
|
59
|
+
# Default is @sssn.
|
60
|
+
def scope_context
|
61
|
+
@sssn
|
62
|
+
end
|
63
|
+
|
64
|
+
# narrow data scope on model
|
65
|
+
#
|
66
|
+
# Model's user_scoped parameters are as follows:
|
67
|
+
# 1st argument:: current_user
|
68
|
+
# 2nd argument:: scope_context method result (default = @sssn)
|
69
|
+
# 3rd argument:: target for popup (see below for the detail)
|
70
|
+
#
|
71
|
+
# === 3rd argument
|
72
|
+
# This is used to identify which column the selected value
|
73
|
+
# on the popup is populated.
|
74
|
+
def user_scoped
|
75
|
+
@_user_scoped ||= model.respond_to?(:user_scoped) ?
|
76
|
+
model.user_scoped(current_user, scope_context, params[:id_target]) :
|
77
|
+
model
|
78
|
+
end
|
79
|
+
end
|
80
|
+
end
|
@@ -0,0 +1,71 @@
|
|
1
|
+
module Edgarj
|
2
|
+
# Mixin for All controllers (not only Edgarj::ControllerMixin include class)
|
3
|
+
module ControllerMixinForApp
|
4
|
+
def self.included(klass)
|
5
|
+
klass.helper_method :v, :url_prefix
|
6
|
+
end
|
7
|
+
|
8
|
+
private
|
9
|
+
# Transform the controller name into a more humane format, using I18n.
|
10
|
+
# I18n fallbacks work as follows (LeadsController as example):
|
11
|
+
#
|
12
|
+
# 1. t('activerecord.models.lead')
|
13
|
+
# 1. t('controller.leads')
|
14
|
+
# 1. t('lead')
|
15
|
+
# 1. 'Lead'
|
16
|
+
def human_name
|
17
|
+
@human_name ||= begin
|
18
|
+
str = controller_path
|
19
|
+
single = str.singularize
|
20
|
+
I18n.t( "activerecord.models.#{model.to_s.underscore}",
|
21
|
+
default: I18n.t("controller.#{str}",
|
22
|
+
default: I18n.t(single,
|
23
|
+
default: single.camelize)))
|
24
|
+
end
|
25
|
+
end
|
26
|
+
|
27
|
+
# application-wide rescue to log error info.
|
28
|
+
def app_rescue
|
29
|
+
logger.error(sprintf("error %s(%s) at %s#%s:\n%s",
|
30
|
+
$!.class.to_s,
|
31
|
+
$!.to_s,
|
32
|
+
self.class.name,
|
33
|
+
self.action_name,
|
34
|
+
$@.join("\n")))
|
35
|
+
end
|
36
|
+
|
37
|
+
# set @sssn if not exist
|
38
|
+
def intern_sssn
|
39
|
+
@sssn ||=
|
40
|
+
if (sid = request.session_options[:id])
|
41
|
+
Edgarj::Sssn.find_by_session_id(sid) ||
|
42
|
+
Edgarj::Sssn.new(session_id: sid)
|
43
|
+
else
|
44
|
+
Edgarj::Sssn.new
|
45
|
+
end
|
46
|
+
end
|
47
|
+
|
48
|
+
# convenient t() for view. v(KEY) fallback works as follows:
|
49
|
+
#
|
50
|
+
# 1. t('view.CONTROLLER.KEY') if exists. Where, CONTROLLER
|
51
|
+
# is controller name.
|
52
|
+
# 1. t('edgarj.view.CONTROLLER.KEY') if exists.
|
53
|
+
# 1. t('edgarj.default.KEY') if exists.
|
54
|
+
# 1. Key
|
55
|
+
#
|
56
|
+
def v(key)
|
57
|
+
t(key,
|
58
|
+
scope: "view.#{controller_name}",
|
59
|
+
default: I18n.t(key,
|
60
|
+
scope: "edgarj.view.#{controller_name}",
|
61
|
+
default: I18n.t(key,
|
62
|
+
scope: 'edgarj.default',
|
63
|
+
default: key.camelize)))
|
64
|
+
end
|
65
|
+
|
66
|
+
# TODO: dirty solution to support url namespace
|
67
|
+
def url_prefix
|
68
|
+
@url_prefix ||= '/'
|
69
|
+
end
|
70
|
+
end
|
71
|
+
end
|