-
-
Save a-x-/f9a07ad9c7860717701c8e6220f12037 to your computer and use it in GitHub Desktop.
mini Re:activeAdmin pseudo code
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
# DSL-хелперы для конечного контроллера, действуют в контексте класса-контролера, не в инстансе и не в базовом классе | |
# Записывают в instance_variables класса конечного контроллера данные, переданные DSL-вызовами | |
module DslHelpers | |
def self.included(base) | |
base.extend ClassMethods | |
end | |
module ClassMethods | |
def actions | |
@actions ||= [] | |
end | |
def action_item(sym, **options, &block) | |
# Внутри блока action_item обычно находятся link_to, button_to DSL-хелперы | |
# Здесь задаётся контекст блока для формирования JSON'а вида: [{type: 'link', path: '..', title: '..'},,,] | |
create_actions = proc { run_dsl self, JsonViewHelpers::Actions, &block } | |
# Все сформированные DSL-методами данные складываются в instance_variables класса контроллера | |
# Кроме того, на этом этапе могут регистрироваться роуты и пункты меню (но скорее всего, пока еще нет) | |
actions << { id: sym, block: create_actions, options: options } | |
end | |
end | |
end | |
# InheritedResources — используется и в ActiveAdmin, дает collection, resource и хелперы | |
class ReactiveAdmin::Base < InheritedResources::Base | |
include AdminHelper # Общие с felix-rails контроллерами хелперы | |
include Admin::AuthControllerHelper # Такая же авторизация как в felix-rails | |
include JsonViewHelpers # table_for, button_to,,, | |
include DslHelpers # in class context | |
# rails handle | |
def show | |
{ resource: resource, meta: { action_items: self.class.action_items } } | |
# На практике полученные от DSL-методов данные еще пред-подготавливаются | |
# А сам ответ resource или collection может быть получен из 3-х разных мест: | |
# .json.rabl | .arb | dsl-хелперы в контроллере | |
end | |
end | |
class Admin::PackageBagsController < ReactiveAdmin::Base | |
object Package::Bag | |
actions :show | |
action_item :nahuy, only: :show do | |
link_to 'Нахуй', nahuy_admin_hui_path | |
end | |
end |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment