constructor-cms 0.5.7 → 0.5.8
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 +4 -4
- data/.gitignore +13 -0
- data/.rspec +2 -0
- data/.travis.yml +9 -0
- data/.yardopts +9 -0
- data/Gemfile +20 -0
- data/Guardfile +17 -0
- data/Rakefile +17 -0
- data/config.ru +4 -0
- data/constructor-cms.gemspec +28 -0
- data/core/app/assets/images/constructor_core/glyphicons-halflings-white.png +0 -0
- data/core/app/assets/images/constructor_core/glyphicons-halflings.png +0 -0
- data/core/app/assets/images/constructor_core/minus.gif +0 -0
- data/core/app/assets/images/constructor_core/plus.gif +0 -0
- data/core/app/assets/images/constructor_core/rss.png +0 -0
- data/core/app/assets/images/constructor_core/treeview-black-line.gif +0 -0
- data/core/app/assets/images/constructor_core/treeview-black.gif +0 -0
- data/core/app/assets/images/constructor_core/treeview-default-line.gif +0 -0
- data/core/app/assets/images/constructor_core/treeview-default.gif +0 -0
- data/core/app/assets/images/constructor_core/treeview-famfamfam-line.gif +0 -0
- data/core/app/assets/images/constructor_core/treeview-famfamfam.gif +0 -0
- data/core/app/assets/images/constructor_core/treeview-gray-line.gif +0 -0
- data/core/app/assets/images/constructor_core/treeview-gray.gif +0 -0
- data/core/app/assets/images/constructor_core/treeview-red-line.gif +0 -0
- data/core/app/assets/images/constructor_core/treeview-red.gif +0 -0
- data/core/app/assets/images/constructor_core/twitter.png +0 -0
- data/core/app/assets/images/constructor_core/widgets.png +0 -0
- data/core/app/assets/javascripts/constructor_core/application.js.coffee +52 -0
- data/core/app/assets/javascripts/constructor_core/bootstrap.js +2276 -0
- data/core/app/assets/javascripts/constructor_core/jquery.cookie.js +92 -0
- data/core/app/assets/javascripts/constructor_core/jquery_bundle.js.coffee +3 -0
- data/core/app/assets/javascripts/constructor_core/keys_snippet.js +33 -0
- data/core/app/assets/javascripts/constructor_core/retina.js +148 -0
- data/core/app/assets/javascripts/constructor_core/urlify.js +82 -0
- data/core/app/assets/stylesheets/constructor_core/application.css.scss +3 -0
- data/core/app/assets/stylesheets/constructor_core/main.css.scss +229 -0
- data/core/app/controllers/constructor_core/application_controller.rb +31 -0
- data/core/app/controllers/constructor_core/sessions_controller.rb +15 -0
- data/core/app/controllers/constructor_core/users_controller.rb +26 -0
- data/core/app/helpers/constructor_core/application_helper.rb +9 -0
- data/core/app/models/constructor_core/user.rb +8 -0
- data/core/app/views/constructor_core/devise/confirmations/new.html.haml +10 -0
- data/core/app/views/constructor_core/devise/mailer/confirmation_instructions.html.haml +5 -0
- data/core/app/views/constructor_core/devise/mailer/reset_password_instructions.html.haml +7 -0
- data/core/app/views/constructor_core/devise/mailer/unlock_instructions.html.haml +5 -0
- data/core/app/views/constructor_core/devise/passwords/edit.html.haml +21 -0
- data/core/app/views/constructor_core/devise/passwords/new.html.haml +13 -0
- data/core/app/views/constructor_core/devise/registrations/edit.html.haml +28 -0
- data/core/app/views/constructor_core/devise/registrations/new.html.haml +20 -0
- data/core/app/views/constructor_core/devise/shared/_links.html.haml +19 -0
- data/core/app/views/constructor_core/devise/unlocks/new.html.haml +9 -0
- data/core/app/views/constructor_core/sessions/new.html.haml +22 -0
- data/core/app/views/constructor_core/users/profile.haml +16 -0
- data/core/app/views/layouts/constructor_core/application.haml +93 -0
- data/core/config/environments/production.rb +3 -0
- data/core/config/initializers/devise.rb +15 -0
- data/core/config/locales/devise.en.yml +56 -0
- data/core/config/locales/devise.ru.yml +52 -0
- data/core/config/locales/en.yml +15 -0
- data/core/config/locales/ru.yml +27 -0
- data/core/config/routes.rb +18 -0
- data/core/constructor-core.gemspec +24 -0
- data/core/db/migrate/1_devise_users.rb +24 -0
- data/core/db/migrate/2_add_default_user.rb +9 -0
- data/core/lib/constructor-core.rb +25 -0
- data/core/lib/constructor_core/engine.rb +6 -0
- data/core/lib/constructor_core/version.rb +3 -0
- data/core/vendor/assets/javascripts/.gitkeep +0 -0
- data/core/vendor/assets/javascripts/ckeditor/ckeditor.js +913 -0
- data/core/vendor/assets/javascripts/ckeditor/config.js +38 -0
- data/core/vendor/assets/javascripts/ckeditor/lang/en.js +5 -0
- data/core/vendor/assets/javascripts/ckeditor/lang/ru.js +5 -0
- data/core/vendor/assets/javascripts/ckeditor/plugins/a11yhelp/dialogs/a11yhelp.js +10 -0
- data/core/vendor/assets/javascripts/ckeditor/plugins/a11yhelp/dialogs/lang/_translationstatus.txt +25 -0
- data/core/vendor/assets/javascripts/ckeditor/plugins/a11yhelp/dialogs/lang/ar.js +9 -0
- data/core/vendor/assets/javascripts/ckeditor/plugins/a11yhelp/dialogs/lang/bg.js +9 -0
- data/core/vendor/assets/javascripts/ckeditor/plugins/a11yhelp/dialogs/lang/ca.js +9 -0
- data/core/vendor/assets/javascripts/ckeditor/plugins/a11yhelp/dialogs/lang/cs.js +10 -0
- data/core/vendor/assets/javascripts/ckeditor/plugins/a11yhelp/dialogs/lang/cy.js +9 -0
- data/core/vendor/assets/javascripts/ckeditor/plugins/a11yhelp/dialogs/lang/da.js +9 -0
- data/core/vendor/assets/javascripts/ckeditor/plugins/a11yhelp/dialogs/lang/de.js +10 -0
- data/core/vendor/assets/javascripts/ckeditor/plugins/a11yhelp/dialogs/lang/el.js +10 -0
- data/core/vendor/assets/javascripts/ckeditor/plugins/a11yhelp/dialogs/lang/en.js +9 -0
- data/core/vendor/assets/javascripts/ckeditor/plugins/a11yhelp/dialogs/lang/eo.js +10 -0
- data/core/vendor/assets/javascripts/ckeditor/plugins/a11yhelp/dialogs/lang/es.js +10 -0
- data/core/vendor/assets/javascripts/ckeditor/plugins/a11yhelp/dialogs/lang/et.js +9 -0
- data/core/vendor/assets/javascripts/ckeditor/plugins/a11yhelp/dialogs/lang/fa.js +9 -0
- data/core/vendor/assets/javascripts/ckeditor/plugins/a11yhelp/dialogs/lang/fi.js +10 -0
- data/core/vendor/assets/javascripts/ckeditor/plugins/a11yhelp/dialogs/lang/fr.js +10 -0
- data/core/vendor/assets/javascripts/ckeditor/plugins/a11yhelp/dialogs/lang/gu.js +9 -0
- data/core/vendor/assets/javascripts/ckeditor/plugins/a11yhelp/dialogs/lang/he.js +9 -0
- data/core/vendor/assets/javascripts/ckeditor/plugins/a11yhelp/dialogs/lang/hi.js +9 -0
- data/core/vendor/assets/javascripts/ckeditor/plugins/a11yhelp/dialogs/lang/hr.js +9 -0
- data/core/vendor/assets/javascripts/ckeditor/plugins/a11yhelp/dialogs/lang/hu.js +9 -0
- data/core/vendor/assets/javascripts/ckeditor/plugins/a11yhelp/dialogs/lang/it.js +10 -0
- data/core/vendor/assets/javascripts/ckeditor/plugins/a11yhelp/dialogs/lang/ja.js +9 -0
- data/core/vendor/assets/javascripts/ckeditor/plugins/a11yhelp/dialogs/lang/km.js +9 -0
- data/core/vendor/assets/javascripts/ckeditor/plugins/a11yhelp/dialogs/lang/ku.js +10 -0
- data/core/vendor/assets/javascripts/ckeditor/plugins/a11yhelp/dialogs/lang/lt.js +9 -0
- data/core/vendor/assets/javascripts/ckeditor/plugins/a11yhelp/dialogs/lang/lv.js +10 -0
- data/core/vendor/assets/javascripts/ckeditor/plugins/a11yhelp/dialogs/lang/mk.js +9 -0
- data/core/vendor/assets/javascripts/ckeditor/plugins/a11yhelp/dialogs/lang/mn.js +9 -0
- data/core/vendor/assets/javascripts/ckeditor/plugins/a11yhelp/dialogs/lang/nb.js +9 -0
- data/core/vendor/assets/javascripts/ckeditor/plugins/a11yhelp/dialogs/lang/nl.js +10 -0
- data/core/vendor/assets/javascripts/ckeditor/plugins/a11yhelp/dialogs/lang/no.js +9 -0
- data/core/vendor/assets/javascripts/ckeditor/plugins/a11yhelp/dialogs/lang/pl.js +10 -0
- data/core/vendor/assets/javascripts/ckeditor/plugins/a11yhelp/dialogs/lang/pt-br.js +9 -0
- data/core/vendor/assets/javascripts/ckeditor/plugins/a11yhelp/dialogs/lang/pt.js +9 -0
- data/core/vendor/assets/javascripts/ckeditor/plugins/a11yhelp/dialogs/lang/ro.js +9 -0
- data/core/vendor/assets/javascripts/ckeditor/plugins/a11yhelp/dialogs/lang/ru.js +9 -0
- data/core/vendor/assets/javascripts/ckeditor/plugins/a11yhelp/dialogs/lang/sk.js +10 -0
- data/core/vendor/assets/javascripts/ckeditor/plugins/a11yhelp/dialogs/lang/sl.js +9 -0
- data/core/vendor/assets/javascripts/ckeditor/plugins/a11yhelp/dialogs/lang/sv.js +10 -0
- data/core/vendor/assets/javascripts/ckeditor/plugins/a11yhelp/dialogs/lang/th.js +9 -0
- data/core/vendor/assets/javascripts/ckeditor/plugins/a11yhelp/dialogs/lang/tr.js +10 -0
- data/core/vendor/assets/javascripts/ckeditor/plugins/a11yhelp/dialogs/lang/ug.js +9 -0
- data/core/vendor/assets/javascripts/ckeditor/plugins/a11yhelp/dialogs/lang/uk.js +9 -0
- data/core/vendor/assets/javascripts/ckeditor/plugins/a11yhelp/dialogs/lang/vi.js +9 -0
- data/core/vendor/assets/javascripts/ckeditor/plugins/a11yhelp/dialogs/lang/zh-cn.js +7 -0
- data/core/vendor/assets/javascripts/ckeditor/plugins/about/dialogs/about.js +6 -0
- data/core/vendor/assets/javascripts/ckeditor/plugins/about/dialogs/logo_ckeditor.png +0 -0
- data/core/vendor/assets/javascripts/ckeditor/plugins/clipboard/dialogs/paste.js +11 -0
- data/core/vendor/assets/javascripts/ckeditor/plugins/colordialog/dialogs/colordialog.js +13 -0
- data/core/vendor/assets/javascripts/ckeditor/plugins/dialog/dialogDefinition.js +4 -0
- data/core/vendor/assets/javascripts/ckeditor/plugins/div/dialogs/div.js +9 -0
- data/core/vendor/assets/javascripts/ckeditor/plugins/fakeobjects/images/spacer.gif +0 -0
- data/core/vendor/assets/javascripts/ckeditor/plugins/find/dialogs/find.js +24 -0
- data/core/vendor/assets/javascripts/ckeditor/plugins/icons.png +0 -0
- data/core/vendor/assets/javascripts/ckeditor/plugins/iframe/dialogs/iframe.js +10 -0
- data/core/vendor/assets/javascripts/ckeditor/plugins/iframe/images/placeholder.png +0 -0
- data/core/vendor/assets/javascripts/ckeditor/plugins/image/dialogs/image.js +43 -0
- data/core/vendor/assets/javascripts/ckeditor/plugins/image/images/noimage.png +0 -0
- data/core/vendor/assets/javascripts/ckeditor/plugins/link/dialogs/anchor.js +8 -0
- data/core/vendor/assets/javascripts/ckeditor/plugins/link/dialogs/link.js +36 -0
- data/core/vendor/assets/javascripts/ckeditor/plugins/link/images/anchor.png +0 -0
- data/core/vendor/assets/javascripts/ckeditor/plugins/liststyle/dialogs/liststyle.js +10 -0
- data/core/vendor/assets/javascripts/ckeditor/plugins/magicline/images/icon.png +0 -0
- data/core/vendor/assets/javascripts/ckeditor/plugins/pastefromword/filter/default.js +31 -0
- data/core/vendor/assets/javascripts/ckeditor/plugins/preview/preview.html +10 -0
- data/core/vendor/assets/javascripts/ckeditor/plugins/scayt/LICENSE.md +28 -0
- data/core/vendor/assets/javascripts/ckeditor/plugins/scayt/README.md +25 -0
- data/core/vendor/assets/javascripts/ckeditor/plugins/scayt/dialogs/options.js +20 -0
- data/core/vendor/assets/javascripts/ckeditor/plugins/scayt/dialogs/toolbar.css +71 -0
- data/core/vendor/assets/javascripts/ckeditor/plugins/showblocks/images/block_address.png +0 -0
- data/core/vendor/assets/javascripts/ckeditor/plugins/showblocks/images/block_blockquote.png +0 -0
- data/core/vendor/assets/javascripts/ckeditor/plugins/showblocks/images/block_div.png +0 -0
- data/core/vendor/assets/javascripts/ckeditor/plugins/showblocks/images/block_h1.png +0 -0
- data/core/vendor/assets/javascripts/ckeditor/plugins/showblocks/images/block_h2.png +0 -0
- data/core/vendor/assets/javascripts/ckeditor/plugins/showblocks/images/block_h3.png +0 -0
- data/core/vendor/assets/javascripts/ckeditor/plugins/showblocks/images/block_h4.png +0 -0
- data/core/vendor/assets/javascripts/ckeditor/plugins/showblocks/images/block_h5.png +0 -0
- data/core/vendor/assets/javascripts/ckeditor/plugins/showblocks/images/block_h6.png +0 -0
- data/core/vendor/assets/javascripts/ckeditor/plugins/showblocks/images/block_p.png +0 -0
- data/core/vendor/assets/javascripts/ckeditor/plugins/showblocks/images/block_pre.png +0 -0
- data/core/vendor/assets/javascripts/ckeditor/plugins/specialchar/dialogs/lang/_translationstatus.txt +20 -0
- data/core/vendor/assets/javascripts/ckeditor/plugins/specialchar/dialogs/lang/ca.js +13 -0
- data/core/vendor/assets/javascripts/ckeditor/plugins/specialchar/dialogs/lang/cs.js +13 -0
- data/core/vendor/assets/javascripts/ckeditor/plugins/specialchar/dialogs/lang/cy.js +14 -0
- data/core/vendor/assets/javascripts/ckeditor/plugins/specialchar/dialogs/lang/de.js +13 -0
- data/core/vendor/assets/javascripts/ckeditor/plugins/specialchar/dialogs/lang/el.js +13 -0
- data/core/vendor/assets/javascripts/ckeditor/plugins/specialchar/dialogs/lang/en.js +13 -0
- data/core/vendor/assets/javascripts/ckeditor/plugins/specialchar/dialogs/lang/eo.js +12 -0
- data/core/vendor/assets/javascripts/ckeditor/plugins/specialchar/dialogs/lang/et.js +13 -0
- data/core/vendor/assets/javascripts/ckeditor/plugins/specialchar/dialogs/lang/fa.js +12 -0
- data/core/vendor/assets/javascripts/ckeditor/plugins/specialchar/dialogs/lang/fi.js +13 -0
- data/core/vendor/assets/javascripts/ckeditor/plugins/specialchar/dialogs/lang/fr.js +11 -0
- data/core/vendor/assets/javascripts/ckeditor/plugins/specialchar/dialogs/lang/he.js +13 -0
- data/core/vendor/assets/javascripts/ckeditor/plugins/specialchar/dialogs/lang/hr.js +13 -0
- data/core/vendor/assets/javascripts/ckeditor/plugins/specialchar/dialogs/lang/it.js +14 -0
- data/core/vendor/assets/javascripts/ckeditor/plugins/specialchar/dialogs/lang/ku.js +13 -0
- data/core/vendor/assets/javascripts/ckeditor/plugins/specialchar/dialogs/lang/lv.js +13 -0
- data/core/vendor/assets/javascripts/ckeditor/plugins/specialchar/dialogs/lang/nb.js +11 -0
- data/core/vendor/assets/javascripts/ckeditor/plugins/specialchar/dialogs/lang/nl.js +13 -0
- data/core/vendor/assets/javascripts/ckeditor/plugins/specialchar/dialogs/lang/no.js +11 -0
- data/core/vendor/assets/javascripts/ckeditor/plugins/specialchar/dialogs/lang/pl.js +12 -0
- data/core/vendor/assets/javascripts/ckeditor/plugins/specialchar/dialogs/lang/pt-br.js +11 -0
- data/core/vendor/assets/javascripts/ckeditor/plugins/specialchar/dialogs/lang/sk.js +13 -0
- data/core/vendor/assets/javascripts/ckeditor/plugins/specialchar/dialogs/lang/sv.js +11 -0
- data/core/vendor/assets/javascripts/ckeditor/plugins/specialchar/dialogs/lang/th.js +13 -0
- data/core/vendor/assets/javascripts/ckeditor/plugins/specialchar/dialogs/lang/tr.js +12 -0
- data/core/vendor/assets/javascripts/ckeditor/plugins/specialchar/dialogs/lang/ug.js +13 -0
- data/core/vendor/assets/javascripts/ckeditor/plugins/specialchar/dialogs/lang/zh-cn.js +9 -0
- data/core/vendor/assets/javascripts/ckeditor/plugins/specialchar/dialogs/specialchar.js +14 -0
- data/core/vendor/assets/javascripts/ckeditor/plugins/table/dialogs/table.js +21 -0
- data/core/vendor/assets/javascripts/ckeditor/plugins/tabletools/dialogs/tableCell.js +16 -0
- data/core/vendor/assets/javascripts/ckeditor/plugins/templates/dialogs/templates.css +84 -0
- data/core/vendor/assets/javascripts/ckeditor/plugins/templates/dialogs/templates.js +10 -0
- data/core/vendor/assets/javascripts/ckeditor/plugins/templates/templates/default.js +6 -0
- data/core/vendor/assets/javascripts/ckeditor/plugins/templates/templates/images/template1.gif +0 -0
- data/core/vendor/assets/javascripts/ckeditor/plugins/templates/templates/images/template2.gif +0 -0
- data/core/vendor/assets/javascripts/ckeditor/plugins/templates/templates/images/template3.gif +0 -0
- data/core/vendor/assets/javascripts/ckeditor/plugins/wsc/LICENSE.md +28 -0
- data/core/vendor/assets/javascripts/ckeditor/plugins/wsc/README.md +25 -0
- data/core/vendor/assets/javascripts/ckeditor/plugins/wsc/dialogs/ciframe.html +49 -0
- data/core/vendor/assets/javascripts/ckeditor/plugins/wsc/dialogs/tmpFrameset.html +52 -0
- data/core/vendor/assets/javascripts/ckeditor/plugins/wsc/dialogs/wsc.css +82 -0
- data/core/vendor/assets/javascripts/ckeditor/plugins/wsc/dialogs/wsc.js +11 -0
- data/core/vendor/assets/javascripts/ckeditor/styles.js +111 -0
- data/core/vendor/assets/stylesheets/.gitkeep +0 -0
- data/core/vendor/assets/stylesheets/ckeditor/contents.css +103 -0
- data/core/vendor/assets/stylesheets/ckeditor/skins/moono/dialog.css +5 -0
- data/core/vendor/assets/stylesheets/ckeditor/skins/moono/dialog_ie.css +5 -0
- data/core/vendor/assets/stylesheets/ckeditor/skins/moono/dialog_ie7.css +5 -0
- data/core/vendor/assets/stylesheets/ckeditor/skins/moono/dialog_ie8.css +5 -0
- data/core/vendor/assets/stylesheets/ckeditor/skins/moono/dialog_opera.css +5 -0
- data/core/vendor/assets/stylesheets/ckeditor/skins/moono/editor.css +5 -0
- data/core/vendor/assets/stylesheets/ckeditor/skins/moono/editor_gecko.css +5 -0
- data/core/vendor/assets/stylesheets/ckeditor/skins/moono/editor_ie.css +5 -0
- data/core/vendor/assets/stylesheets/ckeditor/skins/moono/editor_ie7.css +5 -0
- data/core/vendor/assets/stylesheets/ckeditor/skins/moono/editor_ie8.css +5 -0
- data/core/vendor/assets/stylesheets/ckeditor/skins/moono/icons.png +0 -0
- data/core/vendor/assets/stylesheets/ckeditor/skins/moono/images/arrow.png +0 -0
- data/core/vendor/assets/stylesheets/ckeditor/skins/moono/images/close.png +0 -0
- data/core/vendor/assets/stylesheets/ckeditor/skins/moono/images/mini.png +0 -0
- data/core/vendor/assets/stylesheets/ckeditor/skins/moono/readme.md +51 -0
- data/pages/app/assets/images/constructor_pages/arrow_down.png +0 -0
- data/pages/app/assets/images/constructor_pages/arrow_up.png +0 -0
- data/pages/app/assets/images/constructor_pages/information.png +0 -0
- data/pages/app/assets/images/constructor_pages/page_white_edit.png +0 -0
- data/pages/app/assets/images/constructor_pages/photos.png +0 -0
- data/pages/app/assets/javascripts/constructor_pages/ajax_pages.js +61 -0
- data/pages/app/assets/javascripts/constructor_pages/jquery.history.js +1 -0
- data/pages/app/controllers/constructor_pages/fields_controller.rb +70 -0
- data/pages/app/controllers/constructor_pages/pages_controller.rb +144 -0
- data/pages/app/controllers/constructor_pages/templates_controller.rb +51 -0
- data/pages/app/helpers/constructor_pages/code_name_uniq.rb +9 -0
- data/pages/app/helpers/constructor_pages/fields_helper.rb +18 -0
- data/pages/app/helpers/constructor_pages/move_helper.rb +14 -0
- data/pages/app/helpers/constructor_pages/pages_helper.rb +20 -0
- data/pages/app/helpers/constructor_pages/templates_helper.rb +11 -0
- data/pages/app/models/constructor_pages/field.rb +89 -0
- data/pages/app/models/constructor_pages/page.rb +190 -0
- data/pages/app/models/constructor_pages/template.rb +49 -0
- data/pages/app/models/constructor_pages/types/boolean_type.rb +12 -0
- data/pages/app/models/constructor_pages/types/date_type.rb +16 -0
- data/pages/app/models/constructor_pages/types/float_type.rb +12 -0
- data/pages/app/models/constructor_pages/types/html_type.rb +12 -0
- data/pages/app/models/constructor_pages/types/image_type.rb +18 -0
- data/pages/app/models/constructor_pages/types/integer_type.rb +12 -0
- data/pages/app/models/constructor_pages/types/string_type.rb +12 -0
- data/pages/app/models/constructor_pages/types/text_type.rb +12 -0
- data/pages/app/views/constructor_pages/fields/_form.haml +28 -0
- data/pages/app/views/constructor_pages/fields/edit.haml +6 -0
- data/pages/app/views/constructor_pages/fields/new.haml +6 -0
- data/pages/app/views/constructor_pages/fields/types/_boolean.haml +1 -0
- data/pages/app/views/constructor_pages/fields/types/_date.haml +1 -0
- data/pages/app/views/constructor_pages/fields/types/_float.haml +1 -0
- data/pages/app/views/constructor_pages/fields/types/_html.haml +1 -0
- data/pages/app/views/constructor_pages/fields/types/_image.haml +7 -0
- data/pages/app/views/constructor_pages/fields/types/_integer.haml +1 -0
- data/pages/app/views/constructor_pages/fields/types/_string.haml +1 -0
- data/pages/app/views/constructor_pages/fields/types/_text.haml +1 -0
- data/pages/app/views/constructor_pages/pages/_breadcrumbs.haml +7 -0
- data/pages/app/views/constructor_pages/pages/_form.haml +97 -0
- data/pages/app/views/constructor_pages/pages/_menu.haml +8 -0
- data/pages/app/views/constructor_pages/pages/_submenu.haml +6 -0
- data/pages/app/views/constructor_pages/pages/edit.haml +6 -0
- data/pages/app/views/constructor_pages/pages/index.haml +52 -0
- data/pages/app/views/constructor_pages/pages/new.haml +6 -0
- data/pages/app/views/constructor_pages/pages/show.haml +5 -0
- data/pages/app/views/constructor_pages/templates/_form.haml +47 -0
- data/pages/app/views/constructor_pages/templates/edit.haml +6 -0
- data/pages/app/views/constructor_pages/templates/index.haml +39 -0
- data/pages/app/views/constructor_pages/templates/new.haml +6 -0
- data/pages/config/initializers/dragonfly.rb +9 -0
- data/pages/config/locales/en.yml +51 -0
- data/pages/config/locales/ru.yml +89 -0
- data/pages/config/routes.rb +32 -0
- data/pages/constructor-pages.gemspec +30 -0
- data/pages/db/migrate/10_create_html_types.rb +15 -0
- data/pages/db/migrate/11_create_image_types.rb +16 -0
- data/pages/db/migrate/12_add_default_template.rb +13 -0
- data/pages/db/migrate/1_create_pages.rb +27 -0
- data/pages/db/migrate/2_create_templates.rb +18 -0
- data/pages/db/migrate/3_create_fields.rb +17 -0
- data/pages/db/migrate/4_create_string_types.rb +15 -0
- data/pages/db/migrate/5_create_float_types.rb +15 -0
- data/pages/db/migrate/6_create_boolean_types.rb +15 -0
- data/pages/db/migrate/7_create_integer_types.rb +15 -0
- data/pages/db/migrate/8_create_text_types.rb +15 -0
- data/pages/db/migrate/9_create_date_types.rb +15 -0
- data/pages/lib/constructor-pages.rb +6 -0
- data/pages/lib/constructor_pages/engine.rb +6 -0
- data/pages/public/hello.txt +1 -0
- data/pages/spec/models/constructor_pages/field_model_spec.rb +138 -0
- data/pages/spec/models/constructor_pages/page_model_spec.rb +313 -0
- data/pages/spec/models/constructor_pages/template_model_spec.rb +29 -0
- data/pages/spec/requests/constructor_pages/pages_controller_spec.rb +12 -0
- metadata +296 -8
|
@@ -0,0 +1,144 @@
|
|
|
1
|
+
# encoding: utf-8
|
|
2
|
+
|
|
3
|
+
module ConstructorPages
|
|
4
|
+
class PagesController < ConstructorCore::ApplicationController
|
|
5
|
+
include MoveHelper
|
|
6
|
+
caches_page :show
|
|
7
|
+
|
|
8
|
+
before_filter {@roots = Page.roots}
|
|
9
|
+
before_filter :cache, only: [:create, :update, :destroy, :move_up, :move_down]
|
|
10
|
+
|
|
11
|
+
def new
|
|
12
|
+
@page, @template_id, @multipart = Page.new, Template.first.id, false
|
|
13
|
+
|
|
14
|
+
if params[:page] and (@page.parent = Page.find(params[:page]))
|
|
15
|
+
@template_id = @page.parent.template.child.id
|
|
16
|
+
end
|
|
17
|
+
end
|
|
18
|
+
|
|
19
|
+
def show
|
|
20
|
+
@page = Page.find_by_request_or_first('/' + params[:all])
|
|
21
|
+
|
|
22
|
+
error_404 and return if @page.nil? or !@page.active?
|
|
23
|
+
|
|
24
|
+
redirect_to @page.link if @page.redirect?
|
|
25
|
+
|
|
26
|
+
_code_name = @page.template.code_name.to_s
|
|
27
|
+
|
|
28
|
+
instance_variable_set('@'+_code_name, @page)
|
|
29
|
+
|
|
30
|
+
respond_to do |format|
|
|
31
|
+
format.html { render template: "html_templates/#{_code_name}" }
|
|
32
|
+
format.json {
|
|
33
|
+
_template = render_to_string partial: "json_templates/#{_code_name}.json.erb", layout: false, locals: {_code_name.to_sym => @page, page: @page}
|
|
34
|
+
_js = render_to_string partial: "js_partials/#{_code_name}.js"
|
|
35
|
+
|
|
36
|
+
render json: @page, self_and_ancestors: @page.self_and_ancestors.map(&:id), template: _template.gsub(/\n/, '\\\\n'), js: _js
|
|
37
|
+
}
|
|
38
|
+
end
|
|
39
|
+
end
|
|
40
|
+
|
|
41
|
+
=begin
|
|
42
|
+
def search
|
|
43
|
+
if params[:all].nil?
|
|
44
|
+
@page = Page.first
|
|
45
|
+
else
|
|
46
|
+
@request = '/' + params[:all]
|
|
47
|
+
@page = Page.where(:full_url => @request).first
|
|
48
|
+
end
|
|
49
|
+
|
|
50
|
+
instance_variable_set('@'+@page.template.code_name.to_s, @page)
|
|
51
|
+
|
|
52
|
+
what_search = params[:what_search]
|
|
53
|
+
params_selection = request.query_parameters
|
|
54
|
+
|
|
55
|
+
template = Template.find_by_code_name(what_search.singularize)
|
|
56
|
+
|
|
57
|
+
if template.nil?
|
|
58
|
+
render :action => "error_404", :layout => false
|
|
59
|
+
return
|
|
60
|
+
end
|
|
61
|
+
|
|
62
|
+
@pages = @page.descendants.where(:template_id => template.id)
|
|
63
|
+
|
|
64
|
+
params_selection.each_pair do |code_name, value|
|
|
65
|
+
if value.numeric?
|
|
66
|
+
value = value.to_f
|
|
67
|
+
elsif value.boolean?
|
|
68
|
+
value = value.to_bool
|
|
69
|
+
end
|
|
70
|
+
|
|
71
|
+
@pages = @pages.select do |page|
|
|
72
|
+
if code_name == 'name'
|
|
73
|
+
page.name == value
|
|
74
|
+
else
|
|
75
|
+
page.field(code_name) == value
|
|
76
|
+
end
|
|
77
|
+
end
|
|
78
|
+
end
|
|
79
|
+
|
|
80
|
+
instance_variable_set('@'+template.code_name.pluralize, @pages)
|
|
81
|
+
|
|
82
|
+
render :template => "templates/#{template.code_name}_search"
|
|
83
|
+
end
|
|
84
|
+
=end
|
|
85
|
+
|
|
86
|
+
def edit
|
|
87
|
+
@page = Page.find(params[:id])
|
|
88
|
+
@page.template ||= Template.first
|
|
89
|
+
@template_id = @page.template.id
|
|
90
|
+
|
|
91
|
+
@multipart = @page.fields.map{|f| f.type_value == 'image'}.include?(true) ? true : false
|
|
92
|
+
end
|
|
93
|
+
|
|
94
|
+
def create
|
|
95
|
+
@page = Page.new params[:page]
|
|
96
|
+
|
|
97
|
+
if @page.save
|
|
98
|
+
redirect_to pages.pages_url, notice: t(:page_success_added, name: @page.name)
|
|
99
|
+
else
|
|
100
|
+
render action: :new
|
|
101
|
+
end
|
|
102
|
+
end
|
|
103
|
+
|
|
104
|
+
def update
|
|
105
|
+
@page = Page.find params[:id]
|
|
106
|
+
|
|
107
|
+
if @page.template.id != params[:page][:template_id].to_i
|
|
108
|
+
@page.remove_fields_values
|
|
109
|
+
end
|
|
110
|
+
|
|
111
|
+
if @page.update_attributes params[:page]
|
|
112
|
+
@page.create_fields_values
|
|
113
|
+
@page.update_fields_values params[:fields]
|
|
114
|
+
|
|
115
|
+
redirect_to pages_url, notice: t(:page_success_updated, name: @page.name)
|
|
116
|
+
else
|
|
117
|
+
render action: :edit
|
|
118
|
+
end
|
|
119
|
+
end
|
|
120
|
+
|
|
121
|
+
def destroy
|
|
122
|
+
@page = Page.find(params[:id])
|
|
123
|
+
_name = @page.name
|
|
124
|
+
@page.destroy
|
|
125
|
+
redirect_to pages_url, notice: t(:page_success_removed, name: _name)
|
|
126
|
+
end
|
|
127
|
+
|
|
128
|
+
%w{up down}.each {|m| define_method "move_#{m}" do move_to :page, m.to_sym end}
|
|
129
|
+
|
|
130
|
+
private
|
|
131
|
+
|
|
132
|
+
def error_404
|
|
133
|
+
render file: "#{Rails.root}/public/404", layout: false, status: 404
|
|
134
|
+
end
|
|
135
|
+
|
|
136
|
+
def cache
|
|
137
|
+
expire_page :action => :show
|
|
138
|
+
cache_dir = ActionController::Base.page_cache_directory
|
|
139
|
+
unless cache_dir == Rails.root.to_s+"/public"
|
|
140
|
+
FileUtils.rm_r(Dir.glob(cache_dir+"/*")) rescue Errno::ENOENT
|
|
141
|
+
end
|
|
142
|
+
end
|
|
143
|
+
end
|
|
144
|
+
end
|
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
# encoding: utf-8
|
|
2
|
+
|
|
3
|
+
module ConstructorPages
|
|
4
|
+
class TemplatesController < ConstructorCore::ApplicationController
|
|
5
|
+
include MoveHelper
|
|
6
|
+
|
|
7
|
+
before_filter {@roots = Template.roots}
|
|
8
|
+
|
|
9
|
+
def new
|
|
10
|
+
@template = Template.new
|
|
11
|
+
|
|
12
|
+
if params[:template]
|
|
13
|
+
@parent = Template.find(params[:template])
|
|
14
|
+
@template.parent_id = @parent.id
|
|
15
|
+
end
|
|
16
|
+
end
|
|
17
|
+
|
|
18
|
+
def edit
|
|
19
|
+
@template = Template.find(params[:id])
|
|
20
|
+
end
|
|
21
|
+
|
|
22
|
+
def create
|
|
23
|
+
@template = Template.new params[:template]
|
|
24
|
+
|
|
25
|
+
if @template.save
|
|
26
|
+
redirect_to templates_url, notice: t(:template_success_added, name: @template.name)
|
|
27
|
+
else
|
|
28
|
+
render action: :new
|
|
29
|
+
end
|
|
30
|
+
end
|
|
31
|
+
|
|
32
|
+
def update
|
|
33
|
+
@template = Template.find params[:id]
|
|
34
|
+
|
|
35
|
+
if @template.update_attributes params[:template]
|
|
36
|
+
redirect_to templates_url, notice: t(:template_success_updated, name: @template.name)
|
|
37
|
+
else
|
|
38
|
+
render action: :edit
|
|
39
|
+
end
|
|
40
|
+
end
|
|
41
|
+
|
|
42
|
+
def destroy
|
|
43
|
+
@template = Template.find(params[:id])
|
|
44
|
+
name = @template.name
|
|
45
|
+
@template.destroy
|
|
46
|
+
redirect_to templates_url, notice: t(:template_success_removed, name: name)
|
|
47
|
+
end
|
|
48
|
+
|
|
49
|
+
%w{up down}.each {|m| define_method "move_#{m}" do move_to :template, m.to_sym end}
|
|
50
|
+
end
|
|
51
|
+
end
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
# encoding: utf-8
|
|
2
|
+
|
|
3
|
+
module ConstructorPages
|
|
4
|
+
module FieldsHelper
|
|
5
|
+
def types_value
|
|
6
|
+
[
|
|
7
|
+
[t(:string), "string"],
|
|
8
|
+
[t(:integer), "integer"],
|
|
9
|
+
[t(:float), "float"],
|
|
10
|
+
[t(:boolean), "boolean"],
|
|
11
|
+
[t(:date), "date"],
|
|
12
|
+
[t(:text), "text"],
|
|
13
|
+
[t(:html), "html"],
|
|
14
|
+
[t(:image), "image"]
|
|
15
|
+
]
|
|
16
|
+
end
|
|
17
|
+
end
|
|
18
|
+
end
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
module ConstructorPages
|
|
2
|
+
module MoveHelper
|
|
3
|
+
def move_to(what, to)
|
|
4
|
+
from = ('constructor_pages/'+what.to_s).classify.constantize.find(params[:id])
|
|
5
|
+
to_sibling = to == :up ? from.left_sibling : from.right_sibling
|
|
6
|
+
|
|
7
|
+
if not to_sibling.nil? and from.move_possible?(to_sibling)
|
|
8
|
+
to == :up ? from.move_left : from.move_right
|
|
9
|
+
end
|
|
10
|
+
|
|
11
|
+
redirect_to :back
|
|
12
|
+
end
|
|
13
|
+
end
|
|
14
|
+
end
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
module ConstructorPages
|
|
2
|
+
module PagesHelper
|
|
3
|
+
def for_select(roots)
|
|
4
|
+
result = []
|
|
5
|
+
roots.each do |r|
|
|
6
|
+
r.self_and_descendants.each {|i| result.push(["#{'--'*i.level} #{i.name}", i.id, {'data-full_url' => i.full_url}])}
|
|
7
|
+
end
|
|
8
|
+
result
|
|
9
|
+
end
|
|
10
|
+
|
|
11
|
+
def templates
|
|
12
|
+
Template.all.map{|t| ["#{'--'*t.level} #{t.name}", t.id]}
|
|
13
|
+
end
|
|
14
|
+
|
|
15
|
+
def image_tag_with_at2x(name_at_1x, options={})
|
|
16
|
+
name_at_2x = name_at_1x.gsub(%r{\.\w+$}, '@2x\0')
|
|
17
|
+
image_tag(name_at_1x, options.merge("data-at2x" => asset_path(name_at_2x)))
|
|
18
|
+
end
|
|
19
|
+
end
|
|
20
|
+
end
|
|
@@ -0,0 +1,89 @@
|
|
|
1
|
+
# encoding: utf-8
|
|
2
|
+
|
|
3
|
+
module ConstructorPages
|
|
4
|
+
# Field model. Fields allows to add custom fields for template.
|
|
5
|
+
#
|
|
6
|
+
# Each field has type of value such as float, integer, string...
|
|
7
|
+
class Field < ActiveRecord::Base
|
|
8
|
+
attr_accessible :name, :code_name, :type_value, :template_id, :template
|
|
9
|
+
|
|
10
|
+
# Adding code_name_uniqueness method
|
|
11
|
+
include CodeNameUniq
|
|
12
|
+
|
|
13
|
+
# Array of available field types
|
|
14
|
+
TYPES = %w{string integer float boolean text date html image}
|
|
15
|
+
|
|
16
|
+
validates_presence_of :name
|
|
17
|
+
validates_uniqueness_of :code_name, :scope => :template_id
|
|
18
|
+
validate :code_name_uniqueness
|
|
19
|
+
|
|
20
|
+
after_create :create_page_fields
|
|
21
|
+
after_destroy :destroy_all_page_fields
|
|
22
|
+
|
|
23
|
+
belongs_to :template
|
|
24
|
+
|
|
25
|
+
# Adding has_many for all field types
|
|
26
|
+
TYPES.each do |t|
|
|
27
|
+
class_eval %{
|
|
28
|
+
has_many :#{t}_types, class_name: 'Types::#{t.titleize}Type'
|
|
29
|
+
}
|
|
30
|
+
end
|
|
31
|
+
|
|
32
|
+
has_many :pages, through: :template
|
|
33
|
+
|
|
34
|
+
acts_as_list scope: :template_id
|
|
35
|
+
default_scope order: :position
|
|
36
|
+
|
|
37
|
+
# Return constant of model type_value
|
|
38
|
+
def type_class; "constructor_pages/types/#{type_value}_type".classify.constantize end
|
|
39
|
+
|
|
40
|
+
# Return object of type_value by page
|
|
41
|
+
def find_type_object(page); type_class.find_by_field_id_and_page_id(id, page.id) end
|
|
42
|
+
|
|
43
|
+
# Create object of type_value by page
|
|
44
|
+
def create_type_object(page); type_class.create(field_id: id, page_id: page.id) end
|
|
45
|
+
|
|
46
|
+
# Remove all type_fields values for specified page
|
|
47
|
+
def remove_type_object(page); find_type_object(page).destroy end
|
|
48
|
+
|
|
49
|
+
# Get value from type_field for specified page
|
|
50
|
+
def get_value_for(page)
|
|
51
|
+
_type_object = find_type_object(page)
|
|
52
|
+
_type_object ? _type_object.value : nil
|
|
53
|
+
end
|
|
54
|
+
|
|
55
|
+
# Set value type_field for specified page
|
|
56
|
+
def set_value_for(page, value)
|
|
57
|
+
_type_object = find_type_object(page)
|
|
58
|
+
|
|
59
|
+
if _type_object
|
|
60
|
+
_type_object.value = value
|
|
61
|
+
_type_object.save!
|
|
62
|
+
end
|
|
63
|
+
end
|
|
64
|
+
|
|
65
|
+
private
|
|
66
|
+
|
|
67
|
+
# Check if there is code_name in template branch
|
|
68
|
+
def check_code_name(code_name)
|
|
69
|
+
[code_name.pluralize, code_name.singularize].each do |name|
|
|
70
|
+
%w{self_and_ancestors descendants}.each do |m|
|
|
71
|
+
if template.send(m).map{|t| t.code_name}.include?(name)
|
|
72
|
+
return false
|
|
73
|
+
end
|
|
74
|
+
end
|
|
75
|
+
end
|
|
76
|
+
|
|
77
|
+
true
|
|
78
|
+
end
|
|
79
|
+
|
|
80
|
+
# Create and destroy page fields
|
|
81
|
+
%w{create destroy_all}.each do |m|
|
|
82
|
+
class_eval %{
|
|
83
|
+
def #{m}_page_fields
|
|
84
|
+
template.pages.each {|page| type_class.#{m} page_id: page.id, field_id: id}
|
|
85
|
+
end
|
|
86
|
+
}
|
|
87
|
+
end
|
|
88
|
+
end
|
|
89
|
+
end
|
|
@@ -0,0 +1,190 @@
|
|
|
1
|
+
# encoding: utf-8
|
|
2
|
+
|
|
3
|
+
module ConstructorPages
|
|
4
|
+
# Page model. Pages are core for company websites, blogs etc.
|
|
5
|
+
class Page < ActiveRecord::Base
|
|
6
|
+
attr_accessible :name, :title, :keywords, :description,
|
|
7
|
+
:url, :full_url, :active, :auto_url,
|
|
8
|
+
:parent, :parent_id, :link, :in_menu, :in_map,
|
|
9
|
+
:in_nav, :template_id, :template
|
|
10
|
+
|
|
11
|
+
# Adding has_many for all field types
|
|
12
|
+
Field::TYPES.each do |t|
|
|
13
|
+
class_eval %{
|
|
14
|
+
has_many :#{t}_types, dependent: :destroy, class_name: 'Types::#{t.titleize}Type'
|
|
15
|
+
}
|
|
16
|
+
end
|
|
17
|
+
|
|
18
|
+
has_many :fields, through: :template
|
|
19
|
+
|
|
20
|
+
belongs_to :template
|
|
21
|
+
|
|
22
|
+
default_scope order :lft
|
|
23
|
+
|
|
24
|
+
validate :template_check
|
|
25
|
+
|
|
26
|
+
before_save :friendly_url, :template_assign, :full_url_update
|
|
27
|
+
after_update :descendants_update
|
|
28
|
+
after_create :create_fields_values
|
|
29
|
+
|
|
30
|
+
acts_as_nested_set
|
|
31
|
+
|
|
32
|
+
# Used for find page by request. It return first page if no request given
|
|
33
|
+
# @param request for example <tt>'/conditioners/split-systems/zanussi'</tt>
|
|
34
|
+
def self.find_by_request_or_first(request = nil)
|
|
35
|
+
request.nil? ? Page.first : Page.find_by_full_url(request)
|
|
36
|
+
end
|
|
37
|
+
|
|
38
|
+
# Generate full_url from parent id and url
|
|
39
|
+
# @param parent_id integer
|
|
40
|
+
# @param url should looks like <tt>'hello-world-page'</tt> without leading slash
|
|
41
|
+
def self.full_url_generate(parent_id, url = '')
|
|
42
|
+
'/' + Page.find(parent_id).self_and_ancestors.map {|c| c.url}.append(url).join('/')
|
|
43
|
+
end
|
|
44
|
+
|
|
45
|
+
# Check code_name for field and template.
|
|
46
|
+
# When missing method Page find field or page in branch with plural and singular code_name so
|
|
47
|
+
# field and template code_name should be uniqueness for page methods
|
|
48
|
+
def self.check_code_name(code_name)
|
|
49
|
+
[code_name, code_name.pluralize, code_name.singularize].each do |name|
|
|
50
|
+
if Page.first.respond_to?(name)
|
|
51
|
+
return false
|
|
52
|
+
end
|
|
53
|
+
end
|
|
54
|
+
|
|
55
|
+
true
|
|
56
|
+
end
|
|
57
|
+
|
|
58
|
+
# Get field by code_name
|
|
59
|
+
def field(code_name)
|
|
60
|
+
Field.find_by_code_name_and_template_id code_name, template_id
|
|
61
|
+
end
|
|
62
|
+
|
|
63
|
+
# Get value of field by code_name
|
|
64
|
+
def get_field_value(code_name)
|
|
65
|
+
field = field(code_name)
|
|
66
|
+
field.get_value_for(self) if field
|
|
67
|
+
end
|
|
68
|
+
|
|
69
|
+
# Set value of field by code_name and value
|
|
70
|
+
def set_field_value(code_name, value)
|
|
71
|
+
field = field(code_name)
|
|
72
|
+
field.set_value_for(self, value) if field
|
|
73
|
+
end
|
|
74
|
+
|
|
75
|
+
# Update all fields values with given params.
|
|
76
|
+
# @param params should looks like <tt>{price: 500, content: 'Hello'}</tt>
|
|
77
|
+
# @param reset_booleans reset all boolean fields to false before assign params
|
|
78
|
+
def update_fields_values(params, reset_booleans = true)
|
|
79
|
+
fields.each do |field|
|
|
80
|
+
value = params[field.code_name.to_sym]
|
|
81
|
+
|
|
82
|
+
_type_object = field.find_type_object(self)
|
|
83
|
+
_type_object.value = 0 if field.type_value == 'boolean' and reset_booleans
|
|
84
|
+
|
|
85
|
+
if value
|
|
86
|
+
_type_object.value = field.type_value == 'date' ? parse_date(value).to_s : value
|
|
87
|
+
end
|
|
88
|
+
|
|
89
|
+
_type_object.save
|
|
90
|
+
end
|
|
91
|
+
end
|
|
92
|
+
|
|
93
|
+
# Create fields values
|
|
94
|
+
def create_fields_values; fields.each {|field| field.create_type_object(self) } end
|
|
95
|
+
|
|
96
|
+
# Remove all fields values
|
|
97
|
+
def remove_fields_values
|
|
98
|
+
fields.each {|f| f.remove_type_object self}
|
|
99
|
+
end
|
|
100
|
+
|
|
101
|
+
# Search page by template code_name in same branch of pages and templates.
|
|
102
|
+
# It allows to call page.category.brand.series.model etc.
|
|
103
|
+
#
|
|
104
|
+
# Return one page if founded in ancestors,
|
|
105
|
+
# and return array of pages if founded in descendants
|
|
106
|
+
#
|
|
107
|
+
# It determines if code_name is singular or nor
|
|
108
|
+
# @param code_name template code name
|
|
109
|
+
def find_page_in_branch(code_name)
|
|
110
|
+
_template = Template.find_by_code_name code_name.singularize
|
|
111
|
+
|
|
112
|
+
if _template
|
|
113
|
+
result = []
|
|
114
|
+
result = descendants.where(template_id: _template.id) if code_name == code_name.pluralize
|
|
115
|
+
result = ancestors.find_by_template_id(_template.id) if result.empty?
|
|
116
|
+
result
|
|
117
|
+
end
|
|
118
|
+
end
|
|
119
|
+
|
|
120
|
+
alias_method :find_pages_in_branch, :find_page_in_branch
|
|
121
|
+
|
|
122
|
+
def published?; active end
|
|
123
|
+
|
|
124
|
+
alias_method :active?, :published?
|
|
125
|
+
|
|
126
|
+
# Returns page hash attributes with fields.
|
|
127
|
+
#
|
|
128
|
+
# Default attributes are name and title. Options param allows to add more.
|
|
129
|
+
# @param options default merge name and title page attributes
|
|
130
|
+
def as_json(options = {})
|
|
131
|
+
options = {name: self.name, title: self.title}.merge options
|
|
132
|
+
|
|
133
|
+
fields.each do |field|
|
|
134
|
+
options.merge!({field.code_name.to_sym => field.get_value_for(self)})
|
|
135
|
+
end
|
|
136
|
+
|
|
137
|
+
options
|
|
138
|
+
end
|
|
139
|
+
|
|
140
|
+
# Check if link specified
|
|
141
|
+
def redirect?; url != link && !link.empty? end
|
|
142
|
+
|
|
143
|
+
# When method missing it get/set field value or get page in branch
|
|
144
|
+
#
|
|
145
|
+
# Examples:
|
|
146
|
+
# page.content = 'Hello world'
|
|
147
|
+
# puts page.price
|
|
148
|
+
# page.brand.models.each do...
|
|
149
|
+
def method_missing(name, *args, &block)
|
|
150
|
+
name = name.to_s
|
|
151
|
+
name[-1] == '=' ? set_field_value(name[0..-2], args[0]) : get_field_value(name) || find_pages_in_branch(name)
|
|
152
|
+
end
|
|
153
|
+
|
|
154
|
+
private
|
|
155
|
+
|
|
156
|
+
# if url has been changed by manually or url is empty
|
|
157
|
+
def friendly_url
|
|
158
|
+
self.url = ((auto_url || url.empty?) ? translit(name) : url).parameterize
|
|
159
|
+
end
|
|
160
|
+
|
|
161
|
+
# TODO: move out
|
|
162
|
+
def parse_date(value)
|
|
163
|
+
Date.new(value['date(1i)'].to_i, value['date(2i)'].to_i, value['date(3i)'].to_i)
|
|
164
|
+
end
|
|
165
|
+
|
|
166
|
+
# TODO: add more languages
|
|
167
|
+
# Translit to english
|
|
168
|
+
def translit(str)
|
|
169
|
+
Russian.translit(str)
|
|
170
|
+
end
|
|
171
|
+
|
|
172
|
+
# Page is not valid if there is no template
|
|
173
|
+
def template_check
|
|
174
|
+
errors.add_on_empty(:template_id) if Template.count == 0
|
|
175
|
+
end
|
|
176
|
+
|
|
177
|
+
# If template_id is nil then get first template
|
|
178
|
+
def template_assign
|
|
179
|
+
self.template_id = Template.first.id unless template_id
|
|
180
|
+
end
|
|
181
|
+
|
|
182
|
+
# Update full_url
|
|
183
|
+
def full_url_update
|
|
184
|
+
self.full_url = (parent_id ? Page.full_url_generate(parent_id, url) : '/' + url)
|
|
185
|
+
end
|
|
186
|
+
|
|
187
|
+
# Reload all descendants
|
|
188
|
+
def descendants_update; descendants.map(&:save) end
|
|
189
|
+
end
|
|
190
|
+
end
|