startling_pivotal 0.0.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +7 -0
- data/.ruby-gemset +1 -0
- data/Gemfile +4 -0
- data/LICENSE.txt +22 -0
- data/README.md +77 -0
- data/Rakefile +15 -0
- data/bin/story_status +14 -0
- data/lib/generators/startling_pivotal/configuration_generator.rb +35 -0
- data/lib/startling_pivotal/api.rb +67 -0
- data/lib/startling_pivotal/commands/pivotal_start.rb +46 -0
- data/lib/startling_pivotal/configuration.rb +23 -0
- data/lib/startling_pivotal/helper.rb +14 -0
- data/lib/startling_pivotal/story.rb +58 -0
- data/lib/startling_pivotal/version.rb +3 -0
- data/lib/startling_pivotal.rb +37 -0
- data/spec/spec_helper.rb +19 -0
- data/spec/startling_pivotal/api_spec.rb +46 -0
- data/spec/startling_pivotal/configuration_spec.rb +57 -0
- data/spec/support/dotenv.rb +2 -0
- data/spec/support/tokens.rb +5 -0
- data/spec/support/vcr.rb +13 -0
- data/spec/vcr_cassettes/pivotal_tracker_api_api_token.yml +77 -0
- data/spec/vcr_cassettes/pivotal_tracker_api_story.yml +73 -0
- data/spec/vcr_cassettes/pivotal_tracker_api_update_story.yml +217 -0
- data/spec/vcr_cassettes/pivotal_tracker_api_user_id.yml +79 -0
- data/startling_pivotal.gemspec +31 -0
- metadata +221 -0
checksums.yaml
ADDED
@@ -0,0 +1,7 @@
|
|
1
|
+
---
|
2
|
+
SHA1:
|
3
|
+
metadata.gz: fb7a73abfa6b0e4f012f42df9a5e2d1baf6f75ba
|
4
|
+
data.tar.gz: a77104300c34d6c2ca317341d2c2ed61fc15368f
|
5
|
+
SHA512:
|
6
|
+
metadata.gz: d2ab29339933fbe58caedac6ac5fecd2c546d92d7ce6c568e13ee34de370b09c03ace824f7e5f74f075538dc26fe10079222ec385818101665279d4c51b89a25
|
7
|
+
data.tar.gz: cc435d781d10f05783d16a8b992539c5dda9bc12a1ea83a5b388d3b78e73c5a4171c91a1d853958501fc0b83608debe1dbacf11efeeae1a629ac5b994838ebd2
|
data/.ruby-gemset
ADDED
@@ -0,0 +1 @@
|
|
1
|
+
startling-pivotal
|
data/Gemfile
ADDED
data/LICENSE.txt
ADDED
@@ -0,0 +1,22 @@
|
|
1
|
+
Copyright (c) 2014 Shaun Dern
|
2
|
+
|
3
|
+
MIT License
|
4
|
+
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining
|
6
|
+
a copy of this software and associated documentation files (the
|
7
|
+
"Software"), to deal in the Software without restriction, including
|
8
|
+
without limitation the rights to use, copy, modify, merge, publish,
|
9
|
+
distribute, sublicense, and/or sell copies of the Software, and to
|
10
|
+
permit persons to whom the Software is furnished to do so, subject to
|
11
|
+
the following conditions:
|
12
|
+
|
13
|
+
The above copyright notice and this permission notice shall be
|
14
|
+
included in all copies or substantial portions of the Software.
|
15
|
+
|
16
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
17
|
+
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
18
|
+
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
|
19
|
+
NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
|
20
|
+
LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
|
21
|
+
OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
|
22
|
+
WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
data/README.md
ADDED
@@ -0,0 +1,77 @@
|
|
1
|
+
# Startling Pivotal Tracker
|
2
|
+
|
3
|
+
Hooks into [Startling](https://rubygems.org/gems/startling) to start a Pivotal
|
4
|
+
Tracker story. Uses the story name for the pull request title and the story URL
|
5
|
+
for the pull request description.
|
6
|
+
|
7
|
+
## Installation
|
8
|
+
|
9
|
+
Add this line to your application's Gemfile:
|
10
|
+
|
11
|
+
gem 'startling_pivotal'
|
12
|
+
|
13
|
+
And then execute:
|
14
|
+
|
15
|
+
$ bundle
|
16
|
+
|
17
|
+
Or install it yourself as:
|
18
|
+
|
19
|
+
$ gem install startling_pivotal
|
20
|
+
|
21
|
+
Generate configuration file in Rails:
|
22
|
+
|
23
|
+
$ rails g startling:configuration
|
24
|
+
$ rails g startling_pivotal:configuration
|
25
|
+
|
26
|
+
## Configuration
|
27
|
+
|
28
|
+
### Startling Pivotal Configuration
|
29
|
+
|
30
|
+
startling_pivotal_file.rb should be defined at the root of the project. It can
|
31
|
+
contain a block for configuration:
|
32
|
+
|
33
|
+
```ruby
|
34
|
+
StartlingPivotal.configure do |config|
|
35
|
+
# Valid story estimations
|
36
|
+
# config.valid_estimates = [1, 2, 3]
|
37
|
+
end
|
38
|
+
```
|
39
|
+
|
40
|
+
### Startling Configuration
|
41
|
+
|
42
|
+
Add the following line to the beginning of the Startling configuration file:
|
43
|
+
|
44
|
+
```ruby
|
45
|
+
require 'startling_pivotal'
|
46
|
+
```
|
47
|
+
|
48
|
+
Add or update the following line of the Startling configuration file:
|
49
|
+
|
50
|
+
```ruby
|
51
|
+
config.story_handler = :pivotal_start
|
52
|
+
```
|
53
|
+
|
54
|
+
## Usage
|
55
|
+
|
56
|
+
Start a new story with a given story id:
|
57
|
+
|
58
|
+
$ start 12345
|
59
|
+
|
60
|
+
Start a new story with a given story id and branch name:
|
61
|
+
|
62
|
+
$ start 12345 foo
|
63
|
+
|
64
|
+
Check story status:
|
65
|
+
|
66
|
+
$ story_status 12345
|
67
|
+
|
68
|
+
## Contributing
|
69
|
+
|
70
|
+
1. Create `.env` from the Secure Note `startling .env` in
|
71
|
+
LastPass.
|
72
|
+
1. `gem install bundler`
|
73
|
+
1. `bundle install`
|
74
|
+
|
75
|
+
### Running tests
|
76
|
+
|
77
|
+
`rake`
|
data/Rakefile
ADDED
@@ -0,0 +1,15 @@
|
|
1
|
+
#!/usr/bin/env rake
|
2
|
+
|
3
|
+
require 'rubygems'
|
4
|
+
require 'bundler/setup'
|
5
|
+
require 'bundler/gem_tasks'
|
6
|
+
require 'rspec/core/rake_task'
|
7
|
+
|
8
|
+
desc 'Default: run unit tests.'
|
9
|
+
task :default => :spec
|
10
|
+
|
11
|
+
desc "Run all specs"
|
12
|
+
RSpec::Core::RakeTask.new do |t|
|
13
|
+
t.pattern = 'spec/**/*_spec.rb'
|
14
|
+
t.rspec_opts = '--color'
|
15
|
+
end
|
data/bin/story_status
ADDED
@@ -0,0 +1,14 @@
|
|
1
|
+
#!/usr/bin/env ruby
|
2
|
+
|
3
|
+
exit 1 if ARGV.empty?
|
4
|
+
|
5
|
+
require_relative '../lib/startling_pivotal'
|
6
|
+
|
7
|
+
story_states = []
|
8
|
+
ARGV.each do |story_id|
|
9
|
+
story_states << StartlingPivotal.story(story_id).current_state
|
10
|
+
end
|
11
|
+
|
12
|
+
puts ( story_states.all? { |s| s == "accepted" } ) ?
|
13
|
+
"accepted" :
|
14
|
+
"unaccepted"
|
@@ -0,0 +1,35 @@
|
|
1
|
+
require 'rails/generators'
|
2
|
+
require 'rails/generators/base'
|
3
|
+
require 'startling'
|
4
|
+
|
5
|
+
module StartlingPivotal
|
6
|
+
module Generators
|
7
|
+
class ConfigurationGenerator < Rails::Generators::Base
|
8
|
+
def create_config_file
|
9
|
+
create_file "startling_pivotal_file.rb" do
|
10
|
+
<<CONFIG
|
11
|
+
StartlingPivotal.configure do |config|
|
12
|
+
# Valid story estimations
|
13
|
+
# config.valid_estimates = [1, 2, 3]
|
14
|
+
end
|
15
|
+
CONFIG
|
16
|
+
end
|
17
|
+
|
18
|
+
Startling::Configuration::DEFAULT_STARTLINGFILES.each do |file_name|
|
19
|
+
if Dir.entries(Startling::GitLocal.new.project_root).include? file_name
|
20
|
+
inject_into_file file_name, before: 'Startling.configure do |config|' do
|
21
|
+
<<CONFIG
|
22
|
+
require 'startling_pivotal'
|
23
|
+
|
24
|
+
CONFIG
|
25
|
+
end
|
26
|
+
|
27
|
+
gsub_file file_name,
|
28
|
+
'# config.story_handler = :pivotal_start',
|
29
|
+
'config.story_handler = :pivotal_start'
|
30
|
+
end
|
31
|
+
end
|
32
|
+
end
|
33
|
+
end
|
34
|
+
end
|
35
|
+
end
|
@@ -0,0 +1,67 @@
|
|
1
|
+
require 'faraday'
|
2
|
+
require 'json'
|
3
|
+
|
4
|
+
module StartlingPivotal
|
5
|
+
class Api
|
6
|
+
def initialize(api_token: nil)
|
7
|
+
@api_token = api_token
|
8
|
+
end
|
9
|
+
|
10
|
+
def user_id
|
11
|
+
get("me")["id"]
|
12
|
+
end
|
13
|
+
|
14
|
+
def self.api_token_for_user(username, password)
|
15
|
+
connection = Faraday.new("https://www.pivotaltracker.com/services/v5")
|
16
|
+
connection.basic_auth(username, password)
|
17
|
+
parse_response(connection.get("me"))["api_token"]
|
18
|
+
end
|
19
|
+
|
20
|
+
def story(id)
|
21
|
+
get("stories/#{id}")
|
22
|
+
end
|
23
|
+
|
24
|
+
def update_story(id, attrs)
|
25
|
+
response = connection.put do |request|
|
26
|
+
request.url "stories/#{id}"
|
27
|
+
request.headers["Content-Type"] = "application/json"
|
28
|
+
request.headers["X-TrackerToken"] = api_token
|
29
|
+
request.body = attrs.to_json
|
30
|
+
end
|
31
|
+
|
32
|
+
Api.parse_response response
|
33
|
+
end
|
34
|
+
|
35
|
+
private
|
36
|
+
attr_reader :username, :password, :api_token
|
37
|
+
|
38
|
+
def connection
|
39
|
+
@connection ||= Faraday.new("https://www.pivotaltracker.com/services/v5") do |faraday|
|
40
|
+
# faraday.response :logger
|
41
|
+
faraday.request :url_encoded
|
42
|
+
faraday.adapter Faraday.default_adapter
|
43
|
+
end
|
44
|
+
end
|
45
|
+
|
46
|
+
def get(url, options = {})
|
47
|
+
response = connection.get do |request|
|
48
|
+
request.url url, options
|
49
|
+
request.headers["X-TrackerToken"] = api_token
|
50
|
+
end
|
51
|
+
|
52
|
+
Api.parse_response response
|
53
|
+
end
|
54
|
+
|
55
|
+
def self.parse_response(response)
|
56
|
+
verify_response response
|
57
|
+
JSON.parse response.body
|
58
|
+
end
|
59
|
+
|
60
|
+
def self.verify_response(response)
|
61
|
+
return if response.status == 200
|
62
|
+
puts "Request to #{response.env.url.to_s} failed"
|
63
|
+
puts response.body
|
64
|
+
raise "Request failed"
|
65
|
+
end
|
66
|
+
end
|
67
|
+
end
|
@@ -0,0 +1,46 @@
|
|
1
|
+
require 'startling'
|
2
|
+
require_relative '../../startling_pivotal'
|
3
|
+
|
4
|
+
module Startling
|
5
|
+
module Commands
|
6
|
+
class PivotalStart < Base
|
7
|
+
def execute
|
8
|
+
StartlingPivotal::Configuration.load_configuration
|
9
|
+
|
10
|
+
logger.info "Starting story..."
|
11
|
+
estimate = ask_for_estimate unless story.estimated?
|
12
|
+
story_owners = [StartlingPivotal.user_id]
|
13
|
+
story.start(starter_ids: story_owners, estimate: estimate)
|
14
|
+
story
|
15
|
+
end
|
16
|
+
|
17
|
+
def ask_for_estimate
|
18
|
+
logger.info "'#{story.name}' is not estimated."
|
19
|
+
valid_estimates = StartlingPivotal.valid_estimates
|
20
|
+
begin
|
21
|
+
estimate = ask("Enter estimate (#{valid_estimates.join(", ")}): ")
|
22
|
+
estimate = Integer(estimate)
|
23
|
+
raise 'Invalid estimate' unless valid_estimates.include? estimate
|
24
|
+
return estimate.to_i
|
25
|
+
rescue => e
|
26
|
+
puts e.message
|
27
|
+
retry
|
28
|
+
end
|
29
|
+
end
|
30
|
+
|
31
|
+
def story
|
32
|
+
@story ||= StartlingPivotal.story(get_story_id)
|
33
|
+
end
|
34
|
+
|
35
|
+
def get_story_id
|
36
|
+
@story_id ||= prompt_for_story_id
|
37
|
+
end
|
38
|
+
|
39
|
+
def prompt_for_story_id
|
40
|
+
result = ask("Enter story id to start: ").gsub(/[^0-9]/, '')
|
41
|
+
abort "Pivotal id must be specified." if result.empty?
|
42
|
+
result
|
43
|
+
end
|
44
|
+
end
|
45
|
+
end
|
46
|
+
end
|
@@ -0,0 +1,23 @@
|
|
1
|
+
module StartlingPivotal
|
2
|
+
class Configuration
|
3
|
+
DEFAULT_VALID_ESTIMATES = [1, 2, 3]
|
4
|
+
DEFAULT_CONFIG_FILE = 'startling_pivotal_file.rb'
|
5
|
+
|
6
|
+
attr_accessor :valid_estimates
|
7
|
+
|
8
|
+
def initialize
|
9
|
+
@valid_estimates = DEFAULT_VALID_ESTIMATES
|
10
|
+
end
|
11
|
+
|
12
|
+
def self.load_configuration
|
13
|
+
file_name = DEFAULT_CONFIG_FILE
|
14
|
+
|
15
|
+
if Dir.entries(Startling::GitLocal.new.project_root).include? file_name
|
16
|
+
load "#{Startling::GitLocal.new.project_root}/#{file_name}"
|
17
|
+
return file_name
|
18
|
+
end
|
19
|
+
|
20
|
+
nil
|
21
|
+
end
|
22
|
+
end
|
23
|
+
end
|
@@ -0,0 +1,14 @@
|
|
1
|
+
require 'startling'
|
2
|
+
require_relative 'api'
|
3
|
+
|
4
|
+
module StartlingPivotal
|
5
|
+
class Helper
|
6
|
+
def api_token
|
7
|
+
@api_token ||= Startling.cache.fetch('.pivotal_api_token') do
|
8
|
+
username = ask("Enter your Pivotal Tracker username: ")
|
9
|
+
password = ask("Enter your Pivotal Tracker password: ") { |q| q.echo = false }
|
10
|
+
Api.api_token_for_user(username, password)
|
11
|
+
end
|
12
|
+
end
|
13
|
+
end
|
14
|
+
end
|
@@ -0,0 +1,58 @@
|
|
1
|
+
require 'startling'
|
2
|
+
|
3
|
+
module StartlingPivotal
|
4
|
+
class Story < Startling::Story
|
5
|
+
attr_reader :story_id, :token, :api
|
6
|
+
|
7
|
+
def initialize(story_id, api)
|
8
|
+
@story_id = story_id
|
9
|
+
@api = api
|
10
|
+
end
|
11
|
+
|
12
|
+
def name ; remove_prefix(attrs["name"]) ; end
|
13
|
+
def story_type ; attrs["story_type"] ; end
|
14
|
+
def url ; attrs["url"] ; end
|
15
|
+
def estimate ; attrs["estimate"] ; end
|
16
|
+
def project_id ; attrs["project_id"] ; end
|
17
|
+
def current_state ; attrs["current_state"] ; end
|
18
|
+
|
19
|
+
def estimated?
|
20
|
+
return true if story_type != "feature"
|
21
|
+
return false if estimate.nil?
|
22
|
+
Integer(estimate) > 0
|
23
|
+
end
|
24
|
+
|
25
|
+
def update(new_attrs)
|
26
|
+
api.update_story story_id, new_attrs
|
27
|
+
end
|
28
|
+
|
29
|
+
def pull_request_title
|
30
|
+
name
|
31
|
+
end
|
32
|
+
|
33
|
+
def pull_request_body_text
|
34
|
+
url
|
35
|
+
end
|
36
|
+
|
37
|
+
def attrs
|
38
|
+
@attrs ||= api.story story_id
|
39
|
+
end
|
40
|
+
|
41
|
+
def start(starter_ids: nil, estimate: nil)
|
42
|
+
attrs = {
|
43
|
+
current_state: "started",
|
44
|
+
owner_ids: starter_ids,
|
45
|
+
}
|
46
|
+
|
47
|
+
attrs[:estimate] = estimate if estimate
|
48
|
+
|
49
|
+
update(attrs)
|
50
|
+
end
|
51
|
+
|
52
|
+
# Sometimes stories have a note in front of their title like
|
53
|
+
# *[BLOCKED]* or **[BLOCKED]**, this removes it.
|
54
|
+
def remove_prefix(name)
|
55
|
+
name.sub(/^(\*\*?.*?\*\*? *)+/, "").strip
|
56
|
+
end
|
57
|
+
end
|
58
|
+
end
|
@@ -0,0 +1,37 @@
|
|
1
|
+
require_relative 'startling_pivotal/api'
|
2
|
+
require_relative 'startling_pivotal/configuration'
|
3
|
+
require_relative 'startling_pivotal/helper'
|
4
|
+
require_relative 'startling_pivotal/story'
|
5
|
+
require_relative 'startling_pivotal/commands/pivotal_start'
|
6
|
+
|
7
|
+
module StartlingPivotal
|
8
|
+
class << self
|
9
|
+
attr_writer :configuration
|
10
|
+
|
11
|
+
def method_missing(method, *args, &block)
|
12
|
+
configuration.send(method, *args, &block)
|
13
|
+
end
|
14
|
+
end
|
15
|
+
|
16
|
+
def self.configuration
|
17
|
+
@configuration ||= Configuration.new
|
18
|
+
end
|
19
|
+
|
20
|
+
def self.configure
|
21
|
+
yield(configuration)
|
22
|
+
end
|
23
|
+
|
24
|
+
def self.api
|
25
|
+
@api ||= Api.new(api_token: Helper.new.api_token)
|
26
|
+
end
|
27
|
+
|
28
|
+
def self.user_id
|
29
|
+
@user_id ||= begin
|
30
|
+
api.user_id
|
31
|
+
end
|
32
|
+
end
|
33
|
+
|
34
|
+
def self.story(id)
|
35
|
+
Story.new(id, api)
|
36
|
+
end
|
37
|
+
end
|
data/spec/spec_helper.rb
ADDED
@@ -0,0 +1,19 @@
|
|
1
|
+
# This file was generated by the `rspec --init` command. Conventionally, all
|
2
|
+
# specs live under a `spec` directory, which RSpec adds to the `$LOAD_PATH`.
|
3
|
+
# Require this file using `require "spec_helper"` to ensure that it is only
|
4
|
+
# loaded once.
|
5
|
+
#
|
6
|
+
# See http://rubydoc.info/gems/rspec-core/RSpec/Core/Configuration
|
7
|
+
RSpec.configure do |config|
|
8
|
+
config.run_all_when_everything_filtered = true
|
9
|
+
config.filter_run :focus
|
10
|
+
|
11
|
+
# Run specs in random order to surface order dependencies. If you find an
|
12
|
+
# order dependency and want to debug it, you can fix the order by providing
|
13
|
+
# the seed, which is printed after each run.
|
14
|
+
# --seed 1234
|
15
|
+
config.order = 'random'
|
16
|
+
end
|
17
|
+
|
18
|
+
require 'pry'
|
19
|
+
Dir['./spec/support/**/*.rb'].map {|f| require f}
|
@@ -0,0 +1,46 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
require 'startling_pivotal/api'
|
3
|
+
|
4
|
+
module StartlingPivotal
|
5
|
+
describe Api do
|
6
|
+
let(:api_token) { Tokens.pivotal_tracker }
|
7
|
+
let(:api) { Api.new(api_token: api_token) }
|
8
|
+
|
9
|
+
specify "#user_id should return the id of the current user",
|
10
|
+
vcr: { cassette_name: "pivotal_tracker_api_user_id" } do
|
11
|
+
expect(api.user_id).to eq(1240260)
|
12
|
+
end
|
13
|
+
|
14
|
+
specify ".api_token should return the api_token of the user",
|
15
|
+
vcr: { cassette_name: "pivotal_tracker_api_api_token" } do
|
16
|
+
token = Api.api_token_for_user "aaron+tchtesting@substantial.com", "asdfasdf"
|
17
|
+
expect(token).to eq(api_token)
|
18
|
+
end
|
19
|
+
|
20
|
+
# Uses https://www.pivotaltracker.com/story/show/65069954
|
21
|
+
#
|
22
|
+
# Preconditions:
|
23
|
+
# Name should match tested name.
|
24
|
+
specify "#story should return story details",
|
25
|
+
vcr: { cassette_name: "pivotal_tracker_api_story" } do
|
26
|
+
story = api.story(65069954)
|
27
|
+
expect(story["name"]).to eq("TEST: pivotal_tracker_api_story")
|
28
|
+
end
|
29
|
+
|
30
|
+
# Uses https://www.pivotaltracker.com/story/show/65072638
|
31
|
+
#
|
32
|
+
# Preconditions:
|
33
|
+
# Story should not have an estimate
|
34
|
+
specify "#update_story should update the story",
|
35
|
+
vcr: { cassette_name: "pivotal_tracker_api_update_story" } do
|
36
|
+
story_id = 65072638
|
37
|
+
story = api.story(story_id)
|
38
|
+
expect(story["estimate"]).to be_nil
|
39
|
+
|
40
|
+
api.update_story story_id, estimate: 8
|
41
|
+
|
42
|
+
story = api.story(story_id)
|
43
|
+
expect(story["estimate"]).to eq(8)
|
44
|
+
end
|
45
|
+
end
|
46
|
+
end
|
@@ -0,0 +1,57 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
require 'startling'
|
3
|
+
require 'startling_pivotal/configuration'
|
4
|
+
|
5
|
+
module StartlingPivotal
|
6
|
+
describe Configuration do
|
7
|
+
let(:configuration) { Configuration.new }
|
8
|
+
|
9
|
+
describe 'Default settings' do
|
10
|
+
it 'sets the default valid estimates' do
|
11
|
+
expect(configuration.valid_estimates).to eql(Configuration::DEFAULT_VALID_ESTIMATES)
|
12
|
+
end
|
13
|
+
end
|
14
|
+
|
15
|
+
describe "#valid_estimates" do
|
16
|
+
it "can set the value" do
|
17
|
+
configuration.valid_estimates = [1, 2]
|
18
|
+
expect(configuration.valid_estimates).to eql([1, 2])
|
19
|
+
end
|
20
|
+
end
|
21
|
+
|
22
|
+
describe "#load_configuration" do
|
23
|
+
let(:git) { double(Startling::GitLocal) }
|
24
|
+
let(:config_file) { "startling_pivotal_file.rb" }
|
25
|
+
|
26
|
+
before do
|
27
|
+
allow(Startling::GitLocal).to receive(:new) { git }
|
28
|
+
allow(git).to receive(:project_root) { Dir.pwd }
|
29
|
+
end
|
30
|
+
|
31
|
+
after do
|
32
|
+
delete_config_file(config_file)
|
33
|
+
end
|
34
|
+
|
35
|
+
context "when no configuration file exists" do
|
36
|
+
it "uses default configuration" do
|
37
|
+
expect(Configuration.load_configuration).to eql(nil)
|
38
|
+
end
|
39
|
+
end
|
40
|
+
|
41
|
+
context "when a configuration file exists" do
|
42
|
+
it "loads configuration from startling_pivotal_file.rb" do
|
43
|
+
create_config_file(config_file)
|
44
|
+
expect(Configuration.load_configuration).to eql(config_file)
|
45
|
+
end
|
46
|
+
end
|
47
|
+
end
|
48
|
+
|
49
|
+
def create_config_file(config_file)
|
50
|
+
File.open(config_file, "w")
|
51
|
+
end
|
52
|
+
|
53
|
+
def delete_config_file(config_file)
|
54
|
+
File.delete(config_file) if File.exists? config_file
|
55
|
+
end
|
56
|
+
end
|
57
|
+
end
|
data/spec/support/vcr.rb
ADDED
@@ -0,0 +1,13 @@
|
|
1
|
+
require 'vcr'
|
2
|
+
|
3
|
+
VCR.configure do |config|
|
4
|
+
config.cassette_library_dir = 'spec/vcr_cassettes'
|
5
|
+
config.hook_into :webmock
|
6
|
+
config.default_cassette_options = {
|
7
|
+
allow_unused_http_interactions: false
|
8
|
+
}
|
9
|
+
config.filter_sensitive_data '<PIVOTAL_API_TOKEN>' do
|
10
|
+
ENV.fetch "TEST_PIVOTAL_TRACKER_API_TOKEN"
|
11
|
+
end
|
12
|
+
config.configure_rspec_metadata!
|
13
|
+
end
|
@@ -0,0 +1,77 @@
|
|
1
|
+
---
|
2
|
+
http_interactions:
|
3
|
+
- request:
|
4
|
+
method: get
|
5
|
+
uri: https://aaron%2Btchtesting%40substantial.com:asdfasdf@www.pivotaltracker.com/services/v5/me
|
6
|
+
body:
|
7
|
+
encoding: US-ASCII
|
8
|
+
string: ''
|
9
|
+
headers:
|
10
|
+
User-Agent:
|
11
|
+
- Faraday v0.9.0
|
12
|
+
Accept-Encoding:
|
13
|
+
- gzip;q=1.0,deflate;q=0.6,identity;q=0.3
|
14
|
+
Accept:
|
15
|
+
- '*/*'
|
16
|
+
response:
|
17
|
+
status:
|
18
|
+
code: 200
|
19
|
+
message: OK
|
20
|
+
headers:
|
21
|
+
Content-Type:
|
22
|
+
- application/json; charset=utf-8
|
23
|
+
Transfer-Encoding:
|
24
|
+
- chunked
|
25
|
+
Status:
|
26
|
+
- '200'
|
27
|
+
X-Powered-By:
|
28
|
+
- Phusion Passenger (mod_rails/mod_rack) 3.0.14
|
29
|
+
X-Runtime:
|
30
|
+
- '124'
|
31
|
+
Cache-Control:
|
32
|
+
- private, max-age=0, must-revalidate
|
33
|
+
Etag:
|
34
|
+
- '"6fe95f24a6cf270b0dba00df7f0cf5ea"'
|
35
|
+
Server:
|
36
|
+
- nginx/1.2.2 + Phusion Passenger 3.0.14 (mod_rails/mod_rack)
|
37
|
+
Access-Control-Allow-Origin:
|
38
|
+
- '*'
|
39
|
+
Access-Control-Allow-Credentials:
|
40
|
+
- 'false'
|
41
|
+
Access-Control-Allow-Methods:
|
42
|
+
- GET, POST, PUT, DELETE, OPTIONS
|
43
|
+
Access-Control-Allow-Headers:
|
44
|
+
- X-TrackerToken,DNT,X-Mx-ReqToken,Keep-Alive,User-Agent,X-Requested-With,If-Modified-Since,Cache-Control,Content-Type,X-Tracker-Warn-Unless-Project-Version-Is
|
45
|
+
body:
|
46
|
+
encoding: UTF-8
|
47
|
+
string: |-
|
48
|
+
{
|
49
|
+
"projects": [
|
50
|
+
{
|
51
|
+
"role": "owner",
|
52
|
+
"project_name": "Tch Start Testing",
|
53
|
+
"project_color": "e46642",
|
54
|
+
"last_viewed_at": "2014-02-04T16:39:33Z",
|
55
|
+
"id": 3907566,
|
56
|
+
"project_id": 1007746,
|
57
|
+
"kind": "membership_summary"
|
58
|
+
}
|
59
|
+
],
|
60
|
+
"has_google_identity": false,
|
61
|
+
"email": "aaron+tchtesting@substantial.com",
|
62
|
+
"initials": "TT",
|
63
|
+
"name": "Tch Testing",
|
64
|
+
"time_zone": {
|
65
|
+
"offset": "-07:00",
|
66
|
+
"olson_name": "America/Los_Angeles",
|
67
|
+
"kind": "time_zone"
|
68
|
+
},
|
69
|
+
"id": 1240260,
|
70
|
+
"kind": "me",
|
71
|
+
"username": "tcht",
|
72
|
+
"api_token": "<PIVOTAL_API_TOKEN>",
|
73
|
+
"receives_in_app_notifications": true
|
74
|
+
}
|
75
|
+
http_version:
|
76
|
+
recorded_at: Fri, 11 Apr 2014 17:17:43 GMT
|
77
|
+
recorded_with: VCR 2.8.0
|
@@ -0,0 +1,73 @@
|
|
1
|
+
---
|
2
|
+
http_interactions:
|
3
|
+
- request:
|
4
|
+
method: get
|
5
|
+
uri: https://www.pivotaltracker.com/services/v5/stories/65069954
|
6
|
+
body:
|
7
|
+
encoding: US-ASCII
|
8
|
+
string: ''
|
9
|
+
headers:
|
10
|
+
User-Agent:
|
11
|
+
- Faraday v0.9.0
|
12
|
+
X-Trackertoken:
|
13
|
+
- <PIVOTAL_API_TOKEN>
|
14
|
+
Accept-Encoding:
|
15
|
+
- gzip;q=1.0,deflate;q=0.6,identity;q=0.3
|
16
|
+
Accept:
|
17
|
+
- '*/*'
|
18
|
+
response:
|
19
|
+
status:
|
20
|
+
code: 200
|
21
|
+
message: OK
|
22
|
+
headers:
|
23
|
+
Content-Type:
|
24
|
+
- application/json; charset=utf-8
|
25
|
+
Transfer-Encoding:
|
26
|
+
- chunked
|
27
|
+
Status:
|
28
|
+
- '200'
|
29
|
+
X-Powered-By:
|
30
|
+
- Phusion Passenger (mod_rails/mod_rack) 3.0.14
|
31
|
+
Etag:
|
32
|
+
- '"a1996719dbe87ce81ea8d62c3bebc10e"'
|
33
|
+
X-Runtime:
|
34
|
+
- '50'
|
35
|
+
Cache-Control:
|
36
|
+
- private, max-age=0, must-revalidate
|
37
|
+
X-Tracker-Project-Version:
|
38
|
+
- '31'
|
39
|
+
Server:
|
40
|
+
- nginx/1.2.2 + Phusion Passenger 3.0.14 (mod_rails/mod_rack)
|
41
|
+
Access-Control-Allow-Origin:
|
42
|
+
- '*'
|
43
|
+
Access-Control-Allow-Credentials:
|
44
|
+
- 'false'
|
45
|
+
Access-Control-Allow-Methods:
|
46
|
+
- GET, POST, PUT, DELETE, OPTIONS
|
47
|
+
Access-Control-Allow-Headers:
|
48
|
+
- X-TrackerToken,DNT,X-Mx-ReqToken,Keep-Alive,User-Agent,X-Requested-With,If-Modified-Since,Cache-Control,Content-Type,X-Tracker-Warn-Unless-Project-Version-Is
|
49
|
+
body:
|
50
|
+
encoding: UTF-8
|
51
|
+
string: |-
|
52
|
+
{
|
53
|
+
"kind": "story",
|
54
|
+
"requested_by_id": 1240260,
|
55
|
+
"estimate": 4,
|
56
|
+
"labels": [
|
57
|
+
|
58
|
+
],
|
59
|
+
"owner_ids": [
|
60
|
+
|
61
|
+
],
|
62
|
+
"id": 65069954,
|
63
|
+
"created_at": "2014-02-04T01:02:39Z",
|
64
|
+
"updated_at": "2014-02-04T01:54:20Z",
|
65
|
+
"url": "http://www.pivotaltracker.com/story/show/65069954",
|
66
|
+
"story_type": "feature",
|
67
|
+
"project_id": 1007746,
|
68
|
+
"name": "TEST: pivotal_tracker_api_story",
|
69
|
+
"current_state": "unscheduled"
|
70
|
+
}
|
71
|
+
http_version:
|
72
|
+
recorded_at: Fri, 11 Apr 2014 17:17:43 GMT
|
73
|
+
recorded_with: VCR 2.8.0
|
@@ -0,0 +1,217 @@
|
|
1
|
+
---
|
2
|
+
http_interactions:
|
3
|
+
- request:
|
4
|
+
method: get
|
5
|
+
uri: https://www.pivotaltracker.com/services/v5/stories/65072638
|
6
|
+
body:
|
7
|
+
encoding: US-ASCII
|
8
|
+
string: ''
|
9
|
+
headers:
|
10
|
+
User-Agent:
|
11
|
+
- Faraday v0.9.0
|
12
|
+
X-Trackertoken:
|
13
|
+
- <PIVOTAL_API_TOKEN>
|
14
|
+
Accept-Encoding:
|
15
|
+
- gzip;q=1.0,deflate;q=0.6,identity;q=0.3
|
16
|
+
Accept:
|
17
|
+
- '*/*'
|
18
|
+
response:
|
19
|
+
status:
|
20
|
+
code: 200
|
21
|
+
message: OK
|
22
|
+
headers:
|
23
|
+
Content-Type:
|
24
|
+
- application/json; charset=utf-8
|
25
|
+
Transfer-Encoding:
|
26
|
+
- chunked
|
27
|
+
Status:
|
28
|
+
- '200'
|
29
|
+
X-Powered-By:
|
30
|
+
- Phusion Passenger (mod_rails/mod_rack) 3.0.14
|
31
|
+
Etag:
|
32
|
+
- '"520723207a9ac25967e0eedd67886bce"'
|
33
|
+
X-Runtime:
|
34
|
+
- '60'
|
35
|
+
Cache-Control:
|
36
|
+
- private, max-age=0, must-revalidate
|
37
|
+
X-Tracker-Project-Version:
|
38
|
+
- '30'
|
39
|
+
Server:
|
40
|
+
- nginx/1.2.2 + Phusion Passenger 3.0.14 (mod_rails/mod_rack)
|
41
|
+
Access-Control-Allow-Origin:
|
42
|
+
- '*'
|
43
|
+
Access-Control-Allow-Credentials:
|
44
|
+
- 'false'
|
45
|
+
Access-Control-Allow-Methods:
|
46
|
+
- GET, POST, PUT, DELETE, OPTIONS
|
47
|
+
Access-Control-Allow-Headers:
|
48
|
+
- X-TrackerToken,DNT,X-Mx-ReqToken,Keep-Alive,User-Agent,X-Requested-With,If-Modified-Since,Cache-Control,Content-Type,X-Tracker-Warn-Unless-Project-Version-Is
|
49
|
+
body:
|
50
|
+
encoding: UTF-8
|
51
|
+
string: |-
|
52
|
+
{
|
53
|
+
"kind": "story",
|
54
|
+
"requested_by_id": 1240260,
|
55
|
+
"description": "This story should have no estimate in it to properly test the update.",
|
56
|
+
"labels": [
|
57
|
+
|
58
|
+
],
|
59
|
+
"owner_ids": [
|
60
|
+
|
61
|
+
],
|
62
|
+
"id": 65072638,
|
63
|
+
"created_at": "2014-02-04T01:55:49Z",
|
64
|
+
"updated_at": "2014-02-04T02:51:52Z",
|
65
|
+
"url": "http://www.pivotaltracker.com/story/show/65072638",
|
66
|
+
"story_type": "feature",
|
67
|
+
"project_id": 1007746,
|
68
|
+
"name": "TEST: pivotal_tracker_api_update_story *(estimate should not be set)*",
|
69
|
+
"current_state": "unscheduled"
|
70
|
+
}
|
71
|
+
http_version:
|
72
|
+
recorded_at: Fri, 11 Apr 2014 17:17:41 GMT
|
73
|
+
- request:
|
74
|
+
method: put
|
75
|
+
uri: https://www.pivotaltracker.com/services/v5/stories/65072638
|
76
|
+
body:
|
77
|
+
encoding: UTF-8
|
78
|
+
string: '{"estimate":8}'
|
79
|
+
headers:
|
80
|
+
User-Agent:
|
81
|
+
- Faraday v0.9.0
|
82
|
+
Content-Type:
|
83
|
+
- application/json
|
84
|
+
X-Trackertoken:
|
85
|
+
- <PIVOTAL_API_TOKEN>
|
86
|
+
Accept-Encoding:
|
87
|
+
- gzip;q=1.0,deflate;q=0.6,identity;q=0.3
|
88
|
+
Accept:
|
89
|
+
- '*/*'
|
90
|
+
response:
|
91
|
+
status:
|
92
|
+
code: 200
|
93
|
+
message: OK
|
94
|
+
headers:
|
95
|
+
Content-Type:
|
96
|
+
- application/json; charset=utf-8
|
97
|
+
Content-Length:
|
98
|
+
- '530'
|
99
|
+
Status:
|
100
|
+
- '200'
|
101
|
+
X-Powered-By:
|
102
|
+
- Phusion Passenger (mod_rails/mod_rack) 3.0.14
|
103
|
+
Etag:
|
104
|
+
- '"9e3b83e5b6ec14028bb7c34fb3910cae"'
|
105
|
+
X-Runtime:
|
106
|
+
- '208'
|
107
|
+
Cache-Control:
|
108
|
+
- private, max-age=0, must-revalidate
|
109
|
+
X-Tracker-Project-Version:
|
110
|
+
- '31'
|
111
|
+
Server:
|
112
|
+
- nginx/1.2.2 + Phusion Passenger 3.0.14 (mod_rails/mod_rack)
|
113
|
+
Access-Control-Allow-Origin:
|
114
|
+
- '*'
|
115
|
+
Access-Control-Allow-Credentials:
|
116
|
+
- 'false'
|
117
|
+
Access-Control-Allow-Methods:
|
118
|
+
- GET, POST, PUT, DELETE, OPTIONS
|
119
|
+
Access-Control-Allow-Headers:
|
120
|
+
- X-TrackerToken,DNT,X-Mx-ReqToken,Keep-Alive,User-Agent,X-Requested-With,If-Modified-Since,Cache-Control,Content-Type,X-Tracker-Warn-Unless-Project-Version-Is
|
121
|
+
body:
|
122
|
+
encoding: UTF-8
|
123
|
+
string: |-
|
124
|
+
{
|
125
|
+
"kind": "story",
|
126
|
+
"requested_by_id": 1240260,
|
127
|
+
"description": "This story should have no estimate in it to properly test the update.",
|
128
|
+
"estimate": 8,
|
129
|
+
"labels": [
|
130
|
+
|
131
|
+
],
|
132
|
+
"owner_ids": [
|
133
|
+
|
134
|
+
],
|
135
|
+
"id": 65072638,
|
136
|
+
"created_at": "2014-02-04T01:55:49Z",
|
137
|
+
"updated_at": "2014-04-11T17:17:39Z",
|
138
|
+
"url": "http://www.pivotaltracker.com/story/show/65072638",
|
139
|
+
"story_type": "feature",
|
140
|
+
"project_id": 1007746,
|
141
|
+
"name": "TEST: pivotal_tracker_api_update_story *(estimate should not be set)*",
|
142
|
+
"current_state": "unscheduled"
|
143
|
+
}
|
144
|
+
http_version:
|
145
|
+
recorded_at: Fri, 11 Apr 2014 17:17:42 GMT
|
146
|
+
- request:
|
147
|
+
method: get
|
148
|
+
uri: https://www.pivotaltracker.com/services/v5/stories/65072638
|
149
|
+
body:
|
150
|
+
encoding: US-ASCII
|
151
|
+
string: ''
|
152
|
+
headers:
|
153
|
+
User-Agent:
|
154
|
+
- Faraday v0.9.0
|
155
|
+
X-Trackertoken:
|
156
|
+
- <PIVOTAL_API_TOKEN>
|
157
|
+
Accept-Encoding:
|
158
|
+
- gzip;q=1.0,deflate;q=0.6,identity;q=0.3
|
159
|
+
Accept:
|
160
|
+
- '*/*'
|
161
|
+
response:
|
162
|
+
status:
|
163
|
+
code: 200
|
164
|
+
message: OK
|
165
|
+
headers:
|
166
|
+
Content-Type:
|
167
|
+
- application/json; charset=utf-8
|
168
|
+
Transfer-Encoding:
|
169
|
+
- chunked
|
170
|
+
Status:
|
171
|
+
- '200'
|
172
|
+
X-Powered-By:
|
173
|
+
- Phusion Passenger (mod_rails/mod_rack) 3.0.14
|
174
|
+
Etag:
|
175
|
+
- '"9e3b83e5b6ec14028bb7c34fb3910cae"'
|
176
|
+
X-Runtime:
|
177
|
+
- '56'
|
178
|
+
Cache-Control:
|
179
|
+
- private, max-age=0, must-revalidate
|
180
|
+
X-Tracker-Project-Version:
|
181
|
+
- '31'
|
182
|
+
Server:
|
183
|
+
- nginx/1.2.2 + Phusion Passenger 3.0.14 (mod_rails/mod_rack)
|
184
|
+
Access-Control-Allow-Origin:
|
185
|
+
- '*'
|
186
|
+
Access-Control-Allow-Credentials:
|
187
|
+
- 'false'
|
188
|
+
Access-Control-Allow-Methods:
|
189
|
+
- GET, POST, PUT, DELETE, OPTIONS
|
190
|
+
Access-Control-Allow-Headers:
|
191
|
+
- X-TrackerToken,DNT,X-Mx-ReqToken,Keep-Alive,User-Agent,X-Requested-With,If-Modified-Since,Cache-Control,Content-Type,X-Tracker-Warn-Unless-Project-Version-Is
|
192
|
+
body:
|
193
|
+
encoding: UTF-8
|
194
|
+
string: |-
|
195
|
+
{
|
196
|
+
"kind": "story",
|
197
|
+
"requested_by_id": 1240260,
|
198
|
+
"description": "This story should have no estimate in it to properly test the update.",
|
199
|
+
"estimate": 8,
|
200
|
+
"labels": [
|
201
|
+
|
202
|
+
],
|
203
|
+
"owner_ids": [
|
204
|
+
|
205
|
+
],
|
206
|
+
"id": 65072638,
|
207
|
+
"created_at": "2014-02-04T01:55:49Z",
|
208
|
+
"updated_at": "2014-04-11T17:17:39Z",
|
209
|
+
"url": "http://www.pivotaltracker.com/story/show/65072638",
|
210
|
+
"story_type": "feature",
|
211
|
+
"project_id": 1007746,
|
212
|
+
"name": "TEST: pivotal_tracker_api_update_story *(estimate should not be set)*",
|
213
|
+
"current_state": "unscheduled"
|
214
|
+
}
|
215
|
+
http_version:
|
216
|
+
recorded_at: Fri, 11 Apr 2014 17:17:42 GMT
|
217
|
+
recorded_with: VCR 2.8.0
|
@@ -0,0 +1,79 @@
|
|
1
|
+
---
|
2
|
+
http_interactions:
|
3
|
+
- request:
|
4
|
+
method: get
|
5
|
+
uri: https://www.pivotaltracker.com/services/v5/me
|
6
|
+
body:
|
7
|
+
encoding: US-ASCII
|
8
|
+
string: ''
|
9
|
+
headers:
|
10
|
+
User-Agent:
|
11
|
+
- Faraday v0.9.0
|
12
|
+
X-Trackertoken:
|
13
|
+
- <PIVOTAL_API_TOKEN>
|
14
|
+
Accept-Encoding:
|
15
|
+
- gzip;q=1.0,deflate;q=0.6,identity;q=0.3
|
16
|
+
Accept:
|
17
|
+
- '*/*'
|
18
|
+
response:
|
19
|
+
status:
|
20
|
+
code: 200
|
21
|
+
message: OK
|
22
|
+
headers:
|
23
|
+
Content-Type:
|
24
|
+
- application/json; charset=utf-8
|
25
|
+
Transfer-Encoding:
|
26
|
+
- chunked
|
27
|
+
Status:
|
28
|
+
- '200'
|
29
|
+
X-Powered-By:
|
30
|
+
- Phusion Passenger (mod_rails/mod_rack) 3.0.14
|
31
|
+
Etag:
|
32
|
+
- '"99739549742ff0cda850a10841def930"'
|
33
|
+
X-Runtime:
|
34
|
+
- '26'
|
35
|
+
Cache-Control:
|
36
|
+
- private, max-age=0, must-revalidate
|
37
|
+
Server:
|
38
|
+
- nginx/1.2.2 + Phusion Passenger 3.0.14 (mod_rails/mod_rack)
|
39
|
+
Access-Control-Allow-Origin:
|
40
|
+
- '*'
|
41
|
+
Access-Control-Allow-Credentials:
|
42
|
+
- 'false'
|
43
|
+
Access-Control-Allow-Methods:
|
44
|
+
- GET, POST, PUT, DELETE, OPTIONS
|
45
|
+
Access-Control-Allow-Headers:
|
46
|
+
- X-TrackerToken,DNT,X-Mx-ReqToken,Keep-Alive,User-Agent,X-Requested-With,If-Modified-Since,Cache-Control,Content-Type,X-Tracker-Warn-Unless-Project-Version-Is
|
47
|
+
body:
|
48
|
+
encoding: UTF-8
|
49
|
+
string: |-
|
50
|
+
{
|
51
|
+
"api_token": "<PIVOTAL_API_TOKEN>",
|
52
|
+
"kind": "me",
|
53
|
+
"has_google_identity": false,
|
54
|
+
"email": "aaron+tchtesting@substantial.com",
|
55
|
+
"username": "tcht",
|
56
|
+
"receives_in_app_notifications": true,
|
57
|
+
"initials": "TT",
|
58
|
+
"time_zone": {
|
59
|
+
"kind": "time_zone",
|
60
|
+
"olson_name": "America/Los_Angeles",
|
61
|
+
"offset": "-07:00"
|
62
|
+
},
|
63
|
+
"id": 1240260,
|
64
|
+
"name": "Tch Testing",
|
65
|
+
"projects": [
|
66
|
+
{
|
67
|
+
"project_name": "Tch Start Testing",
|
68
|
+
"kind": "membership_summary",
|
69
|
+
"role": "owner",
|
70
|
+
"id": 3907566,
|
71
|
+
"last_viewed_at": "2014-02-04T16:39:33Z",
|
72
|
+
"project_color": "e46642",
|
73
|
+
"project_id": 1007746
|
74
|
+
}
|
75
|
+
]
|
76
|
+
}
|
77
|
+
http_version:
|
78
|
+
recorded_at: Fri, 11 Apr 2014 17:17:44 GMT
|
79
|
+
recorded_with: VCR 2.8.0
|
@@ -0,0 +1,31 @@
|
|
1
|
+
# coding: utf-8
|
2
|
+
lib = File.expand_path('../lib', __FILE__)
|
3
|
+
$LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
|
4
|
+
require 'startling_pivotal/version'
|
5
|
+
|
6
|
+
Gem::Specification.new do |spec|
|
7
|
+
spec.name = "startling_pivotal"
|
8
|
+
spec.version = StartlingPivotal::VERSION
|
9
|
+
spec.authors = ["Jeff Forde", "Cassie Koomjian"]
|
10
|
+
spec.email = ["tchdevs@substantial.com"]
|
11
|
+
spec.description = %q{Startling Pivotal Api}
|
12
|
+
spec.summary = %q{Startling Pivotal Api}
|
13
|
+
spec.homepage = ""
|
14
|
+
spec.license = "MIT"
|
15
|
+
|
16
|
+
spec.files = `git ls-files`.split($/)
|
17
|
+
spec.executables = spec.files.grep(%r{^bin/}) { |f| File.basename(f) }
|
18
|
+
spec.test_files = spec.files.grep(%r{^(test|spec|features)/})
|
19
|
+
spec.require_paths = ["lib"]
|
20
|
+
|
21
|
+
spec.add_development_dependency "bundler"
|
22
|
+
spec.add_development_dependency "rake"
|
23
|
+
spec.add_development_dependency "rspec", "~> 3.2"
|
24
|
+
spec.add_development_dependency "pry"
|
25
|
+
spec.add_development_dependency "webmock", "~> 1.20"
|
26
|
+
spec.add_development_dependency "excon"
|
27
|
+
spec.add_development_dependency "dotenv"
|
28
|
+
spec.add_development_dependency "vcr", "~> 2.9"
|
29
|
+
spec.add_dependency "startling"
|
30
|
+
spec.add_dependency "faraday", "~> 0.9"
|
31
|
+
end
|
metadata
ADDED
@@ -0,0 +1,221 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: startling_pivotal
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.0.1
|
5
|
+
platform: ruby
|
6
|
+
authors:
|
7
|
+
- Jeff Forde
|
8
|
+
- Cassie Koomjian
|
9
|
+
autorequire:
|
10
|
+
bindir: bin
|
11
|
+
cert_chain: []
|
12
|
+
date: 2016-02-23 00:00:00.000000000 Z
|
13
|
+
dependencies:
|
14
|
+
- !ruby/object:Gem::Dependency
|
15
|
+
name: bundler
|
16
|
+
requirement: !ruby/object:Gem::Requirement
|
17
|
+
requirements:
|
18
|
+
- - ">="
|
19
|
+
- !ruby/object:Gem::Version
|
20
|
+
version: '0'
|
21
|
+
type: :development
|
22
|
+
prerelease: false
|
23
|
+
version_requirements: !ruby/object:Gem::Requirement
|
24
|
+
requirements:
|
25
|
+
- - ">="
|
26
|
+
- !ruby/object:Gem::Version
|
27
|
+
version: '0'
|
28
|
+
- !ruby/object:Gem::Dependency
|
29
|
+
name: rake
|
30
|
+
requirement: !ruby/object:Gem::Requirement
|
31
|
+
requirements:
|
32
|
+
- - ">="
|
33
|
+
- !ruby/object:Gem::Version
|
34
|
+
version: '0'
|
35
|
+
type: :development
|
36
|
+
prerelease: false
|
37
|
+
version_requirements: !ruby/object:Gem::Requirement
|
38
|
+
requirements:
|
39
|
+
- - ">="
|
40
|
+
- !ruby/object:Gem::Version
|
41
|
+
version: '0'
|
42
|
+
- !ruby/object:Gem::Dependency
|
43
|
+
name: rspec
|
44
|
+
requirement: !ruby/object:Gem::Requirement
|
45
|
+
requirements:
|
46
|
+
- - "~>"
|
47
|
+
- !ruby/object:Gem::Version
|
48
|
+
version: '3.2'
|
49
|
+
type: :development
|
50
|
+
prerelease: false
|
51
|
+
version_requirements: !ruby/object:Gem::Requirement
|
52
|
+
requirements:
|
53
|
+
- - "~>"
|
54
|
+
- !ruby/object:Gem::Version
|
55
|
+
version: '3.2'
|
56
|
+
- !ruby/object:Gem::Dependency
|
57
|
+
name: pry
|
58
|
+
requirement: !ruby/object:Gem::Requirement
|
59
|
+
requirements:
|
60
|
+
- - ">="
|
61
|
+
- !ruby/object:Gem::Version
|
62
|
+
version: '0'
|
63
|
+
type: :development
|
64
|
+
prerelease: false
|
65
|
+
version_requirements: !ruby/object:Gem::Requirement
|
66
|
+
requirements:
|
67
|
+
- - ">="
|
68
|
+
- !ruby/object:Gem::Version
|
69
|
+
version: '0'
|
70
|
+
- !ruby/object:Gem::Dependency
|
71
|
+
name: webmock
|
72
|
+
requirement: !ruby/object:Gem::Requirement
|
73
|
+
requirements:
|
74
|
+
- - "~>"
|
75
|
+
- !ruby/object:Gem::Version
|
76
|
+
version: '1.20'
|
77
|
+
type: :development
|
78
|
+
prerelease: false
|
79
|
+
version_requirements: !ruby/object:Gem::Requirement
|
80
|
+
requirements:
|
81
|
+
- - "~>"
|
82
|
+
- !ruby/object:Gem::Version
|
83
|
+
version: '1.20'
|
84
|
+
- !ruby/object:Gem::Dependency
|
85
|
+
name: excon
|
86
|
+
requirement: !ruby/object:Gem::Requirement
|
87
|
+
requirements:
|
88
|
+
- - ">="
|
89
|
+
- !ruby/object:Gem::Version
|
90
|
+
version: '0'
|
91
|
+
type: :development
|
92
|
+
prerelease: false
|
93
|
+
version_requirements: !ruby/object:Gem::Requirement
|
94
|
+
requirements:
|
95
|
+
- - ">="
|
96
|
+
- !ruby/object:Gem::Version
|
97
|
+
version: '0'
|
98
|
+
- !ruby/object:Gem::Dependency
|
99
|
+
name: dotenv
|
100
|
+
requirement: !ruby/object:Gem::Requirement
|
101
|
+
requirements:
|
102
|
+
- - ">="
|
103
|
+
- !ruby/object:Gem::Version
|
104
|
+
version: '0'
|
105
|
+
type: :development
|
106
|
+
prerelease: false
|
107
|
+
version_requirements: !ruby/object:Gem::Requirement
|
108
|
+
requirements:
|
109
|
+
- - ">="
|
110
|
+
- !ruby/object:Gem::Version
|
111
|
+
version: '0'
|
112
|
+
- !ruby/object:Gem::Dependency
|
113
|
+
name: vcr
|
114
|
+
requirement: !ruby/object:Gem::Requirement
|
115
|
+
requirements:
|
116
|
+
- - "~>"
|
117
|
+
- !ruby/object:Gem::Version
|
118
|
+
version: '2.9'
|
119
|
+
type: :development
|
120
|
+
prerelease: false
|
121
|
+
version_requirements: !ruby/object:Gem::Requirement
|
122
|
+
requirements:
|
123
|
+
- - "~>"
|
124
|
+
- !ruby/object:Gem::Version
|
125
|
+
version: '2.9'
|
126
|
+
- !ruby/object:Gem::Dependency
|
127
|
+
name: startling
|
128
|
+
requirement: !ruby/object:Gem::Requirement
|
129
|
+
requirements:
|
130
|
+
- - ">="
|
131
|
+
- !ruby/object:Gem::Version
|
132
|
+
version: '0'
|
133
|
+
type: :runtime
|
134
|
+
prerelease: false
|
135
|
+
version_requirements: !ruby/object:Gem::Requirement
|
136
|
+
requirements:
|
137
|
+
- - ">="
|
138
|
+
- !ruby/object:Gem::Version
|
139
|
+
version: '0'
|
140
|
+
- !ruby/object:Gem::Dependency
|
141
|
+
name: faraday
|
142
|
+
requirement: !ruby/object:Gem::Requirement
|
143
|
+
requirements:
|
144
|
+
- - "~>"
|
145
|
+
- !ruby/object:Gem::Version
|
146
|
+
version: '0.9'
|
147
|
+
type: :runtime
|
148
|
+
prerelease: false
|
149
|
+
version_requirements: !ruby/object:Gem::Requirement
|
150
|
+
requirements:
|
151
|
+
- - "~>"
|
152
|
+
- !ruby/object:Gem::Version
|
153
|
+
version: '0.9'
|
154
|
+
description: Startling Pivotal Api
|
155
|
+
email:
|
156
|
+
- tchdevs@substantial.com
|
157
|
+
executables:
|
158
|
+
- story_status
|
159
|
+
extensions: []
|
160
|
+
extra_rdoc_files: []
|
161
|
+
files:
|
162
|
+
- ".ruby-gemset"
|
163
|
+
- Gemfile
|
164
|
+
- LICENSE.txt
|
165
|
+
- README.md
|
166
|
+
- Rakefile
|
167
|
+
- bin/story_status
|
168
|
+
- lib/generators/startling_pivotal/configuration_generator.rb
|
169
|
+
- lib/startling_pivotal.rb
|
170
|
+
- lib/startling_pivotal/api.rb
|
171
|
+
- lib/startling_pivotal/commands/pivotal_start.rb
|
172
|
+
- lib/startling_pivotal/configuration.rb
|
173
|
+
- lib/startling_pivotal/helper.rb
|
174
|
+
- lib/startling_pivotal/story.rb
|
175
|
+
- lib/startling_pivotal/version.rb
|
176
|
+
- spec/spec_helper.rb
|
177
|
+
- spec/startling_pivotal/api_spec.rb
|
178
|
+
- spec/startling_pivotal/configuration_spec.rb
|
179
|
+
- spec/support/dotenv.rb
|
180
|
+
- spec/support/tokens.rb
|
181
|
+
- spec/support/vcr.rb
|
182
|
+
- spec/vcr_cassettes/pivotal_tracker_api_api_token.yml
|
183
|
+
- spec/vcr_cassettes/pivotal_tracker_api_story.yml
|
184
|
+
- spec/vcr_cassettes/pivotal_tracker_api_update_story.yml
|
185
|
+
- spec/vcr_cassettes/pivotal_tracker_api_user_id.yml
|
186
|
+
- startling_pivotal.gemspec
|
187
|
+
homepage: ''
|
188
|
+
licenses:
|
189
|
+
- MIT
|
190
|
+
metadata: {}
|
191
|
+
post_install_message:
|
192
|
+
rdoc_options: []
|
193
|
+
require_paths:
|
194
|
+
- lib
|
195
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
196
|
+
requirements:
|
197
|
+
- - ">="
|
198
|
+
- !ruby/object:Gem::Version
|
199
|
+
version: '0'
|
200
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
201
|
+
requirements:
|
202
|
+
- - ">="
|
203
|
+
- !ruby/object:Gem::Version
|
204
|
+
version: '0'
|
205
|
+
requirements: []
|
206
|
+
rubyforge_project:
|
207
|
+
rubygems_version: 2.5.1
|
208
|
+
signing_key:
|
209
|
+
specification_version: 4
|
210
|
+
summary: Startling Pivotal Api
|
211
|
+
test_files:
|
212
|
+
- spec/spec_helper.rb
|
213
|
+
- spec/startling_pivotal/api_spec.rb
|
214
|
+
- spec/startling_pivotal/configuration_spec.rb
|
215
|
+
- spec/support/dotenv.rb
|
216
|
+
- spec/support/tokens.rb
|
217
|
+
- spec/support/vcr.rb
|
218
|
+
- spec/vcr_cassettes/pivotal_tracker_api_api_token.yml
|
219
|
+
- spec/vcr_cassettes/pivotal_tracker_api_story.yml
|
220
|
+
- spec/vcr_cassettes/pivotal_tracker_api_update_story.yml
|
221
|
+
- spec/vcr_cassettes/pivotal_tracker_api_user_id.yml
|