Skip to content

Commit

Permalink
Adding support for the Symbol datatype
Browse files Browse the repository at this point in the history
  • Loading branch information
escowles committed Aug 8, 2018
1 parent 0785968 commit 328391a
Show file tree
Hide file tree
Showing 7 changed files with 67 additions and 1 deletion.
5 changes: 5 additions & 0 deletions lib/valkyrie/persistence/fedora/permissive_schema.rb
Expand Up @@ -53,6 +53,11 @@ def self.valkyrie_datetime
uri_for(:valkyrie_datetime)
end

# @return [RDF::URI]
def self.valkyrie_symbol
uri_for(:valkyrie_symbol)
end

# @return [RDF::URI]
def self.valkyrie_int
uri_for(:valkyrie_int)
Expand Down
14 changes: 14 additions & 0 deletions lib/valkyrie/persistence/fedora/persister/model_converter.rb
Expand Up @@ -218,6 +218,20 @@ def result
end
end

class SymbolValue < MappedFedoraValue
FedoraValue.register(self)
def self.handles?(value)
value.is_a?(Property) && value.value.is_a?(Symbol)
end

def result
map_value(converted_value: RDF::Literal.new(
value.value,
datatype: PermissiveSchema.valkyrie_symbol
))
end
end

class DateTimeValue < MappedFedoraValue
FedoraValue.register(self)
def self.handles?(value)
Expand Down
12 changes: 12 additions & 0 deletions lib/valkyrie/persistence/fedora/persister/orm_converter.rb
Expand Up @@ -197,6 +197,18 @@ def result
end
end

class SymbolValue < ::Valkyrie::ValueMapper
FedoraValue.register(self)
def self.handles?(value)
value.statement.object.is_a?(RDF::Literal) && value.statement.object.language.blank? && value.statement.object.datatype == PermissiveSchema.valkyrie_symbol
end

def result
value.statement.object = value.statement.object.value.to_sym
calling_mapper.for(Property.new(statement: value.statement, scope: value.scope, adapter: value.adapter)).result
end
end

class LiteralValue < ::Valkyrie::ValueMapper
FedoraValue.register(self)
def self.handles?(value)
Expand Down
1 change: 1 addition & 0 deletions lib/valkyrie/persistence/postgres/orm_converter.rb
Expand Up @@ -91,6 +91,7 @@ def self.handles?(value)
end

def result
return value["@value"].to_sym if value["@type"] == "http://example.com/predicate/valkyrie_symbol"
RDF::Literal.new(value["@value"],
language: value["@language"],
datatype: value["@type"])
Expand Down
12 changes: 11 additions & 1 deletion lib/valkyrie/persistence/postgres/resource_converter.rb
Expand Up @@ -32,9 +32,19 @@ def process_lock_token(orm_object)
def attributes
Hash[
resource.attributes.except(:id, :internal_resource, :created_at, :updated_at).compact.map do |k, v|
[k, Array.wrap(v)]
[k, symbols_to_literals(Array.wrap(v))]
end
]
end

def symbols_to_literals(arr)
arr.map do |val|
if val.is_a?(Symbol)
RDF::Literal.new(val.to_s, datatype: "http://example.com/predicate/valkyrie_symbol")
else
val
end
end
end
end
end
12 changes: 12 additions & 0 deletions lib/valkyrie/persistence/solr/model_converter.rb
Expand Up @@ -248,6 +248,18 @@ def result
end
end

# Casts {Symbol} values into a recognizable string in Solr.
class SymbolPropertyValue < ::Valkyrie::ValueMapper
SolrMapperValue.register(self)
def self.handles?(value)
value.is_a?(Property) && value.value.is_a?(Symbol)
end

def result
calling_mapper.for(Property.new(value.key, "symbol-#{value.value}")).result
end
end

# Casts {DateTime} values into a recognizable string in Solr.
class DateTimePropertyValue < ::Valkyrie::ValueMapper
SolrMapperValue.register(self)
Expand Down
12 changes: 12 additions & 0 deletions lib/valkyrie/persistence/solr/orm_converter.rb
Expand Up @@ -274,6 +274,18 @@ def result
end
end

# Converts a symbol in solr into a {Symbol}
class SymbolValue < ::Valkyrie::ValueMapper
SolrValue.register(self)
def self.handles?(value)
value.to_s.start_with?("symbol-")
end

def result
value.sub(/^symbol-/, '').to_sym
end
end

# Converts a datetime in Solr into a {DateTime}
class DateTimeValue < ::Valkyrie::ValueMapper
SolrValue.register(self)
Expand Down

0 comments on commit 328391a

Please sign in to comment.