Last active
August 24, 2018 21:05
-
-
Save ErvalhouS/7ff27d473028155d42558f1f251e1ac6 to your computer and use it in GitHub Desktop.
A monkey patch to add url for each paperclip version on the records' serialized JSONs
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
# frozen_string_literal: true | |
# Paperclip's module | |
module Paperclip | |
# Module that contains methods used on Models | |
module ClassMethods | |
# Overriding this method to add all initialized fields into class variable | |
def has_attached_file(name, options = {}) | |
class_eval do | |
@@_paperclip_attachments ||= {} | |
@@_paperclip_attachments[self.name] ||= [] | |
@@_paperclip_attachments[self.name] << name | |
end | |
# Attr accessor | |
define_method :_paperclip_attachments do | |
@@_paperclip_attachments # you can access class variable without offence | |
end | |
@@_paperclip_attachments[self.name].each do |inner_name| | |
define_method "remove_#{inner_name}=".to_sym do |value| | |
self.send(inner_name).destroy if ['1', true, 'true', 't'].include?(value) | |
end | |
end | |
HasAttachedFile.define_on(self, name, options) | |
class_eval do | |
# Overriding default `as_json` method to merge attachments urls into it | |
define_method :as_json do |inner_options = {}| | |
super(inner_options).merge(urls_json) | |
end | |
# A method to extract all versions' urls | |
define_method :urls_json do | |
parsed_json = {} | |
_paperclip_attachments[self.name].each do |inner_name| | |
parsed_json[inner_name] = {} | |
send(inner_name).styles.keys.each do |version| | |
if send(inner_name).url(version).present? | |
parsed_json[inner_name][version] = {} | |
parsed_json[inner_name][version] = send(inner_name).url(version) | |
end | |
end | |
if send(inner_name).url.present? | |
parsed_json[inner_name][:original] = {} | |
parsed_json[inner_name][:original] = send(inner_name).url | |
end | |
end | |
parsed_json | |
end | |
end | |
end | |
end | |
end |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment