Sha256: 6090e12703150b383cf60176f0f441bbf27c9f60c1b068104347e7c777e68d15

Contents?: true

Size: 1.72 KB

Versions: 7

Compression:

Stored size: 1.72 KB

Contents

module PrintReleaf
  class Resource < Hashie::Trash
    include Hashie::Extensions::IndifferentAccess
    include Hashie::Extensions::IgnoreUndeclared
    include Hashie::Extensions::Coercion

    class << self
      def path(value=nil)
        @path = value if value
        @path or raise "Path not declared."
      end

      def uri
        path
      end

      def actions
        @actions ||= Set.new
      end

      def action(sym)
        actions.tap { |list|
          list.add(sym)
        }.each { |action|
          include Actions.const_get(action.to_s.capitalize)
        }
      end
    end

    # Default properties
    property :deleted

    attr_reader :copy
    attr_accessor :owner

    def initialize(*args)
      super
      @copy = self.dup.freeze
    end

    def uri
      scope = owner ? owner.uri : nil
      Util.join_uri(scope, self.class.uri, self.id)
    end

    def find(*args)
      raise DoesNotImplement, "Resource does not implement `find`"
    end

    def delete
      raise DoesNotImplement, "Resource does not implement `delete`"
    end

    def reset(hash)
      delete_if { true }
      update(hash)
    end

    def changes
      keys.map(&:to_sym).inject({}) do |diff, key|
        unless self[key] == copy[key]
          diff[key] = self[key]
        end
        diff
      end
    end

    def deleted?
      !!deleted
    end

    def to_s
      "#<#{self.class.name}>"
    end

    def inspect
      "".tap do |str|
        str << "#<#{self.class} "
        str << JSON.pretty_generate(self)
        str << ">"
      end
    end

    def compact_inspect
      "".tap do |str|
        str << "#<#{self.class} "
        str << "id='#{self.id}'" if respond_to?(:id)
        str << ">"
      end
    end
  end
end

Version data entries

7 entries across 7 versions & 1 rubygems

Version Path
printreleaf-1.5.0 lib/printreleaf/resource.rb
printreleaf-1.3.2 lib/printreleaf/resource.rb
printreleaf-1.3.1 lib/printreleaf/resource.rb
printreleaf-1.3.0 lib/printreleaf/resource.rb
printreleaf-1.0.3 lib/printreleaf/resource.rb
printreleaf-1.0.2 lib/printreleaf/resource.rb
printreleaf-1.0.1 lib/printreleaf/resource.rb