codefumes 0.1.10 → 0.2.0
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.
- data/Gemfile +19 -0
- data/Gemfile.lock +135 -0
- data/History.txt +12 -0
- data/LICENSE +20 -0
- data/Manifest.txt +40 -19
- data/README.txt +11 -29
- data/Rakefile +15 -10
- data/bin/fumes +214 -0
- data/config/website.yml +2 -0
- data/cucumber.yml +2 -0
- data/features/claiming_a_project.feature +46 -0
- data/features/deleting_a_project.feature +32 -0
- data/features/releasing_a_project.feature +50 -0
- data/features/step_definitions/cli_steps.rb +98 -0
- data/features/step_definitions/common_steps.rb +168 -0
- data/features/step_definitions/filesystem_steps.rb +19 -0
- data/features/storing_user_api_key.feature +41 -0
- data/features/support/common.rb +29 -0
- data/features/support/env.rb +24 -0
- data/features/support/matchers.rb +11 -0
- data/features/synchronizing_repository_with_project.feature +33 -0
- data/lib/codefumes.rb +10 -8
- data/lib/codefumes/api.rb +20 -11
- data/lib/codefumes/api/build.rb +139 -0
- data/lib/codefumes/api/claim.rb +74 -0
- data/lib/codefumes/api/commit.rb +150 -0
- data/lib/codefumes/api/payload.rb +93 -0
- data/lib/codefumes/api/project.rb +158 -0
- data/lib/codefumes/cli_helpers.rb +54 -0
- data/lib/codefumes/config_file.rb +3 -2
- data/lib/codefumes/errors.rb +21 -0
- data/lib/codefumes/exit_codes.rb +10 -0
- data/lib/codefumes/harvester.rb +113 -0
- data/lib/codefumes/quick_build.rb +43 -0
- data/lib/codefumes/quick_metric.rb +20 -0
- data/lib/codefumes/source_control.rb +137 -0
- data/lib/integrity_notifier/codefumes.haml +11 -0
- data/lib/integrity_notifier/codefumes.rb +62 -0
- data/spec/codefumes/{build_spec.rb → api/build_spec.rb} +14 -24
- data/spec/codefumes/{claim_spec.rb → api/claim_spec.rb} +42 -3
- data/spec/codefumes/{commit_spec.rb → api/commit_spec.rb} +34 -24
- data/spec/codefumes/api/payload_spec.rb +148 -0
- data/spec/codefumes/api/project_spec.rb +286 -0
- data/spec/codefumes/api_spec.rb +38 -15
- data/spec/codefumes/config_file_spec.rb +69 -13
- data/spec/codefumes/harvester_spec.rb +118 -0
- data/spec/codefumes/source_control_spec.rb +199 -0
- data/spec/codefumes_service_helpers.rb +23 -19
- data/spec/fixtures/sample_project_dirs/no_scm/description +4 -0
- data/spec/spec_helper.rb +1 -0
- data/tasks/cucumber.rake +11 -0
- metadata +145 -60
- data/bin/cf_claim_project +0 -9
- data/bin/cf_release_project +0 -10
- data/bin/cf_store_credentials +0 -10
- data/lib/cf_claim_project/cli.rb +0 -95
- data/lib/cf_release_project/cli.rb +0 -76
- data/lib/cf_store_credentials/cli.rb +0 -50
- data/lib/codefumes/build.rb +0 -131
- data/lib/codefumes/claim.rb +0 -57
- data/lib/codefumes/commit.rb +0 -144
- data/lib/codefumes/payload.rb +0 -103
- data/lib/codefumes/project.rb +0 -129
- data/spec/cf_claim_project/cli_spec.rb +0 -17
- data/spec/cf_release_project/cli_spec.rb +0 -41
- data/spec/cf_store_credentials/cli_spec.rb +0 -28
- data/spec/codefumes/payload_spec.rb +0 -155
- data/spec/codefumes/project_spec.rb +0 -274
data/lib/codefumes/commit.rb
DELETED
@@ -1,144 +0,0 @@
|
|
1
|
-
module CodeFumes
|
2
|
-
# Similar to a revision control system, a Commit encompasses a set of
|
3
|
-
# changes to a codebase, who made them, when said changes were applied
|
4
|
-
# to the previous revision of codebase, et cetera.
|
5
|
-
#
|
6
|
-
# A Commit has a concept of 'standard attributes' which will always be
|
7
|
-
# present in a response from CodeFumes.com[http://codefumes.com], such
|
8
|
-
# as the +identifier+, +author+, and +commit_message+ (see the list of
|
9
|
-
# attributes for a comprehensive listing). In addition to this, users
|
10
|
-
# are able to associate 'custom attributes' to a Commit, allowing
|
11
|
-
# users to link any number of attributes with a commit identifier and
|
12
|
-
# easily retrieve them later.
|
13
|
-
#
|
14
|
-
# One thing to note about Commit objects is that they are read-only.
|
15
|
-
# To associate metrics with a Commit object, a Payload object should
|
16
|
-
# be created and saved. Refer to the Payload documentation for more
|
17
|
-
# information.
|
18
|
-
class Commit < CodeFumes::API
|
19
|
-
attr_reader :identifier, :author_name, :author_email, :committer_name,
|
20
|
-
:committer_email, :short_message, :message,:committed_at,
|
21
|
-
:authored_at, :uploaded_at, :api_uri, :parent_identifiers,
|
22
|
-
:line_additions, :line_deletions, :line_total,
|
23
|
-
:affected_file_count, :custom_attributes
|
24
|
-
|
25
|
-
# Instantiates a new Commit object
|
26
|
-
#
|
27
|
-
# Accepts a Hash of options, including:
|
28
|
-
# * identifier
|
29
|
-
# * author_email
|
30
|
-
# * author_name
|
31
|
-
# * committer_email
|
32
|
-
# * committer_name
|
33
|
-
# * short_message
|
34
|
-
# * message
|
35
|
-
# * committed_at
|
36
|
-
# * authored_at
|
37
|
-
# * uploaded_at
|
38
|
-
# * api_uri
|
39
|
-
# * parent_identifiers
|
40
|
-
# * line_additions
|
41
|
-
# * line_deletions
|
42
|
-
# * line_total
|
43
|
-
# * affected_file_count
|
44
|
-
# * custom_attributes
|
45
|
-
#
|
46
|
-
# +custom_attributes+ should be a Hash of attribute_name/value
|
47
|
-
# pairs associated with the commit. All other attributes are
|
48
|
-
# expected to be String values, other than +committed_at+ and
|
49
|
-
# +authored_at+, which are expected to be DateTime objects.
|
50
|
-
# Technically speaking, you could pass anything you wanted into
|
51
|
-
# the fields, but when using with the CodeFumes API, the attribute
|
52
|
-
# values will be of the type String, DateTime, or Hash.
|
53
|
-
def initialize(options)
|
54
|
-
@identifier = options["identifier"]
|
55
|
-
@author_email = options["author_email"]
|
56
|
-
@author_name = options["author_name"]
|
57
|
-
@committer_email = options["committer_email"]
|
58
|
-
@committer_name = options["committer_name"]
|
59
|
-
@short_message = options["short_message"]
|
60
|
-
@message = options["message"]
|
61
|
-
@committed_at = options["committed_at"]
|
62
|
-
@authored_at = options["authored_at"]
|
63
|
-
@uploaded_at = options["uploaded_at"]
|
64
|
-
@api_uri = options["api_uri"]
|
65
|
-
@parent_identifiers = options["parent_identifiers"]
|
66
|
-
@line_additions = options["line_additions"]
|
67
|
-
@line_deletions = options["line_deletions"]
|
68
|
-
@line_total = options["line_total"]
|
69
|
-
@affected_file_count = options["affected_file_count"]
|
70
|
-
@custom_attributes = options["custom_attributes"] || {}
|
71
|
-
convert_custom_attributes_keys_to_symbols
|
72
|
-
end
|
73
|
-
|
74
|
-
# Returns the name of the author and the email associated
|
75
|
-
# with the commit in a string formatted as:
|
76
|
-
# "Name [email_address]"
|
77
|
-
# (ie: "John Doe [jdoe@example.com]")
|
78
|
-
def author
|
79
|
-
"#{author_name} [#{author_email}]"
|
80
|
-
end
|
81
|
-
|
82
|
-
# Returns the name of the committer and the email associated
|
83
|
-
# with the commit in a string formatted as:
|
84
|
-
# "Name [email_address]"
|
85
|
-
# (ie: "John Doe [jdoe@example.com]")
|
86
|
-
def committer
|
87
|
-
"#{committer_name} [#{committer_email}]"
|
88
|
-
end
|
89
|
-
|
90
|
-
# Returns the Commit object associated with the supplied identifier.
|
91
|
-
# Returns nil if the identifier is not found.
|
92
|
-
def self.find(identifier)
|
93
|
-
response = get("/commits/#{identifier}")
|
94
|
-
case response.code
|
95
|
-
when 200
|
96
|
-
return nil if response["commit"].empty?
|
97
|
-
new(response["commit"])
|
98
|
-
else
|
99
|
-
nil
|
100
|
-
end
|
101
|
-
end
|
102
|
-
|
103
|
-
# Returns a collection of commits associated with the specified
|
104
|
-
# Project public key.
|
105
|
-
def self.all(project_public_key)
|
106
|
-
response = get("/projects/#{project_public_key}/commits")
|
107
|
-
case response.code
|
108
|
-
when 200
|
109
|
-
return [] if response["commits"].empty? || response["commits"]["commit"].nil?
|
110
|
-
response["commits"]["commit"].map do |commit_data|
|
111
|
-
new(commit_data)
|
112
|
-
end
|
113
|
-
else
|
114
|
-
nil
|
115
|
-
end
|
116
|
-
end
|
117
|
-
|
118
|
-
# Returns the most recent commit associated with the specified
|
119
|
-
# Project public key.
|
120
|
-
def self.latest(project_public_key)
|
121
|
-
response = get("/projects/#{project_public_key}/commits/latest")
|
122
|
-
case response.code
|
123
|
-
when 200
|
124
|
-
new(response["commit"])
|
125
|
-
else
|
126
|
-
nil
|
127
|
-
end
|
128
|
-
end
|
129
|
-
|
130
|
-
# Returns the commit identifier of the most recent commit of with
|
131
|
-
# the specified Project public key.
|
132
|
-
def self.latest_identifier(project_public_key)
|
133
|
-
latest_commit = latest(project_public_key)
|
134
|
-
latest_commit.nil? ? nil : latest_commit.identifier
|
135
|
-
end
|
136
|
-
|
137
|
-
private
|
138
|
-
def convert_custom_attributes_keys_to_symbols
|
139
|
-
@custom_attributes = @custom_attributes.inject({}) do |results, key_and_value|
|
140
|
-
results.merge! key_and_value.first.to_sym => key_and_value.last
|
141
|
-
end
|
142
|
-
end
|
143
|
-
end
|
144
|
-
end
|
data/lib/codefumes/payload.rb
DELETED
@@ -1,103 +0,0 @@
|
|
1
|
-
module CodeFumes
|
2
|
-
# Payloads are intended to simplify sending up large amounts of
|
3
|
-
# content at one time. For example, when sending up the entire
|
4
|
-
# history of a repository, making a POST request for each commit would
|
5
|
-
# require a very large number of requests. Using a Payload object
|
6
|
-
# allows larger amounts of content to be saved at one time,
|
7
|
-
# significantly reducing the number of requests made.
|
8
|
-
class Payload < CodeFumes::API
|
9
|
-
PAYLOAD_CHARACTER_LIMIT = 4000 #:nodoc:
|
10
|
-
|
11
|
-
attr_reader :project_public_key, :project_private_key, :created_at
|
12
|
-
|
13
|
-
# Accepts +:public_key+, +:private_key+, and :content keys.
|
14
|
-
# +:content+ should also contain a key named +:commits+, with a list
|
15
|
-
# of commits and associated data. An example would be:
|
16
|
-
#
|
17
|
-
# {:public_key => "abC3", :private_key => "some-private-key",
|
18
|
-
# :content => {:commits => [{:identifier => "commit_identifer",
|
19
|
-
# :files_affected => 3, :custom_attributes => {:any_metric_you_want => "value"}}]}}
|
20
|
-
def initialize(options = {})
|
21
|
-
@project_public_key = options[:public_key]
|
22
|
-
@project_private_key = options[:private_key]
|
23
|
-
@content = options[:content]
|
24
|
-
end
|
25
|
-
|
26
|
-
# Saves instance to CodeFumes.com. After a successful save, the
|
27
|
-
# +created_at+ attribute will be populated with the timestamp the
|
28
|
-
# Payload was created.
|
29
|
-
#
|
30
|
-
# Returns +true+ if the Payload does not contain any content to be
|
31
|
-
# saved or the request was successful.
|
32
|
-
#
|
33
|
-
# Returns +false+ if the request failed.
|
34
|
-
def save
|
35
|
-
return true if empty_payload?
|
36
|
-
response = self.class.post("/projects/#{@project_public_key}/payloads", :query => {:payload => @content}, :basic_auth => {:username => @project_public_key, :password => @project_private_key})
|
37
|
-
|
38
|
-
case response.code
|
39
|
-
when 201
|
40
|
-
@created_at = response['payload']['created_at']
|
41
|
-
true
|
42
|
-
else
|
43
|
-
false
|
44
|
-
end
|
45
|
-
end
|
46
|
-
|
47
|
-
# +save+ requests are made with a standard POST request (not a
|
48
|
-
# multi-part POST), so the request size is limited by the
|
49
|
-
# application server. The current configuration on CodeFumes.com
|
50
|
-
# limits requests to approximately 8,000 bytes (a little over). In
|
51
|
-
# order to simplify dealing with these constraints, without
|
52
|
-
# requiring a multi-part POST request, +prepare+ can be used to
|
53
|
-
# "chunk" up the data into Payloads which do not exceed this limit.
|
54
|
-
#
|
55
|
-
# Returns collection of payload objects which fall into the
|
56
|
-
# constraints of a individual payload (ie: length of raw request,
|
57
|
-
# et cetera).
|
58
|
-
#--
|
59
|
-
# TODO: Clean up how the size of the request is constrained, this
|
60
|
-
# is pretty hackish right now (basically guesses how many
|
61
|
-
# characters would be added when HTTParty wraps the content in XML.
|
62
|
-
def self.prepare(data = {})
|
63
|
-
return [] if data.nil? || data.empty?
|
64
|
-
raw_payload = data.dup
|
65
|
-
|
66
|
-
public_key = raw_payload.delete(:public_key)
|
67
|
-
raise ArgumentError, "No public key provided" if public_key.nil?
|
68
|
-
|
69
|
-
private_key = raw_payload.delete(:private_key)
|
70
|
-
|
71
|
-
if raw_payload[:content].nil? || raw_payload[:content][:commits].nil?
|
72
|
-
raise ArgumentError, "No commits key provided"
|
73
|
-
end
|
74
|
-
|
75
|
-
content = raw_payload[:content][:commits]
|
76
|
-
initial_chunks = {:on_deck => [], :prepared => []}
|
77
|
-
|
78
|
-
# TODO: Clean this up
|
79
|
-
chunked = content.inject(initial_chunks) do |chunks, new_commit|
|
80
|
-
if chunks[:on_deck].to_s.length + new_commit.to_s.length >= PAYLOAD_CHARACTER_LIMIT
|
81
|
-
chunks[:prepared] << chunks[:on_deck]
|
82
|
-
chunks[:on_deck] = [new_commit]
|
83
|
-
elsif new_commit == content.last
|
84
|
-
chunks[:on_deck] << new_commit
|
85
|
-
chunks[:prepared] << chunks[:on_deck]
|
86
|
-
chunks[:on_deck] = []
|
87
|
-
else
|
88
|
-
chunks[:on_deck] << new_commit
|
89
|
-
end
|
90
|
-
chunks
|
91
|
-
end
|
92
|
-
|
93
|
-
chunked[:prepared].map do |raw_content|
|
94
|
-
Payload.new(:public_key => public_key, :private_key => private_key, :content => {:commits => raw_content})
|
95
|
-
end
|
96
|
-
end
|
97
|
-
|
98
|
-
private
|
99
|
-
def empty_payload?
|
100
|
-
@content.empty? || @content[:commits].nil? || @content[:commits].blank?
|
101
|
-
end
|
102
|
-
end
|
103
|
-
end
|
data/lib/codefumes/project.rb
DELETED
@@ -1,129 +0,0 @@
|
|
1
|
-
module CodeFumes
|
2
|
-
# A Project encapsulates the concept of a project on the CodeFumes.com
|
3
|
-
# website. Each project has a public key, private key, and can have a
|
4
|
-
# name defined. Projects are also associated with a collection of
|
5
|
-
# commits from a repository.
|
6
|
-
class Project < CodeFumes::API
|
7
|
-
attr_reader :private_key, :short_uri, :community_uri, :api_uri, :build_status
|
8
|
-
attr_accessor :name,:public_key
|
9
|
-
|
10
|
-
# Accepts Hash containing the following keys:
|
11
|
-
# * :public_key
|
12
|
-
# * :private_key
|
13
|
-
# * :name
|
14
|
-
def initialize(options = {})
|
15
|
-
@public_key = options[:public_key]
|
16
|
-
@private_key = options[:private_key]
|
17
|
-
@name = options[:name]
|
18
|
-
end
|
19
|
-
|
20
|
-
# Deletes project from the website.
|
21
|
-
#
|
22
|
-
# Returns +true+ if the request succeeded.
|
23
|
-
#
|
24
|
-
# Returns +false+ if the request failed.
|
25
|
-
def delete
|
26
|
-
response = destroy!
|
27
|
-
case response.code
|
28
|
-
when 200
|
29
|
-
return true
|
30
|
-
else
|
31
|
-
return false
|
32
|
-
end
|
33
|
-
end
|
34
|
-
|
35
|
-
# Saves project +:public_key+ to the website. If the public key
|
36
|
-
# of the project has not been reserved yet, it will attempt to do
|
37
|
-
# so. If the public key of the project is already in use, it will
|
38
|
-
# attempt to update it with the current values.
|
39
|
-
#
|
40
|
-
# Returns +true+ if the request succeeded.
|
41
|
-
#
|
42
|
-
# Returns +false+ if the request failed.
|
43
|
-
def save
|
44
|
-
response = exists? ? update : create
|
45
|
-
case response.code
|
46
|
-
when 201, 200
|
47
|
-
reinitialize!(response['project'])
|
48
|
-
true
|
49
|
-
else
|
50
|
-
false
|
51
|
-
end
|
52
|
-
end
|
53
|
-
|
54
|
-
# Serializes a Project instance to a format compatible with the
|
55
|
-
# CodeFumes config file.
|
56
|
-
def to_config
|
57
|
-
project_attributes = {:api_uri => @api_uri, :short_uri => @short_uri}
|
58
|
-
project_attributes[:private_key] = @private_key if @private_key
|
59
|
-
{@public_key.to_sym => project_attributes}
|
60
|
-
end
|
61
|
-
|
62
|
-
# Verifies existence of Project on website.
|
63
|
-
#
|
64
|
-
# Returns +true+ if the public key of Project is available.
|
65
|
-
#
|
66
|
-
# Returns +false+ if the public key of the Project is not available.
|
67
|
-
def exists?
|
68
|
-
return false if @public_key.nil? || @public_key.empty?
|
69
|
-
!self.class.find(@public_key).nil?
|
70
|
-
end
|
71
|
-
|
72
|
-
|
73
|
-
# Searches website for project with the supplied public key.
|
74
|
-
#
|
75
|
-
# Returns a Project instance if the project exists and is available,
|
76
|
-
# to the user making the request.
|
77
|
-
#
|
78
|
-
# Returns +nil+ in all other cases.
|
79
|
-
def self.find(public_key)
|
80
|
-
response = get("/projects/#{public_key}")
|
81
|
-
case response.code
|
82
|
-
when 200
|
83
|
-
project = Project.new
|
84
|
-
project.reinitialize!(response['project'])
|
85
|
-
else
|
86
|
-
nil
|
87
|
-
end
|
88
|
-
end
|
89
|
-
|
90
|
-
# TODO: Make this a private method
|
91
|
-
def reinitialize!(options = {}) #:nodoc:
|
92
|
-
@public_key = options['public_key']
|
93
|
-
@private_key = options['private_key']
|
94
|
-
@short_uri = options['short_uri']
|
95
|
-
@community_uri = options['community_uri']
|
96
|
-
@api_uri = options['api_uri']
|
97
|
-
@build_status = options['build_status'].empty? ? nil : options['build_status']
|
98
|
-
@build_status && @build_status.sub!(/_build/, '')
|
99
|
-
self
|
100
|
-
end
|
101
|
-
|
102
|
-
# Attempts to claim "ownership" of the project using the API key
|
103
|
-
# defined in the "credentials" section of your CodeFumes config
|
104
|
-
# file.
|
105
|
-
#
|
106
|
-
# If you need to claim a project for a key that is not defined in
|
107
|
-
# your config file, refer to Claim#create.
|
108
|
-
#
|
109
|
-
# Returns true if the request is successful.
|
110
|
-
#
|
111
|
-
# Returns +false+ in all other cases.
|
112
|
-
def claim
|
113
|
-
Claim.create(self, ConfigFile.api_key)
|
114
|
-
end
|
115
|
-
|
116
|
-
private
|
117
|
-
def update
|
118
|
-
self.class.put("/projects/#{@public_key}", :query => {:project => {:name => @name}}, :basic_auth => {:username => @public_key, :password => @private_key})
|
119
|
-
end
|
120
|
-
|
121
|
-
def create
|
122
|
-
self.class.post('/projects', :query => {:project => {:name => @name, :public_key => @public_key}})
|
123
|
-
end
|
124
|
-
|
125
|
-
def destroy!
|
126
|
-
self.class.delete("/projects/#{@public_key}", :basic_auth => {:username => @public_key, :password => @private_key})
|
127
|
-
end
|
128
|
-
end
|
129
|
-
end
|
@@ -1,17 +0,0 @@
|
|
1
|
-
require 'spec/spec_helper'
|
2
|
-
require 'lib/cf_claim_project/cli'
|
3
|
-
|
4
|
-
describe CfClaimProject::CLI, "execute" do
|
5
|
-
before(:each) do
|
6
|
-
@project = Project.new(:public_key => "pub", :private_key => "prv_key")
|
7
|
-
Project.stub!(:find).and_return(@project)
|
8
|
-
ConfigFile.save_credentials("sample_credentials")
|
9
|
-
ConfigFile.save_project(@project)
|
10
|
-
@stdout_io = StringIO.new
|
11
|
-
end
|
12
|
-
|
13
|
-
it "calls Claim#create" do
|
14
|
-
Claim.should_receive(:create)
|
15
|
-
CfClaimProject::CLI.execute(@stdout_io, [@project.public_key])
|
16
|
-
end
|
17
|
-
end
|
@@ -1,41 +0,0 @@
|
|
1
|
-
require File.expand_path(File.dirname(__FILE__) + '/../spec_helper')
|
2
|
-
require 'cf_release_project/cli'
|
3
|
-
|
4
|
-
def delete_config_file
|
5
|
-
unless ConfigFile.path == File.expand_path('~/.codefumes_config')
|
6
|
-
File.delete(ConfigFile.path) if File.exist?(ConfigFile.path)
|
7
|
-
end
|
8
|
-
end
|
9
|
-
|
10
|
-
def execute_command(args)
|
11
|
-
@stdout_io = StringIO.new
|
12
|
-
CfReleaseProject::CLI.execute(@stdout_io, [args])
|
13
|
-
@stdout_io.rewind
|
14
|
-
@stdout = @stdout_io.read
|
15
|
-
end
|
16
|
-
|
17
|
-
|
18
|
-
describe CfReleaseProject::CLI, "execute" do
|
19
|
-
before(:each) do
|
20
|
-
@api_key = "my_credentials"
|
21
|
-
@project = Project.new(:public_key => "abc", :private_key => "382")
|
22
|
-
ConfigFile.save_project(@project)
|
23
|
-
ConfigFile.save_credentials(@api_key)
|
24
|
-
Project.stub!(:find).and_return(@project)
|
25
|
-
Claim.stub!(:destroy).with(@project, @api_key)
|
26
|
-
end
|
27
|
-
|
28
|
-
after(:all) do
|
29
|
-
delete_config_file
|
30
|
-
end
|
31
|
-
|
32
|
-
it "deletes the claim on the project" do
|
33
|
-
Claim.should_receive(:destroy).with(@project, @api_key)
|
34
|
-
execute_command(@project.public_key)
|
35
|
-
end
|
36
|
-
|
37
|
-
it "should print default output" do
|
38
|
-
execute_command(@project.public_key)
|
39
|
-
@stdout.should =~ /Done/
|
40
|
-
end
|
41
|
-
end
|
@@ -1,28 +0,0 @@
|
|
1
|
-
require 'spec/spec_helper'
|
2
|
-
require 'lib/cf_store_credentials/cli'
|
3
|
-
|
4
|
-
def delete_config_file
|
5
|
-
unless ConfigFile.path == File.expand_path('~/.codefumes_config')
|
6
|
-
File.delete(ConfigFile.path) if File.exist?(ConfigFile.path)
|
7
|
-
end
|
8
|
-
end
|
9
|
-
|
10
|
-
describe CfStoreCredentials::CLI, "execute" do
|
11
|
-
after(:all) do
|
12
|
-
delete_config_file
|
13
|
-
end
|
14
|
-
|
15
|
-
before(:each) do
|
16
|
-
delete_config_file
|
17
|
-
@api_key_value = "API_KEY#{rand(100)}"
|
18
|
-
@stdout_io = StringIO.new
|
19
|
-
CfStoreCredentials::CLI.execute(@stdout_io, [@api_key_value])
|
20
|
-
@stdout_io.rewind
|
21
|
-
@stdout = @stdout_io.read
|
22
|
-
end
|
23
|
-
|
24
|
-
it "stores the value supplied in the config file under the key ':api_key'" do
|
25
|
-
ConfigFile.credentials.keys.should include(:api_key)
|
26
|
-
ConfigFile.credentials[:api_key].should == @api_key_value
|
27
|
-
end
|
28
|
-
end
|