def define_property name, value
      
      # Save the properties within the resource within a custom hash. This 
      # provides access to them without the indirection that we are about to
      # set up.
      
      @properties[name] = value
      
      # Generate a getter method for this property based on the given name.
      
      self.class.send :define_method, name.underscore do
        
        # Retrieve the value that is current stored for this name.
        
        raw_value = @properties[name]
        
        # If the value is an array then we want to examine each element within
        # the array to see if any of them are identifiers that we should replace
        # finally returning all of the items as their resource representations
        # or as their raw values.
        # 
        # If the value is not an array then we want to examine that item and
        # return the resource representation or the raw value.
        
        if raw_value.is_a?(Array)
          
          Array(raw_value).map do |sub_value|
            
            if Registry.is_identifier? sub_value 
              Resource.new sub_value, @registry
            else
              sub_value
            end
          end
          
        else 
          
          if Registry.is_identifier? raw_value
            Resource.new raw_value, @registry
          else 
            raw_value
          end
          
        end

      end
      
      # Generate a setter method for this property based on the given name.
      
      self.class.send :define_method, "#{name.underscore}=" do |new_value|
        @properties[name] = new_value
      end
      
      
    end
def define_property name, value
      
      # Save the properties within the resource within a custom hash. This 
      # provides access to them without the indirection that we are about to
      # set up.
      
      @properties[name] = value
      
      # Generate a getter method for this property based on the given name.
      
      self.class.send :define_method, name.underscore do
        
        # Retrieve the value that is current stored for this name.
        
        raw_value = @properties[name]
        
        # If the value is an array then we want to examine each element within
        # the array to see if any of them are identifiers that we should replace
        # finally returning all of the items as their resource representations
        # or as their raw values.
        # 
        # If the value is not an array then we want to examine that item and
        # return the resource representation or the raw value.
        
        if raw_value.is_a?(Array)
          
          Array(raw_value).map do |sub_value|
            
            if Registry.is_identifier? sub_value 
              Resource.new sub_value, @registry
            else
              sub_value
            end
          end
          
        else 
          
          if Registry.is_identifier? raw_value
            Resource.new raw_value, @registry
          else 
            raw_value
          end
          
        end

      end
      
      # Generate a setter method for this property based on the given name.
      
      self.class.send :define_method, "#{name.underscore}=" do |new_value|
        @properties[name] = new_value
      end
      
      
    end
Definiing a property allows the creation of an alias to the actual value.
 This level of indirection allows for the replacement of values which are
 identifiers with a resource representation of it.

 @note This is used internally by the resource when it is created to create
   the getter/setter methods.

 @param [String] name of the property
 @param [String] value of the property