Class: Refile::Attacher Private
- Inherits:
-
Object
- Object
- Refile::Attacher
- Defined in:
- lib/refile/attacher.rb
This class is part of a private API. You should avoid using this class if possible, as it may be removed or be changed in the future.
Constant Summary collapse
- Presence =
This constant is part of a private API. You should avoid using this constant if possible, as it may be removed or be changed in the future.
->(val) { val if val != "" }
Instance Attribute Summary collapse
- #definition ⇒ Object readonly private
- #errors ⇒ Object readonly private
- #record ⇒ Object readonly private
- #remove ⇒ Object private
Instance Method Summary collapse
- #basename ⇒ Object private
- #cache ⇒ Object private
- #cache!(uploadable) ⇒ Object private
- #cache_id ⇒ Object private
- #content_type ⇒ Object private
- #data ⇒ Object private
- #delete! ⇒ Object private
- #download(url) ⇒ Object private
- #extension ⇒ Object private
- #filename ⇒ Object private
- #get ⇒ Object private
- #id ⇒ Object private
-
#initialize(definition, record) ⇒ Attacher
constructor
private
A new instance of Attacher.
- #name ⇒ Object private
- #present? ⇒ Boolean private
- #remove? ⇒ Boolean private
- #retrieve!(value) ⇒ Object private
- #set(value) ⇒ Object private
- #size ⇒ Object private
- #store ⇒ Object private
- #store! ⇒ Object private
- #valid? ⇒ Boolean private
Constructor Details
#initialize(definition, record) ⇒ Attacher
This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.
Returns a new instance of Attacher.
9 10 11 12 13 14 |
# File 'lib/refile/attacher.rb', line 9 def initialize(definition, record) @definition = definition @record = record @errors = [] @metadata = {} end |
Instance Attribute Details
#definition ⇒ Object (readonly)
This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.
4 5 6 |
# File 'lib/refile/attacher.rb', line 4 def definition @definition end |
#errors ⇒ Object (readonly)
This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.
4 5 6 |
# File 'lib/refile/attacher.rb', line 4 def errors @errors end |
#record ⇒ Object (readonly)
This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.
4 5 6 |
# File 'lib/refile/attacher.rb', line 4 def record @record end |
#remove ⇒ Object
This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.
5 6 7 |
# File 'lib/refile/attacher.rb', line 5 def remove @remove end |
Instance Method Details
#basename ⇒ Object
This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.
48 49 50 51 52 53 54 |
# File 'lib/refile/attacher.rb', line 48 def basename if filename and extension ::File.basename(filename, "." << extension) else filename end end |
#cache ⇒ Object
This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.
20 21 22 |
# File 'lib/refile/attacher.rb', line 20 def cache @definition.cache end |
#cache!(uploadable) ⇒ Object
This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.
90 91 92 93 94 95 96 97 98 99 100 101 102 |
# File 'lib/refile/attacher.rb', line 90 def cache!(uploadable) @metadata = { size: uploadable.size, content_type: Refile.extract_content_type(uploadable), filename: Refile.extract_filename(uploadable) } if valid? @metadata[:id] = cache.upload(uploadable).id elsif @definition.raise_errors? raise Refile::Invalid, @errors.join(", ") end end |
#cache_id ⇒ Object
This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.
44 45 46 |
# File 'lib/refile/attacher.rb', line 44 def cache_id Presence[@metadata[:id]] end |
#content_type ⇒ Object
This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.
40 41 42 |
# File 'lib/refile/attacher.rb', line 40 def content_type Presence[@metadata[:content_type] || read(:content_type)] end |
#data ⇒ Object
This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.
152 153 154 |
# File 'lib/refile/attacher.rb', line 152 def data @metadata if valid? end |
#delete! ⇒ Object
This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.
138 139 140 141 142 |
# File 'lib/refile/attacher.rb', line 138 def delete! cache.delete(cache_id) if cache_id store.delete(id) if id @metadata = {} end |
#download(url) ⇒ Object
This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.
104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 |
# File 'lib/refile/attacher.rb', line 104 def download(url) unless url.to_s.empty? response = RestClient::Request.new(method: :get, url: url, raw_response: true).execute @metadata = { size: response.file.size, filename: URI.parse(url).path.split("/").last, content_type: response.headers[:content_type] } if valid? response.file.open if response.file.closed? # https://github.com/refile/refile/pull/210 @metadata[:id] = cache.upload(response.file).id elsif @definition.raise_errors? raise Refile::Invalid, @errors.join(", ") end end rescue RestClient::Exception @errors = [:download_failed] raise if @definition.raise_errors? end |
#extension ⇒ Object
This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.
56 57 58 59 60 61 62 63 |
# File 'lib/refile/attacher.rb', line 56 def extension if filename Presence[::File.extname(filename).sub(/^\./, "")] elsif content_type type = MIME::Types[content_type][0] type.extensions[0] if type end end |
#filename ⇒ Object
This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.
36 37 38 |
# File 'lib/refile/attacher.rb', line 36 def filename Presence[@metadata[:filename] || read(:filename)] end |
#get ⇒ Object
This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.
65 66 67 68 69 70 71 |
# File 'lib/refile/attacher.rb', line 65 def get if cache_id cache.get(cache_id) elsif id store.get(id) end end |
#id ⇒ Object
This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.
28 29 30 |
# File 'lib/refile/attacher.rb', line 28 def id Presence[read(:id, true)] end |
#name ⇒ Object
This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.
16 17 18 |
# File 'lib/refile/attacher.rb', line 16 def name @definition.name end |
#present? ⇒ Boolean
This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.
148 149 150 |
# File 'lib/refile/attacher.rb', line 148 def present? not @metadata.empty? end |
#remove? ⇒ Boolean
This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.
144 145 146 |
# File 'lib/refile/attacher.rb', line 144 def remove? remove and remove != "" and remove !~ /\A0|false$\z/ end |
#retrieve!(value) ⇒ Object
This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.
81 82 83 84 85 86 87 88 |
# File 'lib/refile/attacher.rb', line 81 def retrieve!(value) if value.is_a?(String) @metadata = Refile.parse_json(value, symbolize_names: true) || {} elsif value.is_a?(Hash) @metadata = value end if cache_id end |
#set(value) ⇒ Object
This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.
73 74 75 76 77 78 79 |
# File 'lib/refile/attacher.rb', line 73 def set(value) if value.is_a?(String) or value.is_a?(Hash) retrieve!(value) else cache!(value) end end |
#size ⇒ Object
This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.
32 33 34 |
# File 'lib/refile/attacher.rb', line 32 def size Presence[@metadata[:size] || read(:size)] end |
#store ⇒ Object
This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.
24 25 26 |
# File 'lib/refile/attacher.rb', line 24 def store @definition.store end |
#store! ⇒ Object
This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.
125 126 127 128 129 130 131 132 133 134 135 136 |
# File 'lib/refile/attacher.rb', line 125 def store! if remove? delete! write(:id, nil, true) elsif cache_id file = store.upload(get) delete! write(:id, file.id, true) end @metadata = {} end |
#valid? ⇒ Boolean
This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.
156 157 158 159 |
# File 'lib/refile/attacher.rb', line 156 def valid? @errors = @definition.validate(self) @errors.empty? end |