ab_admin 0.1.2 → 0.2.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.
- data/Gemfile +1 -0
- data/Guardfile +1 -1
- data/app/assets/images/admin/flags/b_uk.png +0 -0
- data/app/assets/images/admin/preloader.gif +0 -0
- data/app/assets/javascripts/ab_admin/application.js +1 -28
- data/app/assets/javascripts/ab_admin/components/admin_assets.js.coffee +29 -6
- data/app/assets/javascripts/ab_admin/components/gmaps.js.coffee +120 -91
- data/app/assets/javascripts/ab_admin/components/google_translate.js.coffee +3 -2
- data/app/assets/javascripts/ab_admin/core/batch_actions.js.coffee +4 -7
- data/app/assets/javascripts/ab_admin/core/init.js.coffee +8 -10
- data/app/assets/javascripts/ab_admin/core/ui_utils.js.coffee +53 -24
- data/app/assets/javascripts/ab_admin/core/utils.js.coffee +7 -0
- data/app/assets/javascripts/ab_admin/inputs/datetime_input.js.coffee +1 -2
- data/app/assets/javascripts/ab_admin/main.js +28 -0
- data/app/assets/stylesheets/ab_admin/application.css.scss +1 -10
- data/app/assets/stylesheets/ab_admin/bootstrap_and_overrides.css.scss +4 -0
- data/app/assets/stylesheets/ab_admin/components/_base.css.scss +4 -1
- data/app/assets/stylesheets/ab_admin/components/_form.css.scss +10 -13
- data/app/assets/stylesheets/ab_admin/components/_geo_input.css.scss +5 -9
- data/app/assets/stylesheets/ab_admin/fileupload.css.scss +68 -102
- data/app/assets/stylesheets/ab_admin/main.css.scss +8 -0
- data/app/controllers/admin/base_controller.rb +18 -14
- data/app/controllers/admin/manager_controller.rb +51 -6
- data/app/controllers/admin/users_controller.rb +23 -0
- data/app/views/admin/fileupload/_asset.html.slim +8 -0
- data/app/views/admin/fileupload/_container.html.slim +10 -0
- data/app/views/admin/fileupload/_file.html.slim +5 -0
- data/app/views/admin/fileupload/_ftmpl.html.slim +6 -0
- data/app/views/admin/fileupload/_tmpl.html.slim +9 -0
- data/app/views/admin/users/_form.html.slim +1 -0
- data/config/locales/en.yml +5 -60
- data/config/locales/ru.yml +14 -63
- data/config/routes.rb +7 -4
- data/features/dsl/custom_actions.feature +62 -0
- data/features/dsl/parent_resource.feature +18 -0
- data/features/step_definitions/configuration_steps.rb +6 -0
- data/features/step_definitions/dsl/parent_resource_steps.rb +8 -0
- data/features/step_definitions/settings_steps.rb +1 -1
- data/features/step_definitions/web_steps/transforms_steps.rb +3 -0
- data/features/support/paths.rb +3 -0
- data/lib/ab_admin.rb +5 -0
- data/lib/ab_admin/abstract_resource.rb +28 -4
- data/lib/ab_admin/carrierwave/base_uploader.rb +22 -22
- data/lib/ab_admin/concerns/admin_addition.rb +2 -2
- data/lib/ab_admin/concerns/utilities.rb +4 -4
- data/lib/ab_admin/config/base.rb +18 -0
- data/lib/ab_admin/controllers/head_options.rb +1 -1
- data/lib/ab_admin/core_ext/array.rb +4 -0
- data/lib/ab_admin/core_ext/string.rb +9 -10
- data/lib/ab_admin/hooks/quiet_scope_page.rb +16 -16
- data/lib/ab_admin/hooks/simple_form_hooks.rb +13 -13
- data/lib/ab_admin/i18n_tools/model_translator.rb +67 -0
- data/lib/ab_admin/models/asset.rb +32 -1
- data/lib/ab_admin/models/attachment_file.rb +1 -1
- data/lib/ab_admin/models/locator.rb +7 -0
- data/lib/ab_admin/models/settings.rb +7 -0
- data/lib/ab_admin/models/structure.rb +4 -0
- data/lib/ab_admin/utils.rb +2 -2
- data/lib/ab_admin/version.rb +1 -1
- data/lib/ab_admin/views/admin_helpers.rb +3 -3
- data/lib/ab_admin/views/admin_navigation_helpers.rb +1 -1
- data/lib/ab_admin/views/form_builder.rb +42 -39
- data/lib/ab_admin/views/helpers.rb +5 -0
- data/lib/ab_admin/views/manager_helpers.rb +10 -0
- data/lib/ab_admin/views/search_form_builder.rb +12 -5
- data/lib/generators/ab_admin/install/install_generator.rb +1 -1
- data/lib/generators/ab_admin/install/templates/config/admin_menu.rb +2 -2
- data/lib/generators/ab_admin/install/templates/helpers/admin/structures_helper.rb +1 -1
- data/lib/generators/ab_admin/install/templates/models/attachment_file.rb +2 -0
- data/lib/generators/ab_admin/install/templates/models/locator.rb +0 -1
- data/lib/generators/ab_admin/install/templates/models/settings.rb +0 -1
- data/lib/generators/ab_admin/install/templates/models/static_page.rb +1 -0
- data/lib/generators/ab_admin/install/templates/{scripts → script}/unicorn.sh +0 -0
- data/lib/generators/ab_admin/install/templates/uploaders/avatar_uploader.rb +4 -0
- data/lib/generators/ab_admin/resource/templates/_search_form.haml.erb +1 -1
- data/lib/generators/ab_admin/resource/templates/_search_form.slim.erb +1 -1
- data/lib/generators/ab_admin/resource/templates/_table.haml.erb +1 -2
- data/lib/generators/ab_admin/resource/templates/_table.slim.erb +1 -2
- data/lib/generators/template.rb +1 -0
- data/lib/tasks/i18n.rake +7 -0
- data/spec/dummy/app/models/ab_admin/ab_admin_collection.rb +35 -0
- data/spec/dummy/app/models/ab_admin/ab_admin_product.rb +2 -0
- data/spec/dummy/app/models/admin_menu.rb +4 -2
- data/spec/dummy/app/models/collection.rb +3 -1
- data/spec/generators/install_generator_spec.rb +1 -1
- data/spec/generators/resource_generator_spec.rb +1 -1
- data/spec/models/avatar_spec.rb +29 -2
- metadata +25 -12
- data/app/views/admin/fileupload/_asset.html.erb +0 -5
- data/app/views/admin/fileupload/_container.html.erb +0 -28
- data/app/views/admin/fileupload/_fcontainer.html.erb +0 -25
- data/app/views/admin/fileupload/_file.html.erb +0 -5
- data/app/views/admin/fileupload/_ftmpl.html.erb +0 -7
- data/app/views/admin/fileupload/_tmpl.html.erb +0 -9
- data/lib/ab_admin/utils/csv_builder.rb +0 -52
|
@@ -14,6 +14,29 @@ class Admin::UsersController < Admin::BaseController
|
|
|
14
14
|
|
|
15
15
|
private
|
|
16
16
|
|
|
17
|
+
export do
|
|
18
|
+
field :login
|
|
19
|
+
field :email
|
|
20
|
+
field :first_name
|
|
21
|
+
field :last_name
|
|
22
|
+
field :patronymic
|
|
23
|
+
field(:trust_state) {|r| r.trust_state_type.try(:title) }
|
|
24
|
+
field(:user_role_id) {|r| r.user_role_type.try(:title) }
|
|
25
|
+
field :phone
|
|
26
|
+
field :skype
|
|
27
|
+
field :birthday
|
|
28
|
+
field :locale
|
|
29
|
+
field :time_zone
|
|
30
|
+
#field(:gender) {|r| r.gender_type.try(:title) }
|
|
31
|
+
field :sign_in_count
|
|
32
|
+
field :current_sign_in_at
|
|
33
|
+
field :last_sign_in_at
|
|
34
|
+
field :current_sign_in_ip
|
|
35
|
+
field :last_sign_in_ip
|
|
36
|
+
field :confirmed_at
|
|
37
|
+
field :created_at
|
|
38
|
+
end
|
|
39
|
+
|
|
17
40
|
def resource_action_items
|
|
18
41
|
[:edit, :destroy, :show, :preview, :activate, :suspend]
|
|
19
42
|
end
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
.asset id="asset_#{asset.id}" data-id=asset.id
|
|
2
|
+
= link_to icon('remove', true), admin_asset_path(asset), remote: true, method: :delete, title: t('admin.delete'), :class => 'del_asset', \
|
|
3
|
+
data: {confirm: t('admin.delete_confirmation')}
|
|
4
|
+
.main_image title=t('admin.fileupload.main_image') = icon('home', true)
|
|
5
|
+
.crop_image title=t('admin.fileupload.crop') = icon('resize-full', true)
|
|
6
|
+
.rotate_image title=t('admin.fileupload.rotate') = icon('repeat', true)
|
|
7
|
+
a.fileupload-file.fancybox href=asset.url rel='fancybox'
|
|
8
|
+
img src=asset.thumb_url title=asset.filename
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
= content_tag :div, :id => element_id, :class => css_class, :data => container_data do
|
|
2
|
+
.fileupload-drop-area
|
|
3
|
+
span= t('admin.fileupload.drop_here')
|
|
4
|
+
.fileupload-list.clearfix= render :partial => "admin/fileupload/#{asset_render_template}", :collection => assets
|
|
5
|
+
.file-types
|
|
6
|
+
span.fileupload-button
|
|
7
|
+
button.btn.btn-primary type="button" = t("admin.fileupload.button#{'s' if multiple}")
|
|
8
|
+
.type-info== "#{file_title}. #{t('admin.fileupload.max_size')}: <b>#{file_max_size}</b> MB"
|
|
9
|
+
|
|
10
|
+
= init_js(js)
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
.asset id="asset_#{file.id}" data-id=file.id
|
|
2
|
+
a href=file.url target='_blank' = file.original_name
|
|
3
|
+
span== " (#{file.human_filesize}) - #{l(file.created_at, :format => :long)}"
|
|
4
|
+
= link_to t('admin.delete'), admin_asset_path(file), remote: true, method: :delete, \
|
|
5
|
+
class: 'del_asset btn btn-danger btn-mini', data: {confirm: t('admin.delete_confirmation')}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
script#fileupload_ftmpl type="text/x-jquery-tmpl"
|
|
2
|
+
.asset id="asset_${id}" data-id='${id}'
|
|
3
|
+
a href='${url}' target='_blank' ${original_name}
|
|
4
|
+
span (${human_filesize})
|
|
5
|
+
= link_to t('admin.delete'), '/admin/assets/${id}', remote: true, method: :delete, title: t('admin.delete'), \
|
|
6
|
+
class: 'del_asset btn btn-danger btn-mini', data: {confirm: t('admin.delete_confirmation')}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
script#fileupload_tmpl type="text/x-jquery-tmpl"
|
|
2
|
+
.asset id="asset_${id}" data-id='${id}'
|
|
3
|
+
= link_to icon('remove', true), '/admin/assets/${id}', remote: true, method: :delete, title: t('admin.delete'), :class => 'del_asset', \
|
|
4
|
+
data: {confirm: t('admin.delete_confirmation')}
|
|
5
|
+
.main_image title=t('admin.fileupload.main_image') = icon('home', true)
|
|
6
|
+
.crop_image title=t('admin.fileupload.crop') = icon('resize-full', true)
|
|
7
|
+
.rotate_image title=t('admin.fileupload.rotate') = icon('repeat', true)
|
|
8
|
+
a.fileupload-file.fancybox href='${url}' rel='fancybox'
|
|
9
|
+
img src='${thumb_url}' title='${filename}'
|
data/config/locales/en.yml
CHANGED
|
@@ -100,7 +100,10 @@ en:
|
|
|
100
100
|
delete: Delete file
|
|
101
101
|
drop_here: Drag and drop files here
|
|
102
102
|
max_size: Max size
|
|
103
|
-
|
|
103
|
+
main_image: Set Main
|
|
104
|
+
crop: "Crop"
|
|
105
|
+
rotate: "Rotate"
|
|
106
|
+
form:
|
|
104
107
|
cancel: Cancel
|
|
105
108
|
save: Save
|
|
106
109
|
save_and_add_another: Save and add new
|
|
@@ -137,68 +140,10 @@ en:
|
|
|
137
140
|
update_file: Update File
|
|
138
141
|
filter: "type text to filter"
|
|
139
142
|
translate_incomplete: "Translate all incomplete (google)"
|
|
140
|
-
|
|
141
|
-
max_size: Max posted.
|
|
142
|
-
navigation:
|
|
143
|
+
navigation:
|
|
143
144
|
system: System
|
|
144
145
|
users: Members
|
|
145
146
|
no_results_text: Nothing found
|
|
146
|
-
permissions:
|
|
147
|
-
actions:
|
|
148
|
-
create: Create
|
|
149
|
-
delete: Remove
|
|
150
|
-
publish: Publish
|
|
151
|
-
read: Browse
|
|
152
|
-
update: Edit
|
|
153
|
-
assocs:
|
|
154
|
-
company: company
|
|
155
|
-
form:
|
|
156
|
-
actions: Can
|
|
157
|
-
add: Add
|
|
158
|
-
assoc: Through
|
|
159
|
-
assoc_ids: resource
|
|
160
|
-
context: "on"
|
|
161
|
-
destroy: Remove?
|
|
162
|
-
includes: Related
|
|
163
|
-
is_own: Only the owner
|
|
164
|
-
is_visibility: hide unpublished
|
|
165
|
-
is_work: hide published
|
|
166
|
-
per_resource: According to one resource
|
|
167
|
-
resource: Namely
|
|
168
|
-
resources: Entire resource
|
|
169
|
-
subject: By Resource
|
|
170
|
-
perms:
|
|
171
|
-
actions:
|
|
172
|
-
add_styles: Edit styles
|
|
173
|
-
create: Create
|
|
174
|
-
delete: Remove
|
|
175
|
-
import: Import Manager
|
|
176
|
-
journalist: Journalist
|
|
177
|
-
moderator: Moderator
|
|
178
|
-
publish: Publish
|
|
179
|
-
publish_social: Publish to Social
|
|
180
|
-
read: Browse
|
|
181
|
-
update: Edit
|
|
182
|
-
assocs:
|
|
183
|
-
catalogues: catalogs
|
|
184
|
-
company: company
|
|
185
|
-
group: group
|
|
186
|
-
groups: Group
|
|
187
|
-
form:
|
|
188
|
-
actions: Can
|
|
189
|
-
add: Add
|
|
190
|
-
assoc: Through
|
|
191
|
-
assoc_ids: resource
|
|
192
|
-
context: "on"
|
|
193
|
-
destroy: Remove?
|
|
194
|
-
includes: Related
|
|
195
|
-
is_own: Only the owner
|
|
196
|
-
is_visibility: hide unpublished
|
|
197
|
-
is_work: hide published
|
|
198
|
-
per_resource: According to one resource
|
|
199
|
-
resource: Namely
|
|
200
|
-
resources: Entire resource
|
|
201
|
-
subject: By Resource
|
|
202
147
|
photo: Main picture
|
|
203
148
|
pictures: Image
|
|
204
149
|
preview: Preview
|
data/config/locales/ru.yml
CHANGED
|
@@ -2,7 +2,11 @@
|
|
|
2
2
|
ru:
|
|
3
3
|
_no: "Нет"
|
|
4
4
|
_yes: "Да"
|
|
5
|
-
|
|
5
|
+
activerecord:
|
|
6
|
+
models:
|
|
7
|
+
locator: "Переводы"
|
|
8
|
+
settings: "Настройки"
|
|
9
|
+
admin:
|
|
6
10
|
actions:
|
|
7
11
|
activate:
|
|
8
12
|
link: "Активировать"
|
|
@@ -98,8 +102,11 @@ ru:
|
|
|
98
102
|
buttons: "Выберите файлы"
|
|
99
103
|
delete: "Удалить файл"
|
|
100
104
|
drop_here: "Перетащите файлы сюда"
|
|
101
|
-
|
|
102
|
-
|
|
105
|
+
main_image: "Сделать главным"
|
|
106
|
+
max_size: "Макс разм."
|
|
107
|
+
crop: "Обрезать"
|
|
108
|
+
rotate: "Повернуть"
|
|
109
|
+
form:
|
|
103
110
|
cancel: "Отмена"
|
|
104
111
|
save: "Сохранить"
|
|
105
112
|
save_and_add_another: "Сохранить и добавить новый"
|
|
@@ -140,68 +147,11 @@ ru:
|
|
|
140
147
|
key: "Ключ"
|
|
141
148
|
filter: "введите текст для фильтрации"
|
|
142
149
|
translate_incomplete: "Перевести все пустые (google)"
|
|
143
|
-
|
|
144
|
-
max_size: "Макс разм."
|
|
145
|
-
navigation:
|
|
150
|
+
navigation:
|
|
146
151
|
system: "Система"
|
|
147
152
|
users: "Пользователи"
|
|
153
|
+
dashboard: "Dashboard"
|
|
148
154
|
no_results_text: "Ничего не найдено"
|
|
149
|
-
permissions:
|
|
150
|
-
actions:
|
|
151
|
-
create: "Создавать"
|
|
152
|
-
delete: "Удалять"
|
|
153
|
-
publish: "Публиковать"
|
|
154
|
-
read: "Просматривать"
|
|
155
|
-
update: "Редактировать"
|
|
156
|
-
assocs:
|
|
157
|
-
company: "компанию"
|
|
158
|
-
form:
|
|
159
|
-
actions: "Может"
|
|
160
|
-
add: "Добавить"
|
|
161
|
-
assoc: "Через"
|
|
162
|
-
assoc_ids: "ресурс"
|
|
163
|
-
context: "на"
|
|
164
|
-
destroy: "Удалить?"
|
|
165
|
-
includes: "Относящиеся"
|
|
166
|
-
is_own: "только как владелец"
|
|
167
|
-
is_visibility: "скрывать неопубликованные"
|
|
168
|
-
is_work: "скрывать опубликованные"
|
|
169
|
-
per_resource: "По единице ресурса"
|
|
170
|
-
resource: "А именно"
|
|
171
|
-
resources: "Весь ресурс"
|
|
172
|
-
subject: "По ресурсу"
|
|
173
|
-
perms:
|
|
174
|
-
actions:
|
|
175
|
-
add_styles: "Редактировать стили"
|
|
176
|
-
create: "Создавать"
|
|
177
|
-
delete: "Удалять"
|
|
178
|
-
import: "Импорт менеджер"
|
|
179
|
-
journalist: "Журналист"
|
|
180
|
-
moderator: "Модератор"
|
|
181
|
-
publish: "Публиковать"
|
|
182
|
-
publish_social: "Публиковать в соц"
|
|
183
|
-
read: "Просматривать"
|
|
184
|
-
update: "Редактировать"
|
|
185
|
-
assocs:
|
|
186
|
-
catalogues: "каталоги"
|
|
187
|
-
company: "компанию"
|
|
188
|
-
group: "группу"
|
|
189
|
-
groups: "группы"
|
|
190
|
-
form:
|
|
191
|
-
actions: "Может"
|
|
192
|
-
add: "Добавить"
|
|
193
|
-
assoc: "Через"
|
|
194
|
-
assoc_ids: "ресурс"
|
|
195
|
-
context: "на"
|
|
196
|
-
destroy: "Удалить?"
|
|
197
|
-
includes: "Относящиеся"
|
|
198
|
-
is_own: "только как владелец"
|
|
199
|
-
is_visibility: "скрывать неопубликованные"
|
|
200
|
-
is_work: "скрывать опубликованные"
|
|
201
|
-
per_resource: "По единице ресурса"
|
|
202
|
-
resource: "А именно"
|
|
203
|
-
resources: "Весь ресурс"
|
|
204
|
-
subject: "По ресурсу"
|
|
205
155
|
photo: "Главное изображение"
|
|
206
156
|
pictures: "Изображения"
|
|
207
157
|
preview: "Предпросмотр"
|
|
@@ -274,7 +224,8 @@ ru:
|
|
|
274
224
|
no_results: "Ничего не найдено"
|
|
275
225
|
search: "Идет поиск..."
|
|
276
226
|
value: "Значение"
|
|
277
|
-
attributes:
|
|
227
|
+
attributes:
|
|
228
|
+
map: "Местоположение"
|
|
278
229
|
address: "Адрес"
|
|
279
230
|
country: "Страна"
|
|
280
231
|
country_id: "Страна"
|
data/config/routes.rb
CHANGED
|
@@ -32,19 +32,22 @@ Rails.application.routes.draw do
|
|
|
32
32
|
post 'translate' => AbAdmin::I18nTools::TranslateApp
|
|
33
33
|
|
|
34
34
|
controller 'manager' do
|
|
35
|
-
scope '
|
|
36
|
-
get '/', :to => :index, :as => 'index'
|
|
37
|
-
post '/', :to => :create, :as => 'create'
|
|
35
|
+
scope '(/:parent_resource/:parent_id)/:model_name' do
|
|
38
36
|
get '/new', :to => :new, :as => 'new'
|
|
39
37
|
post '/batch', :to => :batch, :as => 'batch'
|
|
40
38
|
post '/rebuild', :to => :rebuild, :as => 'rebuild'
|
|
39
|
+
match '/custom_action', :to => :custom_action, :as => 'collection_action'
|
|
41
40
|
|
|
42
41
|
scope ':id' do
|
|
43
|
-
get '/', :to => :show, :as => 'show'
|
|
44
42
|
get '/edit', :to => :edit, :as => 'edit'
|
|
43
|
+
match '/custom_action', :to => :custom_action, :as => 'member_action'
|
|
44
|
+
get '/', :to => :show, :as => 'show'
|
|
45
45
|
put '/', :to => :update, :as => 'update'
|
|
46
46
|
delete '/', :to => :destroy, :as => 'destroy'
|
|
47
47
|
end
|
|
48
|
+
|
|
49
|
+
get '/', :to => :index, :as => 'index'
|
|
50
|
+
post '/', :to => :create, :as => 'create'
|
|
48
51
|
end
|
|
49
52
|
end
|
|
50
53
|
|
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
@dsl @wip
|
|
2
|
+
Feature: Custom actions
|
|
3
|
+
|
|
4
|
+
Background:
|
|
5
|
+
Given I am logged in
|
|
6
|
+
And 1 product exists
|
|
7
|
+
|
|
8
|
+
Scenario: Custom member action
|
|
9
|
+
Given a configuration of:
|
|
10
|
+
"""
|
|
11
|
+
class AbAdminProduct < AbAdmin::AbstractResource
|
|
12
|
+
action_item do
|
|
13
|
+
link_to 'Custom action', action_item_admin_path(:custom), :method => :post
|
|
14
|
+
end
|
|
15
|
+
|
|
16
|
+
member_action :custom, :method => :post do
|
|
17
|
+
flash[:notice] = 'Custom action done!'
|
|
18
|
+
redirect_to resource_path
|
|
19
|
+
end
|
|
20
|
+
end
|
|
21
|
+
"""
|
|
22
|
+
And I am on the admin product page
|
|
23
|
+
When I click "Custom action"
|
|
24
|
+
Then I should see "Custom action done!"
|
|
25
|
+
And I should be on the admin product page
|
|
26
|
+
|
|
27
|
+
Scenario: Custom member action http verb check
|
|
28
|
+
Given a configuration of:
|
|
29
|
+
"""
|
|
30
|
+
class AbAdminProduct < AbAdmin::AbstractResource
|
|
31
|
+
action_item do
|
|
32
|
+
link_to 'Custom action', action_item_admin_path(:custom)
|
|
33
|
+
end
|
|
34
|
+
|
|
35
|
+
member_action :custom, :method => :post do
|
|
36
|
+
flash[:notice] = 'Custom action done!'
|
|
37
|
+
redirect_to resource_path
|
|
38
|
+
end
|
|
39
|
+
end
|
|
40
|
+
"""
|
|
41
|
+
And I am on the admin product page
|
|
42
|
+
When I should see routing error when follow "Custom action"
|
|
43
|
+
|
|
44
|
+
Scenario: Custom collection action
|
|
45
|
+
Given a configuration of:
|
|
46
|
+
"""
|
|
47
|
+
class AbAdminProduct < AbAdmin::AbstractResource
|
|
48
|
+
action_item do
|
|
49
|
+
link_to 'Custom collection action', action_item_admin_path(:custom_collection), :method => :post
|
|
50
|
+
end
|
|
51
|
+
|
|
52
|
+
collection_action :custom_collection, :method => :post do
|
|
53
|
+
flash[:notice] = 'Custom collection action done!'
|
|
54
|
+
redirect_to collection_path
|
|
55
|
+
end
|
|
56
|
+
end
|
|
57
|
+
"""
|
|
58
|
+
And I am on the admin products page
|
|
59
|
+
When I click "Custom collection action"
|
|
60
|
+
Then I should see "Custom collection action done!"
|
|
61
|
+
And I should be on the admin products page
|
|
62
|
+
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
@dsl
|
|
2
|
+
Feature: Scope view to parent resource
|
|
3
|
+
|
|
4
|
+
Background:
|
|
5
|
+
Given I am logged in
|
|
6
|
+
|
|
7
|
+
Scenario:
|
|
8
|
+
Given collection "Expensive" with 2 products
|
|
9
|
+
And a product with sku "sofa-9"
|
|
10
|
+
And a configuration of:
|
|
11
|
+
"""
|
|
12
|
+
class AbAdminProduct < AbAdmin::AbstractResource
|
|
13
|
+
belongs_to :collection, :user
|
|
14
|
+
end
|
|
15
|
+
"""
|
|
16
|
+
Then I am on the collection products page
|
|
17
|
+
And I should see 2 products
|
|
18
|
+
And I should not see "sofa-9"
|
|
@@ -75,6 +75,12 @@ Given /^I add "([^"]*)" to the "([^"]*)" model$/ do |code, model_name|
|
|
|
75
75
|
ActiveSupport::Dependencies.clear
|
|
76
76
|
end
|
|
77
77
|
|
|
78
|
+
Given /^I should see routing error when follow "([^"]*)"$/ do |link|
|
|
79
|
+
expect {
|
|
80
|
+
click_link(link)
|
|
81
|
+
}.to raise_error(ActionController::RoutingError)
|
|
82
|
+
end
|
|
83
|
+
|
|
78
84
|
Given /^I should see routing error on (.+)$/ do |page_name|
|
|
79
85
|
expect {
|
|
80
86
|
visit path_to(page_name)
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
Given /^collection "(.*?)" with (\d+) products$/ do |collection, num|
|
|
2
|
+
@collection = FactoryGirl.create(:collection, :name => collection)
|
|
3
|
+
num.times { FactoryGirl.create(:product, :collection => @collection) }
|
|
4
|
+
end
|
|
5
|
+
|
|
6
|
+
Then /^I should see (\d+) products$/ do |num|
|
|
7
|
+
all('#list tbody tr').count.should == num
|
|
8
|
+
end
|
|
@@ -3,5 +3,5 @@ Then /^the "(.*?)" setting should be true$/ do |setting|
|
|
|
3
3
|
end
|
|
4
4
|
|
|
5
5
|
Then /^the "(.*?)" setting should be equal "(.*?)"$/ do |setting, value|
|
|
6
|
-
configatron.to_hash.val(*setting.split('.').map(&:to_sym)).should == YAML.load(value)
|
|
6
|
+
configatron.to_hash.val(*setting.split('.').map(&:to_sym)).should == YAML.load(value.to_s)
|
|
7
7
|
end
|
data/features/support/paths.rb
CHANGED
data/lib/ab_admin.rb
CHANGED
|
@@ -24,6 +24,7 @@ module AbAdmin
|
|
|
24
24
|
autoload :Field, 'ab_admin/config/base'
|
|
25
25
|
autoload :BatchAction, 'ab_admin/config/base'
|
|
26
26
|
autoload :ActionItem, 'ab_admin/config/base'
|
|
27
|
+
autoload :CustomAction, 'ab_admin/config/base'
|
|
27
28
|
autoload :OptionalDisplay, 'ab_admin/config/optional_display'
|
|
28
29
|
end
|
|
29
30
|
|
|
@@ -96,6 +97,7 @@ module AbAdmin
|
|
|
96
97
|
module I18nTools
|
|
97
98
|
autoload :TranslateApp, 'ab_admin/i18n_tools/translate_app'
|
|
98
99
|
autoload :GoogleTranslate, 'ab_admin/i18n_tools/google_translate'
|
|
100
|
+
autoload :ModelTranslator, 'ab_admin/i18n_tools/model_translator'
|
|
99
101
|
end
|
|
100
102
|
|
|
101
103
|
module Generators
|
|
@@ -125,6 +127,9 @@ module AbAdmin
|
|
|
125
127
|
mattr_accessor :display_name_methods
|
|
126
128
|
@@display_name_methods = [:title, :name, :full_name]
|
|
127
129
|
|
|
130
|
+
mattr_accessor :translate_models
|
|
131
|
+
@@translate_models = %w(User Asset Structure StaticPage Header AdminComment)
|
|
132
|
+
|
|
128
133
|
extend Utils
|
|
129
134
|
|
|
130
135
|
def self.setup
|