Sha256: 7e939b400556c10e8c461cff95e66617ccd7dbed989b294148041aede176f2f8

Contents?: true

Size: 1.4 KB

Versions: 2

Compression:

Stored size: 1.4 KB

Contents

module Ldp
  class Orm

    attr_reader :resource
    attr_reader :last_response

    def initialize resource
      @resource = resource
    end

    def graph
      resource.graph
    end

    def value predicate
      graph.query(:subject => resource.subject_uri, :predicate => predicate).map do |stmt|
        stmt.object
      end
    end

    def query *args, &block
      graph.query *args, &block
    end

    def reload
      Ldp::Orm.new resource.reload
    end

    def create
      nil
    end

    def save
      @last_response = resource.update

      diff = Ldp::Resource.check_for_differences_and_reload_resource self

      if diff.any?
        diff
      else
        @last_response.success?
      end
    end

    def save!
      result = save

      if result.is_a? RDF::Graph
        raise GraphDifferenceException.new "", result
      elsif !result
        raise SaveException.new "", @last_response
      end

      result
    end

    def delete
      resource.delete
    end

    def method_missing meth, *args, &block
      super
    end

    def respond_to?(meth)
      super
    end

  end

  class GraphDifferenceException < Exception
    attr_reader :diff
    def initialize message, diff
      super(message)
      @diff = diff
    end
  end

  class SaveException < Exception
    attr_reader :response
    def initialize message, response
      super(message)
      @response = response
    end
  end
end

Version data entries

2 entries across 2 versions & 1 rubygems

Version Path
ldp-0.0.3 lib/ldp/orm.rb
ldp-0.0.2 lib/ldp/orm.rb