Sha256: 85e94cf61d26e3c5677329b757a09361201df709292a15b0c309998c51223470

Contents?: true

Size: 1.37 KB

Versions: 14

Compression:

Stored size: 1.37 KB

Contents

module Rosemary
  # OpenStreetMap Relation.
  #
  # To create a new Rosemary::Relation object:
  #   relation = Rosemary::Relation.new()
  #
  # To get a relation from the API:
  #   relation = Rosemary::Relation.find(17)
  #
  class Relation < Element
    # Array of Member objects
    attr_reader :members

    # Create new Relation object.
    #
    # If +id+ is +nil+ a new unique negative ID will be allocated.
    def initialize(attrs)
      attrs.stringify_keys!
      @members = extract_member(attrs['member'])
      super(attrs)
    end

    def type
      'relation'
    end

    # Return XML for this relation. This method uses the Builder library.
    # The only parameter ist the builder object.
    def to_xml(option = {})
      xml = options[:builder] ||= Builder::XmlMarkup.new
      xml.instruct! unless options[:skip_instruct]
      xml.relation(attributes) do
        members.each do |member|
          member.to_xml(:builder => xml, :skip_instruct => true)
        end
        tags.to_xml(:builder => xml, :skip_instruct => true)
      end
    end

    protected

    def extract_member(member_array)
      return [] unless member_array && member_array.size > 0

      member_array.inject([]) do |memo, member|
        class_to_instantize = "Rosemary::#{member['type'].classify}".constantize
        memo << class_to_instantize.new(:id => member['ref'])
      end
    end

  end
end

Version data entries

14 entries across 14 versions & 1 rubygems

Version Path
rosemary-0.3.6 lib/rosemary/relation.rb
rosemary-0.3.5 lib/rosemary/relation.rb
rosemary-0.3.4 lib/rosemary/relation.rb
rosemary-0.3.3 lib/rosemary/relation.rb
rosemary-0.3.2 lib/rosemary/relation.rb
rosemary-0.3.1 lib/rosemary/relation.rb
rosemary-0.3.0 lib/rosemary/relation.rb
rosemary-0.2.8 lib/rosemary/relation.rb
rosemary-0.2.7 lib/rosemary/relation.rb
rosemary-0.2.6 lib/rosemary/relation.rb
rosemary-0.2.5 lib/rosemary/relation.rb
rosemary-0.2.4 lib/rosemary/relation.rb
rosemary-0.2.3 lib/rosemary/relation.rb
rosemary-0.2.2 lib/rosemary/relation.rb