enjoy_cms 0.1.0.beta1

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.
Files changed (172) hide show
  1. checksums.yaml +7 -0
  2. data/.gitignore +21 -0
  3. data/.rspec +1 -0
  4. data/.ruby-gemset +1 -0
  5. data/.ruby-version +1 -0
  6. data/Gemfile +5 -0
  7. data/Gemfile.lock +249 -0
  8. data/LICENSE.txt +22 -0
  9. data/README.md +137 -0
  10. data/Rakefile +1 -0
  11. data/app/assets/javascripts/enjoy_cms.coffee +6 -0
  12. data/app/assets/javascripts/enjoy_cms/flash.js.coffee +3 -0
  13. data/app/assets/javascripts/enjoy_cms/map.js.coffee +22 -0
  14. data/app/assets/javascripts/head.load.js +707 -0
  15. data/app/assets/javascripts/jquery.placeholder.js +157 -0
  16. data/app/assets/stylesheets/enjoy_cms.sass +5 -0
  17. data/app/assets/stylesheets/enjoy_cms/flash.sass +63 -0
  18. data/app/assets/stylesheets/enjoy_cms/normalize.scss +406 -0
  19. data/app/assets/stylesheets/enjoy_cms/powered.sass +18 -0
  20. data/app/controllers/concerns/enjoy/errors.rb +93 -0
  21. data/app/controllers/concerns/enjoy/fancybox.rb +14 -0
  22. data/app/controllers/concerns/enjoy/localizeable.rb +33 -0
  23. data/app/controllers/concerns/enjoy/nav_menu.rb +64 -0
  24. data/app/controllers/concerns/enjoy/no_cache.rb +12 -0
  25. data/app/controllers/concerns/enjoy/seo_pages.rb +83 -0
  26. data/app/controllers/enjoy/contacts_controller.rb +5 -0
  27. data/app/controllers/enjoy/home_controller.rb +6 -0
  28. data/app/controllers/enjoy/news_controller.rb +5 -0
  29. data/app/controllers/enjoy/pages_controller.rb +5 -0
  30. data/app/controllers/enjoy/search_controller.rb +6 -0
  31. data/app/helpers/enjoy/gzip_helper.rb +27 -0
  32. data/app/helpers/enjoy/powered_helper.rb +12 -0
  33. data/app/mailers/enjoy/contact_mailer.rb +17 -0
  34. data/app/models/concerns/enjoy/boolean_field.rb +17 -0
  35. data/app/models/concerns/enjoy/enableable.rb +8 -0
  36. data/app/models/concerns/enjoy/geocodeable.rb +4 -0
  37. data/app/models/concerns/enjoy/mappable.rb +95 -0
  38. data/app/models/concerns/enjoy/mongoid_paperclip.rb +37 -0
  39. data/app/models/concerns/enjoy/seoable.rb +36 -0
  40. data/app/models/concerns/enjoy/sitemap_data.rb +23 -0
  41. data/app/models/concerns/enjoy/sort_field.rb +20 -0
  42. data/app/models/concerns/enjoy/sortable.rb +8 -0
  43. data/app/models/enjoy/contact_message.rb +12 -0
  44. data/app/models/enjoy/embedded_element.rb +15 -0
  45. data/app/models/enjoy/embedded_gallery_image.rb +15 -0
  46. data/app/models/enjoy/gallery.rb +10 -0
  47. data/app/models/enjoy/gallery_image.rb +10 -0
  48. data/app/models/enjoy/menu.rb +12 -0
  49. data/app/models/enjoy/news.rb +12 -0
  50. data/app/models/enjoy/page.rb +12 -0
  51. data/app/models/enjoy/seo.rb +13 -0
  52. data/app/views/blocks/_favicon.html.slim +21 -0
  53. data/app/views/blocks/_footer.html.slim +1 -0
  54. data/app/views/blocks/_seo_block.html.slim +18 -0
  55. data/app/views/blocks/_seo_block_with_obj.html.slim +27 -0
  56. data/app/views/devise/registrations/edit.html.slim +21 -0
  57. data/app/views/devise/registrations/new.html.slim +21 -0
  58. data/app/views/devise/sessions/new.html.slim +22 -0
  59. data/app/views/devise/shared/_links.html.slim +11 -0
  60. data/app/views/enjoy/contact_mailer/new_message_email.html.slim +15 -0
  61. data/app/views/enjoy/contacts/index.html.slim +10 -0
  62. data/app/views/enjoy/contacts/new.html.slim +10 -0
  63. data/app/views/enjoy/contacts/sent.html.slim +4 -0
  64. data/app/views/enjoy/home/index.html.slim +1 -0
  65. data/app/views/enjoy/news/index.html.slim +9 -0
  66. data/app/views/enjoy/news/show.html.slim +8 -0
  67. data/app/views/enjoy/pages/show.html.slim +1 -0
  68. data/app/views/enjoy/search/index.html.slim +19 -0
  69. data/app/views/errors/_base.html.slim +3 -0
  70. data/app/views/errors/error_403.html.slim +1 -0
  71. data/app/views/errors/error_404.html.slim +1 -0
  72. data/app/views/errors/error_500.html.slim +1 -0
  73. data/app/views/layouts/application.html.slim +25 -0
  74. data/app/views/rails_admin/main/_check_boxes.html.slim +27 -0
  75. data/app/views/rails_admin/main/_enum_check_boxes.html.slim +5 -0
  76. data/app/views/rails_admin/main/_enum_radio_buttons.html.slim +5 -0
  77. data/app/views/rails_admin/main/_form_raw.html.slim +1 -0
  78. data/app/views/shared/_admin_link.html.slim +3 -0
  79. data/app/views/shared/_messages.html.slim +7 -0
  80. data/app/views/shared/_meta.html.slim +19 -0
  81. data/app/views/shared/_obj.html.slim +21 -0
  82. data/app/views/shared/_og.html.slim +4 -0
  83. data/app/views/simple_captcha/_simple_captcha.html.slim +12 -0
  84. data/config/initializers/simple_captcha.rb +29 -0
  85. data/config/locales/en.enjoy.yml +29 -0
  86. data/config/locales/en.enjoy_admin.yml +6 -0
  87. data/config/locales/ru.cancan.yml +4 -0
  88. data/config/locales/ru.devise.yml +65 -0
  89. data/config/locales/ru.enjoy.yml +39 -0
  90. data/config/locales/ru.enjoy_admin.yml +6 -0
  91. data/config/locales/ru.kaminari.yml +17 -0
  92. data/config/locales/ru.models.yml +103 -0
  93. data/config/locales/ru.mongoid.yml +450 -0
  94. data/config/locales/ru.rails_admin.yml +148 -0
  95. data/config/locales/ru.simple_captcha.yml +3 -0
  96. data/config/locales/ru.simple_form.yml +9 -0
  97. data/config/routes.rb +14 -0
  98. data/enjoy_cms.gemspec +53 -0
  99. data/lib/enjoy/admin.rb +350 -0
  100. data/lib/enjoy/admin/contact_message.rb +36 -0
  101. data/lib/enjoy/admin/embedded_element.rb +11 -0
  102. data/lib/enjoy/admin/embedded_gallery_image.rb +15 -0
  103. data/lib/enjoy/admin/gallery.rb +20 -0
  104. data/lib/enjoy/admin/gallery_image.rb +18 -0
  105. data/lib/enjoy/admin/menu.rb +27 -0
  106. data/lib/enjoy/admin/news.rb +57 -0
  107. data/lib/enjoy/admin/page.rb +81 -0
  108. data/lib/enjoy/admin/seo.rb +17 -0
  109. data/lib/enjoy/configuration.rb +73 -0
  110. data/lib/enjoy/controller.rb +31 -0
  111. data/lib/enjoy/controllers/contacts.rb +70 -0
  112. data/lib/enjoy/controllers/news.rb +36 -0
  113. data/lib/enjoy/controllers/pages.rb +22 -0
  114. data/lib/enjoy/controllers/search.rb +62 -0
  115. data/lib/enjoy/elastic_search.rb +31 -0
  116. data/lib/enjoy/engine.rb +46 -0
  117. data/lib/enjoy/migration.rb +34 -0
  118. data/lib/enjoy/model.rb +22 -0
  119. data/lib/enjoy/models/active_record/contact_message.rb +14 -0
  120. data/lib/enjoy/models/active_record/menu.rb +17 -0
  121. data/lib/enjoy/models/active_record/news.rb +26 -0
  122. data/lib/enjoy/models/active_record/page.rb +20 -0
  123. data/lib/enjoy/models/active_record/seo.rb +17 -0
  124. data/lib/enjoy/models/contact_message.rb +37 -0
  125. data/lib/enjoy/models/embedded_element.rb +12 -0
  126. data/lib/enjoy/models/embedded_gallery_image.rb +16 -0
  127. data/lib/enjoy/models/gallery.rb +29 -0
  128. data/lib/enjoy/models/gallery_image.rb +23 -0
  129. data/lib/enjoy/models/menu.rb +28 -0
  130. data/lib/enjoy/models/mongoid/contact_message.rb +20 -0
  131. data/lib/enjoy/models/mongoid/embedded_element.rb +13 -0
  132. data/lib/enjoy/models/mongoid/embedded_gallery_image.rb +19 -0
  133. data/lib/enjoy/models/mongoid/gallery.rb +23 -0
  134. data/lib/enjoy/models/mongoid/gallery_image.rb +21 -0
  135. data/lib/enjoy/models/mongoid/menu.rb +15 -0
  136. data/lib/enjoy/models/mongoid/news.rb +29 -0
  137. data/lib/enjoy/models/mongoid/page.rb +25 -0
  138. data/lib/enjoy/models/mongoid/seo.rb +28 -0
  139. data/lib/enjoy/models/news.rb +58 -0
  140. data/lib/enjoy/models/page.rb +90 -0
  141. data/lib/enjoy/models/seo.rb +22 -0
  142. data/lib/enjoy/patch.rb +58 -0
  143. data/lib/enjoy/rails_admin_menu.rb +145 -0
  144. data/lib/enjoy/simple_form_patch.rb +12 -0
  145. data/lib/enjoy/tasks.rb +13 -0
  146. data/lib/enjoy/version.rb +3 -0
  147. data/lib/enjoy_cms.rb +109 -0
  148. data/lib/filename_to_slug.rb +34 -0
  149. data/lib/generators/enjoy/ability_generator.rb +14 -0
  150. data/lib/generators/enjoy/admin_generator.rb +21 -0
  151. data/lib/generators/enjoy/capify_generator.rb +39 -0
  152. data/lib/generators/enjoy/layout_generator.rb +14 -0
  153. data/lib/generators/enjoy/migration_generator.rb +18 -0
  154. data/lib/generators/enjoy/templates/Capfile +17 -0
  155. data/lib/generators/enjoy/templates/ability.erb +26 -0
  156. data/lib/generators/enjoy/templates/admin.erb +89 -0
  157. data/lib/generators/enjoy/templates/deploy.erb +47 -0
  158. data/lib/generators/enjoy/templates/dl.erb +30 -0
  159. data/lib/generators/enjoy/templates/migration_contact_messages.rb +15 -0
  160. data/lib/generators/enjoy/templates/migration_news.rb +26 -0
  161. data/lib/generators/enjoy/templates/migration_pages.rb +45 -0
  162. data/lib/generators/enjoy/templates/migration_seos.rb +14 -0
  163. data/lib/generators/enjoy/templates/production.erb +8 -0
  164. data/lib/generators/enjoy/templates/unicorn.erb +66 -0
  165. data/lib/generators/enjoy/utils.rb +21 -0
  166. data/lib/manual_slug.rb +10 -0
  167. data/lib/manual_slug/active_record.rb +32 -0
  168. data/lib/manual_slug/mongoid.rb +36 -0
  169. data/lib/rails_admin/custom_show_in_app.rb +43 -0
  170. data/release.sh +13 -0
  171. data/template.rb +824 -0
  172. metadata +579 -0
@@ -0,0 +1,36 @@
1
+ module Enjoy
2
+ module Controllers
3
+ module News
4
+ extend ActiveSupport::Concern
5
+
6
+ def index
7
+ @news = model.enabled.after_now.by_date
8
+
9
+ unless Enjoy.config.news_per_page.nil?
10
+ @news = @news.page(params[:page])
11
+ end
12
+ end
13
+
14
+ def show
15
+ @news = model.after_now.find(params[:id])
16
+
17
+ if @news and @news.text_slug != params[:id]
18
+ redirect_to @news, status_code: 301
19
+ return true
20
+ end
21
+ end
22
+
23
+ private
24
+ def model
25
+ Enjoy::News
26
+ end
27
+ def page_title
28
+ if @news.class.name == model.name
29
+ @news.page_title
30
+ else
31
+ super
32
+ end
33
+ end
34
+ end
35
+ end
36
+ end
@@ -0,0 +1,22 @@
1
+ module Enjoy
2
+ module Controllers
3
+ module Pages
4
+ extend ActiveSupport::Concern
5
+ def show
6
+ if @seo_page.nil? || !@seo_page.persisted?
7
+ if !params[:id].blank? or !params[:slug].blank?
8
+ @seo_page = model.enabled.find(params[:id] || params[:slug])
9
+ end
10
+ end
11
+ if @seo_page.nil?
12
+ render_404
13
+ return true
14
+ end
15
+ end
16
+
17
+ def model
18
+ Enjoy::Page
19
+ end
20
+ end
21
+ end
22
+ end
@@ -0,0 +1,62 @@
1
+ module Enjoy
2
+ module Controllers
3
+ module Search
4
+ extend ActiveSupport::Concern
5
+ # def index
6
+ # if params[:query].blank?
7
+ # @results = []
8
+ # else
9
+ # @results = Mongoid::Elasticsearch.search({
10
+ # body: {
11
+ # query: {
12
+ # query_string: {
13
+ # query: Mongoid::Elasticsearch::Utils.clean(params[:query])
14
+ # }
15
+ # },
16
+ # highlight: {
17
+ # fields: {
18
+ # name: {},
19
+ # content: {}
20
+ # }
21
+ # }
22
+ # }},
23
+ # page: params[:page],
24
+ # per_page: Enjoy.configuration.search_per_page,
25
+ # )
26
+ # end
27
+ # end
28
+
29
+ def index
30
+ if params[:q].blank?
31
+ @results = []
32
+ else
33
+ query = params[:q].to_s.gsub(/\P{Word}+/, ' ').gsub(/ +/, ' ').strip
34
+ @results = Enjoy::Page.search(query,
35
+ per_page: 10,
36
+ highlight: true,
37
+ suggest: true,
38
+ page: params[:page],
39
+ per_page: Enjoy.configuration.search_per_page
40
+ )
41
+ # @results = Mongoid::Elasticsearch.search({
42
+ # body: {
43
+ # query: {
44
+ # query_string: {
45
+ # query: Mongoid::Elasticsearch::Utils.clean(params[:query])
46
+ # }
47
+ # },
48
+ # highlight: {
49
+ # fields: {
50
+ # name: {},
51
+ # content: {}
52
+ # }
53
+ # }
54
+ # }},
55
+ # page: params[:page],
56
+ # per_page: Enjoy.config.search_per_page,
57
+ # )
58
+ end
59
+ end
60
+ end
61
+ end
62
+ end
@@ -0,0 +1,31 @@
1
+ module Enjoy::ElasticSearch
2
+ extend ActiveSupport::Concern
3
+ included do
4
+ searchkick(
5
+ language: "Russian",
6
+ suggest: ["name"],
7
+ settings: {
8
+ analysis: {
9
+ analyzer: {
10
+ default_index: {
11
+ type: "custom",
12
+ tokenizer: "standard",
13
+ filter: ["standard", "lowercase", "asciifolding", "searchkick_index_shingle", "searchkick_stemmer", "snowball"]
14
+
15
+ # https://github.com/imotov/elasticsearch-analysis-morphology
16
+ # filter: ["standard", "lowercase", "asciifolding", "searchkick_index_shingle", "searchkick_stemmer", "snowball", "russian_morphology", "english_morphology"]
17
+ }
18
+ }
19
+ }
20
+ }
21
+ )
22
+
23
+ def search_data
24
+ {
25
+ _id: _id,
26
+ name: name,
27
+ content: SmartExcerpt.strip_tags(content),
28
+ }
29
+ end
30
+ end
31
+ end
@@ -0,0 +1,46 @@
1
+ module Enjoy
2
+ class Engine < ::Rails::Engine
3
+ isolate_namespace Enjoy
4
+
5
+ rake_tasks do
6
+ require File.expand_path('../tasks', __FILE__)
7
+ end
8
+
9
+ initializer "enjoy_cms.email_defaults" do
10
+ # Write default email settings to DB so they can be changed.
11
+
12
+ #temp
13
+ begin
14
+ if Settings.table_exists?
15
+ Settings.default_email_from(default: 'noreply@site.domain')
16
+ Settings.form_email(default: 'admin@site.domain')
17
+ Settings.email_topic(default: 'с сайта')
18
+ end
19
+ rescue
20
+ end
21
+ end
22
+ initializer 'enjoy_cms.paperclip' do
23
+ require 'paperclip/style'
24
+ module ::Paperclip
25
+ class Style
26
+ alias_method :processor_options_without_auto_orient, :processor_options
27
+ def processor_options
28
+ processor_options_without_auto_orient.merge(auto_orient: false)
29
+ end
30
+ end
31
+ end
32
+ end
33
+
34
+ config.after_initialize do
35
+ # trigger autoload so models are registered in Mongoid::Elasticearch
36
+ Enjoy.config.search_models.map(&:constantize)
37
+
38
+ # Write default email settings to DB so they can be changed.
39
+ if Settings.table_exists?
40
+ Settings.default_email_from(default: 'noreply@site.domain')
41
+ Settings.form_email(default: 'admin@site.domain')
42
+ Settings.email_topic(default: 'с сайта')
43
+ end
44
+ end
45
+ end
46
+ end
@@ -0,0 +1,34 @@
1
+ module Enjoy
2
+ module Migration
3
+ extend self
4
+
5
+ def seo_fields(t)
6
+ if Enjoy.config.localize
7
+ t.column :h1_translations, 'hstore', default: {}
8
+ t.column :title_translations, 'hstore', default: {}
9
+ t.column :keywords_translations, 'hstore', default: {}
10
+ t.column :description_translations, 'hstore', default: {}
11
+ t.column :og_title_translations, 'hstore', default: {}
12
+ else
13
+ t.string :h1
14
+ t.string :title
15
+ t.text :keywords
16
+ t.text :description
17
+ t.string :og_title
18
+ end
19
+ t.string :robots
20
+ t.attachment :og_image
21
+ end
22
+
23
+ def map_fields(t)
24
+ t.text :address
25
+ t.text :map_address
26
+ t.text :map_hint
27
+ t.float :latitude
28
+ t.float :longitude
29
+ t.float :lat
30
+ t.float :lon
31
+ end
32
+ end
33
+ end
34
+
@@ -0,0 +1,22 @@
1
+ module Enjoy
2
+ module Model
3
+ extend ActiveSupport::Concern
4
+ included do
5
+ if Enjoy.mongoid?
6
+ include Mongoid::Document
7
+ include Mongoid::Timestamps::Short
8
+ end
9
+
10
+ include ActiveModel::ForbiddenAttributesProtection
11
+ include Enjoy::BooleanField
12
+ include Enjoy::SortField
13
+
14
+ include SmartExcerpt
15
+ include SimpleCaptcha::ModelHelpers
16
+
17
+ if Enjoy.mongoid? && defined?(Trackable)
18
+ include Trackable
19
+ end
20
+ end
21
+ end
22
+ end
@@ -0,0 +1,14 @@
1
+ module Enjoy
2
+ module Models
3
+ module ActiveRecord
4
+ module ContactMessage
5
+ extend ActiveSupport::Concern
6
+ included do
7
+ has_paper_trail
8
+ validates_lengths_from_database
9
+ end
10
+ end
11
+ end
12
+ end
13
+ end
14
+
@@ -0,0 +1,17 @@
1
+ module Enjoy
2
+ module Models
3
+ module ActiveRecord
4
+ module Menu
5
+ extend ActiveSupport::Concern
6
+ included do
7
+ has_paper_trail
8
+ validates_lengths_from_database
9
+ if Enjoy.config.localize
10
+ translates :name
11
+ end
12
+ end
13
+ end
14
+ end
15
+ end
16
+ end
17
+
@@ -0,0 +1,26 @@
1
+ module Enjoy
2
+ module Models
3
+ module ActiveRecord
4
+ module News
5
+ extend ActiveSupport::Concern
6
+ included do
7
+ unless Enjoy.config.news_image_styles.nil?
8
+ has_attached_file :image, styles: Enjoy.config.news_image_styles
9
+ end
10
+
11
+ has_paper_trail
12
+
13
+ validates_lengths_from_database only: [:name, :title, :content, :excerpt, :h1, :keywords, :robots, :og_title]
14
+
15
+ scope :after_now, -> { where("time < ?", Time.now) }
16
+ scope :by_date, -> { order(time: :desc) }
17
+
18
+ if Enjoy.config.localize
19
+ translates :name, :excerpt, :content
20
+ end
21
+ end
22
+ end
23
+ end
24
+ end
25
+ end
26
+
@@ -0,0 +1,20 @@
1
+ module Enjoy
2
+ module Models
3
+ module ActiveRecord
4
+ module Page
5
+ extend ActiveSupport::Concern
6
+
7
+ included do
8
+ acts_as_nested_set
9
+ has_paper_trail
10
+ validates_lengths_from_database only: [:name, :title, :content, :excerpt, :h1, :keywords, :robots, :og_title, :regexp, :redirect, :fullpath]
11
+ scope :sorted, -> { order(lft: :asc) }
12
+ if Enjoy.config.localize
13
+ translates :name, :content
14
+ end
15
+ end
16
+ end
17
+ end
18
+ end
19
+ end
20
+
@@ -0,0 +1,17 @@
1
+ module Enjoy
2
+ module Models
3
+ module ActiveRecord
4
+ module Seo
5
+ extend ActiveSupport::Concern
6
+ included do
7
+ has_attached_file :og_image, styles: {thumb: "800x600>"}
8
+ if Enjoy.config.localize
9
+ translates :h1, :title, :keywords, :description, :og_title
10
+ end
11
+ end
12
+ end
13
+ end
14
+ end
15
+ end
16
+
17
+
@@ -0,0 +1,37 @@
1
+ module Enjoy
2
+ module Models
3
+ module ContactMessage
4
+ extend ActiveSupport::Concern
5
+ include Enjoy::Model
6
+
7
+ include Enjoy.orm_specific('ContactMessage')
8
+
9
+ included do
10
+
11
+ apply_simple_captcha message: Enjoy.configuration.contacts_captcha_error_message
12
+
13
+ validates_email_format_of :email, unless: 'email.blank?'
14
+ if Enjoy.config.contacts_message_required
15
+ validates_presence_of :content
16
+ end
17
+ validate do
18
+ if email.blank? && phone.blank?
19
+ errors.add(:email, I18n.t('rs.no_contact_info'))
20
+ end
21
+ end
22
+
23
+ after_create do
24
+ mailer_class.send(mailer_method, self).deliver
25
+ end
26
+
27
+ def mailer_class
28
+ ContactMailer
29
+ end
30
+
31
+ def mailer_method
32
+ :new_message_email
33
+ end
34
+ end
35
+ end
36
+ end
37
+ end
@@ -0,0 +1,12 @@
1
+ module Enjoy
2
+ module Models
3
+ module EmbeddedElement
4
+ extend ActiveSupport::Concern
5
+ include Enjoy::Model
6
+ include Enjoy::Enableable
7
+ include Enjoy::Sortable
8
+
9
+ include Enjoy.orm_specific('EmbeddedElement')
10
+ end
11
+ end
12
+ end
@@ -0,0 +1,16 @@
1
+ module Enjoy
2
+ module Models
3
+ module EmbeddedGalleryImage
4
+ extend ActiveSupport::Concern
5
+ include Enjoy::Model
6
+ include Enjoy::Enableable
7
+ include Enjoy::Sortable
8
+
9
+ include Enjoy.orm_specific('EmbeddedGalleryImage')
10
+
11
+ included do
12
+ validates_attachment_content_type :image, content_type: /\Aimage\/.*\Z/, if: :image?
13
+ end
14
+ end
15
+ end
16
+ end
@@ -0,0 +1,29 @@
1
+ module Enjoy
2
+ module Models
3
+ module Gallery
4
+ extend ActiveSupport::Concern
5
+ include Enjoy::Model
6
+ include ManualSlug
7
+ include Enjoy::Enableable
8
+ include Enjoy::SitemapData
9
+
10
+ include Enjoy.orm_specific('Gallery')
11
+
12
+ included do
13
+
14
+ has_many :gallery_images, class_name: gallery_image_class_name
15
+ field :name, type: String, localize: Enjoy.configuration.localize
16
+
17
+ validates_attachment_content_type :image, content_type: /\Aimage\/.*\Z/, if: :image?
18
+ end
19
+
20
+ def gallery_image_class_name
21
+ "Enjoy::GalleryImage"
22
+ end
23
+
24
+ def image_styles
25
+ {}
26
+ end
27
+ end
28
+ end
29
+ end