Sha256: 5f6196e412c9fd55c2aa83d2a1c8cd9db37786099845c3de8513e36b0e2e5a8c

Contents?: true

Size: 1.96 KB

Versions: 26

Compression:

Stored size: 1.96 KB

Contents

require 'net/http'
require 'uri'
require 'json'
require 'open-uri'
require 'spiderfw/app'

module Spider

    class AppServerClient
        
        def initialize(url)
            @url = url
        end
        
        def specs
            load_specs unless @specs
            @specs
        end
        
        def http_get(url)
            uri = URI.parse(url)
            proxy = uri.find_proxy
            klass = nil
            if proxy
                proxy_user, proxy_pass = nil
                proxy_user, proxy_pass = proxy.userinfo.split(/:/) if proxy.userinfo
                klass = Net::HTTP::Proxy(proxy.host, proxy.port, proxy_user, proxy_pass)
            else
                klass = Net::HTTP
            end
            result = klass.get_response(uri)
            raise "#{result.code} #{result.message} #{uri}" if result.is_a?(Net::HTTPClientError)
            result.body
        end
        
        def load_specs
            result = http_get(@url+'/list.json')
            list = JSON.parse(result)
            @specs = list.map{ |app| Spider::App::AppSpec.parse_hash(app) }
        end
        
        def get_specs(app_ids)
            app_ids = [app_ids] unless app_ids.is_a?(Array)
            result = http_get(@url+"/list/#{app_ids.join('+')}.json")
            JSON.parse(result).map{ |app| Spider::App::AppSpec.parse_hash(app) }
        end
        
        def get_deps(app_ids, options={})
            app_ids = [app_ids] unless app_ids.is_a?(Array)
            url = "#{@url}/deps/#{app_ids.join('+')}.json"
            url += "?no_optional=true" if options[:no_optional]
            result = http_get(url)
            JSON.parse(result).map{ |app| Spider::App::AppSpec.parse_hash(app) }
        end
        
        def fetch_app(app_id)
            tmp = Tempfile.new("spider-app-archive")
            tmp.binmode
            res = http_get(@url+"/pack/#{app_id}")
            tmp << res
            tmp.flush
            tmp.path
        end
        

    end 

end

Version data entries

26 entries across 26 versions & 1 rubygems

Version Path
spiderfw-0.6.20 lib/spiderfw/setup/app_server_client.rb
spiderfw-0.6.19 lib/spiderfw/setup/app_server_client.rb
spiderfw-0.6.18 lib/spiderfw/setup/app_server_client.rb
spiderfw-0.6.17 lib/spiderfw/setup/app_server_client.rb
spiderfw-0.6.16 lib/spiderfw/setup/app_server_client.rb
spiderfw-0.6.15 lib/spiderfw/setup/app_server_client.rb
spiderfw-0.6.14 lib/spiderfw/setup/app_server_client.rb
spiderfw-0.6.13 lib/spiderfw/setup/app_server_client.rb
spiderfw-0.6.12 lib/spiderfw/setup/app_server_client.rb
spiderfw-0.6.11 lib/spiderfw/setup/app_server_client.rb
spiderfw-0.6.10 lib/spiderfw/setup/app_server_client.rb
spiderfw-0.6.9 lib/spiderfw/setup/app_server_client.rb
spiderfw-0.6.8 lib/spiderfw/setup/app_server_client.rb
spiderfw-0.6.7 lib/spiderfw/setup/app_server_client.rb
spiderfw-0.6.6 lib/spiderfw/setup/app_server_client.rb
spiderfw-0.6.5 lib/spiderfw/setup/app_server_client.rb
spiderfw-0.6.4 lib/spiderfw/setup/app_server_client.rb
spiderfw-0.6.3 lib/spiderfw/setup/app_server_client.rb
spiderfw-0.6.2 lib/spiderfw/setup/app_server_client.rb
spiderfw-0.6.1 lib/spiderfw/setup/app_server_client.rb