Module: Paperclip::Storage::Fedora

Extended by:
Fedora
Included in:
Fedora
Defined in:
lib/paperclip-fedora.rb,
lib/paperclip-fedora/railtie.rb

Defined Under Namespace

Classes: Railtie

Class Method Summary collapse

Instance Method Summary collapse

Class Method Details

.extended(base) ⇒ Object



9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
# File 'lib/paperclip-fedora.rb', line 9

def self.extended(base)
  require 'rubydora'
  base.instance_eval do
    if(!@options[:fedora_config])
      @options[:fedora_config] = config_file
    end

    @fedora_config = parse_config(@options[:fedora_config])
    @host = @fedora_config[:host]
    @port = @fedora_config[:port]
    @context = @fedora_config[:context]
    @custom_namespace = @options[:fedora_pid]

    @server_url = "http\://#{@host}\:#{@port}/#{@context}"
    @object_id = instance.uuid || @custom_pid || path()
    @path = @object_id
    @url = "#{@server_url}/objects/#{@path}/datastreams/:style/content"

    Paperclip.interpolates(:basename_clean) do |attachment, style|
      s = File.basename(attachment.original_filename, File.extname(attachment.original_filename))
      s.downcase!
      s.gsub!(/'/, '')
      s.gsub!(/[^A-Za-z0-9:\-]+/, ' ')
      s.strip!
      s.gsub!(/\ +/, '-')
      s
    end unless Paperclip::Interpolations.respond_to? :basename_clean
  end
end

Instance Method Details

#config?Boolean

Returns:

  • (Boolean)


126
127
128
# File 'lib/paperclip-fedora.rb', line 126

def config?
  File.file? config_file
end

#config_fileObject



122
123
124
# File 'lib/paperclip-fedora.rb', line 122

def config_file
  Rails.root.join("config", "fedora.yml").to_s
end

#exists?(style = default_style) ⇒ Boolean

Returns:

  • (Boolean)


39
40
41
42
# File 'lib/paperclip-fedora.rb', line 39

def exists?(style=default_style)
  exists_bool = !fedora_object.datastreams[style.to_s].new?
  exists_bool
end

#fedoraObject



91
92
93
94
# File 'lib/paperclip-fedora.rb', line 91

def fedora
  @@repo ||= Rubydora.connect url: @server_url, user: @fedora_config[:user], password: @fedora_config[:password] 
  @@repo
end

#fedora_objectObject



96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
# File 'lib/paperclip-fedora.rb', line 96

def fedora_object
  @object_id = instance.uuid || @custom_pid || path()
  @path = @object_id
  @url = "#{@server_url}/objects/#{@path}/datastreams/:style/content"
  object = fedora.find(@object_id)
  saved_object = object.save
  paperclip_styles = object.datastreams['paperclip_styles']
  if paperclip_styles.new?
    paperclip_styles.controlGroup = 'M'
    paperclip_styles.dsLabel = "Paperclip styles - Used for deletion tracking"
    paperclip_styles.content = " "
    paperclip_styles.mimeType = "text/plain"
    paperclip_styles.save
  end
  saved_object
end

#flush_deletesObject



74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
# File 'lib/paperclip-fedora.rb', line 74

def flush_deletes
  @queued_for_delete.uniq!
  @queued_for_delete.each do |path|
    object = fedora.find(path)
    pso = object.datastreams['paperclip_styles']
    ps = pso.content
    ps.split(' ').each do |style|
      ds = object.datastreams[style]
      ds.delete
      log("Deleted #{path} - #{style} stream")
    end
    pso.content = " "
    pso.save
  end
  @queued_for_delete = []
end

#flush_writesObject



54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
# File 'lib/paperclip-fedora.rb', line 54

def flush_writes
  @object_id = instance.uuid || @custom_pid || path()
  @path = @object_id
  @url = "#{@server_url}/objects/#{@path}/datastreams/:style/content"
  ps = fedora_object.datastreams['paperclip_styles']
  style_list = ps.content
  @queued_for_write.each do |style, file|
    style_list = "#{style_list.strip} #{style.to_s}"
    ds = fedora_object.datastreams[style.to_s]
    ds.controlGroup = 'M'
    ds.file = file
    ds.dsLabel = "Paperclip: #{File.extname(file)} file"
    ds.save
    log("Added #{style} datastream to #{@object_id}")
  end
  ps.content = style_list.strip
  ps.save
  @queued_for_write = {}
end

#parse_config(config) ⇒ Object



113
114
115
116
# File 'lib/paperclip-fedora.rb', line 113

def parse_config config
  config = find_credentials(config).stringify_keys
  (config[Rails.env] || config).symbolize_keys
end

#setup!Object



118
119
120
# File 'lib/paperclip-fedora.rb', line 118

def setup!
  FileUtils.cp(File.dirname(__FILE__) + "/../config/fedora.yml", config_file) unless config?
end

#to_file(style = default_style) ⇒ Object



44
45
46
47
48
49
50
51
52
# File 'lib/paperclip-fedora.rb', line 44

def to_file(style=default_style)
  return @queued_for_write[style.to_s] if @queued_for_write[style.to_s]
  ds = fedora_object.datastreams[style.to_s]
  file = Tempfile.new([fedora_object.label, style.to_s])
  file.binmode
  file.write(ds.read)
  file.rewind
  file
end