class CMIS::Type

Attributes

repository[RW]

Public Class Methods

new(hash, repository) click to toggle source
# File lib/cmis/type.rb, line 7
def initialize(hash, repository)
  @repository = repository
  @hash = hash.deep_stringify_keys

  properties = %w( id localName localNamespace queryName displayName baseId
                   parentId description creatable fileable queryable
                   controllablePolicy controllableACL fulltextIndexed
                   includedInSupertypeQuery propertyDefinitions versionable
                   contentStreamAllowed allowedSourceTypes allowedTargetTypes )

  properties.each do |key|
    self.class.class_eval "def #{key.as_ruby_property};@hash['#{key}'];end"
    self.class.class_eval "def #{key.as_ruby_property}=(value);@hash['#{key}']=value;end"
  end

  @hash['propertyDefinitions'] ||= {}
  @hash['propertyDefinitions'].each do |key, value|
    @hash['propertyDefinitions'][key] = PropertyDefinition.new(value)
  end
end

Public Instance Methods

add_property_definition(property) click to toggle source
# File lib/cmis/type.rb, line 28
def add_property_definition(property)
  property.stringify_keys!
  property_definitions[property['id']] = property
end
create(opts = {}) click to toggle source
# File lib/cmis/type.rb, line 33
def create(opts = {})
  opts.symbolize_keys!

  type_hash = to_hash
  type_hash.merge!(opts.delete(:extensions) || {})

  result = server.execute!({ cmisaction: 'createType',
                             repositoryId: repository.id,
                             type: JSON.generate(type_hash) }, opts)

  Type.new(result, repository)
end
delete(opts = {}) click to toggle source
# File lib/cmis/type.rb, line 66
def delete(opts = {})
  server.execute!({ cmisaction: 'deleteType',
                    repositoryId: repository.id,
                    typeId: id }, opts)
end
document_type?() click to toggle source
# File lib/cmis/type.rb, line 72
def document_type?
  base_id == 'cmis:document'
end
folder_type?() click to toggle source
# File lib/cmis/type.rb, line 76
def folder_type?
  base_id == 'cmis:folder'
end
item_type?() click to toggle source
# File lib/cmis/type.rb, line 88
def item_type?
  base_id == 'cmis:item'
end
new_object() click to toggle source
# File lib/cmis/type.rb, line 92
def new_object
  object = case base_id
  when 'cmis:document'
    Document.new({}, repository)
  when 'cmis:folder'
    Folder.new({}, repository)
  when 'cmis:relationship'
    Relationship.new({}, repository)
  when 'cmis:policy'
    Policy.new({}, repository)
  when 'cmis:item'
    Item.new({}, repository)
  else
    raise "Unsupported base type: #{base_id}"
  end
  object.object_type_id = id
  object
end
policy_type?() click to toggle source
# File lib/cmis/type.rb, line 84
def policy_type?
  base_id == 'cmis:policy'
end
relationship_type?() click to toggle source
# File lib/cmis/type.rb, line 80
def relationship_type?
  base_id == 'cmis:relationship'
end
to_hash() click to toggle source
# File lib/cmis/type.rb, line 111
def to_hash
  @hash
end
update(changed_property_defs, opts = {}) click to toggle source
# File lib/cmis/type.rb, line 46
def update(changed_property_defs, opts = {})
  changed_property_defs.map!(&:deep_stringify_keys)
  opts.symbolize_keys!

  new_defs = changed_property_defs.map(&:to_hash).reduce({}) do |result, element|
    result[element['id']] = element
    result
  end

  hash = to_hash
  hash['propertyDefinitions'] = new_defs
  hash.merge!(opts.delete(:extensions) || {})

  result = server.execute!({ cmisaction: 'updateType',
                             repositoryId: repository.id,
                             type: JSON.generate(hash) }, opts)

  Type.new(result, repository)
end

Private Instance Methods

server() click to toggle source
# File lib/cmis/type.rb, line 117
def server
  repository.server if repository
end