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,13 @@
|
|
1
|
+
<% model_name = class_name.singularize -%>
|
2
|
+
<% if namespaced? -%>
|
3
|
+
require_dependency "<%= namespaced_file_path %>/application_controller"
|
4
|
+
|
5
|
+
<% end -%>
|
6
|
+
<% module_namespacing do -%>
|
7
|
+
class <%= controller_class_name %>PopupController < Edgarj::PopupController
|
8
|
+
private
|
9
|
+
def drawer_class
|
10
|
+
<%= controller_class_name %>PopupHelper::<%= model_name -%>PopupDrawer
|
11
|
+
end
|
12
|
+
end
|
13
|
+
<% end -%>
|
@@ -0,0 +1,197 @@
|
|
1
|
+
require 'test_helper'
|
2
|
+
|
3
|
+
<% module_namespacing do -%>
|
4
|
+
class <%= controller_class_name %>PopupControllerTest < ActionController::TestCase
|
5
|
+
context 'root user' do
|
6
|
+
setup do
|
7
|
+
login_as(:root)
|
8
|
+
@pi = create_page_info(@sssn, '<%= table_name %>', <%= class_name %>)
|
9
|
+
end
|
10
|
+
|
11
|
+
should 'get index' do
|
12
|
+
xhr :get, :index,
|
13
|
+
id_target: "PARENT_MODEL_DOM_ID"
|
14
|
+
assert_response :success
|
15
|
+
assert_not_nil assigns(:list)
|
16
|
+
end
|
17
|
+
|
18
|
+
should 'paginate' do
|
19
|
+
xhr :get, :index, page: 2,
|
20
|
+
id_target: "PARENT_MODEL_DOM_ID"
|
21
|
+
assert_response :success
|
22
|
+
assert_not_nil assigns(:list)
|
23
|
+
end
|
24
|
+
|
25
|
+
should 'sort' do
|
26
|
+
xhr :put, :page_info_save, id: @pi.id,
|
27
|
+
id_target: "PARENT_MODEL_DOM_ID",
|
28
|
+
edgarj_page_info: {
|
29
|
+
dir: 'asc',
|
30
|
+
order_by: 'created_at'
|
31
|
+
}
|
32
|
+
assert_response :success
|
33
|
+
assert_not_nil assigns(:list)
|
34
|
+
assert_equal 'asc', assigns(:page_info).dir
|
35
|
+
assert_equal 'created_at', assigns(:page_info).order_by
|
36
|
+
end
|
37
|
+
|
38
|
+
should 'search' do
|
39
|
+
xhr :get, :search, edgarj_search_form: {},
|
40
|
+
id_target: "PARENT_MODEL_DOM_ID"
|
41
|
+
assert_response :success
|
42
|
+
assert assigns(:list).count >= 1
|
43
|
+
end
|
44
|
+
end
|
45
|
+
|
46
|
+
# All of tests in this context is skipped because it is required
|
47
|
+
# to prepare read-only user.
|
48
|
+
# When complete the preparation, delete the skip lines.
|
49
|
+
context 'read-only user' do
|
50
|
+
setup do
|
51
|
+
# prepare fixtures of model_permissions, user_groups, and
|
52
|
+
# user_group_users for read-only user of the
|
53
|
+
# <%= controller_class_name %>Controller and login by him/her.
|
54
|
+
#
|
55
|
+
login_as(:<%= singular_table_name %>_reader)
|
56
|
+
@pi = create_page_info(@sssn, '<%= table_name %>', <%= class_name %>)
|
57
|
+
end
|
58
|
+
|
59
|
+
should 'get index' do
|
60
|
+
skip 'get index'
|
61
|
+
xhr :get, :index,
|
62
|
+
id_target: "PARENT_MODEL_DOM_ID"
|
63
|
+
assert_response :success
|
64
|
+
assert_not_nil assigns(:list)
|
65
|
+
end
|
66
|
+
|
67
|
+
should 'paginate' do
|
68
|
+
skip 'get paginate'
|
69
|
+
xhr :get, :index, page: 2,
|
70
|
+
id_target: "PARENT_MODEL_DOM_ID"
|
71
|
+
assert_response :success
|
72
|
+
assert_not_nil assigns(:list)
|
73
|
+
end
|
74
|
+
|
75
|
+
should 'sort' do
|
76
|
+
skip 'sort'
|
77
|
+
xhr :put, :page_info_save, id: @pi.id,
|
78
|
+
id_target: "PARENT_MODEL_DOM_ID",
|
79
|
+
edgarj_page_info: {
|
80
|
+
dir: 'asc',
|
81
|
+
order_by: 'created_at'
|
82
|
+
}
|
83
|
+
assert_response :success
|
84
|
+
assert_not_nil assigns(:list)
|
85
|
+
assert_equal 'asc', assigns(:page_info).dir
|
86
|
+
assert_equal 'created_at', assigns(:page_info).order_by
|
87
|
+
end
|
88
|
+
|
89
|
+
should 'search' do
|
90
|
+
skip 'search'
|
91
|
+
xhr :get, :search, edgarj_search_form: {},
|
92
|
+
id_target: "PARENT_MODEL_DOM_ID"
|
93
|
+
assert_response :success
|
94
|
+
assert assigns(:list).count >= 1
|
95
|
+
end
|
96
|
+
end
|
97
|
+
|
98
|
+
# All of tests in this context is skipped because it is required
|
99
|
+
# to prepare 'permitted but user_scoped' user.
|
100
|
+
# When complete the preparation, delete the skip lines.
|
101
|
+
context 'permitted and user_scoped user' do
|
102
|
+
setup do
|
103
|
+
# prepare fixtures of model_permissions, user_groups, and
|
104
|
+
# user_group_users for read-only user of the
|
105
|
+
#login_as(:permitted_n_user_scoped_on_<%= table_name %>)
|
106
|
+
#@pi = create_page_info(@sssn, '<%= table_name %>', <%= class_name %>)
|
107
|
+
@<%= singular_table_name %> = <%= table_name %>(:one)
|
108
|
+
@<%= singular_table_name %>_scoped_out = <%= table_name %>(:two)
|
109
|
+
end
|
110
|
+
|
111
|
+
should 'search since role and user_scoped satisfy' do
|
112
|
+
skip 'search since role and user_scoped satisfy'
|
113
|
+
xhr :get, :search, edgarj_search_form: {col: 'id', val: @<%= singular_table_name %>.id},
|
114
|
+
id_target: "PARENT_MODEL_DOM_ID"
|
115
|
+
assert_response :success
|
116
|
+
assert_equal 1, assigns(:list).count
|
117
|
+
end
|
118
|
+
|
119
|
+
should 'not search since key is out-of-scope' do
|
120
|
+
skip 'not search since key is out-of-scope'
|
121
|
+
xhr :get, :search, edgarj_search_form: {col: 'id', val: @<%= singular_table_name %>_scoped_out.id},
|
122
|
+
id_target: "PARENT_MODEL_DOM_ID"
|
123
|
+
assert_response :success
|
124
|
+
assert_equal 0, assigns(:list).count
|
125
|
+
end
|
126
|
+
end
|
127
|
+
|
128
|
+
context 'not-permitted user' do
|
129
|
+
setup do
|
130
|
+
login_as(:not_permitted)
|
131
|
+
@pi = create_page_info(@sssn, '<%= table_name %>', <%= class_name %>)
|
132
|
+
end
|
133
|
+
|
134
|
+
should 'not get index' do
|
135
|
+
xhr :get, :index,
|
136
|
+
id_target: "PARENT_MODEL_DOM_ID"
|
137
|
+
assert_template 'message_popup'
|
138
|
+
assert_equal I18n.t('edgarj.default.permission_no'), flash[:error]
|
139
|
+
end
|
140
|
+
|
141
|
+
should 'not paginate' do
|
142
|
+
xhr :get, :index, page: 2,
|
143
|
+
id_target: "PARENT_MODEL_DOM_ID"
|
144
|
+
assert_template 'message_popup'
|
145
|
+
assert_equal I18n.t('edgarj.default.permission_no'), flash[:error]
|
146
|
+
end
|
147
|
+
|
148
|
+
should 'not sort' do
|
149
|
+
xhr :put, :page_info_save, id: @pi.id,
|
150
|
+
id_target: "PARENT_MODEL_DOM_ID",
|
151
|
+
edgarj_page_info: {
|
152
|
+
dir: 'asc',
|
153
|
+
order_by: 'created_at'
|
154
|
+
}
|
155
|
+
assert_template 'message_popup'
|
156
|
+
assert_equal I18n.t('edgarj.default.permission_no'), flash[:error]
|
157
|
+
end
|
158
|
+
|
159
|
+
should 'not search' do
|
160
|
+
xhr :get, :search, edgarj_search_form: {},
|
161
|
+
id_target: "PARENT_MODEL_DOM_ID"
|
162
|
+
assert_template 'message_popup'
|
163
|
+
assert_equal I18n.t('edgarj.default.permission_no'), flash[:error]
|
164
|
+
end
|
165
|
+
end
|
166
|
+
|
167
|
+
context 'not-login' do
|
168
|
+
should 'not get index' do
|
169
|
+
xhr :get, :index,
|
170
|
+
id_target: "PARENT_MODEL_DOM_ID"
|
171
|
+
assert_equal I18n.t('edgarj.default.login_failed'), flash[:error]
|
172
|
+
end
|
173
|
+
|
174
|
+
should 'not paginate' do
|
175
|
+
xhr :get, :index, page: 2,
|
176
|
+
id_target: "PARENT_MODEL_DOM_ID"
|
177
|
+
assert_equal I18n.t('edgarj.default.login_failed'), flash[:error]
|
178
|
+
end
|
179
|
+
|
180
|
+
should 'not sort' do
|
181
|
+
xhr :put, :page_info_save, id: 0,
|
182
|
+
id_target: "PARENT_MODEL_DOM_ID",
|
183
|
+
edgarj_page_info: {
|
184
|
+
dir: 'asc',
|
185
|
+
order_by: 'created_at'
|
186
|
+
}
|
187
|
+
assert_equal I18n.t('edgarj.default.login_failed'), flash[:error]
|
188
|
+
end
|
189
|
+
|
190
|
+
should 'not search' do
|
191
|
+
xhr :get, :search, edgarj_search_form: {},
|
192
|
+
id_target: "PARENT_MODEL_DOM_ID"
|
193
|
+
assert_equal I18n.t('edgarj.default.login_failed'), flash[:error]
|
194
|
+
end
|
195
|
+
end
|
196
|
+
end
|
197
|
+
<% end -%>
|
@@ -0,0 +1,17 @@
|
|
1
|
+
Description:
|
2
|
+
'edgarj:scaffold' is similar to original scaffold, but adds the followings:
|
3
|
+
|
4
|
+
* CRUD with Ajax
|
5
|
+
* QBE search form
|
6
|
+
* sort by clicking list column header
|
7
|
+
* csv-download
|
8
|
+
* role-based access control on controller
|
9
|
+
* data-scope access control on data model
|
10
|
+
|
11
|
+
If you want to remove all the generated files, run
|
12
|
+
'rails destroy edgarj/scaffold ModelName'.
|
13
|
+
|
14
|
+
Example:
|
15
|
+
`rails generate edgarj:scaffold Author name`
|
16
|
+
`rails generate edgarj:scaffold Book name desc:text author:belongs_to`
|
17
|
+
`rails generate edgarj:scaffold Purchase amount:decimal tracking_id:integer:uniq`
|
@@ -0,0 +1,40 @@
|
|
1
|
+
require 'rails/generators'
|
2
|
+
|
3
|
+
module Edgarj
|
4
|
+
class ScaffoldGenerator < Rails::Generators::NamedBase
|
5
|
+
include Rails::Generators::ResourceHelpers
|
6
|
+
|
7
|
+
source_root File.expand_path('../templates', __FILE__)
|
8
|
+
invoke :model, in: :rails
|
9
|
+
|
10
|
+
def add_edgarj_routes
|
11
|
+
route "edgarj_resources :#{file_name.pluralize}"
|
12
|
+
end
|
13
|
+
|
14
|
+
def create_controller_files
|
15
|
+
template 'controller.rb', File.join('app/controllers',
|
16
|
+
class_path, "#{controller_file_name}_controller.rb")
|
17
|
+
end
|
18
|
+
|
19
|
+
hook_for :test_framework, as: :scaffold
|
20
|
+
hook_for :helper, in: :rails, as: :scaffold do |invoked|
|
21
|
+
invoke invoked, [ controller_name ]
|
22
|
+
end
|
23
|
+
|
24
|
+
=begin
|
25
|
+
private
|
26
|
+
# copied from TestUnit::Generators::ScaffoldGenerator
|
27
|
+
def attributes_hash
|
28
|
+
return if attributes_names.empty?
|
29
|
+
|
30
|
+
attributes_names.map do |name|
|
31
|
+
if %w(password password_confirmation).include?(name) && attributes.any?(&:password_digest?)
|
32
|
+
"#{name}: 'secret'"
|
33
|
+
else
|
34
|
+
"#{name}: @#{singular_table_name}.#{name}"
|
35
|
+
end
|
36
|
+
end.sort.join(', ')
|
37
|
+
end
|
38
|
+
=end
|
39
|
+
end
|
40
|
+
end
|
@@ -0,0 +1,13 @@
|
|
1
|
+
<% model_name = class_name.singularize -%>
|
2
|
+
<% if namespaced? -%>
|
3
|
+
require_dependency "<%= namespaced_file_path %>/application_controller"
|
4
|
+
|
5
|
+
<% end -%>
|
6
|
+
<% module_namespacing do -%>
|
7
|
+
class <%= controller_class_name %>Controller < Edgarj::EdgarjController
|
8
|
+
private
|
9
|
+
def drawer_class
|
10
|
+
<%= controller_class_name %>Helper::<%= model_name -%>Drawer
|
11
|
+
end
|
12
|
+
end
|
13
|
+
<% end -%>
|
@@ -0,0 +1,32 @@
|
|
1
|
+
if Rails.env != 'production'
|
2
|
+
require 'yard'
|
3
|
+
|
4
|
+
namespace :doc do
|
5
|
+
desc 'upload to sourceforge'
|
6
|
+
task up: [:yard, :gen_juli] do
|
7
|
+
sh <<-EOSH
|
8
|
+
cd doc/www
|
9
|
+
rsync -avz --delete . ido00,jjedgarj@web.sourceforge.net:htdocs/
|
10
|
+
EOSH
|
11
|
+
end
|
12
|
+
|
13
|
+
desc 'generate documents'
|
14
|
+
task :gen_juli do
|
15
|
+
sh <<-EOSH
|
16
|
+
unset RUBYOPT
|
17
|
+
(cd doc/doc-en; juli; juli sitemap; juli recent_update)
|
18
|
+
(cd doc/doc-jp; juli; juli sitemap; juli recent_update)
|
19
|
+
EOSH
|
20
|
+
end
|
21
|
+
|
22
|
+
YARD::Rake::YardocTask.new do |t|
|
23
|
+
#t.files = ['lib/**/*.rb', OTHER_PATHS] # optional
|
24
|
+
|
25
|
+
# NOTE: --exclude option value should be Regex rather than
|
26
|
+
# shell wildcard (e.g. foo/**/*.rb)
|
27
|
+
t.options = %w(--private -o doc/www/api
|
28
|
+
--exclude lib/edgarj/templates
|
29
|
+
--exclude lib/generators/edgarj/.*/templates)
|
30
|
+
end
|
31
|
+
end
|
32
|
+
end
|
@@ -0,0 +1,18 @@
|
|
1
|
+
namespace :edgarj do
|
2
|
+
desc "build package under pkg/ with umask 002"
|
3
|
+
task :build_gem do
|
4
|
+
FileUtils.mkdir "/tmp/edgarj" if !File.directory?("/tmp/edgarj")
|
5
|
+
sh <<-EOSH
|
6
|
+
umask 002
|
7
|
+
git archive --format=tar --prefix=edgarj/ HEAD | gzip >/tmp/edgarj.tgz
|
8
|
+
cd /tmp/edgarj &&
|
9
|
+
tar zxvf /tmp/edgarj.tgz &&
|
10
|
+
cd edgarj &&
|
11
|
+
gem build edgarj.gemspec
|
12
|
+
EOSH
|
13
|
+
|
14
|
+
FileUtils.mkdir "pkg" if !File.directory?("pkg")
|
15
|
+
sh "mv /tmp/edgarj/edgarj/edgarj-*.gem pkg/"
|
16
|
+
sh "rm -r /tmp/edgarj"
|
17
|
+
end
|
18
|
+
end
|
data/locale/en.yml
ADDED
@@ -0,0 +1,94 @@
|
|
1
|
+
en:
|
2
|
+
# active record column
|
3
|
+
activerecord:
|
4
|
+
models:
|
5
|
+
edgarj/address: Address
|
6
|
+
edgarj/model_permission: Role
|
7
|
+
edgarj/sssn: Session
|
8
|
+
edgarj/user: User
|
9
|
+
edgarj/user_group: Group
|
10
|
+
edgarj/user_group_user: Group - User
|
11
|
+
edgarj/zip_address: Zip - Address
|
12
|
+
attributes:
|
13
|
+
edgarj/address:
|
14
|
+
zip: Zip
|
15
|
+
prefecture: State
|
16
|
+
city: City/County
|
17
|
+
town: Town
|
18
|
+
other: Street
|
19
|
+
other2: Bldg/Floor
|
20
|
+
other3: (Reserved)
|
21
|
+
other4: (Reserved)
|
22
|
+
edgarj/model_permission:
|
23
|
+
flags: Access Type
|
24
|
+
edgarj/user:
|
25
|
+
code: Login Id
|
26
|
+
password_confirmation: Password (confirmation)
|
27
|
+
edgarj/zip_address:
|
28
|
+
zip: Zip
|
29
|
+
prefecture: State
|
30
|
+
city: City/County
|
31
|
+
town: Town
|
32
|
+
# active model column
|
33
|
+
activemodel:
|
34
|
+
attributes:
|
35
|
+
edgarj/search_form:
|
36
|
+
_id: Id
|
37
|
+
edgarj/search_popup:
|
38
|
+
val: Value
|
39
|
+
|
40
|
+
# controller human name
|
41
|
+
#
|
42
|
+
# if derived model class name is not defined at activerecord.models,
|
43
|
+
# then definition here is used.
|
44
|
+
controller:
|
45
|
+
#edgarj/addresses: Address
|
46
|
+
|
47
|
+
edgarj:
|
48
|
+
# Edgarj specific time format
|
49
|
+
time:
|
50
|
+
format: ! '%b %d,%Y %H:%M:%S'
|
51
|
+
form:
|
52
|
+
delete_confirm: 'Really Delete?'
|
53
|
+
popup:
|
54
|
+
title: '%s Selection'
|
55
|
+
message_popup:
|
56
|
+
title: 'Message'
|
57
|
+
view:
|
58
|
+
sssns:
|
59
|
+
login: 'Login'
|
60
|
+
login_success: 'Logged in!'
|
61
|
+
login_failed: 'Logged failed!'
|
62
|
+
logout: 'Logged out!'
|
63
|
+
|
64
|
+
# final fallback is here.
|
65
|
+
#
|
66
|
+
# NOTE: even if humanize() is enough in some cases (e.g. name: 'Name')
|
67
|
+
# I18n is defined here because those are used in Edgarj plugin:
|
68
|
+
default:
|
69
|
+
clear: 'Clear'
|
70
|
+
close: 'Close'
|
71
|
+
create: 'Create'
|
72
|
+
created_at: 'Created at'
|
73
|
+
csv_download: 'CSV Download'
|
74
|
+
date: Date
|
75
|
+
delete: 'Delete'
|
76
|
+
kind: 'Kind'
|
77
|
+
login_failed: 'Login failed'
|
78
|
+
logout: 'Logout'
|
79
|
+
name: 'Name'
|
80
|
+
not_found: 'Not found'
|
81
|
+
parent: 'Parent'
|
82
|
+
password: 'Password'
|
83
|
+
permission_no: You don't have enough permission.
|
84
|
+
read: 'Read'
|
85
|
+
save: 'Save'
|
86
|
+
search_form: 'Search Form'
|
87
|
+
seq: 'Sequence'
|
88
|
+
total_records: Total %d Records
|
89
|
+
updated_at: 'Update'
|
90
|
+
updated_at: 'Updated at'
|
91
|
+
zip_complete: 'to Address'
|
92
|
+
|
93
|
+
# just for test purpose
|
94
|
+
test_column: 'TEST COLUMN in global!!'
|
data/locale/ja.yml
ADDED
@@ -0,0 +1,100 @@
|
|
1
|
+
ja:
|
2
|
+
# active record column
|
3
|
+
activerecord:
|
4
|
+
models:
|
5
|
+
edgarj/address: 住所
|
6
|
+
edgarj/model_permission: 権限
|
7
|
+
edgarj/sssn: セッション
|
8
|
+
edgarj/user: ユーザ
|
9
|
+
edgarj/user_group: グループ
|
10
|
+
edgarj/user_group_user: ユーザのグループ所属
|
11
|
+
edgarj/zip_address: 〒→住所
|
12
|
+
attributes:
|
13
|
+
edgarj/address:
|
14
|
+
zip: 〒
|
15
|
+
prefecture: 都道府県
|
16
|
+
city: 市・郡
|
17
|
+
town: 町・村
|
18
|
+
other: 番地
|
19
|
+
other2: ビル・フロア
|
20
|
+
other3: (未使用)
|
21
|
+
other4: (未使用)
|
22
|
+
edgarj/model_permission:
|
23
|
+
flags: アクセス種類
|
24
|
+
edgarj/user:
|
25
|
+
code: ログインId
|
26
|
+
password_confirmation: パスワード(確認)
|
27
|
+
edgarj/zip_address:
|
28
|
+
zip: 〒
|
29
|
+
prefecture: 都道府県
|
30
|
+
city: 市・郡
|
31
|
+
town: 町・村
|
32
|
+
# active model column
|
33
|
+
activemodel:
|
34
|
+
attributes:
|
35
|
+
edgarj/search_form:
|
36
|
+
_id: Id
|
37
|
+
edgarj/search_popup:
|
38
|
+
val: 値
|
39
|
+
|
40
|
+
views:
|
41
|
+
pagination:
|
42
|
+
first: "« 最初"
|
43
|
+
last: "最後 »"
|
44
|
+
previous: "‹ 前"
|
45
|
+
next: "次 ›"
|
46
|
+
truncate: "…"
|
47
|
+
|
48
|
+
# コントローラ名
|
49
|
+
#
|
50
|
+
# もしコントローラから導出されるモデルのラベルが activerecord.models で
|
51
|
+
# 定義されてない場合、ここの定義が使用されます。
|
52
|
+
controller:
|
53
|
+
#edgarj/addresses: 住所
|
54
|
+
|
55
|
+
edgarj:
|
56
|
+
# Edgarj specific time format
|
57
|
+
time:
|
58
|
+
format: ! '%Y/%m/%d %H:%M:%S'
|
59
|
+
form:
|
60
|
+
delete_confirm: '本当に削除しますか?'
|
61
|
+
popup:
|
62
|
+
title: '%s 選択'
|
63
|
+
message_popup:
|
64
|
+
title: 'メッセージ'
|
65
|
+
view:
|
66
|
+
sssns:
|
67
|
+
login: 'ログイン'
|
68
|
+
login_success: 'ログインしました。'
|
69
|
+
login_failed: 'ログインに失敗しました。'
|
70
|
+
logout: 'ログアウトしました。'
|
71
|
+
# final fallback is here.
|
72
|
+
default:
|
73
|
+
clear: 'クリア'
|
74
|
+
close: '閉じる'
|
75
|
+
create: '作成'
|
76
|
+
created_at: '作成日時'
|
77
|
+
csv_download: 'csvダウンロード'
|
78
|
+
date: '日付'
|
79
|
+
delete: '削除'
|
80
|
+
kind: '種類'
|
81
|
+
login_failed: 'ログインできません。'
|
82
|
+
logout: 'ログアウト'
|
83
|
+
name: '名前'
|
84
|
+
not_found: 'Not found'
|
85
|
+
parent: '親'
|
86
|
+
password: 'パスワード'
|
87
|
+
permission_no: '権限がありません。'
|
88
|
+
read: '参照'
|
89
|
+
records_per_page: '件/頁'
|
90
|
+
save: '保存'
|
91
|
+
search: '検索'
|
92
|
+
search_clear: 'クリア'
|
93
|
+
search_end: '検索終了'
|
94
|
+
search_form: '検索フォーム'
|
95
|
+
search_save: '検索条件保存(未実装)'
|
96
|
+
seq: '順序'
|
97
|
+
total_records: 計 %d件
|
98
|
+
update: '更新'
|
99
|
+
updated_at: '更新日時'
|
100
|
+
zip_complete: '〒→住所'
|
@@ -0,0 +1,28 @@
|
|
1
|
+
== README
|
2
|
+
|
3
|
+
This README would normally document whatever steps are necessary to get the
|
4
|
+
application up and running.
|
5
|
+
|
6
|
+
Things you may want to cover:
|
7
|
+
|
8
|
+
* Ruby version
|
9
|
+
|
10
|
+
* System dependencies
|
11
|
+
|
12
|
+
* Configuration
|
13
|
+
|
14
|
+
* Database creation
|
15
|
+
|
16
|
+
* Database initialization
|
17
|
+
|
18
|
+
* How to run the test suite
|
19
|
+
|
20
|
+
* Services (job queues, cache servers, search engines, etc.)
|
21
|
+
|
22
|
+
* Deployment instructions
|
23
|
+
|
24
|
+
* ...
|
25
|
+
|
26
|
+
|
27
|
+
Please feel free to use a different markup language if you do not plan to run
|
28
|
+
<tt>rake doc:app</tt>.
|
data/test/dummy/Rakefile
ADDED
@@ -0,0 +1,21 @@
|
|
1
|
+
// This is a manifest file that'll be compiled into application.js, which will include all the files
|
2
|
+
// listed below.
|
3
|
+
//
|
4
|
+
// Any JavaScript/Coffee file within this directory, lib/assets/javascripts, vendor/assets/javascripts,
|
5
|
+
// or vendor/assets/javascripts of plugins, if any, can be referenced here using a relative path.
|
6
|
+
//
|
7
|
+
// It's not advisable to add code directly here, but if you do, it'll appear at the bottom of the
|
8
|
+
// compiled file.
|
9
|
+
//
|
10
|
+
// Read Sprockets README (https://github.com/sstephenson/sprockets#sprockets-directives) for details
|
11
|
+
// about supported directives.
|
12
|
+
//
|
13
|
+
//= require jquery
|
14
|
+
//= require jquery_ujs
|
15
|
+
//= require jquery-ui
|
16
|
+
//= require jquery-ui/datepicker-ja
|
17
|
+
//= require jquery.remotipart
|
18
|
+
//= require edgarj/base
|
19
|
+
//= require edgarj/menu
|
20
|
+
//= require edgarj/operator_selection
|
21
|
+
//= require_tree .
|
@@ -0,0 +1,16 @@
|
|
1
|
+
/*
|
2
|
+
* This is a manifest file that'll be compiled into application.css, which will include all the files
|
3
|
+
* listed below.
|
4
|
+
*
|
5
|
+
* Any CSS and SCSS file within this directory, lib/assets/stylesheets, vendor/assets/stylesheets,
|
6
|
+
* or vendor/assets/stylesheets of plugins, if any, can be referenced here using a relative path.
|
7
|
+
*
|
8
|
+
* You're free to add application-wide styles to this file and they'll appear at the top of the
|
9
|
+
* compiled file, but it's generally better to create a new file per style scope.
|
10
|
+
*
|
11
|
+
*= require jquery-ui
|
12
|
+
*= require edgarj/base
|
13
|
+
*= require edgarj/menu
|
14
|
+
*= require_self
|
15
|
+
*= require_tree .
|
16
|
+
*/
|
@@ -0,0 +1,56 @@
|
|
1
|
+
body { background-color: #fff; color: #333; }
|
2
|
+
|
3
|
+
body, p, ol, ul, td {
|
4
|
+
font-family: verdana, arial, helvetica, sans-serif;
|
5
|
+
font-size: 13px;
|
6
|
+
line-height: 18px;
|
7
|
+
}
|
8
|
+
|
9
|
+
pre {
|
10
|
+
background-color: #eee;
|
11
|
+
padding: 10px;
|
12
|
+
font-size: 11px;
|
13
|
+
}
|
14
|
+
|
15
|
+
a { color: #000; }
|
16
|
+
a:visited { color: #666; }
|
17
|
+
a:hover { color: #fff; background-color:#000; }
|
18
|
+
|
19
|
+
div.field, div.actions {
|
20
|
+
margin-bottom: 10px;
|
21
|
+
}
|
22
|
+
|
23
|
+
#notice {
|
24
|
+
color: green;
|
25
|
+
}
|
26
|
+
|
27
|
+
.field_with_errors {
|
28
|
+
padding: 2px;
|
29
|
+
background-color: red;
|
30
|
+
display: table;
|
31
|
+
}
|
32
|
+
|
33
|
+
#error_explanation {
|
34
|
+
width: 450px;
|
35
|
+
border: 2px solid red;
|
36
|
+
padding: 7px;
|
37
|
+
padding-bottom: 0;
|
38
|
+
margin-bottom: 20px;
|
39
|
+
background-color: #f0f0f0;
|
40
|
+
}
|
41
|
+
|
42
|
+
#error_explanation h2 {
|
43
|
+
text-align: left;
|
44
|
+
font-weight: bold;
|
45
|
+
padding: 5px 5px 5px 15px;
|
46
|
+
font-size: 12px;
|
47
|
+
margin: -7px;
|
48
|
+
margin-bottom: 0px;
|
49
|
+
background-color: #c00;
|
50
|
+
color: #fff;
|
51
|
+
}
|
52
|
+
|
53
|
+
#error_explanation ul li {
|
54
|
+
font-size: 12px;
|
55
|
+
list-style: square;
|
56
|
+
}
|