class Sharepoint::ObjectProperties

Attributes

data[RW]
site[RW]
updated_data[RW]

Public Class Methods

new(site, data) click to toggle source
# File lib/sharepoint-properties.rb, line 7
def initialize site, data
  @site                      = site
  @data                      = data
  @updated_data              = Hash.new
  @properties                = Hash.new
  @properties_names          = Array.new
  @properties_original_names = Array.new
  initialize_properties
end

Public Instance Methods

add_properties(properties) click to toggle source
# File lib/sharepoint-properties.rb, line 36
def add_properties properties
  properties.each do |property|
    add_property property
  end
end
add_property(property, value = nil) click to toggle source
# File lib/sharepoint-properties.rb, line 17
def add_property property, value = nil
  editable                = is_property_editable? property
  property                = property.to_s
  @data[property]         = nil   if @data[property].nil?
  @data[property]         = value unless value.nil?
  @updated_data[property] = value if (@initialize_properties == false) and (editable == true)
  unless @properties_original_names.include? property
    @properties_names          << property.underscore.to_sym
    @properties_original_names << property
    define_singleton_method property.underscore do
      get_property property
    end
    define_singleton_method property.underscore + '=' do |new_value|
      @data[property]         = new_value
      @updated_data[property] = new_value
    end if editable == true
  end
end
available_properties() click to toggle source
# File lib/sharepoint-properties.rb, line 42
def available_properties
  @properties_names
end

Private Instance Methods

get_deferred_property(property_name) click to toggle source
# File lib/sharepoint-properties.rb, line 80
def get_deferred_property property_name
  deferred_data = @data[property_name]['__deferred']
  uri           = deferred_data['uri'].gsub /^http.*\/_api\/web\//i, ''
  @site.query :get, uri
end
get_property(property_name) click to toggle source
# File lib/sharepoint-properties.rb, line 61
def get_property property_name
  data = @data[property_name]
  if not @properties[property_name].nil?
    @properties[property_name]
  elsif data.class == Hash
    if not data['__deferred'].nil?
      @properties[property_name] = get_deferred_property property_name
    elsif not data['__metadata'].nil?
      @properties[property_name] = @site.make_object_from_data data
    else
      @properties[property_name] = data
    end
  elsif not data.nil?
    @properties[property_name]   = data
  else
    @properties[property_name]   = nil
  end
end
initialize_properties() click to toggle source
# File lib/sharepoint-properties.rb, line 48
def initialize_properties
  @initialize_properties = true
  # Create the properties defined for the Sharepoint type used
  self.class.fields.each do |field|
    add_property field[:name], field[:default] if field[:access].include? :read
  end
  # Set the values and create any missing properties from the OData object
  @data.dup.each do |key,value|
    add_property key, value
  end
  @initialize_properties = false
end
is_property_editable?(property_name) click to toggle source
# File lib/sharepoint-properties.rb, line 86
def is_property_editable? property_name
  # We don't know a priori what the fields are for a generic object, so leave the validation work to the user
  return true if self.is_a?(GenericSharepointObject)
    
  self.class.fields.each do |field|
    return field[:access].include? :write if field[:name] == property_name
  end
  false
end