module FedoraLens::Lenses
Public Class Methods
as_dom()
click to toggle source
# File lib/fedora_lens/lenses.rb, line 87 def as_dom Lens[ # TODO figure out a memoizing strategy so we don't parse multiple times get: lambda {|xml| Nokogiri::XML(xml)}, put: lambda {|xml, value| value.to_xml}, create: lambda {|value| value.to_xml} ] end
at_css(selector)
click to toggle source
# File lib/fedora_lens/lenses.rb, line 96 def at_css(selector) Lens[ get: lambda {|doc| doc.at_css(selector).content}, put: lambda {|doc, value| doc.at_css(selector).content = value; doc}, # can't do a css create because we don't know the structure ] end
compose(outer, inner)
click to toggle source
# File lib/fedora_lens/lenses.rb, line 185 def compose(outer, inner) Lens[ get: lambda do |source| inner.get(outer.get(source)) end, put: lambda do |source, value| outer.put(source, inner.put(outer.get(source), value)) end ] end
empty_property(graph, rdf_subject, predicate, should_delete)
click to toggle source
# File lib/fedora_lens/lenses.rb, line 105 def empty_property(graph, rdf_subject, predicate, should_delete) if should_delete graph.query([rdf_subject, predicate, nil]).each_statement do |statement| if should_delete.call(statement.object) graph.delete(statement) end end else graph.delete([rdf_subject, predicate, nil]) end end
get_predicate(predicate, opts = {})
click to toggle source
@param [RDF::URI] predicate @param [Hash] opts @option opts [Proc] :select a proc that takes the object and returns
true if it should be included in this subset of the predicates. Used for storing different classes of objects under different attribute names even though they all use the same predicate.
# File lib/fedora_lens/lenses.rb, line 125 def get_predicate(predicate, opts = {}) Lens[ get: lambda do |orm| values = orm.value(predicate) if opts[:select] values.select { |val| opts[:select].call(val) } else values end end, put: lambda do |orm, values| empty_property(orm.graph, orm.resource.subject_uri, predicate, opts[:select]) Array(values).each do |value| next if value.nil? orm.graph.insert([orm.resource.subject_uri, predicate, value]) end orm end, create: lambda do |values| orm = Ldp::Orm.new(Ldp::Resource::RdfSource.new(FedoraLens.connection, '', RDF::Graph.new)) values.each do |value| orm.graph.insert([orm.resource.subject_uri, predicate, value]) end orm end ] end
hash_update()
click to toggle source
# File lib/fedora_lens/lenses.rb, line 64 def hash_update Lens[ get: lambda {|hash| hash[key]}, put: lambda {|hash, pair| hash.merge(pair[0] => pair[1])} ] end
literal_to_string()
click to toggle source
# File lib/fedora_lens/lenses.rb, line 24 def literal_to_string Lens[ get: :to_s.to_proc, put: lambda do |source, value| if source.is_a?(RDF::Literal) RDF::Literal.new(value, language: source.language, datatype: source.datatype) else RDF::Literal.new(value) end end ] end
literals_to_strings()
click to toggle source
# File lib/fedora_lens/lenses.rb, line 37 def literals_to_strings Lens[ get: lambda do |source| source.map(&:to_s) end, put: lambda do |sources, values| Array(values).map do |value| RDF::Literal.new(value) end end ] end
load_model(klass)
click to toggle source
# File lib/fedora_lens/lenses.rb, line 153 def load_model(klass) Lens[ get: lambda do |id| klass.find(id) end, put: lambda do |id, model| model.save id end ] end
load_or_build_orm()
click to toggle source
# File lib/fedora_lens/lenses.rb, line 165 def load_or_build_orm Lens[ get: lambda do |uri| if uri.present? Ldp::Orm.new(Ldp::Resource::RdfSource.new(FedoraLens.connection, uri.to_s)) else Ldp::Orm.new(Ldp::Resource::RdfSource.new(FedoraLens.connection, nil, RDF::Graph.new)) end end, put: lambda do |uri, orm| if orm.resource.subject.present? orm.save else orm.resource.create end orm.resource.subject_uri end ] end
orm_to_hash(name_to_lens)
click to toggle source
# File lib/fedora_lens/lenses.rb, line 71 def orm_to_hash(name_to_lens) Lens[ get: lambda do |orm| name_to_lens.inject({}) do |hash, (key, lens)| hash.merge(key => lens.get(orm)) end end, put: lambda do |orm, hash| name_to_lens.each do |(key, lens)| lens.put(orm, hash[key]) end orm end ] end
single()
click to toggle source
# File lib/fedora_lens/lenses.rb, line 16 def single Lens[ get: :first.to_proc, put: lambda {|source, value| source[0] = value; source}, create: lambda {|value| [value]} ] end
uris_to_ids(&block)
click to toggle source
@param class_lambda [Proc] returns an object which implements uri_to_id and id_to_uri
# File lib/fedora_lens/lenses.rb, line 51 def uris_to_ids(&block) Lens[ get: lambda do |source| source.map { |uri| yield.uri_to_id(URI.parse(uri).to_s) } end, put: lambda do |sources, values| Array(values).compact.map do |value| RDF::URI.new(yield.id_to_uri(value)) end end ] end
zip(first, second)
click to toggle source
# File lib/fedora_lens/lenses.rb, line 196 def zip(first, second) end