comfortable_mexican_sofa 2.0.2 → 2.0.3

Sign up to get free protection for your applications and to get access to all the features.
Files changed (216) hide show
  1. checksums.yaml +4 -4
  2. data/.rubocop.yml +95 -4
  3. data/.travis.yml +2 -1
  4. data/CONTRIBUTING.md +8 -5
  5. data/Gemfile +9 -9
  6. data/Rakefile +1 -1
  7. data/app/assets/javascripts/comfy/admin/cms/base.js.coffee +1 -0
  8. data/app/assets/stylesheets/comfy/admin/cms/base.sass +14 -4
  9. data/app/controllers/application_controller.rb +2 -2
  10. data/app/controllers/comfy/admin/base_controller.rb +1 -1
  11. data/app/controllers/comfy/admin/cms/base_controller.rb +7 -6
  12. data/app/controllers/comfy/admin/cms/categories_controller.rb +2 -1
  13. data/app/controllers/comfy/admin/cms/files_controller.rb +32 -29
  14. data/app/controllers/comfy/admin/cms/layouts_controller.rb +10 -9
  15. data/app/controllers/comfy/admin/cms/pages_controller.rb +31 -27
  16. data/app/controllers/comfy/admin/cms/revisions/base_controller.rb +5 -4
  17. data/app/controllers/comfy/admin/cms/revisions/layout_controller.rb +2 -1
  18. data/app/controllers/comfy/admin/cms/revisions/page_controller.rb +9 -3
  19. data/app/controllers/comfy/admin/cms/revisions/snippet_controller.rb +2 -1
  20. data/app/controllers/comfy/admin/cms/revisions/translation_controller.rb +9 -3
  21. data/app/controllers/comfy/admin/cms/sites_controller.rb +10 -9
  22. data/app/controllers/comfy/admin/cms/snippets_controller.rb +10 -9
  23. data/app/controllers/comfy/admin/cms/translations_controller.rb +15 -14
  24. data/app/controllers/comfy/cms/assets_controller.rb +4 -3
  25. data/app/controllers/comfy/cms/base_controller.rb +12 -11
  26. data/app/controllers/comfy/cms/content_controller.rb +8 -7
  27. data/app/controllers/concerns/comfy/paginate.rb +2 -1
  28. data/app/helpers/comfy/cms_helper.rb +6 -3
  29. data/app/models/comfy/cms/categorization.rb +2 -1
  30. data/app/models/comfy/cms/category.rb +3 -2
  31. data/app/models/comfy/cms/file.rb +9 -7
  32. data/app/models/comfy/cms/fragment.rb +8 -6
  33. data/app/models/comfy/cms/layout.rb +24 -24
  34. data/app/models/comfy/cms/page.rb +51 -32
  35. data/app/models/comfy/cms/revision.rb +2 -1
  36. data/app/models/comfy/cms/site.rb +27 -26
  37. data/app/models/comfy/cms/snippet.rb +7 -5
  38. data/app/models/comfy/cms/translation.rb +6 -4
  39. data/app/models/concerns/comfy/cms/with_categories.rb +9 -7
  40. data/app/models/concerns/comfy/cms/with_fragments.rb +15 -13
  41. data/app/views/comfy/admin/cms/categories/_categories.html.haml +1 -1
  42. data/app/views/comfy/admin/cms/files/_file.html.haml +3 -3
  43. data/app/views/comfy/admin/cms/files/_modal.html.haml +2 -2
  44. data/app/views/comfy/admin/cms/{pages/_fragment_attachments.html.haml → fragments/_form_fragment_attachments.html.haml} +0 -0
  45. data/app/views/comfy/admin/cms/{pages → fragments}/_form_fragments.html.haml +0 -0
  46. data/app/views/comfy/admin/cms/layouts/_index_branch.html.haml +2 -2
  47. data/app/views/comfy/admin/cms/pages/_form.html.haml +7 -7
  48. data/app/views/comfy/admin/cms/pages/_index_branch.html.haml +16 -15
  49. data/app/views/comfy/admin/cms/pages/form_fragments.js.erb +1 -1
  50. data/app/views/comfy/admin/cms/pages/toggle_branch.js.erb +1 -1
  51. data/app/views/comfy/admin/cms/snippets/index.html.haml +3 -3
  52. data/app/views/comfy/admin/cms/translations/_form.html.haml +1 -1
  53. data/app/views/comfy/admin/cms/translations/form_fragments.js.erb +1 -1
  54. data/app/views/layouts/comfy/admin/cms/_body.html.haml +1 -4
  55. data/app/views/layouts/comfy/admin/cms.html.haml +1 -1
  56. data/bin/bundle +3 -0
  57. data/bin/rails +4 -0
  58. data/bin/rake +4 -0
  59. data/bin/setup +36 -0
  60. data/bin/update +31 -0
  61. data/bin/yarn +11 -0
  62. data/comfortable_mexican_sofa.gemspec +14 -14
  63. data/config/application.rb +4 -3
  64. data/config/boot.rb +3 -3
  65. data/config/cms_routes.rb +1 -1
  66. data/config/environment.rb +1 -1
  67. data/config/environments/development.rb +2 -2
  68. data/config/environments/test.rb +1 -1
  69. data/config/initializers/comfortable_mexican_sofa.rb +2 -5
  70. data/config/locales/cs.yml +2 -1
  71. data/config/locales/da.yml +2 -1
  72. data/config/locales/de.yml +2 -1
  73. data/config/locales/en.yml +2 -1
  74. data/config/locales/es.yml +2 -1
  75. data/config/locales/fr.yml +2 -1
  76. data/config/locales/it.yml +2 -1
  77. data/config/locales/ja.yml +2 -1
  78. data/config/locales/nb.yml +2 -1
  79. data/config/locales/nl.yml +2 -1
  80. data/config/locales/pl.yml +2 -1
  81. data/config/locales/pt-BR.yml +2 -1
  82. data/config/locales/ru.yml +2 -1
  83. data/config/locales/sk.yml +2 -1
  84. data/config/locales/sv.yml +2 -1
  85. data/config/locales/tr.yml +2 -1
  86. data/config/locales/uk.yml +2 -1
  87. data/config/locales/zh-CN.yml +2 -1
  88. data/config/locales/zh-TW.yml +2 -1
  89. data/config.ru +1 -1
  90. data/lib/comfortable_mexican_sofa/access_control/admin_authentication.rb +2 -1
  91. data/lib/comfortable_mexican_sofa/access_control/admin_authorization.rb +2 -0
  92. data/lib/comfortable_mexican_sofa/access_control/public_authentication.rb +3 -1
  93. data/lib/comfortable_mexican_sofa/access_control/public_authorization.rb +2 -0
  94. data/lib/comfortable_mexican_sofa/configuration.rb +27 -29
  95. data/lib/comfortable_mexican_sofa/content/block.rb +2 -1
  96. data/lib/comfortable_mexican_sofa/content/params_parser.rb +22 -21
  97. data/lib/comfortable_mexican_sofa/content/renderer.rb +10 -8
  98. data/lib/comfortable_mexican_sofa/content/tag.rb +1 -0
  99. data/lib/comfortable_mexican_sofa/content/tags/asset.rb +4 -3
  100. data/lib/comfortable_mexican_sofa/content/tags/checkbox.rb +3 -2
  101. data/lib/comfortable_mexican_sofa/content/tags/date.rb +4 -3
  102. data/lib/comfortable_mexican_sofa/content/tags/datetime.rb +4 -3
  103. data/lib/comfortable_mexican_sofa/content/tags/file.rb +15 -13
  104. data/lib/comfortable_mexican_sofa/content/tags/file_link.rb +8 -7
  105. data/lib/comfortable_mexican_sofa/content/tags/files.rb +15 -13
  106. data/lib/comfortable_mexican_sofa/content/tags/fragment.rb +7 -6
  107. data/lib/comfortable_mexican_sofa/content/tags/helper.rb +2 -1
  108. data/lib/comfortable_mexican_sofa/content/tags/markdown.rb +5 -4
  109. data/lib/comfortable_mexican_sofa/content/tags/number.rb +4 -3
  110. data/lib/comfortable_mexican_sofa/content/tags/partial.rb +1 -0
  111. data/lib/comfortable_mexican_sofa/content/tags/snippet.rb +3 -2
  112. data/lib/comfortable_mexican_sofa/content/tags/template.rb +1 -0
  113. data/lib/comfortable_mexican_sofa/content/tags/text.rb +4 -3
  114. data/lib/comfortable_mexican_sofa/content/tags/textarea.rb +4 -3
  115. data/lib/comfortable_mexican_sofa/content/tags/wysiwyg.rb +4 -3
  116. data/lib/comfortable_mexican_sofa/content.rb +21 -21
  117. data/lib/comfortable_mexican_sofa/engine.rb +17 -15
  118. data/lib/comfortable_mexican_sofa/error.rb +12 -6
  119. data/lib/comfortable_mexican_sofa/extensions/acts_as_tree.rb +17 -11
  120. data/lib/comfortable_mexican_sofa/extensions/has_revisions.rb +14 -13
  121. data/lib/comfortable_mexican_sofa/form_builder.rb +2 -2
  122. data/lib/comfortable_mexican_sofa/render_methods.rb +74 -76
  123. data/lib/comfortable_mexican_sofa/routes/cms.rb +4 -4
  124. data/lib/comfortable_mexican_sofa/routes/cms_admin.rb +2 -1
  125. data/lib/comfortable_mexican_sofa/routing.rb +4 -2
  126. data/lib/comfortable_mexican_sofa/seeds/file/exporter.rb +7 -6
  127. data/lib/comfortable_mexican_sofa/seeds/file/importer.rb +9 -9
  128. data/lib/comfortable_mexican_sofa/seeds/layout/exporter.rb +8 -7
  129. data/lib/comfortable_mexican_sofa/seeds/layout/importer.rb +11 -10
  130. data/lib/comfortable_mexican_sofa/seeds/page/exporter.rb +25 -23
  131. data/lib/comfortable_mexican_sofa/seeds/page/importer.rb +47 -43
  132. data/lib/comfortable_mexican_sofa/seeds/snippet/exporter.rb +7 -6
  133. data/lib/comfortable_mexican_sofa/seeds/snippet/importer.rb +7 -6
  134. data/lib/comfortable_mexican_sofa/seeds.rb +16 -9
  135. data/lib/comfortable_mexican_sofa/version.rb +4 -2
  136. data/lib/comfortable_mexican_sofa/view_hooks.rb +10 -9
  137. data/lib/comfortable_mexican_sofa.rb +30 -30
  138. data/lib/generators/comfy/cms/assets_generator.rb +6 -4
  139. data/lib/generators/comfy/cms/cms_generator.rb +14 -14
  140. data/lib/generators/comfy/cms/controllers_generator.rb +5 -3
  141. data/lib/generators/comfy/cms/models_generator.rb +5 -3
  142. data/lib/generators/comfy/cms/views_generator.rb +5 -3
  143. data/lib/generators/comfy/scaffold/scaffold_generator.rb +19 -18
  144. data/lib/tasks/cms_seeds.rake +4 -5
  145. data/test/controllers/comfy/admin/cms/base_controller_test.rb +4 -3
  146. data/test/controllers/comfy/admin/cms/categories_controller_test.rb +19 -18
  147. data/test/controllers/comfy/admin/cms/files_controller_test.rb +19 -19
  148. data/test/controllers/comfy/admin/cms/layouts_controller_test.rb +33 -32
  149. data/test/controllers/comfy/admin/cms/pages_controller_test.rb +99 -98
  150. data/test/controllers/comfy/admin/cms/revisions/layout_controller_test.rb +9 -9
  151. data/test/controllers/comfy/admin/cms/revisions/page_controller_test.rb +6 -6
  152. data/test/controllers/comfy/admin/cms/revisions/snippet_controller_test.rb +9 -8
  153. data/test/controllers/comfy/admin/cms/revisions/translation_controller_test.rb +6 -7
  154. data/test/controllers/comfy/admin/cms/sites_controller_test.rb +31 -30
  155. data/test/controllers/comfy/admin/cms/snippets_controller_test.rb +38 -37
  156. data/test/controllers/comfy/admin/cms/translations_controller_test.rb +21 -20
  157. data/test/controllers/comfy/cms/assets_controller_test.rb +14 -13
  158. data/test/controllers/comfy/cms/content_controller_test.rb +58 -57
  159. data/test/gemfiles/Gemfile.rails.5.2 +5 -4
  160. data/test/generators/cms_assets_generator_test.rb +6 -4
  161. data/test/generators/cms_controllers_generator_test.rb +7 -5
  162. data/test/generators/cms_generator_test.rb +12 -10
  163. data/test/generators/cms_models_generator_test.rb +7 -5
  164. data/test/generators/cms_views_generator_test.rb +6 -4
  165. data/test/generators/scaffold_generator_test.rb +18 -16
  166. data/test/helpers/cms_helper_test.rb +5 -2
  167. data/test/integration/access_control_test.rb +29 -20
  168. data/test/integration/i18n_test.rb +8 -7
  169. data/test/integration/js_variables_test.rb +2 -1
  170. data/test/integration/render_cms_test.rb +93 -88
  171. data/test/integration/routing_test.rb +4 -3
  172. data/test/integration/seeds_test.rb +21 -22
  173. data/test/integration/sites_test.rb +26 -25
  174. data/test/integration/view_hooks_test.rb +15 -14
  175. data/test/lib/configuration_test.rb +13 -15
  176. data/test/lib/content/block_test.rb +1 -1
  177. data/test/lib/content/params_parser_test.rb +11 -10
  178. data/test/lib/content/renderer_test.rb +16 -11
  179. data/test/lib/content/tag_test.rb +7 -3
  180. data/test/lib/content/tags/asset_test.rb +4 -3
  181. data/test/lib/content/tags/checkbox_test.rb +2 -1
  182. data/test/lib/content/tags/date_test.rb +2 -1
  183. data/test/lib/content/tags/datetime_test.rb +2 -1
  184. data/test/lib/content/tags/file_link_test.rb +3 -2
  185. data/test/lib/content/tags/file_test.rb +3 -2
  186. data/test/lib/content/tags/files_test.rb +4 -3
  187. data/test/lib/content/tags/fragment_test.rb +2 -1
  188. data/test/lib/content/tags/helper_test.rb +4 -3
  189. data/test/lib/content/tags/markdown_test.rb +2 -1
  190. data/test/lib/content/tags/number_test.rb +2 -1
  191. data/test/lib/content/tags/partial_test.rb +4 -3
  192. data/test/lib/content/tags/snippet_test.rb +2 -1
  193. data/test/lib/content/tags/template_test.rb +2 -1
  194. data/test/lib/content/tags/text_test.rb +2 -1
  195. data/test/lib/content/tags/textarea_test.rb +2 -1
  196. data/test/lib/content/tags/wysiwyg_test.rb +2 -1
  197. data/test/lib/revisions_test.rb +44 -42
  198. data/test/lib/seeds/files_test.rb +30 -29
  199. data/test/lib/seeds/layouts_test.rb +13 -12
  200. data/test/lib/seeds/pages_test.rb +32 -29
  201. data/test/lib/seeds/snippets_test.rb +21 -20
  202. data/test/lib/seeds_test.rb +9 -8
  203. data/test/models/categorization_test.rb +10 -9
  204. data/test/models/category_test.rb +1 -1
  205. data/test/models/file_test.rb +1 -1
  206. data/test/models/fragment_test.rb +11 -10
  207. data/test/models/layout_test.rb +71 -70
  208. data/test/models/page_test.rb +170 -159
  209. data/test/models/site_test.rb +17 -16
  210. data/test/models/snippet_test.rb +1 -0
  211. data/test/models/translation_test.rb +2 -1
  212. data/test/tasks/cms_seeds_test.rb +3 -2
  213. data/test/test_helper.rb +42 -40
  214. metadata +55 -51
  215. data/.rubocop_todo.yml +0 -974
  216. data/script/rails +0 -6
@@ -7,23 +7,23 @@ module ComfortableMexicanSofa::Seeds::File
7
7
  end
8
8
 
9
9
  def export!
10
- prepare_folder!(self.path)
10
+ prepare_folder!(path)
11
11
 
12
- self.site.files.each do |file|
13
- file_path = File.join(self.path, file.attachment.filename.to_s)
12
+ site.files.each do |file|
13
+ file_path = File.join(path, file.attachment.filename.to_s)
14
14
 
15
15
  # writing attributes
16
- open(::File.join(self.path, "_#{file.attachment.filename}.yml"), 'w') do |f|
16
+ open(::File.join(path, "_#{file.attachment.filename}.yml"), "w") do |f|
17
17
  f.write({
18
18
  "label" => file.label,
19
19
  "description" => file.description,
20
- "categories" => file.categories.map{|c| c.label}
20
+ "categories" => file.categories.map(&:label)
21
21
  }.to_yaml)
22
22
  end
23
23
 
24
24
  # writing content
25
25
  begin
26
- open(::File.join(self.path, ::File.basename(file_path)), 'wb') do |f|
26
+ open(::File.join(path, ::File.basename(file_path)), "wb") do |f|
27
27
  f.write(file.attachment.download)
28
28
  end
29
29
  rescue Errno::ENOENT, OpenURI::HTTPError
@@ -36,5 +36,6 @@ module ComfortableMexicanSofa::Seeds::File
36
36
  ComfortableMexicanSofa.logger.info(message)
37
37
  end
38
38
  end
39
+
39
40
  end
40
41
  end
@@ -7,23 +7,22 @@ module ComfortableMexicanSofa::Seeds::File
7
7
  end
8
8
 
9
9
  def import!
10
- Dir["#{self.path}[^_]*"].each do |file_path|
11
-
10
+ Dir["#{path}[^_]*"].each do |file_path|
12
11
  filename = ::File.basename(file_path)
13
12
 
14
- file = self.site.files.with_attached_attachment
13
+ file = site.files.with_attached_attachment
15
14
  .where("active_storage_blobs.filename" => filename).references(:blob).first ||
16
- self.site.files.new
15
+ site.files.new
17
16
 
18
17
  # We need to track actual file and its attributes
19
18
  fresh_file = false
20
19
 
21
- if File.exist?(attrs_path = File.join(self.path, "_#{filename}.yml"))
20
+ if File.exist?(attrs_path = File.join(path, "_#{filename}.yml"))
22
21
  if fresh_seed?(file, attrs_path)
23
22
  fresh_file = true
24
23
 
25
- attrs = YAML.load(File.read(attrs_path))
26
- category_ids = category_names_to_ids(Comfy::Cms::File, attrs.delete("categories"))
24
+ attrs = YAML.safe_load(File.read(attrs_path))
25
+ category_ids = category_names_to_ids(file, attrs.delete("categories"))
27
26
  file.attributes = attrs.merge(
28
27
  category_ids: category_ids
29
28
  )
@@ -51,11 +50,12 @@ module ComfortableMexicanSofa::Seeds::File
51
50
  end
52
51
  end
53
52
 
54
- self.seed_ids << file.id
53
+ seed_ids << file.id
55
54
  end
56
55
 
57
56
  # cleaning up
58
- self.site.files.where('id NOT IN (?)', seed_ids).destroy_all
57
+ site.files.where("id NOT IN (?)", seed_ids).destroy_all
59
58
  end
59
+
60
60
  end
61
61
  end
@@ -7,10 +7,10 @@ module ComfortableMexicanSofa::Seeds::Layout
7
7
  end
8
8
 
9
9
  def export!
10
- prepare_folder!(self.path)
10
+ prepare_folder!(path)
11
11
 
12
- self.site.layouts.each do |layout|
13
- layout_path = File.join(path, layout.ancestors.reverse.collect{|l| l.identifier}, layout.identifier)
12
+ site.layouts.each do |layout|
13
+ layout_path = File.join(path, layout.ancestors.reverse.collect(&:identifier), layout.identifier)
14
14
  FileUtils.mkdir_p(layout_path)
15
15
 
16
16
  path = ::File.join(layout_path, "content.html")
@@ -22,10 +22,10 @@ module ComfortableMexicanSofa::Seeds::Layout
22
22
  "position" => layout.position
23
23
  }.to_yaml
24
24
 
25
- data << {header: "attributes", content: attrs}
26
- data << {header: "content", content: layout.content}
27
- data << {header: "js", content: layout.js}
28
- data << {header: "css", content: layout.css}
25
+ data << { header: "attributes", content: attrs }
26
+ data << { header: "content", content: layout.content }
27
+ data << { header: "js", content: layout.js }
28
+ data << { header: "css", content: layout.css }
29
29
 
30
30
  write_file_content(path, data)
31
31
 
@@ -33,5 +33,6 @@ module ComfortableMexicanSofa::Seeds::Layout
33
33
  ComfortableMexicanSofa.logger.info(message)
34
34
  end
35
35
  end
36
+
36
37
  end
37
38
  end
@@ -7,18 +7,18 @@ module ComfortableMexicanSofa::Seeds::Layout
7
7
  end
8
8
 
9
9
  def import!(path = self.path, parent = nil)
10
- Dir["#{path}*/"].each do |path|
11
- import_layout(path, nil)
10
+ Dir["#{path}*/"].each do |layout_path|
11
+ import_layout(layout_path, parent)
12
12
  end
13
13
 
14
14
  # cleaning up
15
- self.site.layouts.where("id NOT IN (?)", self.seed_ids).destroy_all
15
+ site.layouts.where("id NOT IN (?)", seed_ids).destroy_all
16
16
  end
17
17
 
18
18
  private
19
19
 
20
20
  def import_layout(path, parent)
21
- identifier = path.split("/").last
21
+ identifier = path.split("/").last
22
22
 
23
23
  # reading file content in, resulting in a hash
24
24
  content_path = File.join(path, "content.html")
@@ -26,9 +26,9 @@ module ComfortableMexicanSofa::Seeds::Layout
26
26
 
27
27
  # parsing attributes section
28
28
  attributes_yaml = content_hash.delete("attributes")
29
- attrs = YAML.load(attributes_yaml)
29
+ attrs = YAML.safe_load(attributes_yaml)
30
30
 
31
- layout = self.site.layouts.where(identifier: identifier).first_or_initialize
31
+ layout = site.layouts.where(identifier: identifier).first_or_initialize
32
32
  layout.parent = parent
33
33
 
34
34
  if fresh_seed?(layout, content_path)
@@ -48,12 +48,13 @@ module ComfortableMexicanSofa::Seeds::Layout
48
48
  end
49
49
  end
50
50
 
51
- self.seed_ids << layout.id
51
+ seed_ids << layout.id
52
52
 
53
- # importing child pages (if there are any)
54
- Dir["#{path}*/"].each do |path|
55
- import_layout(path, layout)
53
+ # importing child layouts (if there are any)
54
+ Dir["#{path}*/"].each do |layout_path|
55
+ import_layout(layout_path, layout)
56
56
  end
57
57
  end
58
+
58
59
  end
59
60
  end
@@ -7,11 +7,11 @@ module ComfortableMexicanSofa::Seeds::Page
7
7
  end
8
8
 
9
9
  def export!
10
- prepare_folder!(self.path)
10
+ prepare_folder!(path)
11
11
 
12
- self.site.pages.each do |page|
13
- page.slug = 'index' if page.slug.blank?
14
- page_path = File.join(path, page.ancestors.reverse.map{|p| p.slug.blank?? 'index' : p.slug}, page.slug)
12
+ site.pages.each do |page|
13
+ page.slug = "index" if page.slug.blank?
14
+ page_path = File.join(path, page.ancestors.reverse.map { |p| p.slug.blank? ? "index" : p.slug }, page.slug)
15
15
  FileUtils.mkdir_p(page_path)
16
16
 
17
17
  path = ::File.join(page_path, "content.html")
@@ -21,12 +21,12 @@ module ComfortableMexicanSofa::Seeds::Page
21
21
  "label" => page.label,
22
22
  "layout" => page.layout.try(:identifier),
23
23
  "target_page" => page.target_page.try(:full_path),
24
- "categories" => page.categories.map{|c| c.label},
24
+ "categories" => page.categories.map(&:label),
25
25
  "is_published" => page.is_published,
26
26
  "position" => page.position
27
27
  }.to_yaml
28
28
 
29
- data << {header: "attributes", content: attrs}
29
+ data << { header: "attributes", content: attrs }
30
30
  data += fragments_data(page, page_path)
31
31
 
32
32
  write_file_content(path, data)
@@ -51,7 +51,7 @@ module ComfortableMexicanSofa::Seeds::Page
51
51
  "is_published" => page.is_published
52
52
  }.to_yaml
53
53
 
54
- data << {header: "attributes", content: attrs}
54
+ data << { header: "attributes", content: attrs }
55
55
  data += fragments_data(translation, page_path)
56
56
 
57
57
  write_file_content(path, data)
@@ -65,22 +65,24 @@ module ComfortableMexicanSofa::Seeds::Page
65
65
  def fragments_data(record, page_path)
66
66
  record.fragments.collect do |frag|
67
67
  header = "#{frag.tag} #{frag.identifier}"
68
- content = case frag.tag
69
- when "datetime", "date"
70
- frag.datetime
71
- when "checkbox"
72
- frag.boolean
73
- when "file", "files"
74
- frag.attachments.map do |attachment|
75
- ::File.open(::File.join(page_path, attachment.filename.to_s), "wb") do |f|
76
- f.write(attachment.download)
77
- end
78
- attachment.filename
79
- end.join("\n")
80
- else
81
- frag.content
82
- end
83
- {header: header, content: content}
68
+ content =
69
+ case frag.tag
70
+ when "datetime", "date"
71
+ frag.datetime
72
+ when "checkbox"
73
+ frag.boolean
74
+ when "file", "files"
75
+ frag.attachments.map do |attachment|
76
+ ::File.open(::File.join(page_path, attachment.filename.to_s), "wb") do |f|
77
+ f.write(attachment.download)
78
+ end
79
+ attachment.filename
80
+ end.join("\n")
81
+ else
82
+ frag.content
83
+ end
84
+
85
+ { header: header, content: content }
84
86
  end
85
87
  end
86
88
 
@@ -11,12 +11,12 @@ module ComfortableMexicanSofa::Seeds::Page
11
11
  end
12
12
 
13
13
  def import!
14
- import_page(File.join(self.path, "index/"), nil)
14
+ import_page(File.join(path, "index/"), nil)
15
15
 
16
16
  link_target_pages
17
17
 
18
18
  # Remove pages not found in seeds
19
- self.site.pages.where('id NOT IN (?)', self.seed_ids).destroy_all
19
+ site.pages.where("id NOT IN (?)", seed_ids).destroy_all
20
20
  end
21
21
 
22
22
  private
@@ -26,11 +26,14 @@ module ComfortableMexicanSofa::Seeds::Page
26
26
  slug = path.split("/").last
27
27
 
28
28
  # setting page record
29
- page = if parent.present?
30
- self.site.pages.where(parent: parent, slug: slug).first_or_initialize
31
- else
32
- self.site.pages.root || self.site.pages.new(slug: slug)
33
- end
29
+ page =
30
+ if parent.present?
31
+ child = site.pages.where(slug: slug).first_or_initialize
32
+ child.parent = parent
33
+ child
34
+ else
35
+ site.pages.root || site.pages.new(slug: slug)
36
+ end
34
37
 
35
38
  content_path = File.join(path, "content.html")
36
39
 
@@ -42,11 +45,11 @@ module ComfortableMexicanSofa::Seeds::Page
42
45
 
43
46
  # parsing attributes section
44
47
  attributes_yaml = fragments_hash.delete("attributes")
45
- attrs = YAML.load(attributes_yaml)
48
+ attrs = YAML.safe_load(attributes_yaml)
46
49
 
47
50
  # applying attributes
48
- layout = self.site.layouts.find_by(identifier: attrs.delete("layout")) || parent.try(:layout)
49
- category_ids = category_names_to_ids(Comfy::Cms::Page, attrs.delete("categories"))
51
+ layout = site.layouts.find_by(identifier: attrs.delete("layout")) || parent.try(:layout)
52
+ category_ids = category_names_to_ids(page, attrs.delete("categories"))
50
53
  target_page = attrs.delete("target_page")
51
54
 
52
55
  page.attributes = attrs.merge(
@@ -84,11 +87,11 @@ module ComfortableMexicanSofa::Seeds::Page
84
87
 
85
88
  # Tracking what page from seeds we're working with. So we can remove pages
86
89
  # that are no longer in seeds
87
- self.seed_ids << page.id
90
+ seed_ids << page.id
88
91
 
89
92
  # importing child pages (if there are any)
90
- Dir["#{path}*/"].each do |path|
91
- import_page(path, page)
93
+ Dir["#{path}*/"].each do |page_path|
94
+ import_page(page_path, page)
92
95
  end
93
96
  end
94
97
 
@@ -98,44 +101,44 @@ module ComfortableMexicanSofa::Seeds::Page
98
101
  new_translations = []
99
102
 
100
103
  Dir["#{path}content.*.html"].each do |file_path|
101
- locale = File.basename(file_path).match(/content\.(\w+)\.html/)[1]
104
+ locale = File.basename(file_path).match(%r{content\.(\w+)\.html})[1]
102
105
  new_translations << locale
103
106
 
104
107
  translation = page.translations.where(locale: locale).first_or_initialize
105
108
 
106
- if fresh_seed?(translation, file_path)
107
- # reading file content in, resulting in a hash
108
- fragments_hash = parse_file_content(file_path)
109
+ next unless fresh_seed?(translation, file_path)
109
110
 
110
- # parsing attributes section
111
- attributes_yaml = fragments_hash.delete("attributes")
112
- attrs = YAML.load(attributes_yaml)
111
+ # reading file content in, resulting in a hash
112
+ fragments_hash = parse_file_content(file_path)
113
113
 
114
- # applying attributes
115
- layout = self.site.layouts.find_by(identifier: attrs.delete("layout")) || page.try(:layout)
116
- translation.attributes = attrs.merge(
117
- layout: layout
118
- )
114
+ # parsing attributes section
115
+ attributes_yaml = fragments_hash.delete("attributes")
116
+ attrs = YAML.safe_load(attributes_yaml)
119
117
 
120
- # applying fragments
121
- old_frag_identifiers = translation.fragments.pluck(:identifier)
118
+ # applying attributes
119
+ layout = site.layouts.find_by(identifier: attrs.delete("layout")) || page.try(:layout)
120
+ translation.attributes = attrs.merge(
121
+ layout: layout
122
+ )
122
123
 
123
- new_frag_identifiers, fragments_attributes =
124
- construct_fragments_attributes(fragments_hash, translation, path)
125
- translation.fragments_attributes = fragments_attributes
124
+ # applying fragments
125
+ old_frag_identifiers = translation.fragments.pluck(:identifier)
126
126
 
127
- if translation.save
128
- message = "[CMS SEEDS] Imported Translation \t #{locale}"
129
- ComfortableMexicanSofa.logger.info(message)
127
+ new_frag_identifiers, fragments_attributes =
128
+ construct_fragments_attributes(fragments_hash, translation, path)
129
+ translation.fragments_attributes = fragments_attributes
130
130
 
131
- # cleaning up old fragments
132
- frags_to_remove = old_frag_identifiers - new_frag_identifiers
133
- translation.fragments.where(identifier: frags_to_remove).destroy_all
131
+ if translation.save
132
+ message = "[CMS SEEDS] Imported Translation \t #{locale}"
133
+ ComfortableMexicanSofa.logger.info(message)
134
134
 
135
- else
136
- message = "[CMS SEEDS] Failed to import Translation \n#{locale}"
137
- ComfortableMexicanSofa.logger.warn(message)
138
- end
135
+ # cleaning up old fragments
136
+ frags_to_remove = old_frag_identifiers - new_frag_identifiers
137
+ translation.fragments.where(identifier: frags_to_remove).destroy_all
138
+
139
+ else
140
+ message = "[CMS SEEDS] Failed to import Translation \n#{locale}"
141
+ ComfortableMexicanSofa.logger.warn(message)
139
142
  end
140
143
  end
141
144
 
@@ -175,7 +178,7 @@ module ComfortableMexicanSofa::Seeds::Page
175
178
  frag_hash
176
179
  end
177
180
 
178
- return [frag_identifiers, frag_attributes]
181
+ [frag_identifiers, frag_attributes]
179
182
  end
180
183
 
181
184
  # Preparing fragment attachments. Returns hashes with file data for
@@ -193,7 +196,7 @@ module ComfortableMexicanSofa::Seeds::Page
193
196
 
194
197
  # ensuring that old attachments get removed
195
198
  ids_destroy = []
196
- if frag = record.fragments.find_by(identifier: identifier)
199
+ if (frag = record.fragments.find_by(identifier: identifier))
197
200
  ids_destroy = frag.attachments.pluck(:id)
198
201
  end
199
202
 
@@ -204,10 +207,11 @@ module ComfortableMexicanSofa::Seeds::Page
204
207
  return unless self.target_pages.present?
205
208
 
206
209
  self.target_pages.each do |page_id, target|
207
- if target = self.site.pages.find_by(full_path: target)
210
+ if (target = site.pages.find_by(full_path: target))
208
211
  @site.pages.find(page_id).update_column(:target_page_id, target.id)
209
212
  end
210
213
  end
211
214
  end
215
+
212
216
  end
213
217
  end
@@ -7,25 +7,26 @@ module ComfortableMexicanSofa::Seeds::Snippet
7
7
  end
8
8
 
9
9
  def export!
10
- prepare_folder!(self.path)
10
+ prepare_folder!(path)
11
11
 
12
- self.site.snippets.each do |snippet|
12
+ site.snippets.each do |snippet|
13
13
  attrs = {
14
14
  "label" => snippet.label,
15
- "categories" => snippet.categories.map{|c| c.label},
15
+ "categories" => snippet.categories.map(&:label),
16
16
  "position" => snippet.position
17
17
  }.to_yaml
18
18
 
19
19
  data = []
20
- data << {header: "attributes", content: attrs}
21
- data << {header: "content", content: snippet.content}
20
+ data << { header: "attributes", content: attrs }
21
+ data << { header: "content", content: snippet.content }
22
22
 
23
- snippet_path = File.join(self.path, "#{snippet.identifier}.html")
23
+ snippet_path = File.join(path, "#{snippet.identifier}.html")
24
24
  write_file_content(snippet_path, data)
25
25
 
26
26
  message = "[CMS SEEDS] Exported Snippet \t #{snippet.identifier}"
27
27
  ComfortableMexicanSofa.logger.info(message)
28
28
  end
29
29
  end
30
+
30
31
  end
31
32
  end
@@ -7,7 +7,7 @@ module ComfortableMexicanSofa::Seeds::Snippet
7
7
  end
8
8
 
9
9
  def import!
10
- Dir.glob("#{self.path}/*.html").each do |path|
10
+ Dir.glob("#{path}/*.html").each do |path|
11
11
  identifier = File.basename(path, ".html")
12
12
 
13
13
  # reading file content in, resulting in a hash
@@ -15,12 +15,12 @@ module ComfortableMexicanSofa::Seeds::Snippet
15
15
 
16
16
  # parsing attributes section
17
17
  attributes_yaml = content_hash.delete("attributes")
18
- attrs = YAML.load(attributes_yaml)
18
+ attrs = YAML.safe_load(attributes_yaml)
19
19
 
20
- snippet = self.site.snippets.where(identifier: identifier).first_or_initialize
20
+ snippet = site.snippets.where(identifier: identifier).first_or_initialize
21
21
 
22
22
  if fresh_seed?(snippet, path)
23
- category_ids = category_names_to_ids(Comfy::Cms::Snippet, attrs.delete("categories"))
23
+ category_ids = category_names_to_ids(snippet, attrs.delete("categories"))
24
24
 
25
25
  snippet.attributes = attrs.merge(
26
26
  category_ids: category_ids,
@@ -38,11 +38,12 @@ module ComfortableMexicanSofa::Seeds::Snippet
38
38
 
39
39
  # Tracking what page from seeds we're working with. So we can remove pages
40
40
  # that are no longer in seeds
41
- self.seed_ids << snippet.id
41
+ seed_ids << snippet.id
42
42
  end
43
43
 
44
44
  # cleaning up
45
- self.site.snippets.where("id NOT IN (?)", self.seed_ids).destroy_all
45
+ site.snippets.where("id NOT IN (?)", seed_ids).destroy_all
46
46
  end
47
+
47
48
  end
48
49
  end
@@ -2,9 +2,10 @@ module ComfortableMexicanSofa::Seeds
2
2
 
3
3
  class Error < StandardError; end
4
4
 
5
- require 'mimemagic'
5
+ require "mimemagic"
6
6
 
7
7
  class Importer
8
+
8
9
  attr_accessor :site,
9
10
  :path,
10
11
  :from,
@@ -24,7 +25,7 @@ module ComfortableMexicanSofa::Seeds
24
25
  end
25
26
 
26
27
  def import!
27
- %w(Layout Page Snippet File).each do |klass|
28
+ %w[Layout Page Snippet File].each do |klass|
28
29
  klass = "ComfortableMexicanSofa::Seeds::#{klass}::Importer"
29
30
  klass.constantize.new(from, to).import!
30
31
  end
@@ -39,7 +40,7 @@ module ComfortableMexicanSofa::Seeds
39
40
  # some more content
40
41
  def parse_file_content(file_path)
41
42
  text = ::File.read(file_path)
42
- tokens = text.split(/^\[(.*?)\]\n/)
43
+ tokens = text.split(%r{^\[(.*?)\]\n})
43
44
  tokens.shift # first item should be blank
44
45
  tokens.in_groups_of(2).each_with_object({}) do |pair, h|
45
46
  h[pair[0]] = pair[1]
@@ -50,19 +51,23 @@ module ComfortableMexicanSofa::Seeds
50
51
  object.new_record? || ::File.mtime(file_path) > object.updated_at
51
52
  end
52
53
 
53
- def category_names_to_ids(klass, names)
54
- [names].flatten.each_with_object({}) do |name, category_ids|
55
- category = self.site.categories.find_or_create_by(
54
+ def category_names_to_ids(record, names)
55
+ existing_category_ids = record.categories.each_with_object({}) do |id, category_ids|
56
+ category_ids[id] = 0
57
+ end
58
+ [names].flatten.each_with_object(existing_category_ids) do |name, category_ids|
59
+ category = site.categories.find_or_create_by(
56
60
  label: name,
57
- categorized_type: klass.to_s
61
+ categorized_type: record.class.to_s
58
62
  )
59
63
  category_ids[category.id] = 1
60
64
  end
61
65
  end
62
- end
63
66
 
67
+ end
64
68
 
65
69
  class Exporter
70
+
66
71
  attr_accessor :site,
67
72
  :path,
68
73
  :from,
@@ -75,7 +80,7 @@ module ComfortableMexicanSofa::Seeds
75
80
  end
76
81
 
77
82
  def export!
78
- %w(Layout Page Snippet File).each do |klass|
83
+ %w[Layout Page Snippet File].each do |klass|
79
84
  klass = "ComfortableMexicanSofa::Seeds::#{klass}::Exporter"
80
85
  klass.constantize.new(from, to).export!
81
86
  end
@@ -98,5 +103,7 @@ module ComfortableMexicanSofa::Seeds
98
103
  FileUtils.rm_rf(path)
99
104
  FileUtils.mkdir_p(path)
100
105
  end
106
+
101
107
  end
108
+
102
109
  end
@@ -1,3 +1,5 @@
1
1
  module ComfortableMexicanSofa
2
- VERSION = "2.0.2"
3
- end
2
+
3
+ VERSION = "2.0.3".freeze
4
+
5
+ end
@@ -4,29 +4,30 @@ module ComfortableMexicanSofa::ViewHooks
4
4
 
5
5
  # Array of declared hooks
6
6
  def self.hooks
7
- @@hooks ||= { }
7
+ @hooks ||= {}
8
8
  end
9
9
 
10
10
  # Renders hook content
11
11
  def self.render(name, template, options = {})
12
- out = ''
13
- (self.hooks[name.to_sym] || []).each do |path|
14
- out += template.render({:partial => path.first}.merge(options))
12
+ out = ""
13
+ (hooks[name.to_sym] || []).each do |path|
14
+ out += template.render({ partial: path.first }.merge(options))
15
15
  end
16
- return out.html_safe
16
+ out.html_safe
17
17
  end
18
18
 
19
19
  # Will declare a partial that will be rendered for this hook
20
20
  # Example:
21
21
  # ComfortableMexicanSofa::ViewHooks.add(:navigation, 'shared/navigation')
22
22
  def self.add(name, partial_path, position = 0)
23
- self.hooks[name.to_sym] ||= []
24
- self.hooks[name.to_sym] << [partial_path, position]
25
- self.hooks[name.to_sym].sort_by! { |hook| hook.last }
23
+ hooks[name.to_sym] ||= []
24
+ hooks[name.to_sym] << [partial_path, position]
25
+ hooks[name.to_sym].sort_by!(&:last)
26
26
  end
27
27
 
28
28
  # Removing previously declared hook
29
29
  def self.remove(name)
30
- self.hooks.delete(name)
30
+ hooks.delete(name)
31
31
  end
32
+
32
33
  end