Sha256: 6227c1da5ff3b7c578714e5cbb3d86aa1e3193a286de99884354378a8faf3436

Contents?: true

Size: 1.62 KB

Versions: 2

Compression:

Stored size: 1.62 KB

Contents

module Sched
  class Client
    attr_accessor :conference, :api_key
    def initialize(conference, api_key)
      @conference, @api_key = conference, api_key
    end

    def event(session_key)
      event = Sched::Event.new(session_key, self)
      if event.exists?
        event = self.events.select{|e| e.session_key == session_key}.first
      end
      event
    end

    def events
      unless @events
        results = FasterCSV.parse(request('session/list', nil, :get))
        attributes = results.shift.map{|a| a.strip.to_sym}
        @events = results.map do |row|
          row_hash = {}
          attributes.each_with_index do |a, i|
            a = a.to_s.gsub(/^event_/, "session_").to_sym
            row_hash[a] = row[i]
          end
          event = Sched::Event.new(row_hash[:session_key], self).configure(row_hash)
        end
      end
      @events
    end

    def api_url
      "http://#{@conference}.sched.org/api"
    end

    def request(sub_url, data={}, method = :post)
      data ||= {}
      data.merge!({:api_key => @api_key})
      url = "#{api_url}/#{sub_url}"
      output = nil
      if method == :post
        post_fields = data.map{|key, value| Curl::PostField.content(key.to_s, value)}
        c = Curl::Easy.new(url)
        c.headers["User-Agent"] = "sched-gem"
        c.http_post(post_fields)
        output = c.body_str
      elsif method == :get
        get_attributes = data.map{|key, value| "#{key}=#{value}" }.join("&")
        c = Curl::Easy.new("#{url}?#{get_attributes}")
        c.headers["User-Agent"] = "sched-gem"
        c.perform
        output = c.body_str
      end
      output
    end
  end
end

Version data entries

2 entries across 2 versions & 1 rubygems

Version Path
sched-0.1.4 lib/sched/client.rb
sched-0.1.3 lib/sched/client.rb