Class: RemoteFiles::File

Inherits:
Object
  • Object
show all
Defined in:
lib/remote_files/file.rb

Instance Attribute Summary collapse

Class Method Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(identifier, options = {}) ⇒ File

Returns a new instance of File.



5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
# File 'lib/remote_files/file.rb', line 5

def initialize(identifier, options = {})
  known_keys = [:identifier, :stored_in, :content_type, :configuration, :content, :populate_stored_in, :last_update_ts, :errors]
  known_keys.each do |key|
    options[key] ||= options.delete(key.to_s)
  end

  @identifier    = identifier
  @stored_in     = (options[:stored_in] || []).map(&:to_sym) # TODO: Refactor so that there are two classes: `File` and `FileCopy`
  @content       = options.delete(:content)
  @last_update_ts = options[:last_update_ts] || Time.now
  @content_type  = options[:content_type]
  @configuration = RemoteFiles::CONFIGURATIONS[(options[:configuration] || :default).to_sym]
  @logger        = options[:logger]
  @populate_stored_in = options[:populate_stored_in]
  @errors        = options[:errors]
  @options       = options
end

Instance Attribute Details

#configurationObject (readonly)

Returns the value of attribute configuration.



3
4
5
# File 'lib/remote_files/file.rb', line 3

def configuration
  @configuration
end

#contentObject (readonly)

Returns the value of attribute content.



3
4
5
# File 'lib/remote_files/file.rb', line 3

def content
  @content
end

#content_typeObject (readonly)

Returns the value of attribute content_type.



3
4
5
# File 'lib/remote_files/file.rb', line 3

def content_type
  @content_type
end

#errorsObject (readonly)

Returns the value of attribute errors.



3
4
5
# File 'lib/remote_files/file.rb', line 3

def errors
  @errors
end

#identifierObject (readonly)

Returns the value of attribute identifier.



3
4
5
# File 'lib/remote_files/file.rb', line 3

def identifier
  @identifier
end

#last_update_tsObject (readonly)

Returns the value of attribute last_update_ts.



3
4
5
# File 'lib/remote_files/file.rb', line 3

def last_update_ts
  @last_update_ts
end

#populate_stored_inObject (readonly)

Returns the value of attribute populate_stored_in.



3
4
5
# File 'lib/remote_files/file.rb', line 3

def populate_stored_in
  @populate_stored_in
end

#stored_inObject (readonly)

Returns the value of attribute stored_in.



3
4
5
# File 'lib/remote_files/file.rb', line 3

def stored_in
  @stored_in
end

Class Method Details

.from_url(url) ⇒ Object



31
32
33
# File 'lib/remote_files/file.rb', line 31

def self.from_url(url)
  RemoteFiles.default_configuration.file_from_url(url)
end

Instance Method Details

#current_urlObject



71
72
73
74
75
76
77
# File 'lib/remote_files/file.rb', line 71

def current_url
  prioritized_stores = configuration.stores.map(&:identifier) & @stored_in

  return nil if prioritized_stores.empty?

  url(prioritized_stores[0])
end

#deleteObject



112
113
114
115
116
117
118
119
# File 'lib/remote_files/file.rb', line 112

def delete
  begin
    delete!
    true
  rescue RemoteFiles::Error => e
    false
  end
end

#delete!Object



108
109
110
# File 'lib/remote_files/file.rb', line 108

def delete!
  configuration.delete!(self)
end

#delete_now!(parallel: false) ⇒ Object



121
122
123
# File 'lib/remote_files/file.rb', line 121

def delete_now!(parallel: false)
  configuration.delete_now!(self, parallel: parallel)
end

#loggerObject



27
28
29
# File 'lib/remote_files/file.rb', line 27

def logger
  @logger ||= configuration ? configuration.logger : RemoteFiles.logger
end

#logger=(logger) ⇒ Object



23
24
25
# File 'lib/remote_files/file.rb', line 23

def logger=(logger)
  @logger = logger
end

#missing_storesObject



61
62
63
# File 'lib/remote_files/file.rb', line 61

def missing_stores
  configuration.stores - stores
end

#optionsObject



35
36
37
38
39
40
41
42
43
# File 'lib/remote_files/file.rb', line 35

def options
  @options.merge(
    :identifier    => identifier,
    :stored_in     => stored_in,
    :content_type  => content_type,
    :configuration => configuration.name,
    :populate_stored_in => populate_stored_in
  )
end

#read_write_storesObject



57
58
59
# File 'lib/remote_files/file.rb', line 57

def read_write_stores
  stores.reject(&:read_only?)
end

#retrieve!Object

Raises:



79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
# File 'lib/remote_files/file.rb', line 79

def retrieve!
  stores.each do |store|
    begin
      file = store.retrieve!(identifier)
      next unless file
      @content      = file.content
      @content_type = file.content_type
      # :populate_stored_in is a boolean
      @stored_in = file.stored_in if @populate_stored_in
      return true
    rescue Error => e
    end
  end

  raise NotFoundError
end

#store!Object



96
97
98
# File 'lib/remote_files/file.rb', line 96

def store!
  configuration.store!(self)
end

#store_once!Object



100
101
102
# File 'lib/remote_files/file.rb', line 100

def store_once!
  configuration.store_once!(self)
end

#stored?Boolean

Returns:

  • (Boolean)


45
46
47
# File 'lib/remote_files/file.rb', line 45

def stored?
  !@stored_in.empty?
end

#stored_everywhere?Boolean

Returns:

  • (Boolean)


49
50
51
# File 'lib/remote_files/file.rb', line 49

def stored_everywhere?
  missing_stores.empty?
end

#storesObject



53
54
55
# File 'lib/remote_files/file.rb', line 53

def stores
  @stored_in.map { |store_id| configuration.lookup_store(store_id) }
end

#synchronize!Object



104
105
106
# File 'lib/remote_files/file.rb', line 104

def synchronize!
  configuration.synchronize!(self)
end

#url(store_identifier = nil) ⇒ Object



65
66
67
68
69
# File 'lib/remote_files/file.rb', line 65

def url(store_identifier = nil)
  store = store_identifier ? configuration.lookup_store(store_identifier) : configuration.primary_store
  return nil unless store
  store.url(identifier)
end