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.
- checksums.yaml +4 -4
- data/.rubocop.yml +95 -4
- data/.travis.yml +2 -1
- data/CONTRIBUTING.md +8 -5
- data/Gemfile +9 -9
- data/Rakefile +1 -1
- data/app/assets/javascripts/comfy/admin/cms/base.js.coffee +1 -0
- data/app/assets/stylesheets/comfy/admin/cms/base.sass +14 -4
- data/app/controllers/application_controller.rb +2 -2
- data/app/controllers/comfy/admin/base_controller.rb +1 -1
- data/app/controllers/comfy/admin/cms/base_controller.rb +7 -6
- data/app/controllers/comfy/admin/cms/categories_controller.rb +2 -1
- data/app/controllers/comfy/admin/cms/files_controller.rb +32 -29
- data/app/controllers/comfy/admin/cms/layouts_controller.rb +10 -9
- data/app/controllers/comfy/admin/cms/pages_controller.rb +31 -27
- data/app/controllers/comfy/admin/cms/revisions/base_controller.rb +5 -4
- data/app/controllers/comfy/admin/cms/revisions/layout_controller.rb +2 -1
- data/app/controllers/comfy/admin/cms/revisions/page_controller.rb +9 -3
- data/app/controllers/comfy/admin/cms/revisions/snippet_controller.rb +2 -1
- data/app/controllers/comfy/admin/cms/revisions/translation_controller.rb +9 -3
- data/app/controllers/comfy/admin/cms/sites_controller.rb +10 -9
- data/app/controllers/comfy/admin/cms/snippets_controller.rb +10 -9
- data/app/controllers/comfy/admin/cms/translations_controller.rb +15 -14
- data/app/controllers/comfy/cms/assets_controller.rb +4 -3
- data/app/controllers/comfy/cms/base_controller.rb +12 -11
- data/app/controllers/comfy/cms/content_controller.rb +8 -7
- data/app/controllers/concerns/comfy/paginate.rb +2 -1
- data/app/helpers/comfy/cms_helper.rb +6 -3
- data/app/models/comfy/cms/categorization.rb +2 -1
- data/app/models/comfy/cms/category.rb +3 -2
- data/app/models/comfy/cms/file.rb +9 -7
- data/app/models/comfy/cms/fragment.rb +8 -6
- data/app/models/comfy/cms/layout.rb +24 -24
- data/app/models/comfy/cms/page.rb +51 -32
- data/app/models/comfy/cms/revision.rb +2 -1
- data/app/models/comfy/cms/site.rb +27 -26
- data/app/models/comfy/cms/snippet.rb +7 -5
- data/app/models/comfy/cms/translation.rb +6 -4
- data/app/models/concerns/comfy/cms/with_categories.rb +9 -7
- data/app/models/concerns/comfy/cms/with_fragments.rb +15 -13
- data/app/views/comfy/admin/cms/categories/_categories.html.haml +1 -1
- data/app/views/comfy/admin/cms/files/_file.html.haml +3 -3
- data/app/views/comfy/admin/cms/files/_modal.html.haml +2 -2
- data/app/views/comfy/admin/cms/{pages/_fragment_attachments.html.haml → fragments/_form_fragment_attachments.html.haml} +0 -0
- data/app/views/comfy/admin/cms/{pages → fragments}/_form_fragments.html.haml +0 -0
- data/app/views/comfy/admin/cms/layouts/_index_branch.html.haml +2 -2
- data/app/views/comfy/admin/cms/pages/_form.html.haml +7 -7
- data/app/views/comfy/admin/cms/pages/_index_branch.html.haml +16 -15
- data/app/views/comfy/admin/cms/pages/form_fragments.js.erb +1 -1
- data/app/views/comfy/admin/cms/pages/toggle_branch.js.erb +1 -1
- data/app/views/comfy/admin/cms/snippets/index.html.haml +3 -3
- data/app/views/comfy/admin/cms/translations/_form.html.haml +1 -1
- data/app/views/comfy/admin/cms/translations/form_fragments.js.erb +1 -1
- data/app/views/layouts/comfy/admin/cms/_body.html.haml +1 -4
- data/app/views/layouts/comfy/admin/cms.html.haml +1 -1
- data/bin/bundle +3 -0
- data/bin/rails +4 -0
- data/bin/rake +4 -0
- data/bin/setup +36 -0
- data/bin/update +31 -0
- data/bin/yarn +11 -0
- data/comfortable_mexican_sofa.gemspec +14 -14
- data/config/application.rb +4 -3
- data/config/boot.rb +3 -3
- data/config/cms_routes.rb +1 -1
- data/config/environment.rb +1 -1
- data/config/environments/development.rb +2 -2
- data/config/environments/test.rb +1 -1
- data/config/initializers/comfortable_mexican_sofa.rb +2 -5
- data/config/locales/cs.yml +2 -1
- data/config/locales/da.yml +2 -1
- data/config/locales/de.yml +2 -1
- data/config/locales/en.yml +2 -1
- data/config/locales/es.yml +2 -1
- data/config/locales/fr.yml +2 -1
- data/config/locales/it.yml +2 -1
- data/config/locales/ja.yml +2 -1
- data/config/locales/nb.yml +2 -1
- data/config/locales/nl.yml +2 -1
- data/config/locales/pl.yml +2 -1
- data/config/locales/pt-BR.yml +2 -1
- data/config/locales/ru.yml +2 -1
- data/config/locales/sk.yml +2 -1
- data/config/locales/sv.yml +2 -1
- data/config/locales/tr.yml +2 -1
- data/config/locales/uk.yml +2 -1
- data/config/locales/zh-CN.yml +2 -1
- data/config/locales/zh-TW.yml +2 -1
- data/config.ru +1 -1
- data/lib/comfortable_mexican_sofa/access_control/admin_authentication.rb +2 -1
- data/lib/comfortable_mexican_sofa/access_control/admin_authorization.rb +2 -0
- data/lib/comfortable_mexican_sofa/access_control/public_authentication.rb +3 -1
- data/lib/comfortable_mexican_sofa/access_control/public_authorization.rb +2 -0
- data/lib/comfortable_mexican_sofa/configuration.rb +27 -29
- data/lib/comfortable_mexican_sofa/content/block.rb +2 -1
- data/lib/comfortable_mexican_sofa/content/params_parser.rb +22 -21
- data/lib/comfortable_mexican_sofa/content/renderer.rb +10 -8
- data/lib/comfortable_mexican_sofa/content/tag.rb +1 -0
- data/lib/comfortable_mexican_sofa/content/tags/asset.rb +4 -3
- data/lib/comfortable_mexican_sofa/content/tags/checkbox.rb +3 -2
- data/lib/comfortable_mexican_sofa/content/tags/date.rb +4 -3
- data/lib/comfortable_mexican_sofa/content/tags/datetime.rb +4 -3
- data/lib/comfortable_mexican_sofa/content/tags/file.rb +15 -13
- data/lib/comfortable_mexican_sofa/content/tags/file_link.rb +8 -7
- data/lib/comfortable_mexican_sofa/content/tags/files.rb +15 -13
- data/lib/comfortable_mexican_sofa/content/tags/fragment.rb +7 -6
- data/lib/comfortable_mexican_sofa/content/tags/helper.rb +2 -1
- data/lib/comfortable_mexican_sofa/content/tags/markdown.rb +5 -4
- data/lib/comfortable_mexican_sofa/content/tags/number.rb +4 -3
- data/lib/comfortable_mexican_sofa/content/tags/partial.rb +1 -0
- data/lib/comfortable_mexican_sofa/content/tags/snippet.rb +3 -2
- data/lib/comfortable_mexican_sofa/content/tags/template.rb +1 -0
- data/lib/comfortable_mexican_sofa/content/tags/text.rb +4 -3
- data/lib/comfortable_mexican_sofa/content/tags/textarea.rb +4 -3
- data/lib/comfortable_mexican_sofa/content/tags/wysiwyg.rb +4 -3
- data/lib/comfortable_mexican_sofa/content.rb +21 -21
- data/lib/comfortable_mexican_sofa/engine.rb +17 -15
- data/lib/comfortable_mexican_sofa/error.rb +12 -6
- data/lib/comfortable_mexican_sofa/extensions/acts_as_tree.rb +17 -11
- data/lib/comfortable_mexican_sofa/extensions/has_revisions.rb +14 -13
- data/lib/comfortable_mexican_sofa/form_builder.rb +2 -2
- data/lib/comfortable_mexican_sofa/render_methods.rb +74 -76
- data/lib/comfortable_mexican_sofa/routes/cms.rb +4 -4
- data/lib/comfortable_mexican_sofa/routes/cms_admin.rb +2 -1
- data/lib/comfortable_mexican_sofa/routing.rb +4 -2
- data/lib/comfortable_mexican_sofa/seeds/file/exporter.rb +7 -6
- data/lib/comfortable_mexican_sofa/seeds/file/importer.rb +9 -9
- data/lib/comfortable_mexican_sofa/seeds/layout/exporter.rb +8 -7
- data/lib/comfortable_mexican_sofa/seeds/layout/importer.rb +11 -10
- data/lib/comfortable_mexican_sofa/seeds/page/exporter.rb +25 -23
- data/lib/comfortable_mexican_sofa/seeds/page/importer.rb +47 -43
- data/lib/comfortable_mexican_sofa/seeds/snippet/exporter.rb +7 -6
- data/lib/comfortable_mexican_sofa/seeds/snippet/importer.rb +7 -6
- data/lib/comfortable_mexican_sofa/seeds.rb +16 -9
- data/lib/comfortable_mexican_sofa/version.rb +4 -2
- data/lib/comfortable_mexican_sofa/view_hooks.rb +10 -9
- data/lib/comfortable_mexican_sofa.rb +30 -30
- data/lib/generators/comfy/cms/assets_generator.rb +6 -4
- data/lib/generators/comfy/cms/cms_generator.rb +14 -14
- data/lib/generators/comfy/cms/controllers_generator.rb +5 -3
- data/lib/generators/comfy/cms/models_generator.rb +5 -3
- data/lib/generators/comfy/cms/views_generator.rb +5 -3
- data/lib/generators/comfy/scaffold/scaffold_generator.rb +19 -18
- data/lib/tasks/cms_seeds.rake +4 -5
- data/test/controllers/comfy/admin/cms/base_controller_test.rb +4 -3
- data/test/controllers/comfy/admin/cms/categories_controller_test.rb +19 -18
- data/test/controllers/comfy/admin/cms/files_controller_test.rb +19 -19
- data/test/controllers/comfy/admin/cms/layouts_controller_test.rb +33 -32
- data/test/controllers/comfy/admin/cms/pages_controller_test.rb +99 -98
- data/test/controllers/comfy/admin/cms/revisions/layout_controller_test.rb +9 -9
- data/test/controllers/comfy/admin/cms/revisions/page_controller_test.rb +6 -6
- data/test/controllers/comfy/admin/cms/revisions/snippet_controller_test.rb +9 -8
- data/test/controllers/comfy/admin/cms/revisions/translation_controller_test.rb +6 -7
- data/test/controllers/comfy/admin/cms/sites_controller_test.rb +31 -30
- data/test/controllers/comfy/admin/cms/snippets_controller_test.rb +38 -37
- data/test/controllers/comfy/admin/cms/translations_controller_test.rb +21 -20
- data/test/controllers/comfy/cms/assets_controller_test.rb +14 -13
- data/test/controllers/comfy/cms/content_controller_test.rb +58 -57
- data/test/gemfiles/Gemfile.rails.5.2 +5 -4
- data/test/generators/cms_assets_generator_test.rb +6 -4
- data/test/generators/cms_controllers_generator_test.rb +7 -5
- data/test/generators/cms_generator_test.rb +12 -10
- data/test/generators/cms_models_generator_test.rb +7 -5
- data/test/generators/cms_views_generator_test.rb +6 -4
- data/test/generators/scaffold_generator_test.rb +18 -16
- data/test/helpers/cms_helper_test.rb +5 -2
- data/test/integration/access_control_test.rb +29 -20
- data/test/integration/i18n_test.rb +8 -7
- data/test/integration/js_variables_test.rb +2 -1
- data/test/integration/render_cms_test.rb +93 -88
- data/test/integration/routing_test.rb +4 -3
- data/test/integration/seeds_test.rb +21 -22
- data/test/integration/sites_test.rb +26 -25
- data/test/integration/view_hooks_test.rb +15 -14
- data/test/lib/configuration_test.rb +13 -15
- data/test/lib/content/block_test.rb +1 -1
- data/test/lib/content/params_parser_test.rb +11 -10
- data/test/lib/content/renderer_test.rb +16 -11
- data/test/lib/content/tag_test.rb +7 -3
- data/test/lib/content/tags/asset_test.rb +4 -3
- data/test/lib/content/tags/checkbox_test.rb +2 -1
- data/test/lib/content/tags/date_test.rb +2 -1
- data/test/lib/content/tags/datetime_test.rb +2 -1
- data/test/lib/content/tags/file_link_test.rb +3 -2
- data/test/lib/content/tags/file_test.rb +3 -2
- data/test/lib/content/tags/files_test.rb +4 -3
- data/test/lib/content/tags/fragment_test.rb +2 -1
- data/test/lib/content/tags/helper_test.rb +4 -3
- data/test/lib/content/tags/markdown_test.rb +2 -1
- data/test/lib/content/tags/number_test.rb +2 -1
- data/test/lib/content/tags/partial_test.rb +4 -3
- data/test/lib/content/tags/snippet_test.rb +2 -1
- data/test/lib/content/tags/template_test.rb +2 -1
- data/test/lib/content/tags/text_test.rb +2 -1
- data/test/lib/content/tags/textarea_test.rb +2 -1
- data/test/lib/content/tags/wysiwyg_test.rb +2 -1
- data/test/lib/revisions_test.rb +44 -42
- data/test/lib/seeds/files_test.rb +30 -29
- data/test/lib/seeds/layouts_test.rb +13 -12
- data/test/lib/seeds/pages_test.rb +32 -29
- data/test/lib/seeds/snippets_test.rb +21 -20
- data/test/lib/seeds_test.rb +9 -8
- data/test/models/categorization_test.rb +10 -9
- data/test/models/category_test.rb +1 -1
- data/test/models/file_test.rb +1 -1
- data/test/models/fragment_test.rb +11 -10
- data/test/models/layout_test.rb +71 -70
- data/test/models/page_test.rb +170 -159
- data/test/models/site_test.rb +17 -16
- data/test/models/snippet_test.rb +1 -0
- data/test/models/translation_test.rb +2 -1
- data/test/tasks/cms_seeds_test.rb +3 -2
- data/test/test_helper.rb +42 -40
- metadata +55 -51
- data/.rubocop_todo.yml +0 -974
- 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!(
|
10
|
+
prepare_folder!(path)
|
11
11
|
|
12
|
-
|
13
|
-
file_path = File.join(
|
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(
|
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
|
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(
|
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["#{
|
11
|
-
|
10
|
+
Dir["#{path}[^_]*"].each do |file_path|
|
12
11
|
filename = ::File.basename(file_path)
|
13
12
|
|
14
|
-
file =
|
13
|
+
file = site.files.with_attached_attachment
|
15
14
|
.where("active_storage_blobs.filename" => filename).references(:blob).first ||
|
16
|
-
|
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(
|
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.
|
26
|
-
category_ids = category_names_to_ids(
|
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
|
-
|
53
|
+
seed_ids << file.id
|
55
54
|
end
|
56
55
|
|
57
56
|
# cleaning up
|
58
|
-
|
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!(
|
10
|
+
prepare_folder!(path)
|
11
11
|
|
12
|
-
|
13
|
-
layout_path = File.join(path, layout.ancestors.reverse.collect
|
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 |
|
11
|
-
import_layout(
|
10
|
+
Dir["#{path}*/"].each do |layout_path|
|
11
|
+
import_layout(layout_path, parent)
|
12
12
|
end
|
13
13
|
|
14
14
|
# cleaning up
|
15
|
-
|
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 =
|
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.
|
29
|
+
attrs = YAML.safe_load(attributes_yaml)
|
30
30
|
|
31
|
-
layout =
|
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
|
-
|
51
|
+
seed_ids << layout.id
|
52
52
|
|
53
|
-
# importing child
|
54
|
-
Dir["#{path}*/"].each do |
|
55
|
-
import_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!(
|
10
|
+
prepare_folder!(path)
|
11
11
|
|
12
|
-
|
13
|
-
page.slug =
|
14
|
-
page_path = File.join(path, page.ancestors.reverse.map{|p| p.slug.blank
|
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
|
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 =
|
69
|
-
|
70
|
-
|
71
|
-
|
72
|
-
|
73
|
-
|
74
|
-
|
75
|
-
|
76
|
-
|
77
|
-
|
78
|
-
|
79
|
-
|
80
|
-
|
81
|
-
|
82
|
-
|
83
|
-
|
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(
|
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
|
-
|
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 =
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
|
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.
|
48
|
+
attrs = YAML.safe_load(attributes_yaml)
|
46
49
|
|
47
50
|
# applying attributes
|
48
|
-
layout =
|
49
|
-
category_ids = category_names_to_ids(
|
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
|
-
|
90
|
+
seed_ids << page.id
|
88
91
|
|
89
92
|
# importing child pages (if there are any)
|
90
|
-
Dir["#{path}*/"].each do |
|
91
|
-
import_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(
|
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
|
-
|
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
|
-
|
111
|
-
|
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
|
-
|
115
|
-
|
116
|
-
|
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
|
-
|
121
|
-
|
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
|
-
|
124
|
-
|
125
|
-
translation.fragments_attributes = fragments_attributes
|
124
|
+
# applying fragments
|
125
|
+
old_frag_identifiers = translation.fragments.pluck(:identifier)
|
126
126
|
|
127
|
-
|
128
|
-
|
129
|
-
|
127
|
+
new_frag_identifiers, fragments_attributes =
|
128
|
+
construct_fragments_attributes(fragments_hash, translation, path)
|
129
|
+
translation.fragments_attributes = fragments_attributes
|
130
130
|
|
131
|
-
|
132
|
-
|
133
|
-
|
131
|
+
if translation.save
|
132
|
+
message = "[CMS SEEDS] Imported Translation \t #{locale}"
|
133
|
+
ComfortableMexicanSofa.logger.info(message)
|
134
134
|
|
135
|
-
|
136
|
-
|
137
|
-
|
138
|
-
|
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
|
-
|
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 =
|
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!(
|
10
|
+
prepare_folder!(path)
|
11
11
|
|
12
|
-
|
12
|
+
site.snippets.each do |snippet|
|
13
13
|
attrs = {
|
14
14
|
"label" => snippet.label,
|
15
|
-
"categories" => snippet.categories.map
|
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(
|
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("#{
|
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.
|
18
|
+
attrs = YAML.safe_load(attributes_yaml)
|
19
19
|
|
20
|
-
snippet =
|
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(
|
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
|
-
|
41
|
+
seed_ids << snippet.id
|
42
42
|
end
|
43
43
|
|
44
44
|
# cleaning up
|
45
|
-
|
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
|
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
|
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(
|
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(
|
54
|
-
|
55
|
-
|
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:
|
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
|
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
|
@@ -4,29 +4,30 @@ module ComfortableMexicanSofa::ViewHooks
|
|
4
4
|
|
5
5
|
# Array of declared hooks
|
6
6
|
def self.hooks
|
7
|
-
|
7
|
+
@hooks ||= {}
|
8
8
|
end
|
9
9
|
|
10
10
|
# Renders hook content
|
11
11
|
def self.render(name, template, options = {})
|
12
|
-
out =
|
13
|
-
(
|
14
|
-
out += template.render({:
|
12
|
+
out = ""
|
13
|
+
(hooks[name.to_sym] || []).each do |path|
|
14
|
+
out += template.render({ partial: path.first }.merge(options))
|
15
15
|
end
|
16
|
-
|
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
|
-
|
24
|
-
|
25
|
-
|
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
|
-
|
30
|
+
hooks.delete(name)
|
31
31
|
end
|
32
|
+
|
32
33
|
end
|