Class: ActiveStorage::Attached::Changes::CreateOne
Do not use. This class is for internal use only.
| Relationships & Source Files | |
| Extension / Inclusion / Inheritance Descendants | |
|
Subclasses:
|
|
| Inherits: | Object |
| Defined in: | activestorage/lib/active_storage/attached/changes/create_one.rb |
Class Method Summary
- .new(name, record, attachable) ⇒ CreateOne constructor
Instance Attribute Summary
- #attachable readonly
- #name readonly
- #record readonly
- #analyze_immediately? ⇒ Boolean readonly private
- #has_immediate_variants? ⇒ Boolean readonly private
- #pending_upload? ⇒ Boolean readonly private
Instance Method Summary
- #analyze
- #attachment
- #blob
- #save
- #upload
- #analyze_option private
- #attachment_service_name private
- #build_attachment private
- #find_attachment private
- #find_or_build_attachment private
- #find_or_build_blob private
- #named_variants private
- #open_attachable_io private
- #reflection private
- #with_local_io private
Constructor Details
.new(name, record, attachable) ⇒ CreateOne
# File 'activestorage/lib/active_storage/attached/changes/create_one.rb', line 10
def initialize(name, record, attachable) @name, @record, @attachable = name, record, attachable blob.identify_without_saving end
Instance Attribute Details
#analyze_immediately? ⇒ Boolean (readonly, private)
[ GitHub ]
# File 'activestorage/lib/active_storage/attached/changes/create_one.rb', line 123
def analyze_immediately? case analyze_option when :immediately then true when :later, :lazily then false when nil then has_immediate_variants? || ActiveStorage.analyze == :immediately else raise ArgumentError, "Unknown analyze option: #{analyze_option.inspect}. Valid options are :immediately, :later, :lazily." end end
#attachable (readonly)
[ GitHub ]
#has_immediate_variants? ⇒ Boolean (readonly, private)
[ GitHub ]
# File 'activestorage/lib/active_storage/attached/changes/create_one.rb', line 141
def has_immediate_variants? named_variants.any? { |_name, named_variant| named_variant.process(record) == :immediately } end
#name (readonly)
[ GitHub ]# File 'activestorage/lib/active_storage/attached/changes/create_one.rb', line 8
attr_reader :name, :record, :attachable
#pending_upload? ⇒ Boolean (readonly, private)
[ GitHub ]
# File 'activestorage/lib/active_storage/attached/changes/create_one.rb', line 55
def pending_upload? case attachable when ActiveStorage::Blob, String then false else true end end
#record (readonly)
[ GitHub ]# File 'activestorage/lib/active_storage/attached/changes/create_one.rb', line 8
attr_reader :name, :record, :attachable
Instance Method Details
#analyze
[ GitHub ]# File 'activestorage/lib/active_storage/attached/changes/create_one.rb', line 15
def analyze with_local_io { blob.analyze_without_saving unless blob.analyzed? } if analyze_immediately? end
#analyze_option (private)
[ GitHub ]# File 'activestorage/lib/active_storage/attached/changes/create_one.rb', line 133
def analyze_option reflection&.&.fetch(:analyze, nil) end
#attachment
[ GitHub ]# File 'activestorage/lib/active_storage/attached/changes/create_one.rb', line 19
def @attachment ||= end
#attachment_service_name (private)
[ GitHub ]# File 'activestorage/lib/active_storage/attached/changes/create_one.rb', line 114
def service_name = record.[name].[:service_name] if service_name.is_a?(Proc) service_name = service_name.call(record) Attached::Model.validate_service_configuration(service_name, record.class, name) end service_name end
#blob
[ GitHub ]# File 'activestorage/lib/active_storage/attached/changes/create_one.rb', line 23
def blob @blob ||= find_or_build_blob end
#build_attachment (private)
[ GitHub ]# File 'activestorage/lib/active_storage/attached/changes/create_one.rb', line 49
def ActiveStorage::Attachment.new(record: record, name: name, blob: blob).tap do || .pending_upload = pending_upload? end end
#find_attachment (private)
[ GitHub ]#find_or_build_attachment (private)
[ GitHub ]# File 'activestorage/lib/active_storage/attached/changes/create_one.rb', line 39
def || end
#find_or_build_blob (private)
[ GitHub ]# File 'activestorage/lib/active_storage/attached/changes/create_one.rb', line 62
def find_or_build_blob case attachable when ActiveStorage::Blob attachable when ActionDispatch::Http::UploadedFile ActiveStorage::Blob.build_after_unfurling( io: attachable.open, filename: attachable.original_filename, content_type: attachable.content_type, record: record, service_name: ) when Rack::Test::UploadedFile ActiveStorage::Blob.build_after_unfurling( io: attachable.respond_to?(:open) ? attachable.open : attachable, filename: attachable.original_filename, content_type: attachable.content_type, record: record, service_name: ) when Hash ActiveStorage::Blob.build_after_unfurling( **attachable.reverse_merge( record: record, service_name: ).symbolize_keys ) when String ActiveStorage::Blob.find_signed!(attachable, record: record) when File ActiveStorage::Blob.build_after_unfurling( io: attachable, filename: File.basename(attachable), record: record, service_name: ) when Pathname ActiveStorage::Blob.build_after_unfurling( io: attachable.open, filename: File.basename(attachable), record: record, service_name: ) else raise( ArgumentError, "Could not find or build blob: expected attachable, " \ "got #{attachable.inspect}" ) end end
#named_variants (private)
[ GitHub ]# File 'activestorage/lib/active_storage/attached/changes/create_one.rb', line 145
def named_variants reflection&.named_variants || {} end
#open_attachable_io (private)
[ GitHub ]# File 'activestorage/lib/active_storage/attached/changes/create_one.rb', line 149
def open_attachable_io case attachable when ActionDispatch::Http::UploadedFile attachable.open when Rack::Test::UploadedFile attachable.respond_to?(:open) ? attachable.open : attachable when Hash attachable.fetch(:io) when File attachable when Pathname attachable.open when ActiveStorage::Blob, String nil else raise ArgumentError, "Could not upload: expected attachable, got #{attachable.inspect}" end end
#reflection (private)
[ GitHub ]#save
[ GitHub ]#upload
[ GitHub ]# File 'activestorage/lib/active_storage/attached/changes/create_one.rb', line 27
def upload if io = open_attachable_io .uploaded(io: io) end end
#with_local_io (private)
[ GitHub ]# File 'activestorage/lib/active_storage/attached/changes/create_one.rb', line 168
def with_local_io io = open_attachable_io if pending_upload? && !blob.local_io if io blob.local_io = io io.rewind if io.respond_to?(:rewind) end yield if io || blob.local_io ensure blob.local_io = nil if io end