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