go_figure 0.0.1 → 0.0.2
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/go_figure.gemspec +1 -2
- data/lib/go_figure/go_config_endpoint.rb +14 -4
- data/lib/go_figure/http_fetcher.rb +23 -5
- data/lib/go_figure/test.rb +1 -0
- data/lib/go_figure/test/stub_http_fetcher.rb +91 -0
- data/lib/go_figure/version.rb +1 -1
- data/test/go_figure/go_config_endpoint_test.rb +2 -2
- data/test/test_helper.rb +1 -1
- metadata +6 -6
- data/test/stub_http_fetcher.rb +0 -88
data/go_figure.gemspec
CHANGED
@@ -7,7 +7,7 @@ Gem::Specification.new do |s|
|
|
7
7
|
s.version = GoFigure::VERSION
|
8
8
|
s.authors = ["Ketan Padegaonkar"]
|
9
9
|
s.email = ["KetanPadegaonkar@gmail.com"]
|
10
|
-
s.homepage = ""
|
10
|
+
s.homepage = "https://github.com/ThoughtWorksInc/go-figure"
|
11
11
|
s.summary = %q{A Ruby DSL to write a configuration file for the a go server.}
|
12
12
|
s.description = %q{This provides a ruby DSL to create a configuration file for the go server (thoughtworks-studios.com/go)}
|
13
13
|
|
@@ -17,7 +17,6 @@ Gem::Specification.new do |s|
|
|
17
17
|
s.test_files = `git ls-files -- {test,spec,features}/*`.split("\n")
|
18
18
|
s.executables = `git ls-files -- bin/*`.split("\n").map{ |f| File.basename(f) }
|
19
19
|
s.require_paths = ["lib"]
|
20
|
-
|
21
20
|
|
22
21
|
# specify any dependencies here; for example:
|
23
22
|
# s.add_development_dependency "rspec"
|
@@ -8,9 +8,19 @@ module GoFigure
|
|
8
8
|
}
|
9
9
|
|
10
10
|
attr_accessor *DEFAULT_OPTIONS.keys
|
11
|
-
|
11
|
+
@@http_fetcher = nil
|
12
12
|
|
13
|
-
|
13
|
+
class << self
|
14
|
+
def http_fetcher=(fetcher)
|
15
|
+
@@http_fetcher = fetcher
|
16
|
+
end
|
17
|
+
|
18
|
+
def http_fetcher
|
19
|
+
@@http_fetcher ||= GoFigure::HttpFetcher.new
|
20
|
+
end
|
21
|
+
end
|
22
|
+
|
23
|
+
def initialize(options={})
|
14
24
|
DEFAULT_OPTIONS.each do |k, v|
|
15
25
|
self.send("#{k}=", options[k] || v)
|
16
26
|
end
|
@@ -18,7 +28,7 @@ module GoFigure
|
|
18
28
|
|
19
29
|
def get_config
|
20
30
|
response = http_fetcher.get(config_xml_url)
|
21
|
-
if response.
|
31
|
+
if response.code == '200'
|
22
32
|
return GoConfig.new(:md5 => response['X-CRUISE-CONFIG-MD5'], :xml => response.body)
|
23
33
|
else
|
24
34
|
raise "Could not fetch the go config file"
|
@@ -30,7 +40,7 @@ module GoFigure
|
|
30
40
|
end
|
31
41
|
|
32
42
|
def http_fetcher
|
33
|
-
|
43
|
+
self.class.http_fetcher
|
34
44
|
end
|
35
45
|
|
36
46
|
private
|
@@ -1,10 +1,10 @@
|
|
1
1
|
require 'net/http'
|
2
2
|
require 'net/https'
|
3
3
|
|
4
|
-
module
|
4
|
+
module GoFigure
|
5
5
|
class HttpFetcher
|
6
6
|
|
7
|
-
def
|
7
|
+
def get(url, params = {})
|
8
8
|
url = URI.parse(url)
|
9
9
|
|
10
10
|
http = Net::HTTP.new(url.host, url.port)
|
@@ -12,16 +12,34 @@ module UserImport
|
|
12
12
|
|
13
13
|
res = http.start do |http|
|
14
14
|
req = Net::HTTP::Get.new(url.path)
|
15
|
-
req.basic_auth user, pass
|
16
15
|
http.request(req)
|
17
16
|
end
|
18
17
|
|
19
18
|
case res
|
20
19
|
when Net::HTTPSuccess
|
21
|
-
return res
|
20
|
+
return res
|
22
21
|
end
|
23
22
|
res.error!
|
24
23
|
end
|
24
|
+
|
25
|
+
def post(url, params = {})
|
26
|
+
url = URI.parse(url)
|
27
|
+
|
28
|
+
http = Net::HTTP.new(url.host, url.port)
|
29
|
+
http.use_ssl = url.scheme == 'https'
|
30
|
+
|
31
|
+
res = http.start do |http|
|
32
|
+
req = Net::HTTP::Post.new(url.path)
|
33
|
+
req.set_form_data(params) if params.any?
|
34
|
+
http.request(req)
|
35
|
+
end
|
36
|
+
|
37
|
+
case res
|
38
|
+
when Net::HTTPSuccess
|
39
|
+
return res
|
40
|
+
end
|
41
|
+
res.error!
|
42
|
+
end
|
43
|
+
|
25
44
|
end
|
26
45
|
end
|
27
|
-
|
@@ -0,0 +1 @@
|
|
1
|
+
require 'go_figure/test/stub_http_fetcher.rb'
|
@@ -0,0 +1,91 @@
|
|
1
|
+
require 'ostruct'
|
2
|
+
module GoFigure
|
3
|
+
class StubHttpFetcher
|
4
|
+
# Careful : this will respond to any call with nil
|
5
|
+
class HashStruct < OpenStruct
|
6
|
+
def [](key)
|
7
|
+
self.headers[key]
|
8
|
+
end
|
9
|
+
end
|
10
|
+
|
11
|
+
module Response
|
12
|
+
def invoked!
|
13
|
+
@invoked = true
|
14
|
+
end
|
15
|
+
|
16
|
+
def invoked?
|
17
|
+
!!@invoked
|
18
|
+
end
|
19
|
+
end
|
20
|
+
|
21
|
+
class StringResponse
|
22
|
+
include Response
|
23
|
+
def initialize(content, code = 200, headers = {})
|
24
|
+
@content = content
|
25
|
+
@code = code.to_s
|
26
|
+
@headers = headers
|
27
|
+
end
|
28
|
+
|
29
|
+
def execute
|
30
|
+
HashStruct.new(:body => @content, :code => @code, :headers => @headers)
|
31
|
+
end
|
32
|
+
|
33
|
+
end
|
34
|
+
|
35
|
+
class ErrorResponse
|
36
|
+
include Response
|
37
|
+
def initialize(error)
|
38
|
+
@error = error
|
39
|
+
end
|
40
|
+
|
41
|
+
def execute
|
42
|
+
raise @error
|
43
|
+
end
|
44
|
+
end
|
45
|
+
|
46
|
+
def get(url)
|
47
|
+
if body = interweb[:get][url]
|
48
|
+
body.invoked!
|
49
|
+
return body.execute
|
50
|
+
else
|
51
|
+
raise "404 - Could not find #{url}. Available URLs are #{@interweb[:get].keys.inspect}"
|
52
|
+
end
|
53
|
+
end
|
54
|
+
|
55
|
+
def post(url, params = {})
|
56
|
+
if body = interweb[:post][url]
|
57
|
+
response = body.execute
|
58
|
+
if response.headers == params
|
59
|
+
body.invoked!
|
60
|
+
return response
|
61
|
+
end
|
62
|
+
end
|
63
|
+
|
64
|
+
raise "404 - Could not find a url listening to #{url.inspect} that responds to post params #{params.inspect}. Available URLs are #{@interweb[:post].keys.inspect}"
|
65
|
+
end
|
66
|
+
|
67
|
+
def invoked?(url, type = :get, params = {})
|
68
|
+
if body = interweb[type][url]
|
69
|
+
response = body.execute
|
70
|
+
if response.headers == params
|
71
|
+
|
72
|
+
body.invoked?
|
73
|
+
end
|
74
|
+
end
|
75
|
+
end
|
76
|
+
|
77
|
+
def register_content(content, url, type = :get, headers = {})
|
78
|
+
interweb[type][url] = StringResponse.new(content, 200, headers)
|
79
|
+
end
|
80
|
+
|
81
|
+
def register_error(url, type = :get, error)
|
82
|
+
interweb[type][url] = ErrorResponse.new(error)
|
83
|
+
end
|
84
|
+
|
85
|
+
def interweb
|
86
|
+
@interweb ||= {:get => {}, :post => {}}
|
87
|
+
end
|
88
|
+
|
89
|
+
end
|
90
|
+
end
|
91
|
+
|
data/lib/go_figure/version.rb
CHANGED
@@ -7,7 +7,7 @@ module GoFigure
|
|
7
7
|
def test_should_fetch_xml_config_on_localhost
|
8
8
|
md5 = '7455edff001e2f262beb7c13f10ff7cb'
|
9
9
|
endpoint = GoConfigEndpoint.new(:host => 'example.com', :port => 1234)
|
10
|
-
|
10
|
+
GoConfigEndpoint.http_fetcher = fetcher_with_config_file('foo.xml', md5, config_endpoint)
|
11
11
|
|
12
12
|
config = endpoint.get_config
|
13
13
|
assert_equal config_file('foo.xml'), config.original_xml
|
@@ -17,7 +17,7 @@ module GoFigure
|
|
17
17
|
def test_should_post_back_new_config_xml_content_with_original_md5
|
18
18
|
md5 = '7455edff001e2f262beb7c13f10ff7cb'
|
19
19
|
endpoint = GoConfigEndpoint.new(:host => 'example.com', :port => 1234)
|
20
|
-
|
20
|
+
GoConfigEndpoint.http_fetcher = fetcher_with_config_file('foo.xml', md5, config_endpoint)
|
21
21
|
|
22
22
|
config = endpoint.get_config
|
23
23
|
config.set_pipeline("http://git.example.com/foo/bar.git", "my_rails_app")
|
data/test/test_helper.rb
CHANGED
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: go_figure
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
4
|
+
version: 0.0.2
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -13,7 +13,7 @@ date: 2012-02-14 00:00:00.000000000Z
|
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: nokogiri
|
16
|
-
requirement: &
|
16
|
+
requirement: &70222388707400 !ruby/object:Gem::Requirement
|
17
17
|
none: false
|
18
18
|
requirements:
|
19
19
|
- - ~>
|
@@ -21,7 +21,7 @@ dependencies:
|
|
21
21
|
version: 1.5.0
|
22
22
|
type: :runtime
|
23
23
|
prerelease: false
|
24
|
-
version_requirements: *
|
24
|
+
version_requirements: *70222388707400
|
25
25
|
description: This provides a ruby DSL to create a configuration file for the go server
|
26
26
|
(thoughtworks-studios.com/go)
|
27
27
|
email:
|
@@ -40,13 +40,14 @@ files:
|
|
40
40
|
- lib/go_figure/go_config.rb
|
41
41
|
- lib/go_figure/go_config_endpoint.rb
|
42
42
|
- lib/go_figure/http_fetcher.rb
|
43
|
+
- lib/go_figure/test.rb
|
44
|
+
- lib/go_figure/test/stub_http_fetcher.rb
|
43
45
|
- lib/go_figure/version.rb
|
44
46
|
- test/fixtures/foo.xml
|
45
47
|
- test/go_figure/go_config_endpoint_test.rb
|
46
48
|
- test/go_figure/go_config_test.rb
|
47
|
-
- test/stub_http_fetcher.rb
|
48
49
|
- test/test_helper.rb
|
49
|
-
homepage:
|
50
|
+
homepage: https://github.com/ThoughtWorksInc/go-figure
|
50
51
|
licenses: []
|
51
52
|
post_install_message:
|
52
53
|
rdoc_options: []
|
@@ -74,5 +75,4 @@ test_files:
|
|
74
75
|
- test/fixtures/foo.xml
|
75
76
|
- test/go_figure/go_config_endpoint_test.rb
|
76
77
|
- test/go_figure/go_config_test.rb
|
77
|
-
- test/stub_http_fetcher.rb
|
78
78
|
- test/test_helper.rb
|
data/test/stub_http_fetcher.rb
DELETED
@@ -1,88 +0,0 @@
|
|
1
|
-
require 'ostruct'
|
2
|
-
class StubHttpFetcher
|
3
|
-
# Careful : this will respond to any call with nil
|
4
|
-
class HashStruct < OpenStruct
|
5
|
-
def [](key)
|
6
|
-
self.headers[key]
|
7
|
-
end
|
8
|
-
end
|
9
|
-
|
10
|
-
module Response
|
11
|
-
def invoked!
|
12
|
-
@invoked = true
|
13
|
-
end
|
14
|
-
|
15
|
-
def invoked?
|
16
|
-
!!@invoked
|
17
|
-
end
|
18
|
-
end
|
19
|
-
|
20
|
-
class StringResponse
|
21
|
-
include Response
|
22
|
-
def initialize(content, status = 200, headers = {})
|
23
|
-
@content = content
|
24
|
-
@status = 200
|
25
|
-
@headers = headers
|
26
|
-
end
|
27
|
-
|
28
|
-
def execute
|
29
|
-
HashStruct.new(:body => @content, :status => @status, :headers => @headers)
|
30
|
-
end
|
31
|
-
|
32
|
-
end
|
33
|
-
|
34
|
-
class ErrorResponse
|
35
|
-
include Response
|
36
|
-
def initialize(error)
|
37
|
-
@error = error
|
38
|
-
end
|
39
|
-
|
40
|
-
def execute
|
41
|
-
raise @error
|
42
|
-
end
|
43
|
-
end
|
44
|
-
|
45
|
-
def get(url)
|
46
|
-
if body = interweb[:get][url]
|
47
|
-
body.invoked!
|
48
|
-
return body.execute
|
49
|
-
else
|
50
|
-
raise "404 - Could not find #{url}. Available URLs are #{@interweb[:get].keys.inspect}"
|
51
|
-
end
|
52
|
-
end
|
53
|
-
|
54
|
-
def post(url, params = {})
|
55
|
-
if body = interweb[:post][url]
|
56
|
-
response = body.execute
|
57
|
-
if response.headers == params
|
58
|
-
body.invoked!
|
59
|
-
return response
|
60
|
-
end
|
61
|
-
end
|
62
|
-
|
63
|
-
raise "404 - Could not find a url listening to #{url.inspect} that responds to post params #{params.inspect}. Available URLs are #{@interweb[:post].keys.inspect}"
|
64
|
-
end
|
65
|
-
|
66
|
-
def invoked?(url, type = :get, params = {})
|
67
|
-
if body = interweb[type][url]
|
68
|
-
response = body.execute
|
69
|
-
if response.headers == params
|
70
|
-
body.invoked?
|
71
|
-
end
|
72
|
-
end
|
73
|
-
end
|
74
|
-
|
75
|
-
def register_content(content, url, type = :get, headers = {})
|
76
|
-
interweb[type][url] = StringResponse.new(content, 200, headers)
|
77
|
-
end
|
78
|
-
|
79
|
-
def register_error(url, type = :get, error)
|
80
|
-
interweb[type][url] = ErrorResponse.new(error)
|
81
|
-
end
|
82
|
-
|
83
|
-
def interweb
|
84
|
-
@interweb ||= {:get => {}, :post => {}}
|
85
|
-
end
|
86
|
-
|
87
|
-
end
|
88
|
-
|