class Clubhouse::Client

Public Class Methods

new(api_key:, base_url: 'https://api.clubhouse.io/api/v2/') click to toggle source
# File lib/clubhouse2/client.rb, line 7
def initialize(api_key:, base_url: 'https://api.clubhouse.io/api/v2/')
        @api_key = api_key
        @base_url = base_url
        @resources = {}
end

Public Instance Methods

api_request(method, *params) click to toggle source
# File lib/clubhouse2/client.rb, line 17
def api_request(method, *params)
        response = HTTP.headers(content_type: 'application/json').send(method, *params)
        case response.code
        when 429
                sleep 30
                api_request(method, *params)
        when 200
        when 201
        else
                raise ClubhouseAPIError.new(response)
        end

        response
end
categories(**args) click to toggle source
# File lib/clubhouse2/client.rb, line 110
def categories(**args); get_objects(:category, args); end
category(**args) click to toggle source
# File lib/clubhouse2/client.rb, line 111
def category(**args); get_object(:category, args); end
create_category(**args) click to toggle source
# File lib/clubhouse2/client.rb, line 109
def create_category(**args); create_object(:category, args); end
create_epic(**args) click to toggle source
# File lib/clubhouse2/client.rb, line 105
def create_epic(**args); create_object(:epic, args); end
create_file(**args) click to toggle source
# File lib/clubhouse2/client.rb, line 118
def create_file(**args); create_object(:file, args); end
create_label(**args) click to toggle source
# File lib/clubhouse2/client.rb, line 113
def create_label(**args); create_object(:label, args); end
create_linked_file(**args) click to toggle source
# File lib/clubhouse2/client.rb, line 122
def create_linked_file(**args); create_object(:linkedfile, args); end
create_member(**args) click to toggle source
# File lib/clubhouse2/client.rb, line 97
def create_member(**args); create_object(:member, args); end
create_milestone(**args) click to toggle source

# File lib/clubhouse2/client.rb, line 75
def create_milestone(**args); create_object(:milestone, args); end
create_object(resource_class, args) click to toggle source

or v.empty? if v.respond_to?(:empty?)

# File lib/clubhouse2/client.rb, line 48
def create_object(resource_class, args)
        this_class = Clubhouse::ClubhouseResource.subclass(resource_class)
        this_class.validate(args)
        flush(this_class)
        new_params = args.compact.reject { |k, v| this_class.property_filter_create.include? k.to_sym }
        response = api_request(:post, url(this_class.api_url), :json => new_params)
        JSON.parse(response.to_s)
end
create_project(**args) click to toggle source
# File lib/clubhouse2/client.rb, line 79
def create_project(**args); create_object(:project, args); end
create_story(**args) click to toggle source
# File lib/clubhouse2/client.rb, line 83
def create_story(**args); create_object(:story, args); end
create_story_link(**args) click to toggle source
# File lib/clubhouse2/client.rb, line 90
def create_story_link(**args); create_object(:storylink, args); end
create_team(**args) click to toggle source
# File lib/clubhouse2/client.rb, line 101
def create_team(**args); create_object(:team, args); end
create_workflow(**args) click to toggle source
# File lib/clubhouse2/client.rb, line 126
def create_workflow(**args); create_object(:workflow, args); end
epic(**args) click to toggle source
# File lib/clubhouse2/client.rb, line 107
def epic(**args); get_object(:epic, args); end
epics(**args) click to toggle source
# File lib/clubhouse2/client.rb, line 106
def epics(**args); get_objects(:epic, args); end
file(**args) click to toggle source
# File lib/clubhouse2/client.rb, line 120
def file(**args); get_object(:file, args); end
files(**args) click to toggle source
# File lib/clubhouse2/client.rb, line 119
def files(**args); get_objects(:file, args); end
filter(object_array, args) click to toggle source

Take all the provided properties, and filter out any resources that don't match. If the value of a property is an object with an ID, match on that ID instead (makes for tidier queries)

# File lib/clubhouse2/client.rb, line 38
def filter(object_array, args)
        object_array.reject { |s| args.collect { |k, v| not resolve_to_ids([ *s.send(k) ]).include? resolve_to_ids(v) }.reduce(:|) }
end
flush(resource_class) click to toggle source
# File lib/clubhouse2/client.rb, line 32
def flush(resource_class)
        @resources[resource_class] = nil
end
get_object(resource_class, args = {}) click to toggle source
# File lib/clubhouse2/client.rb, line 69
def get_object(resource_class, args = {})
        get_objects(resource_class, args).first
end
get_objects(resource_class, args = {}) click to toggle source
# File lib/clubhouse2/client.rb, line 57
def get_objects(resource_class, args = {})
        this_class = Clubhouse::ClubhouseResource.subclass(resource_class)
        unless @resources[this_class]
                response = api_request(:get, url(this_class.api_url))
                @resources[this_class] = JSON.parse(response.to_s).collect do |resource|
                        this_class.new(client: self, object: resource)
                end
        end

        filter(@resources[this_class], args)
end
label(**args) click to toggle source
# File lib/clubhouse2/client.rb, line 116
def label(**args); get_object(:label, args); end
labels(**args) click to toggle source
# File lib/clubhouse2/client.rb, line 115
def labels(**args); get_objects(:label, args); end
linked_file(**args) click to toggle source
# File lib/clubhouse2/client.rb, line 124
def linked_file(**args); get_object(:linkedfile, args); end
linked_files(**args) click to toggle source
# File lib/clubhouse2/client.rb, line 123
def linked_files(**args); get_objects(:linkedfile, args); end
member(**args) click to toggle source
# File lib/clubhouse2/client.rb, line 99
def member(**args); get_object(:member, args); end
members(**args) click to toggle source
# File lib/clubhouse2/client.rb, line 98
def members(**args); get_objects(:member, args); end
milestone(**args) click to toggle source
# File lib/clubhouse2/client.rb, line 77
def milestone(**args); get_object(:milestone, args); end
milestones(**args) click to toggle source
# File lib/clubhouse2/client.rb, line 76
def milestones(**args); get_objects(:milestone, args); end
project(**args) click to toggle source
# File lib/clubhouse2/client.rb, line 81
def project(**args); get_object(:project, args); end
projects(**args) click to toggle source
# File lib/clubhouse2/client.rb, line 80
def projects(**args); get_objects(:project, args); end
resolve_to_ids(object) click to toggle source
# File lib/clubhouse2/client.rb, line 42
def resolve_to_ids(object)
        return object.collect { |o| resolve_to_ids(o) } if object.is_a? Array
        (object.respond_to?(:id) ? object.id : object)
end
stories(**args) click to toggle source
# File lib/clubhouse2/client.rb, line 84
def stories(**args)
        filter(get_objects(:project).collect(&:stories).flatten, args)
end
story(**args) click to toggle source
# File lib/clubhouse2/client.rb, line 88
def story(**args); stories(**args).first; end
story_link(**args) click to toggle source
# File lib/clubhouse2/client.rb, line 95
def story_link(**args); story_links(**args).first; end
story_links(**args) click to toggle source
# File lib/clubhouse2/client.rb, line 91
def story_links(**args)
        filter(stories.collect(&:story_links).flatten, args)
end
team(**args) click to toggle source
# File lib/clubhouse2/client.rb, line 103
def team(**args); get_object(:team, args); end
teams(**args) click to toggle source
# File lib/clubhouse2/client.rb, line 102
def teams(**args); get_objects(:team, args); end
update_label(**args) click to toggle source
# File lib/clubhouse2/client.rb, line 114
def update_label(**args); update_object(:label, args); end
url(endpoint) click to toggle source
# File lib/clubhouse2/client.rb, line 13
def url(endpoint)
        URI.join(@base_url, endpoint,'?token=%s' % @api_key)
end
workflow(**args) click to toggle source
# File lib/clubhouse2/client.rb, line 128
def workflow(**args); get_object(:workflow, args); end
workflows(**args) click to toggle source
# File lib/clubhouse2/client.rb, line 127
def workflows(**args); get_objects(:workflow, args); end