Sha256: c22f237b892008c933e3350d2d7478c5178f4364175a049d0a2d3acde712677b

Contents?: true

Size: 1.95 KB

Versions: 2

Compression:

Stored size: 1.95 KB

Contents

require 'uri'
require 'net/https'
require 'json'
require 'net/http/post/multipart'
require 'open-uri'
require 'cgi'
require 'active_support'
require 'active_support/inflector'
require 'addressable/template'
require 'base64'
module Wakatime
  class Client
    def initialize(session)
      @session = session
    end

    def summaries(start_at = Time.now - 86_400, end_at = Time.now)
      request_builder('users/current/summaries', start: start_at, end: end_at)
    end

    def durations(date = Date.today)
      request_builder('users/current/durations', date: date)
    end

    def heartbeats(params = {})
      params[:date] ||= Date.today
      params[:show] ||= 'file,branch,project,time'

      request_builder('users/current/heartbeats', params)
    end

    def plugins(params = {})
      params[:show] ||= 'name,version'
      request_builder('users/current/plugins', params)
    end

    def current_user(params = {})
      params[:show] ||= 'email,timeout,last_plugin,timezone'
      request_builder('users/current', params)
    end

    private

    def cast_params(params)
      params.reduce({}) { |h, (k, v)| h[k] = cast_param(v); h }
    end

    def cast_param(param)
      case param.class.to_s
      when 'Time'
        param.to_i
      else
        param
      end
    end

    def request_builder(action, params = {}, raw = false)
      uri  = Addressable::Template.new("#{Wakatime::API_URL}/#{action}{?query*}")
      uri  = uri.expand(
        'query' => cast_params(params)
      )

      response = @session.get(uri.to_s)

      if raw
        response
      else
        response_factory(action, response)
      end
    end

    def response_factory(action, response)
      klass = Object.const_get("Wakatime::Models::#{action.split('/').first.singularize.classify}")

      if response['data'].is_a? Hash
        klass.new(response['data'])
      else
        response['data'].map do |attributes|
          klass.new(attributes)
        end
      end
    end
  end
end

Version data entries

2 entries across 2 versions & 1 rubygems

Version Path
wakatime-0.2.2 lib/wakatime/client.rb
wakatime-0.2.1 lib/wakatime/client.rb