Class: Effective::SnippetReplacer

Inherits:
Object
  • Object
show all
Includes:
ActionView::Helpers::AssetTagHelper, ActionView::Helpers::UrlHelper, ActiveStorage::Blob::Analyzable
Defined in:
app/models/effective/snippet_replacer.rb

Instance Method Summary collapse

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