Class: Cul::Hydra::Datastreams::EncodedTextDatastream

Inherits:
ActiveFedora::Datastream
  • Object
show all
Defined in:
app/models/cul/hydra/datastreams/encoded_text_datastream.rb

Constant Summary collapse

DEFAULT_PRIORITIES =
[ Encoding::UTF_8, Encoding::WINDOWS_1252, Encoding::ISO_8859_1 ]

Class Method Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(digital_object = nil, dsid = nil, options = {}) ⇒ EncodedTextDatastream

Returns a new instance of EncodedTextDatastream.



7
8
9
10
# File 'app/models/cul/hydra/datastreams/encoded_text_datastream.rb', line 7

def initialize(digital_object=nil, dsid=nil, options={})
  @encoding_priorities = options.delete(:encodings) || DEFAULT_PRIORITIES
  super
end

Class Method Details

.utf8able!(data, encoding_priorities = DEFAULT_PRIORITIES) ⇒ Object



24
25
26
27
28
29
30
31
32
33
34
35
36
# File 'app/models/cul/hydra/datastreams/encoded_text_datastream.rb', line 24

def self.utf8able!(data, encoding_priorities = DEFAULT_PRIORITIES)
  return unless data
  data = data.read if data.is_a? IO
  content_encoding = encoding_priorities.detect do |enc|
    begin
      data.force_encoding(enc).valid_encoding?
    rescue Encoding::UndefinedConversionError, Encoding::InvalidByteSequenceError
      false
    end
  end
  raise "could not encode text datastream content" unless content_encoding
  data.force_encoding(content_encoding)
end

Instance Method Details

#contentObject



16
17
18
# File 'app/models/cul/hydra/datastreams/encoded_text_datastream.rb', line 16

def content
  utf8able!(super.to_s).encode!(Encoding::UTF_8)
end

#content=(value) ⇒ Object



12
13
14
# File 'app/models/cul/hydra/datastreams/encoded_text_datastream.rb', line 12

def content=(value)
  super(utf8able!(value).encode!(Encoding::UTF_8))
end

#utf8able!(data) ⇒ Object



20
21
22
# File 'app/models/cul/hydra/datastreams/encoded_text_datastream.rb', line 20

def utf8able!(data)
  EncodedTextDatastream.utf8able!(data, @encoding_priorities)
end