Sha256: 46e060c26169802d6ae815cb757dc6353df30bb7d57e12c31ab79a6c33f465e0

Contents?: true

Size: 1.94 KB

Versions: 71

Compression:

Stored size: 1.94 KB

Contents

require 'acfs/service/middleware'

module Acfs

  # User {Acfs::Service} to define your services. That includes
  # an identity used to identify the service in configuration files
  # and middlewares the service uses.
  #
  # Configure your service URLs in a YAML file loaded in an
  # initializer using the identity as a key:
  #
  #   production:
  #     services:
  #       user_service_key: "http://users.service.org/base/path"
  #
  # @example
  #   class UserService < Acfs::Service
  #     identity :user_service_key
  #
  #     use Acfs::Middleware::MessagePackDecoder
  #   end
  #
  class Service
    attr_accessor :options

    include Service::Middleware

    # @api private
    #
    def initialize(options = {})
      @options = options
    end

    # @api private
    # @return [String]
    #
    def url_for(resource_class, options = {})
      options.reverse_merge! self.options

      url  = self.class.base_url.to_s
      url += "/#{(options[:path] || resource_class.name.pluralize.underscore).to_s}"
      url += "/#{options[:suffix].to_s}" if options[:suffix]
      url
    end

    class << self

      # @api public
      #
      # @overload identity()
      #   Return configured identity key or derive key from class name.
      #
      #   @return [Symbol] Service identity key.
      #
      # @overload identity(identity)
      #   Set identity key.
      #
      #   @param [#to_s] identity New identity key.
      #   @return [Symbol] New set identity key.
      #
      def identity(identity = nil)
        @identity = identity.to_s.to_sym unless identity.nil?
        @identity ||= name.to_sym
      end

      # @api private
      # @return [String]
      #
      def base_url
        unless (base = Acfs::Configuration.current.locate identity)
          raise ArgumentError, "#{identity} not configured. Add `locate '#{identity.to_s.underscore}', 'http://service.url/'` to your configuration."
        end

        base.to_s
      end
    end
  end
end

Version data entries

71 entries across 71 versions & 1 rubygems

Version Path
acfs-0.30.0.1.b260 lib/acfs/service.rb
acfs-0.30.0 lib/acfs/service.rb
acfs-0.29.1.1.b259 lib/acfs/service.rb
acfs-0.29.1.1.b257 lib/acfs/service.rb
acfs-0.29.1 lib/acfs/service.rb
acfs-0.29.0.1.b256 lib/acfs/service.rb
acfs-0.29.0.1.b254 lib/acfs/service.rb
acfs-0.29.0 lib/acfs/service.rb
acfs-0.28.0.1.b253 lib/acfs/service.rb
acfs-0.28.0.1.b249 lib/acfs/service.rb
acfs-0.28.0 lib/acfs/service.rb
acfs-0.27.0.1.b248 lib/acfs/service.rb
acfs-0.27.0.1.b244 lib/acfs/service.rb
acfs-0.27.0 lib/acfs/service.rb
acfs-0.26.0.1.b243 lib/acfs/service.rb
acfs-0.26.0.1.b242 lib/acfs/service.rb
acfs-0.26.0 lib/acfs/service.rb
acfs-0.25.0.1.b232 lib/acfs/service.rb
acfs-0.25.0.1.b229 lib/acfs/service.rb
acfs-0.25.0.1.b228 lib/acfs/service.rb