diff --git a/lib/tracker_api/endpoints/story.rb b/lib/tracker_api/endpoints/story.rb index bc4edc9..bd84b53 100644 --- a/lib/tracker_api/endpoints/story.rb +++ b/lib/tracker_api/endpoints/story.rb @@ -25,13 +25,23 @@ def create(project_id, params={}) Resources::Story.new({ client: client }.merge(data)) end - def update(story, params={}) + # @deprecated Please use {update} instead. + def update_direct(story, params={}) + warn "[DEPRECATION] `save` is deprecated. Please use `update` instead." + raise ArgumentError, 'Valid story required to update.' unless story.instance_of?(Resources::Story) data = client.put("/projects/#{story.project_id}/stories/#{story.id}", params: params).body story.attributes = data end + + def update(project_id, story_id, params={}) + data = client.put("/projects/#{project_id}/stories/#{story_id}", params: params).body + + Resources::Story.new({ client: client }.merge(data)) + end + end end end diff --git a/lib/tracker_api/resources/story.rb b/lib/tracker_api/resources/story.rb index 8d173dd..4554b2e 100644 --- a/lib/tracker_api/resources/story.rb +++ b/lib/tracker_api/resources/story.rb @@ -110,10 +110,14 @@ def create_task(params) end # Save changes to an existing Story. + # + # @deprecated Please use {Endpoints::Story.update} directly instead. def save + warn "[DEPRECATION] `save` is deprecated. Please use `Endpoints::Story.update` directly instead." + raise ArgumentError, 'Can not update a story with an unknown project_id.' if project_id.nil? - Endpoints::Story.new(client).update(self, UpdateRepresenter.new(self)) + Endpoints::Story.new(client).update_direct(self, UpdateRepresenter.new(self)) end end end diff --git a/test/story_test.rb b/test/story_test.rb index ae5682c..fa23a43 100644 --- a/test/story_test.rb +++ b/test/story_test.rb @@ -10,29 +10,37 @@ let(:story) { VCR.use_cassette('get story') { project.story(story_id) } } + it '.save is deprecated' do + VCR.use_cassette('save story', record: :new_episodes) do + assert_output(nil, /\[DEPRECATION\]/) { story.save } + end + end + it 'can update an existing story' do - new_name = "#{story.name}+" - story.name = new_name + new_name = "#{story.name}+" VCR.use_cassette('save story', record: :new_episodes) do - story.save - end + updated_story = TrackerApi::Endpoints::Story.new(client).update(project_id, + story_id, + {name: new_name}) - story.name.must_equal new_name + updated_story.name.must_equal new_name + end end it 'can update multiple attributes of an existing story at once' do new_name = "#{story.name}+" new_desc = "#{story.description}+" - story.attributes = { name: new_name, description: new_desc } - VCR.use_cassette('save story with multiple changes', record: :new_episodes) do - story.save - end + updated_story = TrackerApi::Endpoints::Story.new(client).update(project_id, + story_id, + { name: new_name, + description: new_desc }) - story.name.must_equal new_name - story.description.must_equal new_desc + updated_story.name.must_equal new_name + updated_story.description.must_equal new_desc + end end it 'can add new labels to an existing story' do