rails_admin_cms 0.0.6 → 0.0.7

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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 98f04997db0c44fc4ad89bd20033393633d265f7
4
- data.tar.gz: 91ba202067192e2afc8f74d078482221426aa6b2
3
+ metadata.gz: cc83df591531fab36fe6ae31d019ef6b21c5619f
4
+ data.tar.gz: 4af4e3c05fa7fa5c73b50f71931d43a7fa908285
5
5
  SHA512:
6
- metadata.gz: 8b00ca62470a7d339afe47e17ee561e54f987ac06f0e237632af796874f920840d77b9fe25f671f49fecc21dfd403b6f86bd530aa2bb313eeb81b0ced18f6ccf
7
- data.tar.gz: 90f04773c8aa3cd7279f0d125968a281c5d68cfa2f54a0465b8dfef1f532f06132c8bcd6f1142dc46d1bae46bfc97c22048fff65410b053e0f01effb70428d72
6
+ metadata.gz: eaa33d3396a9fab4069fc6b76c6c8c7b6d118208342a86d59de150c068c56717c88f007da0db4f018ca062e2b4ab4e4fd8a927f014a40fbe81ccdbb51e6aa9bd
7
+ data.tar.gz: eebcb2e4f4c0a78dc50d3000f13bf2ab2ce83078b24ab3079538517135e5e5989947697dc48851d1878655f5ac8651952a0b52593f6c084c8aaf20c25d5312a5
data/README.md CHANGED
@@ -8,25 +8,60 @@ RailsAdmin...
8
8
 
9
9
  ## View helpers
10
10
 
11
- Seamlessly adds some useful classes to the body tag within your layout in order to scope your css/js : `cms-template-name`, `controller-name`, `controller-name-action-name`, `locale` and `edit-mode`.
11
+ There is an example of a common template using some of the cms view helpers:
12
12
 
13
13
  ```ruby
14
- # ...
14
+ <!DOCTYPE html>
15
+ <html>
16
+ <head>
17
+ <title><%= title = cms_title('AppRailsAdminCMS') %></title>
18
+ <%= cms_meta_data_tags %>
19
+ <%= cms_meta_og_tags(title) %>
20
+ <%= stylesheet_link_tag 'application', media: 'all', 'data-turbolinks-track' => true %>
21
+ <%= javascript_include_tag 'application', 'data-turbolinks-track' => true %>
22
+ <%= csrf_meta_tags %>
15
23
  </head>
16
- <body class="<%= cms_body_class 'other-class', 'etc' %>">
17
- # ...
24
+ <body class="<%= cms_body_class('shop', 'cart') %>">
25
+
26
+ <%= cms_flash_messages %>
27
+ <div>
28
+ <%= cms_locale_selector %>
29
+ </div>
30
+ <div>
31
+ <%= cms_link_to_edit_mode if current_admin? %>
32
+ </div>
33
+
34
+ <%= yield %>
35
+
18
36
  </body>
19
37
  </html>
20
38
  ```
21
39
 
40
+ What's going on:
41
+
42
+ 1. `cms_title` outputs a title tag defined by either a view element or a default one passed as argument
43
+ 1. `cms_meta_data_tags` outputs the meta keywords + description tags defined by either a page/form object or a complete default one passed as argument
44
+ 1. `cms_body_class` outputs
45
+ 1. `cms_flash_messages`
46
+ 1. `cms_locale_selector`
47
+ 1. `cms_link_to_edit_mode`
48
+ 1. `current_admin?`
49
+
22
50
  ## TODO
23
51
 
24
52
  * Documentation
25
53
  * Generators
26
- * Setup PaperTrail
54
+ * Setup CanCanCan
27
55
  * Setup Globalize on Form::Field and Form::Email
56
+ * Improve breadcrumbs functionality
57
+ * Link to image edit in edit form (for cropping)
58
+ * Confirmation email for forms
28
59
  * Published Pages/Forms
29
60
  * Mailchimp integration
61
+ * Redirector
62
+ * Setting fetched from Yaml file
63
+ * Pretty Url for Viewable::LinkPresenter#url as file_url
64
+ * Fetch image size based on Screen size
30
65
  * More Specs
31
66
 
32
67
  ## Notes
@@ -34,4 +69,4 @@ Seamlessly adds some useful classes to the body tag within your layout in order
34
69
  gem 'dalli-delete-matched' needed if Memcached is used
35
70
 
36
71
 
37
- This project rocks and uses MIT-LICENSE.
72
+ This project rocks and uses MIT-LICENSE.
@@ -1,5 +1,5 @@
1
1
  $.fn.extend
2
- cms_data: (name = null) ->
2
+ data_js: (name = null) ->
3
3
  if name?
4
4
  $(this).data("js-#{ name }")
5
5
  else
@@ -17,13 +17,13 @@ class CMS
17
17
  @validate()
18
18
 
19
19
  @ready_with_scope 'cms-edit-mode', =>
20
- @element('cms-sortable').each ->
20
+ @data_js('cms-sortable').each ->
21
21
  $(this).sortable
22
22
  update: (event, ui) ->
23
- url = $(this).cms_data()['url']
23
+ url = $(this).data_js()['url']
24
24
 
25
25
  target = $(ui.item)
26
- id = target.cms_data('cms-sortable-id')
26
+ id = target.data_js('cms-sortable-id')
27
27
  unique_key = { position: target.index() + 1 }
28
28
  payload = $.param(id: id, unique_key: unique_key)
29
29
 
@@ -40,7 +40,7 @@ class CMS
40
40
  $(element).off event, handler.handler
41
41
 
42
42
  @flash_messages: =>
43
- @element('cms-flash').fadeIn().delay(3500).fadeOut(800)
43
+ @data_js('cms-flash').fadeIn().delay(3500).fadeOut(800)
44
44
 
45
45
  @validate: =>
46
46
  $.validate(validateOnBlur: false)
@@ -88,13 +88,13 @@ class CMS
88
88
  @with_scope(body_class, handler)
89
89
 
90
90
  @ready: (handler) =>
91
- $(document).on 'ready page:change', ->
91
+ $(document).on 'ready, page:change', ->
92
92
  handler()
93
93
 
94
- @element_on: (name, events, handler) =>
94
+ @data_js_on: (name, events, handler) =>
95
95
  $(document).on(events, "[data-js-#{ name }]", handler)
96
96
 
97
- @element: (name) =>
97
+ @data_js: (name) =>
98
98
  $("[data-js-#{ name }]")
99
99
 
100
100
  window.CMS = CMS
@@ -1,5 +1,7 @@
1
1
  module CMS
2
2
  class PagesController < RailsAdminCMS::Config.parent_controller
3
+ after_action :allow_iframe, if: RailsAdminCMS::Config.allow_iframe_from
4
+
3
5
  def show
4
6
  @cms_view = Viewable::Page.find(params[:id]) if params[:id].present?
5
7
 
@@ -9,5 +11,11 @@ module CMS
9
11
  render "cms/pages/#{params[:cms_view_type]}"
10
12
  end
11
13
  end
14
+
15
+ private
16
+
17
+ def allow_iframe
18
+ response.headers['X-FRAME-OPTIONS'] = RailsAdminCMS::Config.allow_iframe_from
19
+ end
12
20
  end
13
21
  end
@@ -6,11 +6,16 @@ module CMS
6
6
 
7
7
  def cms_logger(exception, log_name = nil)
8
8
  current_logger = log_name ? ::Logger.new("#{Rails.root}/log/#{log_name}.log") : logger
9
- current_logger.error "[ERROR][#{request.remote_ip}][#{request.method}][#{request.original_url}]"
9
+ current_logger.error ''
10
+ current_logger.error "[EXCEPTION][#{request.remote_ip}][#{request.method}][#{request.original_url}]"
10
11
  if exception
11
12
  current_logger.error exception.message
12
- exception.backtrace.each{ |line| current_logger.error line }
13
+ exception.backtrace.first(RailsAdminCMS::Config.exception_backtrace_size).each do |line|
14
+ current_logger.error line
15
+ end
13
16
  end
17
+ current_logger.error '[END]'
18
+ current_logger.error ''
14
19
  end
15
20
  end
16
21
  end
@@ -0,0 +1,20 @@
1
+ module CMS
2
+ module Rescue
3
+ extend ActiveSupport::Concern
4
+
5
+ included do
6
+ skip_filter *_process_action_callbacks.map(&:filter), only: [:render_404, :render_500]
7
+
8
+ rescue_from Exception, with: :render_500 unless Rails.env.development?
9
+ end
10
+
11
+ def render_404
12
+ render file: 'public/404.html', status: 404, layout: false
13
+ end
14
+
15
+ def render_500(exception = nil)
16
+ cms_logger exception
17
+ render file: 'public/500.html', status: 500, layout: false
18
+ end
19
+ end
20
+ end
@@ -1,7 +1,11 @@
1
1
  module CMS
2
2
  module JavascriptHelper
3
- def cms_js_element(name, data = true, options = {})
3
+ def cms_data_js(name, data = true, options = {})
4
4
  { "data-js-#{name}" => data.to_json }.merge(options)
5
5
  end
6
+
7
+ def cms_data_js_html(name, data = true, options = {})
8
+ CMS.options_to_html cms_data_js(name, data, options)
9
+ end
6
10
  end
7
11
  end
@@ -1,14 +1,18 @@
1
1
  module CMS
2
2
  module LocaleHelper
3
3
  def cms_locale_selector
4
- links = [ link_to(t('cms.locale_selector.language'), '#', class: 'active') ]
4
+ if RailsAdminCMS::Config.hide_current_locale?
5
+ links = []
6
+ else
7
+ links = [ link_to(t('cms.locale_selector.language'), '#', class: 'active') ]
8
+ end
5
9
 
6
10
  I18n.available_locales.reject{ |l| l == locale }.each do |locale|
7
11
  path = current_url_for(locale)
8
12
  links << link_to(t('cms.locale_selector.language', locale: locale), path)
9
13
  end
10
14
 
11
- content_tag(:ul) do
15
+ content_tag(:ul, class: 'cms-locale-selector') do
12
16
  links.each do |link|
13
17
  concat content_tag(:li, link)
14
18
  end
@@ -3,7 +3,7 @@ module CMS
3
3
  def cms_body_class(*args)
4
4
  controller_name = controller_path.gsub('/','-')
5
5
  classes = [
6
- params[:cms_body_class],
6
+ params[:cms_view_type],
7
7
  controller_name,
8
8
  "#{controller_name}-#{action_name}",
9
9
  I18n.locale,
@@ -14,7 +14,7 @@ module CMS
14
14
  end
15
15
 
16
16
  def cms_flash_messages(*args)
17
- content_tag :div, cms_js_element('cms-flash', true, class: 'cms-flash-messages') do
17
+ content_tag :div, cms_data_js('cms-flash', true, class: 'cms-flash-messages') do
18
18
  flash_messages(*args)
19
19
  end
20
20
  end
@@ -8,7 +8,7 @@ module CMS
8
8
  end
9
9
  end
10
10
 
11
- Naming::Viewable::Block.names.each do |type|
11
+ ::Naming::Viewable::Block.names.each do |type|
12
12
  define_cms_view_helper(type)
13
13
 
14
14
  define_method "cms_#{type}" do |name = 'cms', min = 1, max = nil| # max = FLOAT::INFINITY
@@ -18,7 +18,7 @@ module CMS
18
18
  end
19
19
  end
20
20
 
21
- Naming::Viewable.names.each do |type|
21
+ ::Naming::Viewable.names.each do |type|
22
22
  define_cms_view_helper(type)
23
23
 
24
24
  define_method "cms_#{type}" do |name = 'cms', min = 1, max = nil| # max = FLOAT::INFINITY
@@ -103,11 +103,11 @@ module CMS
103
103
  case type
104
104
  when 'page'
105
105
  if @cms_view
106
- presenter = Viewable::PagePresenter.new(@cms_view, self)
106
+ presenter = ::Viewable::PagePresenter.new(@cms_view, self)
107
107
  end
108
108
  when 'form'
109
109
  if @cms_view
110
- presenter = Viewable::FormPresenter.new(@cms_view, self)
110
+ presenter = ::Viewable::FormPresenter.new(@cms_view, self)
111
111
  end
112
112
  else
113
113
  if @cms_view_partial
@@ -119,32 +119,32 @@ module CMS
119
119
 
120
120
  def find_presenter(type, name, position)
121
121
  unique_key = to_unique_key(type, name, position)
122
- if (viewable = UniqueKey.find_viewable(unique_key))
122
+ if (viewable = ::UniqueKey.find_viewable(unique_key))
123
123
  build_presenter(unique_key, viewable)
124
124
  end
125
125
  end
126
126
 
127
127
  def find_or_create_presenter(type, name, position)
128
128
  unique_key = to_unique_key(type, name, position)
129
- viewable = UniqueKey.find_or_create_viewable!(unique_key)
129
+ viewable = ::UniqueKey.find_or_create_viewable!(unique_key)
130
130
  build_presenter(unique_key, viewable)
131
131
  end
132
132
 
133
133
  def build_presenter(unique_key, viewable)
134
- presenter_class = "#{unique_key[:viewable_type]}Presenter".safe_constantize
134
+ presenter_class = "::#{unique_key[:viewable_type]}Presenter".safe_constantize
135
135
  if presenter_class
136
136
  presenter_class.new(viewable, self)
137
137
  else
138
- ViewablePresenter.new(viewable, self)
138
+ ::ViewablePresenter.new(viewable, self)
139
139
  end
140
140
  end
141
141
 
142
142
  def build_list_presenter(viewables, list_key, max)
143
- list_presenter_class = "#{list_key[:viewable_type]}ListPresenter".safe_constantize
143
+ list_presenter_class = "::#{list_key[:viewable_type]}ListPresenter".safe_constantize
144
144
  if list_presenter_class
145
145
  list_presenter_class.new(viewables, self, list_key, max)
146
146
  else
147
- ViewableListPresenter.new(viewables, self, list_key, max)
147
+ ::ViewableListPresenter.new(viewables, self, list_key, max)
148
148
  end
149
149
  end
150
150
 
@@ -27,6 +27,7 @@ module RailsAdmin
27
27
  end.join.html_safe
28
28
  end
29
29
 
30
+ # TODO: simplify by adding a reference param on 'link to edit' client-side
30
31
  def admin_back_home
31
32
  if request.path =~ CMSViewableEdit
32
33
  viewable = extract_viewable($1, $2)
@@ -7,7 +7,7 @@ module Viewable
7
7
  before_update :normalize_url
8
8
  after_commit :reload_routes
9
9
 
10
- scope :with_url, -> { where('url LIKE :url', url: '/%') }
10
+ scope :with_url, -> { where("url LIKE '/%'") }
11
11
  end
12
12
 
13
13
  class_methods do
@@ -36,7 +36,7 @@ module Viewable
36
36
  end
37
37
 
38
38
  def other_uuid(locale)
39
- self.class.other_locale(locale).where(uuid: uuid).first
39
+ self.class.localized(locale).where(uuid: uuid).first
40
40
  end
41
41
 
42
42
  private
@@ -18,8 +18,7 @@ module Viewable
18
18
  after_update :expire_cache
19
19
  after_touch :expire_cache
20
20
 
21
- scope :localized, -> { includes(:unique_key).where(unique_keys: { locale: I18n.locale }) }
22
- scope :other_locale, ->(locale) { includes(:unique_key).where(unique_keys: { locale: locale }) }
21
+ scope :localized, ->(locale = I18n.locale) { includes(:unique_key).where(unique_keys: { locale: locale }) }
23
22
 
24
23
  delegate :has_unlocalized_fields?, :unlocalized_fields, :viewable_type, to: :class
25
24
  end
@@ -11,7 +11,7 @@ class ViewableListPresenter < BaseListPresenter
11
11
  h.content_tag(:ul, sortable(class: "cms-wrapped-edit")) do
12
12
  list.each.with_index(1) do |m, i|
13
13
  name = method_name ? m.__send__(method_name) : i
14
- h.concat(h.content_tag(:li, h.cms_js_element('cms-sortable-id', m.unique_key.id)) do
14
+ h.concat(h.content_tag(:li, h.cms_data_js('cms-sortable-id', m.unique_key.id)) do
15
15
  m.edit_link(name)
16
16
  end)
17
17
  end
@@ -30,14 +30,14 @@ class ViewableListPresenter < BaseListPresenter
30
30
 
31
31
  def sortable(options = {})
32
32
  if h.cms_edit_mode?
33
- h.cms_js_element('cms-sortable', { url: h.main_app.edit_viewable_url(format: :js) }, options)
33
+ h.cms_data_js('cms-sortable', { url: h.main_app.edit_viewable_url(format: :js) }, options)
34
34
  else
35
35
  options
36
36
  end
37
37
  end
38
38
 
39
39
  def sortable_html(options = {})
40
- sortable(options).to_a.map{ |a| %{#{a.first}=#{a.last}} }.join(' ')
40
+ CMS.options_to_html sortable(options)
41
41
  end
42
42
 
43
43
  def ul_sortable_tag(options = {})
@@ -12,7 +12,7 @@ class ViewablePresenter < BasePresenter
12
12
  def li_sortable_tag(options = nil)
13
13
  options ||= {}
14
14
  if h.cms_edit_mode?
15
- options = h.cms_js_element('cms-sortable-id', m.unique_key.id, options)
15
+ options = h.cms_data_js('cms-sortable-id', m.unique_key.id, options)
16
16
  end
17
17
  h.content_tag :li, options do
18
18
  yield
data/config/routes.rb CHANGED
@@ -6,30 +6,24 @@ Rails.application.routes.draw do
6
6
  get 'attachments/*directory/:file' => 'attachments#show', format: true
7
7
 
8
8
  Viewable::Page.with_url.each do |page|
9
- get page.url => "pages#show", format: false,
10
- defaults: { id: page.id, cms_view_type: page.view_name, cms_body_class: page.view_name, locale: page.locale }
9
+ get page.url => "pages#show", defaults: { id: page.id, cms_view_type: page.view_name, locale: page.locale }, format: false
11
10
  end if ActiveRecord::Base.connection.table_exists? 'viewable_pages'
12
11
 
13
12
  Viewable::Form.with_url.each do |form|
14
- get form.url => "forms#new", format: false,
15
- defaults: { id: form.id, cms_view_type: form.form_name, cms_body_class: form.form_name, locale: form.locale }
16
- post form.url => 'forms#create',
17
- defaults: { id: form.id, cms_view_type: form.form_name, cms_body_class: form.form_name, locale: form.locale }
13
+ get form.url => "forms#new", defaults: { id: form.id, cms_view_type: form.form_name, locale: form.locale }, format: false
14
+ post form.url => 'forms#create', defaults: { id: form.id, cms_view_type: form.form_name, locale: form.locale }
18
15
  end if ActiveRecord::Base.connection.table_exists? 'viewable_forms'
19
16
 
20
17
  localized do
21
18
  resources :files, format: false, only: [:show]
22
19
 
23
20
  Naming::Viewable::Page.names.each do |name|
24
- get name => 'pages#show', format: false,
25
- defaults: { cms_view_type: name, cms_body_class: name }
21
+ get name => 'pages#show', defaults: { cms_view_type: name }, format: false
26
22
  end
27
23
 
28
24
  Naming::Viewable::Form.names.each do |name|
29
- get name => 'forms#new', format: false,
30
- defaults: { cms_view_type: name, cms_body_class: name }
31
- post name => 'forms#create',
32
- defaults: { cms_view_type: name, cms_body_class: name }
25
+ get name => 'forms#new', defaults: { cms_view_type: name }, format: false
26
+ post name => 'forms#create', defaults: { cms_view_type: name }
33
27
  end
34
28
  end
35
29
  end
@@ -7,6 +7,7 @@ class ApplicationController < ActionController::Base
7
7
  include CMS::Editing
8
8
  include CMS::Authenticate
9
9
  include CMS::Logger
10
+ include CMS::Rescue
10
11
 
11
12
  def paper_trail_enabled_for_controller
12
13
  false
@@ -11,4 +11,15 @@ RailsAdminCMS.config do |config|
11
11
 
12
12
  # Defines if Forms defined admin side need their body to be editable
13
13
  # config.with_email_body = false
14
+
15
+ # Defines if there is the current locale in the locale selector
16
+ # config.hide_current_locale = false
17
+
18
+ # Defines iframe permissions: same host, different host or all
19
+ # config.allow_iframe_from = 'SAMEORIGIN'
20
+ # config.allow_iframe_from = 'ALLOW-FROM https://www.google.com'
21
+ # config.allow_iframe_from = 'ALLOWALL'
22
+
23
+ # Defines the number of lines picked from exception backtrace in 'cms_logger'
24
+ # config.exception_backtrace_size = 10
14
25
  end
@@ -2,7 +2,7 @@ Rails.application.routes.draw do
2
2
  mount Rich::Engine => '/rich', :as => 'rich'
3
3
  mount RailsAdmin::Engine => '/admin', as: 'rails_admin'
4
4
 
5
- root to: "cms/pages#show", format: false, defaults: { cms_view_type: 'page', cms_body_class: 'page', locale: I18n.default_locale }
5
+ root to: "cms/pages#show", defaults: { cms_view_type: 'page', locale: I18n.default_locale }, format: false
6
6
 
7
7
  # The priority is based upon order of creation: first created -> highest priority.
8
8
  # See how all your routes lay out with "rake routes".
@@ -58,4 +58,6 @@ Rails.application.routes.draw do
58
58
  # # (app/controllers/admin/products_controller.rb)
59
59
  # resources :products
60
60
  # end
61
+
62
+ match '*not_found', via: :all, to: 'application#render_404'
61
63
  end
@@ -14,7 +14,13 @@ module RailsAdminCMS
14
14
  :parent_controller,
15
15
  :parent_mailer,
16
16
  :custom_form_max_size,
17
- :with_email_body
17
+ :with_email_body,
18
+ :hide_current_locale,
19
+ :exception_backtrace_size
20
+ )
21
+
22
+ attr_accessor(
23
+ :allow_iframe_from,
18
24
  )
19
25
 
20
26
  def parent_controller
@@ -32,5 +38,13 @@ module RailsAdminCMS
32
38
  def with_email_body?
33
39
  @with_email_body
34
40
  end
41
+
42
+ def hide_current_locale?
43
+ @hide_current_locale
44
+ end
45
+
46
+ def exception_backtrace_size
47
+ @exception_backtrace_size || 10
48
+ end
35
49
  end
36
50
  end
@@ -27,4 +27,8 @@ module CMS
27
27
  name.split('/').last
28
28
  }
29
29
  end
30
+
31
+ def options_to_html(hash)
32
+ hash.to_a.map{ |a| %{#{a.first}=#{a.last}} }.join(' ')
33
+ end
30
34
  end
@@ -1,3 +1,3 @@
1
1
  module RailsAdminCMS
2
- VERSION = "0.0.6"
2
+ VERSION = "0.0.7"
3
3
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: rails_admin_cms
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.6
4
+ version: 0.0.7
5
5
  platform: ruby
6
6
  authors:
7
7
  - Patrice Lebel
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2016-01-11 00:00:00.000000000 Z
11
+ date: 2016-02-01 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rails
@@ -665,6 +665,7 @@ files:
665
665
  - app/controllers/concerns/cms/editing.rb
666
666
  - app/controllers/concerns/cms/localize.rb
667
667
  - app/controllers/concerns/cms/logger.rb
668
+ - app/controllers/concerns/cms/rescue.rb
668
669
  - app/helpers/cms/cache_helper.rb
669
670
  - app/helpers/cms/form_helper.rb
670
671
  - app/helpers/cms/javascript_helper.rb
@@ -828,9 +829,8 @@ required_rubygems_version: !ruby/object:Gem::Requirement
828
829
  version: '0'
829
830
  requirements: []
830
831
  rubyforge_project:
831
- rubygems_version: 2.4.5.1
832
+ rubygems_version: 2.2.2
832
833
  signing_key:
833
834
  specification_version: 4
834
835
  summary: Flexible Content Management Framework for RailsAdmin
835
836
  test_files: []
836
- has_rdoc: