class Wikisnakker::Snak

Public Class Methods

new(snak) click to toggle source
# File lib/wikisnakker/snak.rb, line 5
def initialize(snak)
  @snak = snak
end

Public Instance Methods

value() click to toggle source

www.wikidata.org/wiki/Special:ListDatatypes www.wikidata.org/wiki/Help:Data_type

# File lib/wikisnakker/snak.rb, line 11
def value
  return if %w(somevalue novalue).include?(@snak[:snaktype])
  case @snak[:datatype]
  when 'commonsMedia'
    # https://commons.wikimedia.org/wiki/Commons:FAQ#What_are_the_strangely_named_components_in_file_paths.3F
    # commons = 'https://commons.wikimedia.org/wiki/File:%s' % @snak["datavalue"]["value"]
    val = @snak[:datavalue][:value].tr(' ', '_')
    md5 = Digest::MD5.hexdigest val
    "https://upload.wikimedia.org/wikipedia/commons/#{md5[0]}/#{md5[0..1]}/#{val}"
  when 'wikibase-item'
    # "Q%s" % @snak["datavalue"]["value"]["numeric-id"]
    Item.new(@snak[:datavalue][:value])
  when 'string'
    @snak[:datavalue][:value]
  when 'external-id'
    @snak[:datavalue][:value]
  when 'quantity'
    if @snak[:datavalue][:value][:upperBound] == @snak[:datavalue][:value][:lowerBound]
      @snak[:datavalue][:value][:amount].to_i
    else
      warn "FIXME: Unhandled 'quantity': #{@snak[:datavalue][:value]}"
    end
  when 'time'
    case @snak[:datavalue][:value][:precision]
    when 11
      @snak[:datavalue][:value][:time][1..10]
    when 10
      @snak[:datavalue][:value][:time][1..7]
    when 9
      @snak[:datavalue][:value][:time][1..4]
    when 7
      '' # Just ignore dates with century precision
    else
      warn "FIXME: Unhandled 'time' precision: #{@snak[:datavalue][:value][:precision]}"
    end
  when 'url'
    @snak[:datavalue][:value]
  else
    warn "FIXME: '#{@snak[:datatype]}' is not implemented yet in Wikisnakker::Snak#value. Defaulting to empty string. #{@snak[:datavalue][:value]}"
    ''
  end
end