Class: OSS::Attachment

Inherits:
ActiveRecord::Base
  • Object
show all
Extended by:
T::Sig
Defined in:
lib/oss-activerecord/attachment.rb

Defined Under Namespace

Modules: Attachable

Class Attribute Summary collapse

Class Method Summary collapse

Instance Method Summary collapse

Class Attribute Details

.endpointObject

Returns the value of attribute endpoint.



45
46
47
# File 'lib/oss-activerecord/attachment.rb', line 45

def endpoint
  @endpoint
end

.oss_adapterObject

Returns the value of attribute oss_adapter.



45
46
47
# File 'lib/oss-activerecord/attachment.rb', line 45

def oss_adapter
  @oss_adapter
end

.use_signed_urlObject

Returns the value of attribute use_signed_url.



45
46
47
# File 'lib/oss-activerecord/attachment.rb', line 45

def use_signed_url
  @use_signed_url
end

Class Method Details

.resolve_full_url(object_key) ⇒ Object



70
71
72
73
74
75
76
77
78
# File 'lib/oss-activerecord/attachment.rb', line 70

def resolve_full_url(object_key)
  return object_key if object_key.nil? || full_url?(object_key)

  if use_signed_url
    oss_adapter.signed_url(object_key)
  else
    File.join(endpoint, object_key)
  end
end

.resolve_object_key(url) ⇒ Object



58
59
60
61
62
63
64
65
66
67
# File 'lib/oss-activerecord/attachment.rb', line 58

def resolve_object_key(url)
  return url unless descendant_of_endpoint?(url)

  # 首先去掉 url 的 query 部分
  url = url.split('?').first
  # 然后获取相对路径
  p = Pathname.new(url).relative_path_from(Pathname.new(endpoint))

  p.to_s
end

.signed_url(object_key) ⇒ Object



53
54
55
# File 'lib/oss-activerecord/attachment.rb', line 53

def signed_url(object_key)
  oss_adapter.signed_url(object_key)
end

.upload(object_key, filepath) ⇒ Object



48
49
50
# File 'lib/oss-activerecord/attachment.rb', line 48

def upload(object_key, filepath)
  oss_adapter.upload(object_key, filepath)
end

Instance Method Details

#urlObject



17
18
19
20
21
22
23
24
25
# File 'lib/oss-activerecord/attachment.rb', line 17

def url
  return object_key if object_key.nil? || full_url?(object_key)

  if self.class.use_signed_url
    self.class.oss_adapter.signed_url(object_key)
  else
    File.join(self.class.endpoint, object_key)
  end
end

#url=(url) ⇒ Object



28
29
30
31
32
33
34
# File 'lib/oss-activerecord/attachment.rb', line 28

def url=(url)
  if url.nil?
    self.object_key = nil
  else
    self.object_key = self.class.resolve_object_key(url)
  end
end