Class: Effective::SnippetReplacer
- Inherits:
-
Object
- Object
- Effective::SnippetReplacer
- Includes:
- ActionView::Helpers::AssetTagHelper, ActionView::Helpers::UrlHelper, ActiveStorage::Blob::Analyzable
- Defined in:
- app/models/effective/snippet_replacer.rb
Instance Method Summary collapse
- #remove_snippet(region, snippet) ⇒ Object
- #replace! ⇒ Object
- #replace_effective_asset(region, snippet) ⇒ Object
- #replace_region!(region) ⇒ Object
Instance Method Details
#remove_snippet(region, snippet) ⇒ Object
61 62 63 64 |
# File 'app/models/effective/snippet_replacer.rb', line 61 def remove_snippet(region, snippet) region.content.sub!("[#{snippet.id}]", '') region.snippets.delete(snippet.id) end |
#replace! ⇒ Object
9 10 11 12 13 14 15 16 17 18 19 20 |
# File 'app/models/effective/snippet_replacer.rb', line 9 def replace! raise('expected effective regions') unless defined?(Effective::Region) raise('expected effective assets') unless defined?(Effective::Asset) raise('expected active storage') unless defined?(ActiveStorage) Effective::Region.with_snippets.find_each do |region| Effective::SnippetReplacerJob.perform_later(region) end puts 'All Done. Background jobs are running. Have a great day.' true end |
#replace_effective_asset(region, snippet) ⇒ Object
42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 |
# File 'app/models/effective/snippet_replacer.rb', line 42 def replace_effective_asset(region, snippet) asset = snippet.asset raise("Effective:Asset id=#{snippet.asset_id || 'none'} does not exist") unless asset.present? blob = ActiveStorage::Blob.create_and_upload!(io: URI.open(asset.url), filename: asset.file_name) url = Rails.application.routes.url_helpers.rails_blob_url(blob, only_path: true) content = if asset.image? image_tag(url, class: snippet.html_class, alt: snippet.link_title) else link_to(snippet.link_title, url, class: snippet.html_class, title: snippet.link_title) end region.content.sub!("[#{snippet.id}]", content.to_s) region.snippets.delete(snippet.id) true end |
#replace_region!(region) ⇒ Object
22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 |
# File 'app/models/effective/snippet_replacer.rb', line 22 def replace_region!(region) region.snippet_objects.each do |snippet| print('.') begin case snippet.class.name when 'Effective::Snippets::EffectiveAsset' replace_effective_asset(region, snippet) else raise("unsupported snippet: #{snippet.class.name}") end rescue => e puts "\nError: #{e}\n" remove_snippet(region, snippet) end end region.save! end |