class TrelloUtils::TrelloClient

Attributes

board_ids[R]
entities[R]
fields[R]
filters[R]
host[R]
key[R]
organizations[R]
parameters[R]
port[R]
token[R]

Public Class Methods

new(kwargs={ organizations: [], key: nil, token: nil, board_ids: [], fields: PARAM_DEFAULT_FIELDS, filters: {}, port: 443 }) click to toggle source
# File lib/trello_utils.rb, line 13
def initialize(kwargs={
                                        organizations:  [], # an array of organizations from which to derive board ids
                                        key:            nil, # oauth key
                                        token:          nil, # oauth secret
                                        board_ids:      [],
                                        fields:         PARAM_DEFAULT_FIELDS,
                                        filters:        {},
                                        port:           443 # trello REST port
        })

        @organizations = kwargs[:organizations]
        @key           = kwargs[:key]
        @token         = kwargs[:token]
        @board_ids     = kwargs[:board_ids]
        @fields        = kwargs[:fields]
        @filters       = kwargs[:filters]
        @port          = kwargs[:port]       

        # get board ids if none are provided
        if @board_ids.empty?
                board_filter = "all"
                if @filters.has_key?("boards")
                        if not @filters["boards"].empty?
                                board_filter = array_to_uri( @filters["boards"] )
                        end
                end
                @board_ids = get_board_ids(@board_ids, board_filter)
        end

        # create entities hash from select fields in fields
        entities = {}
        @fields.each do |field|
                if ALL_ENTITIES.include?(field)
                        state = ALL_ENTITIES[field]
                        if state == "false"
                                entities[field] = "true"
                        elsif state == "none"
                                if field == "boardStars"
                                        entities[field] = "mine"
                                else
                                        entities[field] = "all"
                                end
                        end
                end
        end
        
        # mutate entities hash according to filters
        @filters.each do |key, val|
                if entities.include?(key)
                        if val != "none"
                                entities[key] = array_to_uri(filters[val])
                        end
                end
        end

        # create fields hash
        @fields = Set.new(@fields)
        new_fields = ALL_FIELDS.clone
        new_fields.to_a.each do |key, val|
                temp = @fields.intersection(val).to_a
    new_fields[key] = array_to_uri(temp)
        end
        @fields = new_fields

        # merge fields and entities into params
        params = new_fields.merge(entities)
        
        # switch out board_fields with fields
        params["fields"] = params["board_fields"]
        params.delete("board_fields")

        @parameters = params
end

Public Instance Methods

get_uri(board_id, actions_since) click to toggle source

construct uri

# File lib/trello_utils.rb, line 118
def get_uri(board_id, actions_since)
        uri = "/1/boards/#{board_id}?"
        args = {
                "actions_format" => "list",
                "actions_since"  => actions_since,
                "actions_limit"  => "1000",
                "labels_limit"   => "1000",
                "key"            => @key,
                "token"          => @token
        }
        uri += URI.encode_www_form(@parameters.merge(args))
        return uri
end
issue_request(uri) click to toggle source
# File lib/trello_utils.rb, line 133
def issue_request(uri)
        response = Net::HTTP.new("api.trello.com", @port)
        response.use_ssl = true
        response = response.request_get(uri, {"Connection" => "close"})
        code = response.code.to_i()
        if 199 < code and code < 300
                return JSON.load(response.body)
        else
                @logger.warn("HTTP request error: ", + response)
                raise RuntimeError, "HTTP request failed with code #{code}: #{response}"
        end
end

Private Instance Methods

array_to_uri(item) click to toggle source

# File lib/trello_utils.rb, line 89
def array_to_uri(item)
        if item.empty?
                return ""
        else
                return item.join(",")
        end
end
get_board_ids(board_ids, board_filter) click to toggle source

get board ids

# File lib/trello_utils.rb, line 99
def get_board_ids(board_ids, board_filter)
        if not board_ids.empty?
                return board_ids
        else
                board_ids = Set.new()
                @organizations.each do |org|
                        uri =  "/1/organizations/#{org}/boards/#{board_filter}?"
                        uri += URI.encode_www_form({key: @key, token: @token})
                        response = issue_request(uri)
                        response.each do |item|
                                board_ids.add(item["shortLink"])
                        end
                end
                return board_ids.to_a
        end
end