trigonal 0.9.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/.autotest +10 -0
- data/.gitignore +19 -0
- data/.rspec +2 -0
- data/Gemfile +4 -0
- data/Gemfile.lock +48 -0
- data/LICENSE.txt +22 -0
- data/README.md +36 -0
- data/Rakefile +1 -0
- data/lib/trigonal.rb +2 -0
- data/lib/trigonal/errors.rb +5 -0
- data/lib/trigonal/trigonal.rb +116 -0
- data/spec/lib/trigonal/trigonal_spec.rb +281 -0
- data/spec/lib/trigonal_spec.rb +5 -0
- data/spec/spec_helper.rb +13 -0
- data/test.rb +8 -0
- data/trigonal.gemspec +25 -0
- metadata +176 -0
data/.autotest
ADDED
@@ -0,0 +1,10 @@
|
|
1
|
+
# in .autotest
|
2
|
+
require "autotest/bundler"
|
3
|
+
|
4
|
+
# filter out VCS files and other garbage to reduce HDD usage
|
5
|
+
Autotest.add_hook :initialize do |autotest|
|
6
|
+
%w{.git .svn .hg .DS_Store ._* vendor tmp log doc}.each do |exception|
|
7
|
+
autotest.add_exception(exception)
|
8
|
+
end
|
9
|
+
end
|
10
|
+
|
data/.gitignore
ADDED
data/.rspec
ADDED
data/Gemfile
ADDED
data/Gemfile.lock
ADDED
@@ -0,0 +1,48 @@
|
|
1
|
+
PATH
|
2
|
+
remote: .
|
3
|
+
specs:
|
4
|
+
trigonal (1.0.0)
|
5
|
+
httparty (~> 0.10.2)
|
6
|
+
multi_json (~> 1.7.1)
|
7
|
+
sys-host (~> 0.6.2)
|
8
|
+
sys-uname (~> 0.9.1)
|
9
|
+
|
10
|
+
GEM
|
11
|
+
remote: https://rubygems.org/
|
12
|
+
specs:
|
13
|
+
addressable (2.3.3)
|
14
|
+
crack (0.3.2)
|
15
|
+
diff-lcs (1.2.1)
|
16
|
+
ffi (1.6.0)
|
17
|
+
httparty (0.10.2)
|
18
|
+
multi_json (~> 1.0)
|
19
|
+
multi_xml (>= 0.5.2)
|
20
|
+
multi_json (1.7.1)
|
21
|
+
multi_xml (0.5.3)
|
22
|
+
rspec (2.13.0)
|
23
|
+
rspec-core (~> 2.13.0)
|
24
|
+
rspec-expectations (~> 2.13.0)
|
25
|
+
rspec-mocks (~> 2.13.0)
|
26
|
+
rspec-core (2.13.1)
|
27
|
+
rspec-expectations (2.13.0)
|
28
|
+
diff-lcs (>= 1.1.3, < 2.0)
|
29
|
+
rspec-mocks (2.13.0)
|
30
|
+
simplecov (0.7.1)
|
31
|
+
multi_json (~> 1.0)
|
32
|
+
simplecov-html (~> 0.7.1)
|
33
|
+
simplecov-html (0.7.1)
|
34
|
+
sys-host (0.6.2)
|
35
|
+
sys-uname (0.9.1)
|
36
|
+
ffi (>= 1.0.0)
|
37
|
+
webmock (1.11.0)
|
38
|
+
addressable (>= 2.2.7)
|
39
|
+
crack (>= 0.3.2)
|
40
|
+
|
41
|
+
PLATFORMS
|
42
|
+
ruby
|
43
|
+
|
44
|
+
DEPENDENCIES
|
45
|
+
rspec (= 2.13.0)
|
46
|
+
simplecov
|
47
|
+
trigonal!
|
48
|
+
webmock (= 1.11.0)
|
data/LICENSE.txt
ADDED
@@ -0,0 +1,22 @@
|
|
1
|
+
Copyright (c) 2013 Matthew Nielsen
|
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,36 @@
|
|
1
|
+
t.app# Trigonal
|
2
|
+
|
3
|
+
TODO: Write a gem description
|
4
|
+
|
5
|
+
## Installation
|
6
|
+
|
7
|
+
Add this line to your application's Gemfile:
|
8
|
+
|
9
|
+
gem 'trigonal'
|
10
|
+
|
11
|
+
And then execute:
|
12
|
+
|
13
|
+
$ bundle
|
14
|
+
|
15
|
+
Or install it yourself as:
|
16
|
+
|
17
|
+
$ gem install trigonal
|
18
|
+
|
19
|
+
## Usage
|
20
|
+
|
21
|
+
* Test under rubies MRI 1.8.7 and 1.9.x, JRruby 1.6.x and 1.7.x, rubinus 1.2.x
|
22
|
+
* Test under rails 2.3.x, 3.0.x, 3.1.x, 3.2.x and 4.x.x
|
23
|
+
|
24
|
+
TODO:
|
25
|
+
|
26
|
+
Write usage instructions here
|
27
|
+
VERY FAST timeout on server poll (or thread it!)
|
28
|
+
don't post on developent/test mode
|
29
|
+
|
30
|
+
## Contributing
|
31
|
+
|
32
|
+
1. Fork it
|
33
|
+
2. Create your feature branch (`git checkout -b my-new-feature`)
|
34
|
+
3. Commit your changes (`git commit -am 'Add some feature'`)
|
35
|
+
4. Push to the branch (`git push origin my-new-feature`)
|
36
|
+
5. Create new Pull Request
|
data/Rakefile
ADDED
@@ -0,0 +1 @@
|
|
1
|
+
require "bundler/gem_tasks"
|
data/lib/trigonal.rb
ADDED
@@ -0,0 +1,116 @@
|
|
1
|
+
require 'rubygems'
|
2
|
+
require 'HTTParty'
|
3
|
+
require 'multi_json'
|
4
|
+
require 'sys/uname'
|
5
|
+
require 'sys/host'
|
6
|
+
|
7
|
+
class Trigonal
|
8
|
+
include Sys # for sys/uname and sys.host
|
9
|
+
|
10
|
+
SERVER_PROTOCOL = 'http'
|
11
|
+
SERVER_HOST = 'trigonal.herokuapp.com'
|
12
|
+
SERVER_PORT = '80'
|
13
|
+
SERVER_PATH = '/api/manifests.json'
|
14
|
+
|
15
|
+
LIVE_ENVIRONMENTS = %w[stage staging production master]
|
16
|
+
|
17
|
+
def initialize(options = {}, &block)
|
18
|
+
raise OptionsError unless options[:email]
|
19
|
+
raise OptionsError unless (options[:password] || options[:key])
|
20
|
+
|
21
|
+
@email = options[:email]
|
22
|
+
@password = options[:password]
|
23
|
+
@key = options[:key]
|
24
|
+
|
25
|
+
yield self if block_given?
|
26
|
+
|
27
|
+
end
|
28
|
+
|
29
|
+
def server_url
|
30
|
+
"#{SERVER_PROTOCOL}://#{SERVER_HOST}:#{SERVER_PORT}#{SERVER_PATH}"
|
31
|
+
end
|
32
|
+
|
33
|
+
def post_manifest(options = {})
|
34
|
+
return unless (live_environment? || options[:force])
|
35
|
+
response = HTTParty.post(server_url,
|
36
|
+
:body => MultiJson.dump({
|
37
|
+
:email => @email,
|
38
|
+
:key => @key,
|
39
|
+
:password => @password,
|
40
|
+
:system => host_system_software,
|
41
|
+
:ruby => host_ruby,
|
42
|
+
:hostname => get_host_name,
|
43
|
+
:name => get_name,
|
44
|
+
:appname => get_appname,
|
45
|
+
:environment => get_environment,
|
46
|
+
:gems => get_gems
|
47
|
+
}),
|
48
|
+
:headers => { 'Content-Type' => 'application/json' }
|
49
|
+
).response
|
50
|
+
case response.code
|
51
|
+
when /^2\d+/
|
52
|
+
return true
|
53
|
+
when "401"
|
54
|
+
raise Trigonal::InvalidCredentialsError, "Email address and password or key was not accepted"
|
55
|
+
else
|
56
|
+
raise Trigonal::UnknownServerError, "Unknown upstream server (code #{response.code}) occured"
|
57
|
+
end
|
58
|
+
end
|
59
|
+
|
60
|
+
def host_system_software
|
61
|
+
@host_system_software ||= Uname.uname.version
|
62
|
+
end
|
63
|
+
|
64
|
+
def host_ruby
|
65
|
+
@host_ruby ||= RUBY_DESCRIPTION
|
66
|
+
end
|
67
|
+
|
68
|
+
def get_host_name
|
69
|
+
@host_name ||= Host.hostname
|
70
|
+
end
|
71
|
+
|
72
|
+
def get_appname
|
73
|
+
@appname
|
74
|
+
end
|
75
|
+
|
76
|
+
def get_name
|
77
|
+
@name
|
78
|
+
end
|
79
|
+
|
80
|
+
def get_environment
|
81
|
+
@environment ||= "development"
|
82
|
+
end
|
83
|
+
|
84
|
+
def get_gems
|
85
|
+
@gems || get_gems_from_host
|
86
|
+
end
|
87
|
+
|
88
|
+
def get_gems_from_host
|
89
|
+
Gem::Specification.map do |specification|
|
90
|
+
{
|
91
|
+
:name => specification.name,
|
92
|
+
:version => specification.version.to_s
|
93
|
+
}
|
94
|
+
end
|
95
|
+
end
|
96
|
+
|
97
|
+
def live_environment?
|
98
|
+
LIVE_ENVIRONMENTS.include?(get_environment)
|
99
|
+
end
|
100
|
+
|
101
|
+
def name(val=nil)
|
102
|
+
val ? @name=val : @name
|
103
|
+
end
|
104
|
+
|
105
|
+
def environment(val=nil)
|
106
|
+
val ? @environment=val : @environment
|
107
|
+
end
|
108
|
+
|
109
|
+
def appname(val=nil)
|
110
|
+
val ? @appname=val : @appname
|
111
|
+
end
|
112
|
+
|
113
|
+
def host_name(val=nil)
|
114
|
+
val ? @host_name=val : @host_name
|
115
|
+
end
|
116
|
+
end
|
@@ -0,0 +1,281 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
require 'trigonal/trigonal'
|
3
|
+
require 'trigonal/errors'
|
4
|
+
|
5
|
+
describe Trigonal do
|
6
|
+
let (:email) { 'user@email.com' }
|
7
|
+
let (:password) { 'password' }
|
8
|
+
let (:key) { 'keykeykey' }
|
9
|
+
let (:valid_password_params) do
|
10
|
+
{ :email => email, :password => password }
|
11
|
+
end
|
12
|
+
let (:valid_key_params) do
|
13
|
+
{ :email => email, :key => key }
|
14
|
+
end
|
15
|
+
subject { Trigonal.new(valid_key_params) }
|
16
|
+
|
17
|
+
describe "#initialize" do
|
18
|
+
it "shall accept an options hash with email and password" do
|
19
|
+
Trigonal.new(valid_password_params).should be_a_kind_of Trigonal
|
20
|
+
end
|
21
|
+
|
22
|
+
it "shall accept an options hash with email and key" do
|
23
|
+
Trigonal.new(valid_key_params).should be_a_kind_of Trigonal
|
24
|
+
end
|
25
|
+
|
26
|
+
it "shall raise an error if email is not passed in options" do
|
27
|
+
lambda { Trigonal.new(valid_key_params.merge(:email => nil)) }.should raise_exception(Trigonal::OptionsError)
|
28
|
+
end
|
29
|
+
|
30
|
+
it "shall raise an error if password or key is not passed in options" do
|
31
|
+
lambda { Trigonal.new(valid_key_params.merge(:key => nil)) }.should raise_exception(Trigonal::OptionsError)
|
32
|
+
end
|
33
|
+
|
34
|
+
it "shall accept a block" do
|
35
|
+
Trigonal.new(valid_password_params) do
|
36
|
+
true
|
37
|
+
end.should be_a_kind_of Trigonal
|
38
|
+
end
|
39
|
+
|
40
|
+
it "shall allow a 'hostname' to be manually set" do
|
41
|
+
example = Trigonal.new(valid_password_params) do |t|
|
42
|
+
t.host_name "awesome hostname"
|
43
|
+
end
|
44
|
+
example.get_host_name.should == "awesome hostname"
|
45
|
+
end
|
46
|
+
|
47
|
+
it "shall allow a 'name' to be manually set" do
|
48
|
+
example = Trigonal.new(valid_password_params) do |t|
|
49
|
+
t.name "awesome name"
|
50
|
+
end
|
51
|
+
example.get_name.should == "awesome name"
|
52
|
+
end
|
53
|
+
|
54
|
+
it "shall allow an 'appname' do be manually set" do
|
55
|
+
example = Trigonal.new(valid_password_params) do |t|
|
56
|
+
t.appname "awesome appname"
|
57
|
+
end
|
58
|
+
example.get_appname.should == "awesome appname"
|
59
|
+
end
|
60
|
+
|
61
|
+
it "shall allow the 'environment' to be manually set" do
|
62
|
+
example = Trigonal.new(valid_password_params) do |t|
|
63
|
+
t.environment "awesome environment"
|
64
|
+
end
|
65
|
+
example.get_environment.should == "awesome environment"
|
66
|
+
end
|
67
|
+
|
68
|
+
end
|
69
|
+
|
70
|
+
describe '#server_url' do
|
71
|
+
it "shall return a composite string of the server url" do
|
72
|
+
expect(subject.server_url.should).to eq("#{Trigonal::SERVER_PROTOCOL}://#{Trigonal::SERVER_HOST}:#{Trigonal::SERVER_PORT}#{Trigonal::SERVER_PATH}")
|
73
|
+
end
|
74
|
+
end
|
75
|
+
|
76
|
+
describe '#post_manifest' do
|
77
|
+
let(:valid_body) do
|
78
|
+
MultiJson.dump({
|
79
|
+
:email => email,
|
80
|
+
:key => key,
|
81
|
+
:password => nil,
|
82
|
+
:system => 'linux 2.6.0',
|
83
|
+
:ruby => 'ruby 1.9.3-p361',
|
84
|
+
:hostname => 'some_host',
|
85
|
+
:name => 'some name',
|
86
|
+
:appname => 'someAppName',
|
87
|
+
:environment => Trigonal::LIVE_ENVIRONMENTS.first,
|
88
|
+
:gems => [
|
89
|
+
{ :name => 'foo', :version => '1.2.3' },
|
90
|
+
{ :name => 'bar', :version => '0.0.1' },
|
91
|
+
{ :name => 'baz', :version => '0.0.0' }
|
92
|
+
]
|
93
|
+
})
|
94
|
+
end
|
95
|
+
let(:valid_headers) do
|
96
|
+
{ 'Content-Type' => 'application/json' }
|
97
|
+
end
|
98
|
+
|
99
|
+
before(:each) do
|
100
|
+
|
101
|
+
subject.stub!(:host_system_software).and_return('linux 2.6.0')
|
102
|
+
subject.stub!(:host_ruby).and_return('ruby 1.9.3-p361')
|
103
|
+
subject.stub!(:get_host_name).and_return('some_host')
|
104
|
+
subject.stub!(:get_name).and_return('some name')
|
105
|
+
subject.stub!(:get_appname).and_return('someAppName')
|
106
|
+
subject.stub!(:get_environment).and_return('stage')
|
107
|
+
subject.stub!(:get_gems_from_host).and_return(
|
108
|
+
[
|
109
|
+
{ :name => 'foo', :version => '1.2.3' },
|
110
|
+
{ :name => 'bar', :version => '0.0.1' },
|
111
|
+
{ :name => 'baz', :version => '0.0.0' }
|
112
|
+
]
|
113
|
+
)
|
114
|
+
end
|
115
|
+
|
116
|
+
context "credentials are correct" do
|
117
|
+
it 'shall post the manifest to the server and get a response' do
|
118
|
+
stub_request(:post, subject.server_url).with(
|
119
|
+
:body => valid_body, :headers => valid_headers
|
120
|
+
)
|
121
|
+
subject.post_manifest.should be_true
|
122
|
+
end
|
123
|
+
end
|
124
|
+
|
125
|
+
context 'password is not correct' do
|
126
|
+
it 'shall raise an InvalidCredentials error' do
|
127
|
+
stub_request(:post, subject.server_url).with(
|
128
|
+
:body => valid_body, :headers => valid_headers
|
129
|
+
).to_return(:status => [401, "Forbidden"])
|
130
|
+
|
131
|
+
lambda { subject.post_manifest }.should raise_exception(Trigonal::InvalidCredentialsError)
|
132
|
+
end
|
133
|
+
end
|
134
|
+
|
135
|
+
context 'key is not correct' do
|
136
|
+
it 'shall raise an InvalidCredentials error' do
|
137
|
+
stub_request(:post, subject.server_url).with(
|
138
|
+
:body => valid_body, :headers => valid_headers
|
139
|
+
).to_return(:status => [401, "Forbidden"])
|
140
|
+
|
141
|
+
lambda { subject.post_manifest }.should raise_exception(Trigonal::InvalidCredentialsError)
|
142
|
+
end
|
143
|
+
end
|
144
|
+
|
145
|
+
context 'environment is not one of the "live environments"' do
|
146
|
+
before(:each) do
|
147
|
+
subject.stub!(:get_environment).and_return('development')
|
148
|
+
end
|
149
|
+
it 'shall return immediately without posting' do
|
150
|
+
HTTParty.should_not_receive(:post)
|
151
|
+
|
152
|
+
subject.post_manifest
|
153
|
+
end
|
154
|
+
|
155
|
+
context '"force" option is passed' do
|
156
|
+
it 'shall post' do
|
157
|
+
HTTParty.should_receive(:post).and_return(
|
158
|
+
mock('httparty', :response => mock('response', :code => "200"))
|
159
|
+
)
|
160
|
+
|
161
|
+
subject.post_manifest(:force => true)
|
162
|
+
end
|
163
|
+
end
|
164
|
+
end
|
165
|
+
end
|
166
|
+
|
167
|
+
describe "#host_system_software" do
|
168
|
+
before(:each) do
|
169
|
+
class MockUname
|
170
|
+
def version
|
171
|
+
"Linux Blah 2.6.0"
|
172
|
+
end
|
173
|
+
end
|
174
|
+
class Trigonal::Uname
|
175
|
+
def self.uname
|
176
|
+
MockUname.new
|
177
|
+
end
|
178
|
+
end
|
179
|
+
end
|
180
|
+
|
181
|
+
it "shall return the name + version of the software being used on the local system" do
|
182
|
+
subject.host_system_software.should == "Linux Blah 2.6.0"
|
183
|
+
end
|
184
|
+
end
|
185
|
+
|
186
|
+
describe '#host_ruby' do
|
187
|
+
before(:each) do
|
188
|
+
RUBY_DESCRIPTION = "ruby 1.9.3p194 (2012-04-20 revision 35410) [x86_64-darwin11.4.2]"
|
189
|
+
end
|
190
|
+
it 'shall return the current ruby description constant' do
|
191
|
+
subject.host_ruby.should == "ruby 1.9.3p194 (2012-04-20 revision 35410) [x86_64-darwin11.4.2]"
|
192
|
+
end
|
193
|
+
end
|
194
|
+
|
195
|
+
describe '#get_host_name' do
|
196
|
+
before(:each) do
|
197
|
+
class Trigonal::Host
|
198
|
+
def self.hostname
|
199
|
+
'some.hostname'
|
200
|
+
end
|
201
|
+
end
|
202
|
+
end
|
203
|
+
it 'shall return the current system host name' do
|
204
|
+
subject.get_host_name.should == 'some.hostname'
|
205
|
+
end
|
206
|
+
end
|
207
|
+
|
208
|
+
describe '#get_appname' do
|
209
|
+
context 'appname has been set' do
|
210
|
+
# this is bad, fix me later
|
211
|
+
before(:each) { subject.instance_variable_set(:@appname, 'some appname') }
|
212
|
+
it 'shall return the app name' do
|
213
|
+
subject.get_appname.should == 'some appname'
|
214
|
+
end
|
215
|
+
end
|
216
|
+
context "appname has not been set" do
|
217
|
+
it 'shall return nil' do
|
218
|
+
subject.get_appname.should be_nil
|
219
|
+
end
|
220
|
+
end
|
221
|
+
end
|
222
|
+
|
223
|
+
describe '#get_name' do
|
224
|
+
context 'name has been set' do
|
225
|
+
# this is bad, fix me later
|
226
|
+
before(:each) { subject.instance_variable_set(:@name, 'some name') }
|
227
|
+
it 'shall return the name' do
|
228
|
+
subject.get_name.should == 'some name'
|
229
|
+
end
|
230
|
+
end
|
231
|
+
context "name has not been set" do
|
232
|
+
it 'shall return nil' do
|
233
|
+
subject.get_name.should be_nil
|
234
|
+
end
|
235
|
+
end
|
236
|
+
end
|
237
|
+
|
238
|
+
describe '#get_environment' do
|
239
|
+
context 'environment has been set' do
|
240
|
+
# this is bad, fix me later
|
241
|
+
before(:each) { subject.instance_variable_set(:@environment, 'some environment') }
|
242
|
+
it 'shall return the app environment' do
|
243
|
+
subject.get_environment.should == 'some environment'
|
244
|
+
end
|
245
|
+
end
|
246
|
+
context "environment has not been set" do
|
247
|
+
it 'shall return "development"' do
|
248
|
+
subject.get_environment.should == "development"
|
249
|
+
end
|
250
|
+
end
|
251
|
+
end
|
252
|
+
|
253
|
+
describe "#get_gems" do
|
254
|
+
it "shall call #get_gems_from_host" do
|
255
|
+
subject.should_receive(:get_gems_from_host)
|
256
|
+
|
257
|
+
subject.get_gems
|
258
|
+
end
|
259
|
+
end
|
260
|
+
|
261
|
+
describe "#get_gems_from_host" do
|
262
|
+
let(:mock_gems) do
|
263
|
+
mock_gems = []
|
264
|
+
3.times do |i|
|
265
|
+
mock_name = "mock_gem_#{i}"
|
266
|
+
mock_gems << mock(mock_name, :name => mock_name, :version => "#{i}.#{i}.#{i}")
|
267
|
+
end
|
268
|
+
mock_gems
|
269
|
+
end
|
270
|
+
before(:each) do
|
271
|
+
Gem::Specification.stub!(:map).and_return(mock_gems.map{|m|{ :name => m.name, :version => m.version }})
|
272
|
+
end
|
273
|
+
it "shall get a list of gems on the host system" do
|
274
|
+
|
275
|
+
subject.get_gems_from_host.should == mock_gems.map do |m|
|
276
|
+
{ :name => m.name, :version => m.version }
|
277
|
+
end
|
278
|
+
|
279
|
+
end
|
280
|
+
end
|
281
|
+
end
|
data/spec/spec_helper.rb
ADDED
@@ -0,0 +1,13 @@
|
|
1
|
+
require 'simplecov'
|
2
|
+
if ENV["COVERAGE"]
|
3
|
+
SimpleCov.start
|
4
|
+
end
|
5
|
+
|
6
|
+
require 'webmock/rspec'
|
7
|
+
|
8
|
+
RSpec.configure do |config|
|
9
|
+
config.treat_symbols_as_metadata_keys_with_true_values = true
|
10
|
+
config.run_all_when_everything_filtered = true
|
11
|
+
config.order = 'random'
|
12
|
+
end
|
13
|
+
|
data/test.rb
ADDED
data/trigonal.gemspec
ADDED
@@ -0,0 +1,25 @@
|
|
1
|
+
Gem::Specification.new do |gem|
|
2
|
+
gem.name = "trigonal"
|
3
|
+
gem.version = "0.9.0"
|
4
|
+
gem.authors = ["Matthew Nielsen"]
|
5
|
+
gem.email = ["xunker@pyxidis.org"]
|
6
|
+
gem.description = %q{Trigonal reports all the ruby gems in your app to a central server}
|
7
|
+
gem.summary = %q{Trigonal reports all the ruby gems in your app to a central server}
|
8
|
+
gem.homepage = "https://github.com/xunker/trigonal"
|
9
|
+
|
10
|
+
gem.files = `git ls-files`.split($/)
|
11
|
+
gem.executables = gem.files.grep(%r{^bin/}).map{ |f| File.basename(f) }
|
12
|
+
gem.test_files = gem.files.grep(%r{^(test|spec|features)/})
|
13
|
+
gem.require_paths = ["lib"]
|
14
|
+
|
15
|
+
gem.add_dependency 'httparty', '~>0.10.2'
|
16
|
+
gem.add_dependency 'multi_json', '~>1.7.1'
|
17
|
+
gem.add_dependency 'sys-uname', '~>0.9.1'
|
18
|
+
gem.add_dependency 'sys-host', '~>0.6.2'
|
19
|
+
|
20
|
+
gem.add_development_dependency 'rspec', '2.13.0'
|
21
|
+
# gem.add_development_dependency 'ZenTest', '4.4.2'
|
22
|
+
# gem.add_development_dependency 'autotest', '4.4.6'
|
23
|
+
gem.add_development_dependency 'webmock', '1.11.0'
|
24
|
+
gem.add_development_dependency 'simplecov'
|
25
|
+
end
|
metadata
ADDED
@@ -0,0 +1,176 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: trigonal
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.9.0
|
5
|
+
prerelease:
|
6
|
+
platform: ruby
|
7
|
+
authors:
|
8
|
+
- Matthew Nielsen
|
9
|
+
autorequire:
|
10
|
+
bindir: bin
|
11
|
+
cert_chain: []
|
12
|
+
date: 2013-04-05 00:00:00.000000000 Z
|
13
|
+
dependencies:
|
14
|
+
- !ruby/object:Gem::Dependency
|
15
|
+
name: httparty
|
16
|
+
requirement: !ruby/object:Gem::Requirement
|
17
|
+
none: false
|
18
|
+
requirements:
|
19
|
+
- - ~>
|
20
|
+
- !ruby/object:Gem::Version
|
21
|
+
version: 0.10.2
|
22
|
+
type: :runtime
|
23
|
+
prerelease: false
|
24
|
+
version_requirements: !ruby/object:Gem::Requirement
|
25
|
+
none: false
|
26
|
+
requirements:
|
27
|
+
- - ~>
|
28
|
+
- !ruby/object:Gem::Version
|
29
|
+
version: 0.10.2
|
30
|
+
- !ruby/object:Gem::Dependency
|
31
|
+
name: multi_json
|
32
|
+
requirement: !ruby/object:Gem::Requirement
|
33
|
+
none: false
|
34
|
+
requirements:
|
35
|
+
- - ~>
|
36
|
+
- !ruby/object:Gem::Version
|
37
|
+
version: 1.7.1
|
38
|
+
type: :runtime
|
39
|
+
prerelease: false
|
40
|
+
version_requirements: !ruby/object:Gem::Requirement
|
41
|
+
none: false
|
42
|
+
requirements:
|
43
|
+
- - ~>
|
44
|
+
- !ruby/object:Gem::Version
|
45
|
+
version: 1.7.1
|
46
|
+
- !ruby/object:Gem::Dependency
|
47
|
+
name: sys-uname
|
48
|
+
requirement: !ruby/object:Gem::Requirement
|
49
|
+
none: false
|
50
|
+
requirements:
|
51
|
+
- - ~>
|
52
|
+
- !ruby/object:Gem::Version
|
53
|
+
version: 0.9.1
|
54
|
+
type: :runtime
|
55
|
+
prerelease: false
|
56
|
+
version_requirements: !ruby/object:Gem::Requirement
|
57
|
+
none: false
|
58
|
+
requirements:
|
59
|
+
- - ~>
|
60
|
+
- !ruby/object:Gem::Version
|
61
|
+
version: 0.9.1
|
62
|
+
- !ruby/object:Gem::Dependency
|
63
|
+
name: sys-host
|
64
|
+
requirement: !ruby/object:Gem::Requirement
|
65
|
+
none: false
|
66
|
+
requirements:
|
67
|
+
- - ~>
|
68
|
+
- !ruby/object:Gem::Version
|
69
|
+
version: 0.6.2
|
70
|
+
type: :runtime
|
71
|
+
prerelease: false
|
72
|
+
version_requirements: !ruby/object:Gem::Requirement
|
73
|
+
none: false
|
74
|
+
requirements:
|
75
|
+
- - ~>
|
76
|
+
- !ruby/object:Gem::Version
|
77
|
+
version: 0.6.2
|
78
|
+
- !ruby/object:Gem::Dependency
|
79
|
+
name: rspec
|
80
|
+
requirement: !ruby/object:Gem::Requirement
|
81
|
+
none: false
|
82
|
+
requirements:
|
83
|
+
- - '='
|
84
|
+
- !ruby/object:Gem::Version
|
85
|
+
version: 2.13.0
|
86
|
+
type: :development
|
87
|
+
prerelease: false
|
88
|
+
version_requirements: !ruby/object:Gem::Requirement
|
89
|
+
none: false
|
90
|
+
requirements:
|
91
|
+
- - '='
|
92
|
+
- !ruby/object:Gem::Version
|
93
|
+
version: 2.13.0
|
94
|
+
- !ruby/object:Gem::Dependency
|
95
|
+
name: webmock
|
96
|
+
requirement: !ruby/object:Gem::Requirement
|
97
|
+
none: false
|
98
|
+
requirements:
|
99
|
+
- - '='
|
100
|
+
- !ruby/object:Gem::Version
|
101
|
+
version: 1.11.0
|
102
|
+
type: :development
|
103
|
+
prerelease: false
|
104
|
+
version_requirements: !ruby/object:Gem::Requirement
|
105
|
+
none: false
|
106
|
+
requirements:
|
107
|
+
- - '='
|
108
|
+
- !ruby/object:Gem::Version
|
109
|
+
version: 1.11.0
|
110
|
+
- !ruby/object:Gem::Dependency
|
111
|
+
name: simplecov
|
112
|
+
requirement: !ruby/object:Gem::Requirement
|
113
|
+
none: false
|
114
|
+
requirements:
|
115
|
+
- - ! '>='
|
116
|
+
- !ruby/object:Gem::Version
|
117
|
+
version: '0'
|
118
|
+
type: :development
|
119
|
+
prerelease: false
|
120
|
+
version_requirements: !ruby/object:Gem::Requirement
|
121
|
+
none: false
|
122
|
+
requirements:
|
123
|
+
- - ! '>='
|
124
|
+
- !ruby/object:Gem::Version
|
125
|
+
version: '0'
|
126
|
+
description: Trigonal reports all the ruby gems in your app to a central server
|
127
|
+
email:
|
128
|
+
- xunker@pyxidis.org
|
129
|
+
executables: []
|
130
|
+
extensions: []
|
131
|
+
extra_rdoc_files: []
|
132
|
+
files:
|
133
|
+
- .autotest
|
134
|
+
- .gitignore
|
135
|
+
- .rspec
|
136
|
+
- Gemfile
|
137
|
+
- Gemfile.lock
|
138
|
+
- LICENSE.txt
|
139
|
+
- README.md
|
140
|
+
- Rakefile
|
141
|
+
- lib/trigonal.rb
|
142
|
+
- lib/trigonal/errors.rb
|
143
|
+
- lib/trigonal/trigonal.rb
|
144
|
+
- spec/lib/trigonal/trigonal_spec.rb
|
145
|
+
- spec/lib/trigonal_spec.rb
|
146
|
+
- spec/spec_helper.rb
|
147
|
+
- test.rb
|
148
|
+
- trigonal.gemspec
|
149
|
+
homepage: https://github.com/xunker/trigonal
|
150
|
+
licenses: []
|
151
|
+
post_install_message:
|
152
|
+
rdoc_options: []
|
153
|
+
require_paths:
|
154
|
+
- lib
|
155
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
156
|
+
none: false
|
157
|
+
requirements:
|
158
|
+
- - ! '>='
|
159
|
+
- !ruby/object:Gem::Version
|
160
|
+
version: '0'
|
161
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
162
|
+
none: false
|
163
|
+
requirements:
|
164
|
+
- - ! '>='
|
165
|
+
- !ruby/object:Gem::Version
|
166
|
+
version: '0'
|
167
|
+
requirements: []
|
168
|
+
rubyforge_project:
|
169
|
+
rubygems_version: 1.8.24
|
170
|
+
signing_key:
|
171
|
+
specification_version: 3
|
172
|
+
summary: Trigonal reports all the ruby gems in your app to a central server
|
173
|
+
test_files:
|
174
|
+
- spec/lib/trigonal/trigonal_spec.rb
|
175
|
+
- spec/lib/trigonal_spec.rb
|
176
|
+
- spec/spec_helper.rb
|