From b9d060a85dbdcf08731debafbb5ad6ede0d71fc4 Mon Sep 17 00:00:00 2001 From: Alex Tharp Date: Tue, 25 Apr 2017 22:40:21 -0500 Subject: [PATCH 1/3] feat: supporting functionality for Shrine-backed AssetFieldType rebuild, comments denoting targets for refactor, style fixes and improvements --- .env.example | 11 ++++-- .gitignore | 1 + Gemfile | 2 +- Gemfile.lock | 34 ++++++++++++++----- app/assets/stylesheets/application.scss | 4 ++- app/assets/stylesheets/components/card.scss | 3 +- app/assets/stylesheets/components/dialog.scss | 2 +- app/assets/stylesheets/components/index.scss | 5 +++ .../components/{content.scss => table.scss} | 0 app/cells/index/index.haml | 8 +++-- app/cells/index_cell.rb | 12 +++++-- app/controllers/content_items_controller.rb | 2 +- app/helpers/popup_helper.rb | 4 ++- config/environments/development.rb | 2 +- config/initializers/field_types.rb | 1 - 15 files changed, 66 insertions(+), 25 deletions(-) rename app/assets/stylesheets/components/{content.scss => table.scss} (100%) delete mode 100644 config/initializers/field_types.rb diff --git a/.env.example b/.env.example index cf6e6b2ff..197dd072d 100644 --- a/.env.example +++ b/.env.example @@ -5,8 +5,15 @@ DEVISE_SECRET= # # Asset Host Configuration # -HOST=http://localhost:3000 -S3_HOST_ALIAS= +FOG_HOST=http://localhost:3000 +HOST_ALIAS= + +# S3 +S3_ACCESS_KEY_ID= +S3_SECRET_ACCESS_KEY= +S3_BUCKET_NAME= +S3_PROTOCOL= +S3_REGION= # # Email Configuration diff --git a/.gitignore b/.gitignore index 033088147..c19fd93b4 100644 --- a/.gitignore +++ b/.gitignore @@ -15,6 +15,7 @@ /public/youtubes/ /public/bulk_jobs/ /public/content-snippets-edit +/public/uploads/ # Ignore the default SQLite database. /db/*.sqlite3 diff --git a/Gemfile b/Gemfile index 6cfcdd64a..805049178 100644 --- a/Gemfile +++ b/Gemfile @@ -12,7 +12,7 @@ gem 'rails', '~> 5.0.1' # Cortex-specific gem 'cortex-exceptions', '= 0.0.4' -gem 'cortex-plugins-core', '= 0.11.3' +gem 'cortex-plugins-core', git: 'https://github.com/cortex-cms/cortex-plugins-core.git', branch: 'topic/COR-704-Rebuild-AssetFieldType' # API gem 'grape', '~> 0.17' diff --git a/Gemfile.lock b/Gemfile.lock index 7836c11f9..5f14f4769 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -5,6 +5,24 @@ GIT awesome_nested_set (3.1.2) activerecord (>= 4.0.0, < 5.1) +GIT + remote: https://github.com/cortex-cms/cortex-plugins-core.git + revision: cc5f33441c2d229536ab0776d86aa197e37c9654 + branch: topic/COR-704-Rebuild-AssetFieldType + specs: + cortex-plugins-core (0.11.2) + cells (~> 4.1) + cells-haml (~> 0.0.10) + cells-rails (~> 0.0.6) + fastimage (~> 2.1.0) + image_processing (~> 0.4.1) + jsonb_accessor (~> 1.0.0.beta) + mimemagic (~> 0.3.2) + mini_magick (~> 4.7.0) + rails (>= 4) + react_on_rails (~> 6) + shrine (~> 2.6.1) + GIT remote: https://github.com/toastercup/grape-kaminari.git revision: 661388050eaa97f70006b74fe300e19760b8a132 @@ -137,14 +155,6 @@ GEM concurrent-ruby (1.0.4) connection_pool (2.2.1) cortex-exceptions (0.0.4) - cortex-plugins-core (0.11.3) - cells (~> 4.1) - cells-haml (~> 0.0.10) - cells-rails (~> 0.0.6) - jsonb_accessor (~> 1.0.0.beta) - mimemagic (~> 0.3.2) - rails (>= 4) - react_on_rails (~> 6) database_cleaner (1.5.3) debug_inspector (0.0.2) declarative-builder (0.1.0) @@ -169,6 +179,7 @@ GEM dotenv-rails (2.2.0) dotenv (= 2.2.0) railties (>= 3.2, < 5.1) + down (2.4.3) elasticsearch (5.0.3) elasticsearch-api (= 5.0.3) elasticsearch-transport (= 5.0.3) @@ -205,6 +216,7 @@ GEM i18n (~> 0.5) faraday (0.11.0) multipart-post (>= 1.2, < 3) + fastimage (2.1.0) ffi (1.9.17) fission (0.5.0) CFPropertyList (~> 2.2) @@ -411,6 +423,7 @@ GEM image_optim_pack (0.3.1.20170121) fspath (>= 2.1, < 4) image_optim (~> 0.19) + image_processing (0.4.1) image_size (1.5.0) in_threads (1.3.1) inflecto (0.0.2) @@ -471,6 +484,7 @@ GEM mime-types-data (~> 3.2015) mime-types-data (3.2016.0521) mimemagic (0.3.2) + mini_magick (4.7.0) mini_portile2 (2.1.0) mini_racer (0.1.8) libv8 (~> 5.3) @@ -654,6 +668,8 @@ GEM shellany (0.0.1) shoulda-matchers (3.1.1) activesupport (>= 4.0.0) + shrine (2.6.1) + down (>= 2.3.6) sidekiq (4.2.9) concurrent-ruby (~> 1.0) connection_pool (~> 2.2, >= 2.2.0) @@ -734,7 +750,7 @@ DEPENDENCIES cells-rails (~> 0.0.7) codeclimate-test-reporter (~> 0.6) cortex-exceptions (= 0.0.4) - cortex-plugins-core (= 0.11.3) + cortex-plugins-core! database_cleaner (~> 1.5) deep_cloneable (~> 2.2.2) devise (~> 4.2.0) diff --git a/app/assets/stylesheets/application.scss b/app/assets/stylesheets/application.scss index e83147b25..121af0a52 100644 --- a/app/assets/stylesheets/application.scss +++ b/app/assets/stylesheets/application.scss @@ -19,7 +19,6 @@ @import 'components/card'; @import 'components/confetti'; -@import 'components/content'; @import 'components/dialog'; @import 'components/flash'; @import 'components/form'; @@ -28,6 +27,9 @@ @import 'components/jumbo-button'; @import 'components/notes'; @import 'components/sidebar'; +@import 'components/table'; @import 'components/ui'; @import 'demo'; + +@import 'cortex-plugins-core/application'; diff --git a/app/assets/stylesheets/components/card.scss b/app/assets/stylesheets/components/card.scss index 5a7f9181b..fe6c39b6d 100644 --- a/app/assets/stylesheets/components/card.scss +++ b/app/assets/stylesheets/components/card.scss @@ -1,8 +1,9 @@ // Overrides .mdl-card { + border: $data-table-dividers; + border-radius: 0; width: auto; - border-radius: 3px; overflow: visible; z-index: auto; } diff --git a/app/assets/stylesheets/components/dialog.scss b/app/assets/stylesheets/components/dialog.scss index 88e65c498..3590f5e48 100644 --- a/app/assets/stylesheets/components/dialog.scss +++ b/app/assets/stylesheets/components/dialog.scss @@ -23,7 +23,7 @@ justify-content: center; align-items: center; - border: 1px solid $color-grey; + border: $data-table-dividers; margin-top: 10px; margin-bottom: 10px; width: 100%; diff --git a/app/assets/stylesheets/components/index.scss b/app/assets/stylesheets/components/index.scss index e29adadc9..a081de437 100644 --- a/app/assets/stylesheets/components/index.scss +++ b/app/assets/stylesheets/components/index.scss @@ -1,3 +1,7 @@ +.index { + width: 100%; +} + .content_item-link { cursor: pointer; @@ -21,3 +25,4 @@ } } } + diff --git a/app/assets/stylesheets/components/content.scss b/app/assets/stylesheets/components/table.scss similarity index 100% rename from app/assets/stylesheets/components/content.scss rename to app/assets/stylesheets/components/table.scss diff --git a/app/cells/index/index.haml b/app/cells/index/index.haml index 0cdc3eb12..54acc0499 100644 --- a/app/cells/index/index.haml +++ b/app/cells/index/index.haml @@ -1,3 +1,5 @@ -%table{ class: 'mdl-data-table mdl-js-data-table', style: 'width: 100%;' } - = cell('index', @index, data: data).(:table_headers) - = cell('index', @index, data: data).(:table_body) +.mdl-grid + .mdl-cell.mdl-cell--12-col + %table.mdl-data-table.mdl-js-data-table.index + = cell('index', @index, data: data).(:table_headers) + = cell('index', @index, data: data).(:table_body) diff --git a/app/cells/index_cell.rb b/app/cells/index_cell.rb index 73c40a2d3..ead2f2593 100644 --- a/app/cells/index_cell.rb +++ b/app/cells/index_cell.rb @@ -20,26 +20,32 @@ def render_table_header(column_data) end def asset_field_item(content_item) + # TODO: This needs to be generic functionality content_item.field_items.find { |field_item| field_item.field.name == 'Asset' } end def content_item_title(content_item) + # TODO: This needs to be generic functionality content_item.field_items.find { |field_item| field_item.field.name == 'Title' }.data['text'] end def content_item_thumb_url(content_item) - asset_field_item(content_item).data['asset']['style_urls']['mini'] + # TODO: The thumb version needs to be configurable, and this needs to be in a plugin + asset_field_item(content_item).data['asset']&.[]('versions')&.[]('mini')&.[]('url') end def content_item_asset_url(content_item) - asset_field_item(content_item).data['asset']['url'] + # TODO: This needs to be in a plugin + asset_field_item(content_item).data['asset']['versions']['original']['url'] end def content_item_asset_type(content_item) - MimeMagic.new(asset_field_item(content_item).data['asset']['content_type']).mediatype + # TODO: This needs to be in a plugin + MimeMagic.new(asset_field_item(content_item).data['asset']['versions']['original']['mime_type']).mediatype end def content_item_asset_alt_text(content_item) + # TODO: This needs to be in a plugin content_item.field_items.find { |field_item| field_item.field.name == 'Alt Tag' }.data['text'] end end diff --git a/app/controllers/content_items_controller.rb b/app/controllers/content_items_controller.rb index f8be887fc..377e992d8 100644 --- a/app/controllers/content_items_controller.rb +++ b/app/controllers/content_items_controller.rb @@ -64,6 +64,6 @@ def create else flash[:success] = "Hooray! #{content_type.name} Created!" redirect_to content_type_content_items_path - end + end end end diff --git a/app/helpers/popup_helper.rb b/app/helpers/popup_helper.rb index d3ab16910..aee55846d 100644 --- a/app/helpers/popup_helper.rb +++ b/app/helpers/popup_helper.rb @@ -1,4 +1,6 @@ module PopupHelper + # TODO: This needs to be in a plugin + def media_content_type @media_content_type ||= ContentType.find_by_name('Media') end @@ -13,7 +15,7 @@ def media_asset_field def media_image_content_items @media_image_content_items ||= media_content_items.select do |content_item| - MimeMagic.new(content_item.field_items.find_by_field_id(media_asset_field).data['asset']['content_type']).mediatype == 'image' + MimeMagic.new(content_item.field_items.find_by_field_id(media_asset_field).data['asset']['versions']['original']['mime_type']).mediatype == 'image' end end diff --git a/config/environments/development.rb b/config/environments/development.rb index 2787dd4fb..43055cb2b 100644 --- a/config/environments/development.rb +++ b/config/environments/development.rb @@ -51,7 +51,7 @@ Paperclip.options[:command_path] = '/usr/local/bin/' config.paperclip_defaults = { storage: :fog, - fog_host: ENV['HOST'], + fog_host: ENV['FOG_HOST'], fog_directory: '', fog_credentials: { provider: 'Local', diff --git a/config/initializers/field_types.rb b/config/initializers/field_types.rb deleted file mode 100644 index 99ec6758a..000000000 --- a/config/initializers/field_types.rb +++ /dev/null @@ -1 +0,0 @@ -Dir["#{Rails.root}/app/models/*_field_type.rb"].each {|file| load file} \ No newline at end of file From 699cad704a08da1503b12d92bdb69c6bb6cdd0fb Mon Sep 17 00:00:00 2001 From: Alex Tharp Date: Wed, 26 Apr 2017 02:40:06 -0500 Subject: [PATCH 2/3] fix: AssetFieldType implementation for RSS Helper and Media Widget Parser Helper --- app/helpers/rss_helper.rb | 4 ++-- app/helpers/widget_parsers/media_helper.rb | 14 ++++++++++---- 2 files changed, 12 insertions(+), 6 deletions(-) diff --git a/app/helpers/rss_helper.rb b/app/helpers/rss_helper.rb index 8b8ce5427..bd10b2df5 100644 --- a/app/helpers/rss_helper.rb +++ b/app/helpers/rss_helper.rb @@ -54,11 +54,11 @@ def media_data(media_hash, rss_content_item) if field_item.nil? {} else - asset_data = field_item.data["asset"] + asset_data = field_item.data['asset']['versions']['original'] { "url": asset_data["url"], - "type": asset_data["content_type"], + "type": asset_data["mime_type"], "medium": media_hash["medium"], "width": media_hash["width"] || asset_data["dimensions"]["width"], "height": media_hash["height"] || asset_data["dimensions"]["height"] diff --git a/app/helpers/widget_parsers/media_helper.rb b/app/helpers/widget_parsers/media_helper.rb index 1878371e5..578353e65 100644 --- a/app/helpers/widget_parsers/media_helper.rb +++ b/app/helpers/widget_parsers/media_helper.rb @@ -1,7 +1,9 @@ module WidgetParsers module MediaHelper + # This needs to be abstracted to a plugin + def self.parse(body) - body_document = document_for(body) + body_document = document_for body widget_nodes_for(body_document).each do |widget_node| widget_node.inner_html = render_widget_inner widget_node @@ -28,10 +30,10 @@ def self.render_widget_inner(widget) end def self.content_item_element(id) - asset_field_item = ContentItem.find(id).field_items.find { |field_item| field_item.field.field_type == "asset_field_type" } - url = asset_field_item.data["asset"]["url"] + asset_field_item = ContentItem.find(id).field_items.find { |field_item| field_item.field.field_type_instance.is_a?(AssetFieldType) } + url = asset_field_item.data['asset']['versions']['original']['url'] - if asset_field_item.data["asset"]["content_type"].include?("image") + if image? asset_field_item.data['asset']['versions']['original']['mime_type'] element = { src: url } tag_type = 'img' else @@ -41,5 +43,9 @@ def self.content_item_element(id) [element, tag_type] end + + def self.image?(mime_type) + MimeMagic.new(mime_type).mediatype == 'image' + end end end From b051b1abcf357581ada9a3eb1d8a64d4009ba67f Mon Sep 17 00:00:00 2001 From: Alex Tharp Date: Wed, 26 Apr 2017 02:42:58 -0500 Subject: [PATCH 3/3] chore: bump cortex-plugins-core --- Gemfile.lock | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Gemfile.lock b/Gemfile.lock index 5f14f4769..b8c31d0bb 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -7,7 +7,7 @@ GIT GIT remote: https://github.com/cortex-cms/cortex-plugins-core.git - revision: cc5f33441c2d229536ab0776d86aa197e37c9654 + revision: 233f7faa8fb97ebaa445153868fece219b4f4dc7 branch: topic/COR-704-Rebuild-AssetFieldType specs: cortex-plugins-core (0.11.2)