-
Notifications
You must be signed in to change notification settings - Fork 1
/
Copy pathbase.rb
117 lines (92 loc) · 2.86 KB
/
base.rb
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
# frozen_string_literal: true
module Plutonium
module Definition
# Base class for Plutonium definitions
#
# @abstract Subclass and override {#customize_fields}, {#customize_inputs},
# {#customize_filters}, {#customize_scopes}, and {#customize_sorters}
# to implement custom behavior.
#
# @example
# class MyDefinition < Plutonium::Definition::Base
# field :name, as: :string
# input :email, as: :email
# filter :status, type: :select, collection: %w[active inactive]
# scope :active, default: true
# sorter :created_at
#
# def customize_fields
# field :custom_field, as: :integer
# end
# end
#
# @note This class is not thread-safe. Ensure proper synchronization
# if used in a multi-threaded environment.
class Base
include DefineableProps
include ConfigAttr
include InheritableConfigAttr
include Actions
include Sorting
include Search
include NestedInputs
class IndexPage < Plutonium::UI::Page::Index; end
class NewPage < Plutonium::UI::Page::New; end
class ShowPage < Plutonium::UI::Page::Show; end
class EditPage < Plutonium::UI::Page::Edit; end
class InteractiveActionPage < Plutonium::UI::Page::InteractiveAction; end
class Form < Plutonium::UI::Form::Resource; end
class Table < Plutonium::UI::Table::Resource; end
class Display < Plutonium::UI::Display::Resource; end
class QueryForm < Plutonium::UI::Form::Query; end
class TextFilter < Plutonium::Query::Filters::Text; end
# fields
defineable_props :field, :input, :display, :column
# queries
defineable_props :filter, :scope
# pages
config_attr \
:index_page_title, :index_page_description,
:show_page_title, :show_page_description,
:new_page_title, :new_page_description,
:edit_page_title, :edit_page_description
# breadcrumbs
inheritable_config_attr :breadcrumbs,
:index_page_breadcrumbs, :new_page_breadcrumbs,
:edit_page_breadcrumbs, :show_page_breadcrumbs,
:interactive_action_page_breadcrumbs
# global default
breadcrumbs true
def initialize
super
end
def index_page_class
self.class::IndexPage
end
def new_page_class
self.class::NewPage
end
def show_page_class
self.class::ShowPage
end
def edit_page_class
self.class::EditPage
end
def interactive_action_page_class
self.class::InteractiveActionPage
end
def form_class
self.class::Form
end
def collection_class
self.class::Table
end
def detail_class
self.class::Display
end
def query_form
self.class::QueryForm
end
end
end
end