Sha256: fd2a7713f6bea83aad606238d5c5051a3fe3dbb578e37e387210552fe01f077b

Contents?: true

Size: 1.26 KB

Versions: 3

Compression:

Stored size: 1.26 KB

Contents

module RestfulObjects
  class ServiceList
    extend Forwardable
    include LinkGenerator

    def initialize(base_url)
      @services = Hash.new
      @base_url = base_url
    end

    def register(service)
      raise 'service registration should be done with a class' if not service.is_a? Class
      @services[service.name] = service
    end

    def get_list
      representation = {
        'links' => [
          link_to(:self, '/services', :services),
          link_to(:up, '/', :homepage),
        ],
        'value' => generate_values,
        'extensions' => { }
      }.to_json
    end

    def [](key)
      value = @services[key]
      if value.is_a? Class
        value = value.new
        @services[key] = value
      end
      value
    end

    def_delegators :@services, :each, :include?, :count, :empty?, :clear

    private

      def generate_values
        ensure_all_created
        values = []
        each do |name, service|
          element = link_to(:service, "/services/#{name}", :object, service_id: name)
          element['title'] = service.title
          values << element
        end
        values
      end

      def ensure_all_created
        @services.each { |name, value| @services[name] = value.new if value.is_a? Class }
      end
  end
end

Version data entries

3 entries across 3 versions & 1 rubygems

Version Path
restful_objects-0.0.5 lib/restful_objects/service_list.rb
restful_objects-0.0.4 lib/restful_objects/service_list.rb
restful_objects-0.0.3 lib/restful_objects/service_list.rb