Sha256: 1e9932d336f8935ffd7b164bee960eaab7163e52fe72e6099614d73b1bcf639d

Contents?: true

Size: 1.96 KB

Versions: 398

Compression:

Stored size: 1.96 KB

Contents

require 'travis/client'

module Travis
  module Client
    class Namespace < Module
      class Curry < Module
        attr_accessor :namespace, :type

        def initialize(namespace, type)
          @namespace, @type = namespace, type
        end

        def find_one(id = nil)
          result = session.find_one(type, id)
          result.curry = self
          result
        end

        def current
          result = session.find_one_or_many(type)
          Array(result).each { |e| e.curry = self }
          result
        end

        def find_many(params = {})
          session.find_many(type, params).each do |entity|
            entity.curry = self
          end
        end

        alias find     find_one
        alias find_all find_many

        def clear_cache
          session.clear_cache
        end

        def clear_cache!
          session.clear_cache!
        end

        private

          def session
            namespace.session
          end
      end

      include Methods
      attr_accessor :session

      def initialize(session = nil)
        session  = Travis::Client.new(session || {}) unless session.is_a? Session
        @session = session

        Entity.subclasses.each do |subclass|
          name = subclass.name[/[^:]+$/]
          const_set(name, Curry.new(self, subclass))
        end
      end

      def included(klass)
        fix_names(klass)
        delegate_session(klass)
      end

      private

        def fix_names(klass)
          constants.each do |name|
            const = klass.const_get(name)
            klass.const_set(name, const) if const == const_get(name)
          end
        end

        def delegate_session(klass)
          return if klass == Object or klass == Kernel
          klass.extend(Methods)
          namespace = self
          klass.define_singleton_method(:session)  { namespace.session }
          klass.define_singleton_method(:session=) { |value| namespace.session = value }
        end
    end
  end
end

Version data entries

398 entries across 398 versions & 3 rubygems

Version Path
travis-1.11.1 lib/travis/client/namespace.rb
travis-1.11.0 lib/travis/client/namespace.rb
travis-1.10.1.travis.1341.9 lib/travis/client/namespace.rb
travis-1.10.1.travis.1321.9 lib/travis/client/namespace.rb
travis-1.10.1.travis.1312.9 lib/travis/client/namespace.rb
travis-1.10.1.travis.1311.9 lib/travis/client/namespace.rb
travis-1.10.1.travis.1305.9 lib/travis/client/namespace.rb
travis-1.10.0 lib/travis/client/namespace.rb
travis-1.9.2.travis.1304.9 lib/travis/client/namespace.rb
travis-1.9.2.travis.1303.9 lib/travis/client/namespace.rb
travis-1.10.0.pre.rc4 lib/travis/client/namespace.rb
travis-1.10.0.pre.rc3 lib/travis/client/namespace.rb
travis-1.10.0.pre.rc2 lib/travis/client/namespace.rb
travis-1.9.2.travis.1288.9 lib/travis/client/namespace.rb
travis-1.9.2.travis.1285.9 lib/travis/client/namespace.rb
travis-1.9.2.travis.1279.9 lib/travis/client/namespace.rb
travis-1.10.0.pre.rc1 lib/travis/client/namespace.rb
travis-1.9.2.travis.1254.9 lib/travis/client/namespace.rb
travis-1.9.2.travis.1236.9 lib/travis/client/namespace.rb
travis-1.9.2.travis.1224.9 lib/travis/client/namespace.rb