rails_admin_cms 0.0.1
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.
- checksums.yaml +7 -0
- data/MIT-LICENSE +20 -0
- data/README.md +36 -0
- data/Rakefile +26 -0
- data/app/assets/javascripts/rails_admin_cms/all.js.coffee +2 -0
- data/app/assets/javascripts/rails_admin_cms/cms.js.coffee +18 -0
- data/app/assets/javascripts/rails_admin_cms/cms/flashes.js.coffee +2 -0
- data/app/assets/javascripts/rails_admin_cms/cms/with_scope/forms.js.coffee +4 -0
- data/app/assets/javascripts/rails_admin_cms/cms/with_scope/viewables.js.coffee +14 -0
- data/app/assets/stylesheets/rails_admin_cms/all.css.sass +0 -0
- data/app/controllers/cms/attachments_controller.rb +20 -0
- data/app/controllers/cms/files_controller.rb +19 -0
- data/app/controllers/cms/forms_controller.rb +89 -0
- data/app/controllers/cms/pages_controller.rb +13 -0
- data/app/controllers/cms/viewables_controller.rb +49 -0
- data/app/controllers/concerns/cms/editing.rb +21 -0
- data/app/controllers/concerns/cms/localize.rb +15 -0
- data/app/helpers/cms/cache_helper.rb +26 -0
- data/app/helpers/cms/form_helper.rb +67 -0
- data/app/helpers/cms/locale_helper.rb +34 -0
- data/app/helpers/cms/view_helper.rb +37 -0
- data/app/helpers/cms/viewable_helper.rb +155 -0
- data/app/helpers/rails_admin/form_builder_decorator.rb +11 -0
- data/app/helpers/rails_admin/navigation_helper.rb +77 -0
- data/app/mailers/cms/forms_mailer.rb +48 -0
- data/app/models/admin/form/email.rb +41 -0
- data/app/models/admin/form/field.rb +25 -0
- data/app/models/admin/form/row.rb +36 -0
- data/app/models/admin/form/static/object.rb +15 -0
- data/app/models/admin/form/structure.rb +18 -0
- data/app/models/admin/setting.rb +21 -0
- data/app/models/admin/unique_key.rb +15 -0
- data/app/models/admin/viewable/block.rb +25 -0
- data/app/models/admin/viewable/form.rb +36 -0
- data/app/models/admin/viewable/image.rb +18 -0
- data/app/models/admin/viewable/link.rb +21 -0
- data/app/models/admin/viewable/page.rb +27 -0
- data/app/models/admin/viewable/select.rb +15 -0
- data/app/models/admin/viewable/text.rb +16 -0
- data/app/models/callbacks/form/field_after_create.rb +16 -0
- data/app/models/callbacks/form/field_after_destroy.rb +16 -0
- data/app/models/callbacks/form/field_before_update.rb +29 -0
- data/app/models/callbacks/restrictor.rb +30 -0
- data/app/models/callbacks/unique_key_before_update.rb +46 -0
- data/app/models/callbacks/viewable_after_destroy.rb +27 -0
- data/app/models/callbacks/viewable_before_update.rb +15 -0
- data/app/models/form.rb +43 -0
- data/app/models/form/email.rb +21 -0
- data/app/models/form/field.rb +75 -0
- data/app/models/form/row.rb +30 -0
- data/app/models/form/static.rb +17 -0
- data/app/models/form/static/attachment.rb +62 -0
- data/app/models/form/static/base.rb +10 -0
- data/app/models/form/static/email.rb +23 -0
- data/app/models/form/static/object.rb +12 -0
- data/app/models/form/structure.rb +90 -0
- data/app/models/setting.rb +85 -0
- data/app/models/unique_key.rb +62 -0
- data/app/models/viewable.rb +93 -0
- data/app/models/viewable/block.rb +39 -0
- data/app/models/viewable/field/url.rb +45 -0
- data/app/models/viewable/field/uuid.rb +61 -0
- data/app/models/viewable/form.rb +67 -0
- data/app/models/viewable/image.rb +6 -0
- data/app/models/viewable/link.rb +10 -0
- data/app/models/viewable/page.rb +24 -0
- data/app/models/viewable/select.rb +6 -0
- data/app/models/viewable/text.rb +6 -0
- data/app/presenters/base_list_presenter.rb +42 -0
- data/app/presenters/base_presenter.rb +17 -0
- data/app/presenters/viewable/block_presenter.rb +10 -0
- data/app/presenters/viewable/form_presenter.rb +15 -0
- data/app/presenters/viewable/image_presenter.rb +11 -0
- data/app/presenters/viewable/link_list_presenter.rb +44 -0
- data/app/presenters/viewable/link_presenter.rb +64 -0
- data/app/presenters/viewable/page_presenter.rb +4 -0
- data/app/presenters/viewable/select_list_presenter.rb +7 -0
- data/app/presenters/viewable/select_presenter.rb +15 -0
- data/app/presenters/viewable/text_presenter.rb +11 -0
- data/app/presenters/viewable/view_presenter.rb +38 -0
- data/app/presenters/viewable_list_presenter.rb +54 -0
- data/app/presenters/viewable_presenter.rb +27 -0
- data/app/views/cms/forms/create.js.erb +3 -0
- data/app/views/cms/shared/_flash_messages.js.erb +2 -0
- data/app/views/cms/viewables/update.js.erb +1 -0
- data/app/views/layouts/rails_admin/_secondary_navigation.html.haml +10 -0
- data/config/initializers/assets.rb +6 -0
- data/config/initializers/route_translator.rb +3 -0
- data/config/locales/cms.en.yml +32 -0
- data/config/locales/cms.fr.yml +32 -0
- data/config/locales/flash.en.yml +43 -0
- data/config/locales/flash.fr.yml +43 -0
- data/config/locales/routes.en.yml +3 -0
- data/config/locales/routes.fr.yml +3 -0
- data/config/routes.rb +36 -0
- data/config/spring.rb +1 -0
- data/db/migrate/20151226023652_create_unique_key.rb +19 -0
- data/db/migrate/20151226054335_create_viewable_link.rb +14 -0
- data/db/migrate/20151227064933_create_viewable_text.rb +10 -0
- data/db/migrate/20151227072412_create_rich_rich_images.rich.rb +18 -0
- data/db/migrate/20151227072413_add_uri_cache_to_rich_image.rich.rb +6 -0
- data/db/migrate/20151227072414_refactor_image_to_file.rich.rb +13 -0
- data/db/migrate/20151228231201_create_viewable_image.rb +10 -0
- data/db/migrate/20151230050603_create_setting.rb +13 -0
- data/db/migrate/20151230072904_add_cms_mail_from_and_bcc_settings.rb +14 -0
- data/db/migrate/20151230085947_create_viewable_select.rb +10 -0
- data/db/migrate/20151231054310_create_viewable_block.rb +9 -0
- data/db/migrate/20151231102148_create_viewable_page.rb +13 -0
- data/db/migrate/20160101124428_create_viewable_form.rb +15 -0
- data/db/migrate/20160101140244_create_form_structure.rb +9 -0
- data/db/migrate/20160101141844_create_form_row.rb +13 -0
- data/db/migrate/20160102010317_create_form_field.rb +17 -0
- data/db/migrate/20160103120544_create_form_email.rb +18 -0
- data/lib/generators/cms/install/USAGE +8 -0
- data/lib/generators/cms/install/install_generator.rb +14 -0
- data/lib/generators/cms/install/templates/Gemfile +47 -0
- data/lib/generators/cms/install/templates/app/assets/javascripts/application.js +19 -0
- data/lib/generators/cms/install/templates/app/assets/stylesheets/application.css +17 -0
- data/lib/generators/cms/install/templates/app/controllers/application_controller.rb +9 -0
- data/lib/generators/cms/install/templates/app/controllers/cms/authenticate.rb +34 -0
- data/lib/generators/cms/install/templates/app/models/form/contact.rb +20 -0
- data/lib/generators/cms/install/templates/app/views/cms/blocks/_example.html.erb +13 -0
- data/lib/generators/cms/install/templates/app/views/cms/forms/contact/_form.html.erb +30 -0
- data/lib/generators/cms/install/templates/app/views/cms/forms/contact/new.html.erb +19 -0
- data/lib/generators/cms/install/templates/app/views/cms/forms_mailer/contact.html.erb +6 -0
- data/lib/generators/cms/install/templates/app/views/cms/forms_mailer/contact.text.erb +6 -0
- data/lib/generators/cms/install/templates/app/views/cms/pages/page.html.erb +29 -0
- data/lib/generators/cms/install/templates/app/views/layouts/application.html.erb +23 -0
- data/lib/generators/cms/install/templates/config/application.rb +36 -0
- data/lib/generators/cms/install/templates/config/initializers/rails_admin.rb +97 -0
- data/lib/generators/cms/install/templates/config/initializers/rich.rb +142 -0
- data/lib/generators/cms/install/templates/config/initializers/simple_form.rb +165 -0
- data/lib/generators/cms/install/templates/config/initializers/simple_form_bootstrap.rb +149 -0
- data/lib/generators/cms/install/templates/config/locales/routes.en.yml +4 -0
- data/lib/generators/cms/install/templates/config/locales/simple_form.en.yml +31 -0
- data/lib/generators/cms/install/templates/config/routes.rb +61 -0
- data/lib/generators/cms/install/templates/vendor/assets/javascripts/rails_admin/custom/ui.js.coffee +1 -0
- data/lib/generators/cms/install/templates/vendor/assets/stylesheets/rails_admin/custom/mixins.sass +0 -0
- data/lib/generators/cms/install/templates/vendor/assets/stylesheets/rails_admin/custom/theming.sass +1 -0
- data/lib/generators/cms/install/templates/vendor/assets/stylesheets/rails_admin/custom/variables.sass +0 -0
- data/lib/generators/cms/install/templates/vendor/assets/stylesheets/rich/editor.css +20 -0
- data/lib/rails_admin_cms.rb +28 -0
- data/lib/rails_admin_cms/config.rb +45 -0
- data/lib/rails_admin_cms/core_ext/boolean.rb +29 -0
- data/lib/rails_admin_cms/engine.rb +11 -0
- data/lib/rails_admin_cms/inflections.rb +4 -0
- data/lib/rails_admin_cms/utils.rb +30 -0
- data/lib/rails_admin_cms/version.rb +3 -0
- data/lib/tasks/rails_admin_cms_tasks.rake +4 -0
- metadata +669 -0
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
module Admin
|
|
2
|
+
module Setting
|
|
3
|
+
extend ActiveSupport::Concern
|
|
4
|
+
|
|
5
|
+
included do
|
|
6
|
+
rails_admin do
|
|
7
|
+
navigation_label I18n.t('cms.setting.navigation')
|
|
8
|
+
label I18n.t('cms.setting.one')
|
|
9
|
+
label_plural I18n.t('cms.setting.other')
|
|
10
|
+
|
|
11
|
+
edit do
|
|
12
|
+
field :name do
|
|
13
|
+
read_only true
|
|
14
|
+
end
|
|
15
|
+
field :value, :string
|
|
16
|
+
field :unit
|
|
17
|
+
end
|
|
18
|
+
end
|
|
19
|
+
end
|
|
20
|
+
end
|
|
21
|
+
end
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
module Admin
|
|
2
|
+
module Viewable
|
|
3
|
+
module Block
|
|
4
|
+
extend ActiveSupport::Concern
|
|
5
|
+
|
|
6
|
+
included do
|
|
7
|
+
rails_admin do
|
|
8
|
+
visible false
|
|
9
|
+
|
|
10
|
+
object_label_method do
|
|
11
|
+
:rails_admin_label
|
|
12
|
+
end
|
|
13
|
+
|
|
14
|
+
group :default do
|
|
15
|
+
hide
|
|
16
|
+
end
|
|
17
|
+
end
|
|
18
|
+
end
|
|
19
|
+
|
|
20
|
+
def rails_admin_label
|
|
21
|
+
"#{partial_name}-#{id}"
|
|
22
|
+
end
|
|
23
|
+
end
|
|
24
|
+
end
|
|
25
|
+
end
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
module Admin
|
|
2
|
+
module Viewable
|
|
3
|
+
module Form
|
|
4
|
+
extend ActiveSupport::Concern
|
|
5
|
+
|
|
6
|
+
included do
|
|
7
|
+
rails_admin do
|
|
8
|
+
navigation_label I18n.t('cms.form.navigation')
|
|
9
|
+
label I18n.t('cms.form.one')
|
|
10
|
+
label_plural I18n.t('cms.form.other')
|
|
11
|
+
|
|
12
|
+
field :structure do
|
|
13
|
+
pretty_value do
|
|
14
|
+
h = bindings[:view]
|
|
15
|
+
p = ViewablePresenter.new value, h
|
|
16
|
+
h.link_to value.name, p.__send__(:edit_path)
|
|
17
|
+
end
|
|
18
|
+
|
|
19
|
+
inline_add false
|
|
20
|
+
end
|
|
21
|
+
field :url, :string do
|
|
22
|
+
pretty_value do
|
|
23
|
+
bindings[:view].link_to value, value, target: '_blank'
|
|
24
|
+
end
|
|
25
|
+
end
|
|
26
|
+
field :title
|
|
27
|
+
fields :meta_keywords, :meta_description
|
|
28
|
+
|
|
29
|
+
list do
|
|
30
|
+
scopes [:localized]
|
|
31
|
+
end
|
|
32
|
+
end
|
|
33
|
+
end
|
|
34
|
+
end
|
|
35
|
+
end
|
|
36
|
+
end
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
module Admin
|
|
2
|
+
module Viewable
|
|
3
|
+
module Link
|
|
4
|
+
extend ActiveSupport::Concern
|
|
5
|
+
|
|
6
|
+
included do
|
|
7
|
+
rails_admin do
|
|
8
|
+
visible false
|
|
9
|
+
|
|
10
|
+
field :title
|
|
11
|
+
field :url, :string
|
|
12
|
+
field :page
|
|
13
|
+
field :file, :rich_picker do
|
|
14
|
+
config type: :file, allowed_styles: [:original], scoped: 'cms'
|
|
15
|
+
end
|
|
16
|
+
fields :target_blank, :turbolink
|
|
17
|
+
end
|
|
18
|
+
end
|
|
19
|
+
end
|
|
20
|
+
end
|
|
21
|
+
end
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
module Admin
|
|
2
|
+
module Viewable
|
|
3
|
+
module Page
|
|
4
|
+
extend ActiveSupport::Concern
|
|
5
|
+
|
|
6
|
+
included do
|
|
7
|
+
rails_admin do
|
|
8
|
+
navigation_label I18n.t('cms.page.navigation')
|
|
9
|
+
label I18n.t('cms.page.one')
|
|
10
|
+
label_plural I18n.t('cms.page.other')
|
|
11
|
+
|
|
12
|
+
field :url, :string do
|
|
13
|
+
pretty_value do
|
|
14
|
+
bindings[:view].link_to value, value, target: '_blank'
|
|
15
|
+
end
|
|
16
|
+
end
|
|
17
|
+
field :title
|
|
18
|
+
fields :meta_keywords, :meta_description
|
|
19
|
+
|
|
20
|
+
list do
|
|
21
|
+
scopes [:localized]
|
|
22
|
+
end
|
|
23
|
+
end
|
|
24
|
+
end
|
|
25
|
+
end
|
|
26
|
+
end
|
|
27
|
+
end
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
module Callbacks
|
|
2
|
+
module Form
|
|
3
|
+
class FieldAfterCreate
|
|
4
|
+
include Restrictor
|
|
5
|
+
|
|
6
|
+
def call
|
|
7
|
+
range = m.position..Float::INFINITY
|
|
8
|
+
query = m.fields.where(position: range)
|
|
9
|
+
query.each.with_index(m.position) do |field, position|
|
|
10
|
+
field.update_column(:position, position)
|
|
11
|
+
end
|
|
12
|
+
m.update_header
|
|
13
|
+
end
|
|
14
|
+
end
|
|
15
|
+
end
|
|
16
|
+
end
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
module Callbacks
|
|
2
|
+
module Form
|
|
3
|
+
class FieldAfterDestroy
|
|
4
|
+
include Restrictor
|
|
5
|
+
|
|
6
|
+
def call
|
|
7
|
+
range = (m.position + 1)..Float::INFINITY
|
|
8
|
+
query = m.fields.where(position: range)
|
|
9
|
+
query.each.with_index(m.position) do |field, position|
|
|
10
|
+
field.update_column(:position, position)
|
|
11
|
+
end
|
|
12
|
+
m.update_header
|
|
13
|
+
end
|
|
14
|
+
end
|
|
15
|
+
end
|
|
16
|
+
end
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
module Callbacks
|
|
2
|
+
module Form
|
|
3
|
+
class FieldBeforeUpdate
|
|
4
|
+
include Restrictor
|
|
5
|
+
|
|
6
|
+
def call
|
|
7
|
+
if m.position_was < m.position
|
|
8
|
+
# move list range downward
|
|
9
|
+
range = (m.position_was + 1)..m.position
|
|
10
|
+
reverse = false
|
|
11
|
+
else
|
|
12
|
+
# move list range upward
|
|
13
|
+
range = m.position..(m.position_was - 1)
|
|
14
|
+
reverse = true
|
|
15
|
+
end
|
|
16
|
+
query = m.fields.where(position: range)
|
|
17
|
+
if reverse
|
|
18
|
+
query = query.reverse_order
|
|
19
|
+
end
|
|
20
|
+
query.each.with_index do |field, i|
|
|
21
|
+
position = reverse ? m.position_was - i : m.position_was + i
|
|
22
|
+
|
|
23
|
+
field.update_column(:position, position)
|
|
24
|
+
end
|
|
25
|
+
m.update_header
|
|
26
|
+
end
|
|
27
|
+
end
|
|
28
|
+
end
|
|
29
|
+
end
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
module Callbacks
|
|
2
|
+
module Restrictor
|
|
3
|
+
extend ActiveSupport::Concern
|
|
4
|
+
|
|
5
|
+
included do
|
|
6
|
+
mattr_accessor :initiator
|
|
7
|
+
self.initiator = true
|
|
8
|
+
|
|
9
|
+
attr_accessor :m
|
|
10
|
+
|
|
11
|
+
define_method callback do |model|
|
|
12
|
+
return unless initiator
|
|
13
|
+
begin
|
|
14
|
+
self.initiator = false
|
|
15
|
+
self.m = model
|
|
16
|
+
try :init
|
|
17
|
+
__send__ "call"
|
|
18
|
+
ensure
|
|
19
|
+
self.initiator = true
|
|
20
|
+
end
|
|
21
|
+
end
|
|
22
|
+
end
|
|
23
|
+
|
|
24
|
+
class_methods do
|
|
25
|
+
def callback
|
|
26
|
+
"#{name.demodulize.underscore.split('_').last(2).join('_')}"
|
|
27
|
+
end
|
|
28
|
+
end
|
|
29
|
+
end
|
|
30
|
+
end
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
module Callbacks
|
|
2
|
+
class UniqueKeyBeforeUpdate
|
|
3
|
+
include Restrictor
|
|
4
|
+
|
|
5
|
+
def init
|
|
6
|
+
# keep position and position_was, because buffered_position rewrites them
|
|
7
|
+
@position, @position_was = m.position, m.position_was
|
|
8
|
+
if @position_was < @position
|
|
9
|
+
# move list range downward
|
|
10
|
+
@range = (@position_was + 1)..@position
|
|
11
|
+
@reverse = false
|
|
12
|
+
else
|
|
13
|
+
# move list range upward
|
|
14
|
+
@range = @position..(@position_was - 1)
|
|
15
|
+
@reverse = true
|
|
16
|
+
end
|
|
17
|
+
end
|
|
18
|
+
|
|
19
|
+
def call
|
|
20
|
+
m.with_buffered_position(@position) do
|
|
21
|
+
update_list
|
|
22
|
+
m.other_locales(@position_was).each do |unique_key|
|
|
23
|
+
unique_key.with_buffered_position(@position) do
|
|
24
|
+
update_list(unique_key.locale)
|
|
25
|
+
end
|
|
26
|
+
end
|
|
27
|
+
end
|
|
28
|
+
end
|
|
29
|
+
|
|
30
|
+
private
|
|
31
|
+
|
|
32
|
+
def update_list(locale = nil)
|
|
33
|
+
query = m.list(locale).where(position: @range).order(:position)
|
|
34
|
+
if @reverse
|
|
35
|
+
query = query.reverse_order
|
|
36
|
+
end
|
|
37
|
+
|
|
38
|
+
query.each.with_index do |unique_key, i|
|
|
39
|
+
position = @reverse ? m.position_was - i : m.position_was + i
|
|
40
|
+
|
|
41
|
+
unique_key.update_column(:position, position)
|
|
42
|
+
unique_key.viewable.touch
|
|
43
|
+
end
|
|
44
|
+
end
|
|
45
|
+
end
|
|
46
|
+
end
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
module Callbacks
|
|
2
|
+
class ViewableAfterDestroy
|
|
3
|
+
include Restrictor
|
|
4
|
+
|
|
5
|
+
def init
|
|
6
|
+
@range = (m.position + 1)..Float::INFINITY
|
|
7
|
+
end
|
|
8
|
+
|
|
9
|
+
def call
|
|
10
|
+
update_list
|
|
11
|
+
m.other_locales.each do |viewable|
|
|
12
|
+
viewable.destroy!
|
|
13
|
+
update_list(viewable.locale)
|
|
14
|
+
end
|
|
15
|
+
end
|
|
16
|
+
|
|
17
|
+
private
|
|
18
|
+
|
|
19
|
+
def update_list(locale = nil)
|
|
20
|
+
query = m.list(locale).where(unique_keys: { position: @range }).order('unique_keys.position')
|
|
21
|
+
|
|
22
|
+
query.each.with_index(m.position) do |viewable, position|
|
|
23
|
+
viewable.unique_key.update_column(:position, position)
|
|
24
|
+
end
|
|
25
|
+
end
|
|
26
|
+
end
|
|
27
|
+
end
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
module Callbacks
|
|
2
|
+
class ViewableBeforeUpdate
|
|
3
|
+
include Restrictor
|
|
4
|
+
|
|
5
|
+
def call
|
|
6
|
+
return unless m.has_unlocalized_fields?
|
|
7
|
+
|
|
8
|
+
attributes = m.slice(*m.unlocalized_fields)
|
|
9
|
+
|
|
10
|
+
m.other_locales.each do |viewable|
|
|
11
|
+
viewable.update! attributes
|
|
12
|
+
end
|
|
13
|
+
end
|
|
14
|
+
end
|
|
15
|
+
end
|
data/app/models/form.rb
ADDED
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
module Form
|
|
2
|
+
extend ActiveSupport::Concern
|
|
3
|
+
|
|
4
|
+
included do
|
|
5
|
+
attr_accessor :_subtitle
|
|
6
|
+
|
|
7
|
+
validates :_subtitle, invisible_captcha: true
|
|
8
|
+
|
|
9
|
+
delegate :virtual?, :has_attachments?, :has_collections?, to: :class
|
|
10
|
+
end
|
|
11
|
+
|
|
12
|
+
class_methods do
|
|
13
|
+
def virtual?
|
|
14
|
+
false
|
|
15
|
+
end
|
|
16
|
+
|
|
17
|
+
def has_attachments?
|
|
18
|
+
respond_to? :attachments
|
|
19
|
+
end
|
|
20
|
+
|
|
21
|
+
def has_collections?
|
|
22
|
+
respond_to? :collections
|
|
23
|
+
end
|
|
24
|
+
|
|
25
|
+
def has_collections(*collections)
|
|
26
|
+
define_singleton_method :collections do
|
|
27
|
+
collections
|
|
28
|
+
end
|
|
29
|
+
|
|
30
|
+
delegate :collections, to: :class
|
|
31
|
+
end
|
|
32
|
+
end
|
|
33
|
+
|
|
34
|
+
class << self
|
|
35
|
+
def structure_models
|
|
36
|
+
%w[
|
|
37
|
+
Form::Structure
|
|
38
|
+
Form::Field
|
|
39
|
+
Form::Email
|
|
40
|
+
]
|
|
41
|
+
end
|
|
42
|
+
end
|
|
43
|
+
end
|