Sha256: 3597801d8eaea4a89d589520556597477d81e6b59c2ed9ce9a83608d76c7222b

Contents?: true

Size: 1.25 KB

Versions: 1

Compression:

Stored size: 1.25 KB

Contents

module OrientDB

  Document = com.orientechnologies.orient.core.record.impl.ODocument

  class Document

    def values
      field_names.map { |field_name| [field_name, self[field_name]] }
    end

    alias :db :database

    def [](field_name)
      field field_name.to_s
    end

    def []=(field_name, value)
      field field_name.to_s, value
    end

    def method_missing(method_name, *args, &blk)
      return self[method_name] if contains_field(method_name.to_s)
      match = method_name.to_s.match(/(.*?)([?=!]?)$/)
      case match[2]
        when "="
          self[match[1]] =  args.first
        when "?"
          !!self[match[1]]
        else
          super
      end
    end

    def inspect
      props = values.map { |k, v| "#{k}:#{v}" }.join(' ')
      %{#<OrientDB::Document:#{get_class_name}#{props.empty? ? '' : ' ' + props}>}
    end

    alias :to_s :inspect

    class << self

      alias_method :native_new, :new

      def new(db, klass_name, fields = {})
        obj = native_new db, klass_name
        fields.each do |name, value|
          obj.field name, value
        end
        obj
      end

      def create(db, klass_name, fields = {})
        obj = new db, klass_name, fields
        obj.save
        obj
      end

    end

  end

end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
orientdb-0.0.4-jruby lib/orientdb/document.rb