From 15767d18b2bc6dee8211a1ad44def085ce61b2c1 Mon Sep 17 00:00:00 2001 From: Alfonso Uceda Pompa Date: Thu, 6 Nov 2014 13:08:53 +0100 Subject: [PATCH 1/2] Support post operation and added create method to create stories from projects --- lib/tracker_api/client.rb | 9 +++++++++ lib/tracker_api/endpoints/story.rb | 6 ++++++ lib/tracker_api/resources/project.rb | 6 ++++++ 3 files changed, 21 insertions(+) diff --git a/lib/tracker_api/client.rb b/lib/tracker_api/client.rb index 531dd07..ec53479 100644 --- a/lib/tracker_api/client.rb +++ b/lib/tracker_api/client.rb @@ -54,6 +54,15 @@ def get(path, options = {}) request(:get, parse_query_and_convenience_headers(path, options)) end + # Make a HTTP POST request + # + # @param path [String] The path, relative to api endpoint + # @param options [Hash] Query and header params for request + # @return [Faraday::Response] + def post(path, options = {}) + request(:post, parse_query_and_convenience_headers(path, options)) + end + # Make one or more HTTP GET requests, optionally fetching # the next page of results from information passed back in headers # based on value in {#auto_paginate}. diff --git a/lib/tracker_api/endpoints/story.rb b/lib/tracker_api/endpoints/story.rb index 73d4468..8a3004c 100644 --- a/lib/tracker_api/endpoints/story.rb +++ b/lib/tracker_api/endpoints/story.rb @@ -18,6 +18,12 @@ def get_story(story_id) Resources::Story.new({ client: client }.merge(data)) end + + def create(project_id, params={}) + data = client.post("/projects/#{project_id}/stories", params: params).body + + Resources::Story.new({ client: client }.merge(data)) + end end end end diff --git a/lib/tracker_api/resources/project.rb b/lib/tracker_api/resources/project.rb index df2fb0e..d5c705c 100644 --- a/lib/tracker_api/resources/project.rb +++ b/lib/tracker_api/resources/project.rb @@ -90,6 +90,12 @@ def memberships(params = {}) def story(story_id) Endpoints::Story.new(client).get(id, story_id) end + + # @param [Hash] hash of attributes to create the story + # @return [Story] Story with given id + def create_story(params) + Endpoints::Story.new(client).create(id, params) + end end end end From 12c3cdd65239a1be6b02e5d52f32c74be1759c9a Mon Sep 17 00:00:00 2001 From: Alfonso Uceda Pompa Date: Fri, 7 Nov 2014 16:16:57 +0100 Subject: [PATCH 2/2] Added spec for creating a story and added an example to README --- README.md | 1 + test/project_test.rb | 11 +++++++++++ 2 files changed, 12 insertions(+) diff --git a/README.md b/README.md index c643710..898303c 100644 --- a/README.md +++ b/README.md @@ -44,6 +44,7 @@ project.stories # Get project.stories(with_state: :unscheduled, limit: 10) # Get 10 unscheduled stories for a project project.stories(filter: 'requester:OWK label:"jedi stuff"') # Get all stories that match the given filters project.story(847762630) # Find a story with the given ID +project.create_story(name: 'Destroy death star') # Create a story with the name 'Destroy death star' epics = project.epics # Get all epics for a project epic = epics.first diff --git a/test/project_test.rb b/test/project_test.rb index aee82ee..8408415 100644 --- a/test/project_test.rb +++ b/test/project_test.rb @@ -77,5 +77,16 @@ story.current_state.must_equal 'unscheduled' end end + + it 'can create story' do + VCR.use_cassette('create story') do + story = project.create_story(name: 'Test story') + + story.must_be_instance_of TrackerApi::Resources::Story + story.id.wont_be_nil + story.id.must_be :>, 0 + story.name.must_equal 'Test story' + end + end end end