codefumes 0.1.5 → 0.1.7
Sign up to get free protection for your applications and to get access to all the features.
- data/History.txt +8 -0
- data/Manifest.txt +3 -2
- data/Rakefile +1 -1
- data/lib/codefumes/build.rb +131 -0
- data/lib/codefumes.rb +3 -1
- data/spec/codefumes/api_spec.rb +4 -4
- data/spec/codefumes/build_spec.rb +119 -0
- data/spec/codefumes/payload_spec.rb +4 -6
- data/spec/codefumes_service_helpers.rb +32 -0
- data/spec/fixtures/build.xml +10 -0
- metadata +69 -27
- data/website/index.html +0 -98
- data/website/stylesheets/screen.css +0 -67
data/History.txt
CHANGED
data/Manifest.txt
CHANGED
@@ -10,6 +10,7 @@ lib/cf_release_project/cli.rb
|
|
10
10
|
lib/cf_store_credentials/cli.rb
|
11
11
|
lib/codefumes.rb
|
12
12
|
lib/codefumes/api.rb
|
13
|
+
lib/codefumes/build.rb
|
13
14
|
lib/codefumes/claim.rb
|
14
15
|
lib/codefumes/commit.rb
|
15
16
|
lib/codefumes/config_file.rb
|
@@ -19,12 +20,14 @@ spec/cf_claim_project/cli_spec.rb
|
|
19
20
|
spec/cf_release_project/cli_spec.rb
|
20
21
|
spec/cf_store_credentials/cli_spec.rb
|
21
22
|
spec/codefumes/api_spec.rb
|
23
|
+
spec/codefumes/build_spec.rb
|
22
24
|
spec/codefumes/claim_spec.rb
|
23
25
|
spec/codefumes/commit_spec.rb
|
24
26
|
spec/codefumes/config_file_spec.rb
|
25
27
|
spec/codefumes/payload_spec.rb
|
26
28
|
spec/codefumes/project_spec.rb
|
27
29
|
spec/codefumes_service_helpers.rb
|
30
|
+
spec/fixtures/build.xml
|
28
31
|
spec/fixtures/commit.xml
|
29
32
|
spec/fixtures/commit_with_custom_attrs.xml
|
30
33
|
spec/fixtures/multiple_commits.xml
|
@@ -34,5 +37,3 @@ spec/fixtures/project_update.xml
|
|
34
37
|
spec/spec.opts
|
35
38
|
spec/spec_helper.rb
|
36
39
|
tasks/rspec.rake
|
37
|
-
website/index.html
|
38
|
-
website/stylesheets/screen.css
|
data/Rakefile
CHANGED
@@ -24,7 +24,7 @@ $hoe = Hoe.spec('codefumes') do
|
|
24
24
|
['rubigen', ">= 1.5.2"],
|
25
25
|
['fakeweb', ">= 1.2.6"]
|
26
26
|
]
|
27
|
-
self.extra_deps = [['httparty','>= 0.4.3']]
|
27
|
+
self.extra_deps = [['httparty','>= 0.4.3'], ['mojombo-chronic', '>= 0.3.0']]
|
28
28
|
developer('Tom Kersten', 'tom.kersten@cosyntech.com')
|
29
29
|
developer('Joe Banks', 'freemarmoset@gmail.com')
|
30
30
|
end
|
@@ -0,0 +1,131 @@
|
|
1
|
+
module CodeFumes
|
2
|
+
# A Build represents a specific instance of tests running on
|
3
|
+
# a continuous integration server. Builds have a name and are
|
4
|
+
# associated with # a specific Commit of a Project and can track
|
5
|
+
# the current status (running, failed, success) and the
|
6
|
+
# start & end times of the Build process.
|
7
|
+
class Build < CodeFumes::API
|
8
|
+
attr_reader :project_public_key, :project_private_key, :created_at, :api_uri, :identifier, :commit_identifier
|
9
|
+
attr_accessor :started_at, :ended_at, :state, :name
|
10
|
+
|
11
|
+
# Initializes new instance of a Build.
|
12
|
+
#
|
13
|
+
# Accepts an +options+ Hash with support for the following keys:
|
14
|
+
# :public_key (*)
|
15
|
+
# :private_key (*)
|
16
|
+
# :commit_identifier (*)
|
17
|
+
# :identifier
|
18
|
+
# :name (*)
|
19
|
+
# :state
|
20
|
+
# :api_uri
|
21
|
+
# :started_at (*)
|
22
|
+
# :ended_at
|
23
|
+
#
|
24
|
+
# NOTE: (*) denotes a required key/value pair
|
25
|
+
def initialize(options = {})
|
26
|
+
@project_public_key = options[:public_key] || options['public_key']
|
27
|
+
@project_private_key = options[:private_key] || options['private_key']
|
28
|
+
@commit_identifier = options[:commit_identifier] || options['commit_identifier']
|
29
|
+
@identifier = options[:identifier] || options['identifier']
|
30
|
+
@name = options[:name] || options['name']
|
31
|
+
@state = options[:state] || options['state']
|
32
|
+
@api_uri = options[:api_uri] || options['api_uri']
|
33
|
+
@started_at = options[:started_at] || options['started_at']
|
34
|
+
@ended_at = options[:ended_at] || options['ended_at']
|
35
|
+
end
|
36
|
+
|
37
|
+
# Saves the Build instance to CodeFumes.com
|
38
|
+
#
|
39
|
+
# Returns +true+ if successful
|
40
|
+
#
|
41
|
+
# Returns +false+ if request fails
|
42
|
+
def save
|
43
|
+
response = exists? ? update : create
|
44
|
+
|
45
|
+
case response.code
|
46
|
+
when 201,200
|
47
|
+
@identifier = response['build']['identifier']
|
48
|
+
@name = response['build']['name']
|
49
|
+
@created_at = response['build']['created_at']
|
50
|
+
@started_at = response['build']['started_at']
|
51
|
+
@ended_at = response['build']['ended_at']
|
52
|
+
@state = response['build']['state']
|
53
|
+
@api_uri = response['build']['build_api_uri']
|
54
|
+
@commit_identifier = response['build']['commit_identifier']
|
55
|
+
@project_public_key = response['build']['public_key']
|
56
|
+
@project_private_key = response['build']['private_key']
|
57
|
+
true
|
58
|
+
else
|
59
|
+
false
|
60
|
+
end
|
61
|
+
end
|
62
|
+
|
63
|
+
# Searches website for Build with the supplied identifier.
|
64
|
+
#
|
65
|
+
# Returns a Build instance if the Build exists and is available,
|
66
|
+
# to the user making the request.
|
67
|
+
#
|
68
|
+
# Returns +nil+ in all other cases.
|
69
|
+
def self.find(options)
|
70
|
+
uri = "/projects/#{options[:public_key]}/commits/#{options[:commit_identifier]}/builds/#{options[:identifier]}"
|
71
|
+
|
72
|
+
response = get(uri)
|
73
|
+
|
74
|
+
case response.code
|
75
|
+
when 200
|
76
|
+
build_params = response["build"] || {}
|
77
|
+
Build.new(build_params.merge(:private_key => options[:private_key]))
|
78
|
+
else
|
79
|
+
nil
|
80
|
+
end
|
81
|
+
end
|
82
|
+
|
83
|
+
|
84
|
+
# Returns true if the request was successful
|
85
|
+
#
|
86
|
+
# Returns +false+ in all other cases.
|
87
|
+
def destroy
|
88
|
+
uri = "/projects/#{@project_public_key}/commits/#{@commit_identifier}/builds/#{@identifier}"
|
89
|
+
auth_args = {:username => @project_public_key, :password => @project_private_key}
|
90
|
+
|
91
|
+
response = self.class.delete(uri, :basic_auth => auth_args)
|
92
|
+
|
93
|
+
case response.code
|
94
|
+
when 200 : true
|
95
|
+
else false
|
96
|
+
end
|
97
|
+
end
|
98
|
+
|
99
|
+
private
|
100
|
+
# Verifies existence of Build on website.
|
101
|
+
#
|
102
|
+
# Returns +true+ if a build with the specified identifier or name is associated with
|
103
|
+
# the specified project/commit
|
104
|
+
#
|
105
|
+
# Returns +false+ if the public key of the Project is not available.
|
106
|
+
def exists?
|
107
|
+
!self.class.find(:public_key => @project_public_key,
|
108
|
+
:commit_identifier => @commit_identifier,
|
109
|
+
:identifier => @identifier || @name,
|
110
|
+
:private_key => @project_private_key).nil?
|
111
|
+
end
|
112
|
+
|
113
|
+
# Saves a new build (makes POST request)
|
114
|
+
def create
|
115
|
+
content = standard_content_hash
|
116
|
+
self.class.post("/projects/#{@project_public_key}/commits/#{@commit_identifier}/builds", :query => {:build => content}, :basic_auth => {:username => @project_public_key, :password => @project_private_key})
|
117
|
+
end
|
118
|
+
|
119
|
+
# Updates an existing build (makes PUT request)
|
120
|
+
def update
|
121
|
+
content = standard_content_hash
|
122
|
+
# HACK!
|
123
|
+
searchable_identifier = @identifier || @name
|
124
|
+
self.class.put("/projects/#{@project_public_key}/commits/#{@commit_identifier}/builds/#{searchable_identifier}", :query => {:build => content}, :basic_auth => {:username => @project_public_key, :password => @project_private_key})
|
125
|
+
end
|
126
|
+
|
127
|
+
def standard_content_hash
|
128
|
+
{:name => @name,:started_at => @started_at, :ended_at => @ended_at, :state => @state}
|
129
|
+
end
|
130
|
+
end
|
131
|
+
end
|
data/lib/codefumes.rb
CHANGED
@@ -1,6 +1,8 @@
|
|
1
1
|
require 'httparty'
|
2
|
+
require 'chronic'
|
2
3
|
|
3
4
|
require 'codefumes/api'
|
5
|
+
require 'codefumes/build'
|
4
6
|
require 'codefumes/claim'
|
5
7
|
require 'codefumes/commit'
|
6
8
|
require 'codefumes/config_file'
|
@@ -8,5 +10,5 @@ require 'codefumes/payload'
|
|
8
10
|
require 'codefumes/project'
|
9
11
|
|
10
12
|
module CodeFumes
|
11
|
-
VERSION = '0.1.
|
13
|
+
VERSION = '0.1.7' unless defined?(CodeFumes::VERSION)
|
12
14
|
end
|
data/spec/codefumes/api_spec.rb
CHANGED
@@ -14,7 +14,7 @@ describe "API" do
|
|
14
14
|
|
15
15
|
context "switching modes" do
|
16
16
|
before(:each) do
|
17
|
-
|
17
|
+
APIClass.mode(:test)
|
18
18
|
end
|
19
19
|
|
20
20
|
it "changes the base uri to the test site when switched to test mode" do
|
@@ -22,17 +22,17 @@ describe "API" do
|
|
22
22
|
end
|
23
23
|
|
24
24
|
it "changes the base uri to the production site when switched to production mode" do
|
25
|
-
|
25
|
+
APIClass.mode(:production)
|
26
26
|
APIClass.base_uri.should == 'http://codefumes.com/api/v1/xml'
|
27
27
|
end
|
28
28
|
|
29
29
|
it "ignores unrecognized modes" do
|
30
|
-
|
30
|
+
APIClass.mode(:incomprehensible)
|
31
31
|
APIClass.base_uri.should == 'http://test.codefumes.com/api/v1/xml'
|
32
32
|
end
|
33
33
|
|
34
34
|
it "changes the base uri to 'localhost:3000' when switched to local mode (for developer testing)" do
|
35
|
-
|
35
|
+
APIClass.mode(:local)
|
36
36
|
APIClass.base_uri.should == 'http://codefumes.com.local/api/v1/xml'
|
37
37
|
end
|
38
38
|
end
|
@@ -0,0 +1,119 @@
|
|
1
|
+
require File.dirname(__FILE__) + '/../spec_helper.rb'
|
2
|
+
|
3
|
+
describe "Build" do
|
4
|
+
include CodeFumesServiceHelpers::Build
|
5
|
+
|
6
|
+
after(:all) do
|
7
|
+
FakeWeb.allow_net_connect = false
|
8
|
+
FakeWeb.clean_registry
|
9
|
+
end
|
10
|
+
|
11
|
+
before(:each) do
|
12
|
+
setup_fixture_base
|
13
|
+
setup_build_fixtures
|
14
|
+
@build_params = { :public_key => @pub_key, :private_key => @priv_key,
|
15
|
+
:name => @build_name, :commit_identifier => @commit_identifier,
|
16
|
+
:started_at => @started_at, :state => @state}
|
17
|
+
|
18
|
+
@build = Build.new(@build_params)
|
19
|
+
end
|
20
|
+
|
21
|
+
describe "save" do
|
22
|
+
it "sets basic auth with the public and private key" do
|
23
|
+
@build.stub!(:exists?).and_return(false)
|
24
|
+
register_create_uri(["401", "Unauthorized"], "")
|
25
|
+
|
26
|
+
basic_auth_params = {:username => @pub_key, :password => @priv_key}
|
27
|
+
|
28
|
+
build_query = {:build => {:name => @build_name, :ended_at => nil, :started_at => @started_at, :state => @state}}
|
29
|
+
Build.should_receive(:post).with("/projects/#{@project.public_key}/commits/#{@commit_identifier}/builds", :query => build_query, :basic_auth => basic_auth_params).and_return(mock("response", :code => 401))
|
30
|
+
@build.save
|
31
|
+
end
|
32
|
+
|
33
|
+
context "when it's a new build for the specified commit" do
|
34
|
+
before(:each) do
|
35
|
+
@build.stub!(:exists?).and_return(false)
|
36
|
+
register_create_uri(["201", "Created"])
|
37
|
+
end
|
38
|
+
|
39
|
+
it "sets a value for 'created_at'" do
|
40
|
+
@build.created_at.should == nil
|
41
|
+
@build.save.should == true
|
42
|
+
@build.created_at.should_not == nil
|
43
|
+
end
|
44
|
+
|
45
|
+
it "sets a value for 'identifier'" do
|
46
|
+
@build.identifier.should == nil
|
47
|
+
@build.save.should == true
|
48
|
+
@build.identifier.should_not == nil
|
49
|
+
end
|
50
|
+
end
|
51
|
+
|
52
|
+
context "with Unauthorized response" do
|
53
|
+
before(:each) do
|
54
|
+
@build.stub!(:exists?).and_return(false)
|
55
|
+
register_create_uri(["401", "Unauthorized"], "")
|
56
|
+
end
|
57
|
+
|
58
|
+
it "does not set 'created_at'" do
|
59
|
+
@build.created_at.should == nil
|
60
|
+
@build.save.should == false
|
61
|
+
@build.created_at.should == nil
|
62
|
+
end
|
63
|
+
end
|
64
|
+
|
65
|
+
context "when the build already exists on the server" do
|
66
|
+
before(:each) do
|
67
|
+
register_update_uri(["200", "OK"])
|
68
|
+
@build = Build.new(@build_params.merge(:identifier => @build_identifier))
|
69
|
+
Build.stub!(:find).and_return(@build)
|
70
|
+
end
|
71
|
+
|
72
|
+
it "updates the existing build" do
|
73
|
+
mock_response = mock("Response", :code => 200).as_null_object
|
74
|
+
@build.should_receive(:update).and_return(mock_response)
|
75
|
+
@build.save
|
76
|
+
end
|
77
|
+
end
|
78
|
+
end
|
79
|
+
|
80
|
+
describe "find" do
|
81
|
+
before(:each) do
|
82
|
+
setup_fixture_base
|
83
|
+
setup_build_fixtures
|
84
|
+
@find_params = {:public_key => @pub_key,
|
85
|
+
:commit_identifier => @commit_identifier,
|
86
|
+
:identifier => @build_identifier}
|
87
|
+
end
|
88
|
+
|
89
|
+
it "returns an instance of Build when found" do
|
90
|
+
register_show_uri(["200", "OK"])
|
91
|
+
returned_object = Build.find(@find_params)
|
92
|
+
returned_object.should be_instance_of(Build)
|
93
|
+
returned_object.state.should_not be_nil
|
94
|
+
end
|
95
|
+
|
96
|
+
it "returns nil when not found" do
|
97
|
+
register_show_uri(["404", "Not found"])
|
98
|
+
Build.find(@find_params).should be_nil
|
99
|
+
end
|
100
|
+
end
|
101
|
+
|
102
|
+
describe "destroy" do
|
103
|
+
before(:each) do
|
104
|
+
setup_fixture_base
|
105
|
+
setup_build_fixtures
|
106
|
+
@build = Build.new(@build_params.merge(:identifier => @build_identifier))
|
107
|
+
end
|
108
|
+
|
109
|
+
it "returns true when the request returns a status of '200 Ok'" do
|
110
|
+
register_delete_uri(["200", "OK"])
|
111
|
+
@build.destroy.should be_true
|
112
|
+
end
|
113
|
+
|
114
|
+
it "returns false if the status is not '200 Ok'" do
|
115
|
+
register_delete_uri(["500", "Internal Server Error"], "")
|
116
|
+
@build.destroy.should be_false
|
117
|
+
end
|
118
|
+
end
|
119
|
+
end
|
@@ -42,12 +42,10 @@ describe "Payload" do
|
|
42
42
|
register_create_uri(["401", "Unauthorized"], "")
|
43
43
|
end
|
44
44
|
|
45
|
-
|
46
|
-
|
47
|
-
|
48
|
-
|
49
|
-
@payload.send(method_name).should == nil
|
50
|
-
end
|
45
|
+
it "does not set 'created_at'" do
|
46
|
+
@payload.created_at.should == nil
|
47
|
+
@payload.save.should == false
|
48
|
+
@payload.created_at.should == nil
|
51
49
|
end
|
52
50
|
end
|
53
51
|
|
@@ -14,6 +14,8 @@ module CodeFumesServiceHelpers
|
|
14
14
|
@updated_name = @project_name + "_updated"
|
15
15
|
@commit_data = "commit_data"
|
16
16
|
@api_key = "USERS_API_KEY"
|
17
|
+
@build_name = "IE7"
|
18
|
+
@commit_identifier = "COMMIT_IDENTIFIER"
|
17
19
|
end
|
18
20
|
|
19
21
|
def fixtures
|
@@ -98,4 +100,34 @@ module CodeFumesServiceHelpers
|
|
98
100
|
FakeWeb.register_uri(:put, request_uri, :status => status_code, :body => body_content)
|
99
101
|
end
|
100
102
|
end
|
103
|
+
|
104
|
+
module Build
|
105
|
+
def setup_build_fixtures
|
106
|
+
@started_at = "2009-09-26 21:18:11 UTC"
|
107
|
+
@esc_started_at = "2009-09-26%2021%3A18%3A11%20UTC"
|
108
|
+
@state = "running"
|
109
|
+
@build_identifier = "BUILD_IDENTIFIER"
|
110
|
+
end
|
111
|
+
|
112
|
+
def register_create_uri(status_code = ["201", "Created"], body_content = fixtures[:build])
|
113
|
+
FakeWeb.register_uri(:post, "#{@authd_project_api_uri}/commits/#{@commit_identifier}/builds?build[state]=#{@state}&build[started_at]=#{@esc_started_at}&build[ended_at]=&build[name]=#{@build_name}",
|
114
|
+
:status => status_code, :body => body_content)
|
115
|
+
end
|
116
|
+
|
117
|
+
def register_update_uri(status_code = ["200", "Ok"], body_content = fixtures[:build])
|
118
|
+
FakeWeb.register_uri(:put, "#{@authd_project_api_uri}/commits/#{@commit_identifier}/builds/#{@build_identifier}?build[state]=#{@state}&build[started_at]=#{@esc_started_at}&build[ended_at]=&build[name]=#{@build_name}",
|
119
|
+
:status => status_code, :body => body_content)
|
120
|
+
end
|
121
|
+
|
122
|
+
def register_show_uri(status_code = ["200", "Ok"], body_content = fixtures[:build])
|
123
|
+
FakeWeb.register_uri(:get, "#{@anon_project_api_uri}/commits/#{@commit_identifier}/builds/#{@build_identifier}",
|
124
|
+
:status => status_code, :body => body_content)
|
125
|
+
end
|
126
|
+
|
127
|
+
def register_delete_uri(status_code = ["200", "Ok"], body_content = fixtures[:project])
|
128
|
+
FakeWeb.register_uri(:delete, "#{@authd_project_api_uri}/commits/#{@commit_identifier}/builds/#{@build_identifier}",
|
129
|
+
:status => status_code,
|
130
|
+
:body => body_content)
|
131
|
+
end
|
132
|
+
end
|
101
133
|
end
|
@@ -0,0 +1,10 @@
|
|
1
|
+
<?xml version="1.0" encoding="UTF-8"?>
|
2
|
+
<build>
|
3
|
+
<identifier>BUILD_ID</identifier>
|
4
|
+
<name>IE7</name>
|
5
|
+
<state>running</state>
|
6
|
+
<ended_at></ended_at>
|
7
|
+
<started_at>2009-09-26 21:18:11 UTC</started_at>
|
8
|
+
<created_at>2009-09-26 21:19:11 UTC</created_at>
|
9
|
+
<api_uri>http://codefumes.com/api/v1/xml/projects/public_key_value/commits/COMMIT_IDENTIFIER/builds/BUILD_ID.xml</api_uri>
|
10
|
+
</build>
|
metadata
CHANGED
@@ -1,7 +1,12 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: codefumes
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
|
4
|
+
prerelease: false
|
5
|
+
segments:
|
6
|
+
- 0
|
7
|
+
- 1
|
8
|
+
- 7
|
9
|
+
version: 0.1.7
|
5
10
|
platform: ruby
|
6
11
|
authors:
|
7
12
|
- Tom Kersten
|
@@ -10,59 +15,93 @@ autorequire:
|
|
10
15
|
bindir: bin
|
11
16
|
cert_chain: []
|
12
17
|
|
13
|
-
date: 2010-
|
18
|
+
date: 2010-03-27 00:00:00 -05:00
|
14
19
|
default_executable:
|
15
20
|
dependencies:
|
16
21
|
- !ruby/object:Gem::Dependency
|
17
22
|
name: httparty
|
18
|
-
|
19
|
-
|
20
|
-
version_requirements: !ruby/object:Gem::Requirement
|
23
|
+
prerelease: false
|
24
|
+
requirement: &id001 !ruby/object:Gem::Requirement
|
21
25
|
requirements:
|
22
26
|
- - ">="
|
23
27
|
- !ruby/object:Gem::Version
|
28
|
+
segments:
|
29
|
+
- 0
|
30
|
+
- 4
|
31
|
+
- 3
|
24
32
|
version: 0.4.3
|
25
|
-
|
33
|
+
type: :runtime
|
34
|
+
version_requirements: *id001
|
35
|
+
- !ruby/object:Gem::Dependency
|
36
|
+
name: mojombo-chronic
|
37
|
+
prerelease: false
|
38
|
+
requirement: &id002 !ruby/object:Gem::Requirement
|
39
|
+
requirements:
|
40
|
+
- - ">="
|
41
|
+
- !ruby/object:Gem::Version
|
42
|
+
segments:
|
43
|
+
- 0
|
44
|
+
- 3
|
45
|
+
- 0
|
46
|
+
version: 0.3.0
|
47
|
+
type: :runtime
|
48
|
+
version_requirements: *id002
|
26
49
|
- !ruby/object:Gem::Dependency
|
27
50
|
name: jscruggs-metric_fu
|
28
|
-
|
29
|
-
|
30
|
-
version_requirements: !ruby/object:Gem::Requirement
|
51
|
+
prerelease: false
|
52
|
+
requirement: &id003 !ruby/object:Gem::Requirement
|
31
53
|
requirements:
|
32
54
|
- - ">="
|
33
55
|
- !ruby/object:Gem::Version
|
56
|
+
segments:
|
57
|
+
- 1
|
58
|
+
- 1
|
59
|
+
- 5
|
34
60
|
version: 1.1.5
|
35
|
-
|
61
|
+
type: :development
|
62
|
+
version_requirements: *id003
|
36
63
|
- !ruby/object:Gem::Dependency
|
37
64
|
name: rubigen
|
38
|
-
|
39
|
-
|
40
|
-
version_requirements: !ruby/object:Gem::Requirement
|
65
|
+
prerelease: false
|
66
|
+
requirement: &id004 !ruby/object:Gem::Requirement
|
41
67
|
requirements:
|
42
68
|
- - ">="
|
43
69
|
- !ruby/object:Gem::Version
|
70
|
+
segments:
|
71
|
+
- 1
|
72
|
+
- 5
|
73
|
+
- 2
|
44
74
|
version: 1.5.2
|
45
|
-
|
75
|
+
type: :development
|
76
|
+
version_requirements: *id004
|
46
77
|
- !ruby/object:Gem::Dependency
|
47
78
|
name: fakeweb
|
48
|
-
|
49
|
-
|
50
|
-
version_requirements: !ruby/object:Gem::Requirement
|
79
|
+
prerelease: false
|
80
|
+
requirement: &id005 !ruby/object:Gem::Requirement
|
51
81
|
requirements:
|
52
82
|
- - ">="
|
53
83
|
- !ruby/object:Gem::Version
|
84
|
+
segments:
|
85
|
+
- 1
|
86
|
+
- 2
|
87
|
+
- 6
|
54
88
|
version: 1.2.6
|
55
|
-
|
89
|
+
type: :development
|
90
|
+
version_requirements: *id005
|
56
91
|
- !ruby/object:Gem::Dependency
|
57
92
|
name: hoe
|
58
|
-
|
59
|
-
|
60
|
-
version_requirements: !ruby/object:Gem::Requirement
|
93
|
+
prerelease: false
|
94
|
+
requirement: &id006 !ruby/object:Gem::Requirement
|
61
95
|
requirements:
|
62
96
|
- - ">="
|
63
97
|
- !ruby/object:Gem::Version
|
98
|
+
segments:
|
99
|
+
- 2
|
100
|
+
- 5
|
101
|
+
- 0
|
64
102
|
version: 2.5.0
|
65
|
-
|
103
|
+
type: :development
|
104
|
+
version_requirements: *id006
|
66
105
|
description: |-
|
67
106
|
CodeFumes.com[http://codefumes.com] is a service intended to help people
|
68
107
|
involved with software projects who are interested in tracking, sharing,
|
@@ -106,6 +145,7 @@ files:
|
|
106
145
|
- lib/cf_store_credentials/cli.rb
|
107
146
|
- lib/codefumes.rb
|
108
147
|
- lib/codefumes/api.rb
|
148
|
+
- lib/codefumes/build.rb
|
109
149
|
- lib/codefumes/claim.rb
|
110
150
|
- lib/codefumes/commit.rb
|
111
151
|
- lib/codefumes/config_file.rb
|
@@ -115,12 +155,14 @@ files:
|
|
115
155
|
- spec/cf_release_project/cli_spec.rb
|
116
156
|
- spec/cf_store_credentials/cli_spec.rb
|
117
157
|
- spec/codefumes/api_spec.rb
|
158
|
+
- spec/codefumes/build_spec.rb
|
118
159
|
- spec/codefumes/claim_spec.rb
|
119
160
|
- spec/codefumes/commit_spec.rb
|
120
161
|
- spec/codefumes/config_file_spec.rb
|
121
162
|
- spec/codefumes/payload_spec.rb
|
122
163
|
- spec/codefumes/project_spec.rb
|
123
164
|
- spec/codefumes_service_helpers.rb
|
165
|
+
- spec/fixtures/build.xml
|
124
166
|
- spec/fixtures/commit.xml
|
125
167
|
- spec/fixtures/commit_with_custom_attrs.xml
|
126
168
|
- spec/fixtures/multiple_commits.xml
|
@@ -130,8 +172,6 @@ files:
|
|
130
172
|
- spec/spec.opts
|
131
173
|
- spec/spec_helper.rb
|
132
174
|
- tasks/rspec.rake
|
133
|
-
- website/index.html
|
134
|
-
- website/stylesheets/screen.css
|
135
175
|
has_rdoc: true
|
136
176
|
homepage: http://codefumes.rubyforge.org/codefumes
|
137
177
|
licenses: []
|
@@ -146,18 +186,20 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
146
186
|
requirements:
|
147
187
|
- - ">="
|
148
188
|
- !ruby/object:Gem::Version
|
189
|
+
segments:
|
190
|
+
- 0
|
149
191
|
version: "0"
|
150
|
-
version:
|
151
192
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
152
193
|
requirements:
|
153
194
|
- - ">="
|
154
195
|
- !ruby/object:Gem::Version
|
196
|
+
segments:
|
197
|
+
- 0
|
155
198
|
version: "0"
|
156
|
-
version:
|
157
199
|
requirements: []
|
158
200
|
|
159
201
|
rubyforge_project: codefumes
|
160
|
-
rubygems_version: 1.3.
|
202
|
+
rubygems_version: 1.3.6
|
161
203
|
signing_key:
|
162
204
|
specification_version: 3
|
163
205
|
summary: A client-side implementation of the CodeFumes.com API.
|
data/website/index.html
DELETED
@@ -1,98 +0,0 @@
|
|
1
|
-
<html>
|
2
|
-
<head>
|
3
|
-
<meta http-equiv="Content-type" content="text/html; charset=utf-8">
|
4
|
-
<title>codefumes</title>
|
5
|
-
<link href="stylesheets/screen.css" rel="stylesheet" type="text/css">
|
6
|
-
</head>
|
7
|
-
<body>
|
8
|
-
<div id="page">
|
9
|
-
<h1>Official CodeFumes.com Ruby Gems</h1>
|
10
|
-
<p>
|
11
|
-
<a href="http://codefumes.com">CodeFumes.com</a> is a site intended to simplify the process of gathering metrics and associating them with a particular revision of code. The gems described below integrate with this website and are intended to simplify the process of "fleshing out" the pictures you want to draw around your codebase.
|
12
|
-
</p>
|
13
|
-
<h2>Gems</h2>
|
14
|
-
<ul>
|
15
|
-
<li>
|
16
|
-
<ul>
|
17
|
-
<li class="name">codefumes</li>
|
18
|
-
<li>
|
19
|
-
<a href="http://github.com/cosyn/codefumes/wikis">[wiki]</a>
|
20
|
-
</li>
|
21
|
-
<li>
|
22
|
-
<a href="http://codefumes.rubyforge.org/codefumes">[rdoc]</a>
|
23
|
-
</li>
|
24
|
-
<li>
|
25
|
-
<a href="http://github.com/cosyn/codefumes">[repo]</a>
|
26
|
-
</li>
|
27
|
-
<li>
|
28
|
-
<a href="http://github.com/cosyn/codefumes/issues">[bugs/requests]</a>
|
29
|
-
</li>
|
30
|
-
<li>
|
31
|
-
<a href="http://groups.google.com/group/codefumes">[mailing list]</a>
|
32
|
-
</li>
|
33
|
-
</ul>
|
34
|
-
<p class="overview">
|
35
|
-
The 'codefumes' gem is an implementation of the
|
36
|
-
<a href="http://codefumes.com">CodeFumes.com</a> API.
|
37
|
-
The intention of the gem is to simplify integration with CodeFumes.com
|
38
|
-
for developers of other libraries & and applications.
|
39
|
-
</p>
|
40
|
-
</li>
|
41
|
-
<li>
|
42
|
-
<ul>
|
43
|
-
<li class="name">codefumes_harvester</li>
|
44
|
-
<li>
|
45
|
-
<a href="http://github.com/cosyn/codefumes_harvester/wikis">[wiki]</a>
|
46
|
-
</li>
|
47
|
-
<li>
|
48
|
-
<a href="http://codefumes.rubyforge.org/codefumes_harvester">[rdoc]</a>
|
49
|
-
</li>
|
50
|
-
<li>
|
51
|
-
<a href="http://github.com/cosyn/codefumes_harvester">[repo]</a>
|
52
|
-
</li>
|
53
|
-
<li>
|
54
|
-
<a href="http://github.com/cosyn/codefumes_harvester/issues">[bugs/requests]</a>
|
55
|
-
</li>
|
56
|
-
<li>
|
57
|
-
<a href="http://groups.google.com/group/codefumes">[mailing list]</a>
|
58
|
-
</li>
|
59
|
-
</ul>
|
60
|
-
<p class="overview">
|
61
|
-
The codefumes_harvester gem provides a set of high-level tools for gathering
|
62
|
-
history and common metrics from a local repository and sending them to
|
63
|
-
<a href="http://codefumes.com">CodeFumes.com</a>.
|
64
|
-
</p>
|
65
|
-
</li>
|
66
|
-
</ul>
|
67
|
-
|
68
|
-
<h2>Contributing</h2>
|
69
|
-
<p>
|
70
|
-
Improvements in the code and/or documentation are always
|
71
|
-
welcome. The gems each have a wiki on the Github page
|
72
|
-
(see gem links above). You can contribute to the code by
|
73
|
-
forking a repository and sending a pull request to Tom
|
74
|
-
Kersten (github handle: tomkersten).
|
75
|
-
</p>
|
76
|
-
|
77
|
-
<h2>Community Discussion/Mailing Lists</h2>
|
78
|
-
<p>
|
79
|
-
General discussion around CodeFumes.com and associated
|
80
|
-
tools/content is welcome on the
|
81
|
-
<a href="http://groups.google.com/group/codefumes">codefumes Google Group</a>
|
82
|
-
</p>
|
83
|
-
|
84
|
-
<h2>Bug reports, Feature Requests</h2>
|
85
|
-
<p>
|
86
|
-
Feel free to use the "Issues" area of the Github repository for
|
87
|
-
this project. The link for each gem is provided above.
|
88
|
-
</p>
|
89
|
-
<div id="footer">
|
90
|
-
<ul>
|
91
|
-
<li>License</li>
|
92
|
-
<li>(The MIT License)</li>
|
93
|
-
<li>Copyright (C) Tom Kersten, Cosyn Technologies, Inc.</li>
|
94
|
-
</ul>
|
95
|
-
</div>
|
96
|
-
</div>
|
97
|
-
</body>
|
98
|
-
</html>
|
@@ -1,67 +0,0 @@
|
|
1
|
-
body {
|
2
|
-
font-family: "Georgia", sans-serif;
|
3
|
-
font-size: 16px;
|
4
|
-
line-height: 1.6em;
|
5
|
-
padding: 1.6em 0 .9em .9em;
|
6
|
-
color: #333;
|
7
|
-
}
|
8
|
-
|
9
|
-
#page {
|
10
|
-
width: 942px;
|
11
|
-
}
|
12
|
-
|
13
|
-
h1, h2, h3, h4, h5, h6 {
|
14
|
-
color: #444;
|
15
|
-
}
|
16
|
-
|
17
|
-
h1 {
|
18
|
-
font-family: sans-serif;
|
19
|
-
font-weight: normal;
|
20
|
-
font-size: 3em;
|
21
|
-
line-height: 0.8em;
|
22
|
-
letter-spacing: -0.1ex;
|
23
|
-
margin: 5px;
|
24
|
-
}
|
25
|
-
|
26
|
-
ul {
|
27
|
-
padding-left: 2em;
|
28
|
-
}
|
29
|
-
|
30
|
-
ul li {
|
31
|
-
padding-bottom: 4em;
|
32
|
-
margin: 0;
|
33
|
-
list-style-type: none;
|
34
|
-
}
|
35
|
-
|
36
|
-
|
37
|
-
ul li ul {
|
38
|
-
padding: 0;
|
39
|
-
text-align: right;
|
40
|
-
}
|
41
|
-
|
42
|
-
ul li ul li {
|
43
|
-
display: inline-block;
|
44
|
-
list-style-type: none;
|
45
|
-
margin: 0;
|
46
|
-
padding: 0;
|
47
|
-
}
|
48
|
-
|
49
|
-
ul li.name {
|
50
|
-
font-weight: bold;
|
51
|
-
width: 200px;
|
52
|
-
text-align: left;
|
53
|
-
float: left;
|
54
|
-
}
|
55
|
-
|
56
|
-
div#footer ul {
|
57
|
-
text-align: right;
|
58
|
-
}
|
59
|
-
|
60
|
-
div#footer ul li {
|
61
|
-
font-size: .8em;
|
62
|
-
color: #AAA;
|
63
|
-
display: inline-block;
|
64
|
-
list-style-type: none;
|
65
|
-
margin: 0;
|
66
|
-
padding: 0;
|
67
|
-
}
|