A Ruby gem for interacting with the Clubhouse V2 API, with support for complex queries and caching.
Switch branches/tags
Nothing to show
Clone or download
Fetching latest commit…
Cannot retrieve the latest commit at this time.
Permalink
Failed to load latest commit information.
lib
.gitignore
README.md
VERSION
clubhouse2.gemspec

README.md

Clubhouse API v2 Ruby Gem

This is a resource-oriented ruby library for interacting with the Clubhouse v2 API.

How to use

Initializing the client

require 'clubhouse2'
client = Clubhouse::Client.new(api_key: 'your_api_key')

Quick-start

Queries

Get all stories being followed by a user called 'James'.

client.stories(follower_ids: client.member(name: 'James'))

Get all stories in the 'Testing' project in the 'Completed' state.

client.project(name: 'Testing').stories(workflow_state_id: client.workflow.state(name: 'Completed'))

Get the names of all stories in the 'Testing' project

client.project(name: 'Testing').stories.collect(&:name)

Get all non-archived stories with the label 'Out Of Hours'

client.stories(archived: false, labels: client.label(name: 'Out Of Hours'))

Get all stories last updated more than 30 days ago

client.stories.select { |story| story.updated_at < Date.today - 30 }

Get a list of all story states in the default workflow

client.workflow.states

Creating resources

See the official Clubhouse API documentation for valid properties to use here: https://clubhouse.io/api/rest/v2/

Create a new story in the 'Testing' project

client.project(name: 'Testing').create_story( **...** )
client.create_story(project_id: client.project(name: 'Testing'), **...** )

Updating resources

Updating a property of a resource can be achieved simply by using assignment operators, as shown in the examples below.

See the official Clubhouse API documentation for valid properties to use here: https://clubhouse.io/api/rest/v2/

Change the name of a story

client.story(name: 'Old name').name = 'New name'
client.story(id: 123).name = 'New name'

Add a new follower to a story

client.story(id: 123).follower_ids += [ client.member(name: 'Jeff') ]

Assign a story to an epic

client.story(id: 123).epic_id = client.epic(name: 'Awesome')

Deleting resources

Deletion is possible by using the delete! method, which is available on most resources. Some resources can only be deleted from the web interface.

Delete an epic

client.epic(id: 123).delete!

Delete all stories in the 'Testing' project

client.project(name: 'Testing').stories.each(&:delete!)

Methods returning arrays of resources

	client.projects 					# list all projects
	client.milestones 					# list all milestones
	client.members 						# list all members (users)
	client.epics 						# list all epics
	client.stories 						# list all stories, comments and tasks [WARNING: slow!]
	client.categories 					# list all categories
	client.workflows 					# list all workflows and states
	client.labels 						# list all labels
	client.teams 						# list all teams
	client.story_links					# list all story links

Methods returning single resources

	client.project 						# list the first matching project
	client.milestone 					# list the first matching milestone
	client.member 						# list the first matching member (user)
	client.epic 						# list the first matching epic
	client.story 						# list the first matching story [WARNING: slow!]
	client.category 					# list the first matching category
	client.workflow 					# list the first matching workflow (usually Default)
	client.label 						# list the first matching label
	client.team 						# list the first matching team
	client.story_link 					# list the first matching story link

Creation methods

	client.create_project 					# create a project
	client.create_milestone 				# create a milestone
	client.create_member 					# create a member
	client.create_epic 					# create an epic
	client.create_story 					# create a story
	client.create_category 					# create a category
	client.create_workflow 					# create a workflow
	client.create_label 					# create a label
	client.create_team 					# create a team
	client.create_story_link 				# create a story link
	client.story.create_comment				# create a comment for a story
	client.story.create_task				# create a task for a story
	client.epic.create_comment				# create a comment for an epic

Update methods

	client.update_project 					# update a project
	client.update_milestone 				# update a milestone
	client.update_member 					# update a member
	client.update_epic 					# update an epic
	client.update_story 					# update a story
	client.update_category 					# update a category
	client.update_workflow 					# update a workflow
	client.update_label 					# update a label
	client.update_team 					# update a team
	client.update_story_link 				# update a story link

Filtering

It's possible to filter by any resource property provided by the API. Multiple property filters can be specified. Filters match any member of an array, for example you can filter stories by follower_ids, which will match any stories for which the given member, or members, are followers.

	client.project(id: 123)			# get a specific project
	client.project(name: 'blah')		# get a project by name
	client.projects(archived: true) 	# get all archived projects
	client.project(id: 123).stories		# get stories belonging to a project
	client.story(archived: false)		# get all non-archived stories

Notes

Note that querying for stories is quicker when performed on a Project, rather than using the client.projects method. This is because stories are only available as children of a project, so building the global story array requires making an API call to every project.