Sha256: 67af634cc27ad84835a2288faad2eddbe32ec5015523226ec9baa3224ac1680f

Contents?: true

Size: 1.41 KB

Versions: 1

Compression:

Stored size: 1.41 KB

Contents

require 'rack'

module Helios
  class Backend < Rack::Cascade
    def initialize(&block)
      @services = []

      block = lambda { |app|
        service :data, model: Dir['**/*.xcdatamodeld'].first
        service :push_notification
        service :in_app_purchase
        service :passbook
      } unless block_given?

      instance_eval(&block)
    
      super(@services)
    end

    private

    def service(identifier, options = {}, &block)
      if identifier.is_a?(Class)
        middleware = identifier
      else
        begin
          middleware = Helios::Backend.const_get(constantize(identifier))
        rescue NameError
          raise LoadError, "Could not find matching service for #{identifier.inspect}. You may need to install an additional gem (such as helios-#{identifier})."
        end
      end

      middleware.instance_eval{ include Helios::Administerable } if options.fetch(:frontend, true)

      @services << middleware.new(self, options, &block) if middleware
    end

    def constantize(identifier)
      identifier.to_s.split(/([[:alpha:]]*)/).select{|c| /[[:alpha:]]/ === c}.map(&:capitalize).join("")
    end
  end

  module Administerable
    attr_accessor :admin

    def admin?
      !!@admin
    end
  end
end

require 'helios/backend/accounts'
require 'helios/backend/data'
require 'helios/backend/push-notification'
require 'helios/backend/in-app-purchase'
require 'helios/backend/passbook'

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
helios-0.1.1 ./lib/helios/backend.rb