inventory-server 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.
Files changed (54) hide show
  1. checksums.yaml +7 -0
  2. data/.gitignore +15 -0
  3. data/.rspec +3 -0
  4. data/.travis.yml +12 -0
  5. data/Dockerfile +22 -0
  6. data/Dockerfile-passenger +18 -0
  7. data/Dockerfile-unicorn +22 -0
  8. data/Gemfile +4 -0
  9. data/LICENSE.txt +22 -0
  10. data/README.md +32 -0
  11. data/Rakefile +2 -0
  12. data/bin/inventory-server +33 -0
  13. data/circle.yml +26 -0
  14. data/config.ru +8 -0
  15. data/docker/passenger/passenger.conf +15 -0
  16. data/docker/passenger/run-httpd.sh +8 -0
  17. data/docker/unicorn/nginx.conf +45 -0
  18. data/docker/unicorn/run-unicorn.sh +5 -0
  19. data/docker/unicorn/unicorn.conf +31 -0
  20. data/docker/unicorn/unicorn.rb +19 -0
  21. data/fig.yml +18 -0
  22. data/inventory-server.gemspec +45 -0
  23. data/lib/inventory/server.rb +30 -0
  24. data/lib/inventory/server/cli.rb +59 -0
  25. data/lib/inventory/server/config.rb +80 -0
  26. data/lib/inventory/server/email_parser.rb +28 -0
  27. data/lib/inventory/server/http_server.rb +49 -0
  28. data/lib/inventory/server/inventory_error.rb +9 -0
  29. data/lib/inventory/server/loader.rb +60 -0
  30. data/lib/inventory/server/logger.rb +16 -0
  31. data/lib/inventory/server/smtp_server.rb +36 -0
  32. data/lib/inventory/server/version.rb +5 -0
  33. data/plugins/facts_parser.rb +95 -0
  34. data/plugins/index.rb +56 -0
  35. data/plugins/json_schema_validator.rb +33 -0
  36. data/plugins/log_failures_on_disk.rb +35 -0
  37. data/public/.gitignore +0 -0
  38. data/spec/integration/fixtures/facter.xml +4543 -0
  39. data/spec/integration/http_spec.rb +24 -0
  40. data/spec/spec_helper.rb +96 -0
  41. data/spec/unit/cli_spec.rb +54 -0
  42. data/spec/unit/config_spec.rb +65 -0
  43. data/spec/unit/email_parser_spec.rb +53 -0
  44. data/spec/unit/facts_parser_spec.rb +176 -0
  45. data/spec/unit/fixtures/simple_plugin.rb +2 -0
  46. data/spec/unit/http_server_spec.rb +58 -0
  47. data/spec/unit/index_spec.rb +77 -0
  48. data/spec/unit/json_schema_validator_spec.rb +126 -0
  49. data/spec/unit/loader_spec.rb +34 -0
  50. data/spec/unit/log_failures_on_disk_spec.rb +50 -0
  51. data/spec/unit/server_spec.rb +11 -0
  52. data/spec/unit/smtp_server_spec.rb +68 -0
  53. data/tmp/.gitignore +0 -0
  54. metadata +434 -0
@@ -0,0 +1,2 @@
1
+ class Inventory::Server::SimplePlugin
2
+ end
@@ -0,0 +1,58 @@
1
+ ENV['RACK_ENV'] = 'test'
2
+
3
+ require 'inventory/server/http_server'
4
+ require 'rspec'
5
+ require 'rack/test'
6
+
7
+
8
+ RSpec.describe Inventory::Server::HTTPServer do
9
+ context "when doing POST on api/v1/facts/:id" do
10
+ include Rack::Test::Methods
11
+
12
+ executed = 0
13
+ trigger_error = true
14
+
15
+ middleware = lambda { |env|
16
+ executed += 1
17
+ raise 'my custom error message' if trigger_error
18
+ }
19
+
20
+ # Proc.new is needed because Sinatra use lambda for lazy loading
21
+ Inventory::Server::HTTPServer.set :middlewares, Proc.new { middleware }
22
+ Inventory::Server::HTTPServer.set :config, {}
23
+
24
+ def app
25
+ Inventory::Server::HTTPServer
26
+ end
27
+
28
+ before(:each) do
29
+ executed = 0
30
+ trigger_error = false
31
+ end
32
+
33
+ it "should do the processing" do
34
+ post '/api/v1/facts/MY_UUID', {"key" => "value"}
35
+ expect(last_response).to be_ok
36
+ expect(last_response.body).to eq('{"id":"MY_UUID","ok":true,"status":200}')
37
+ expect(executed).to eq 1
38
+ end
39
+
40
+ it "should return error when processing fails" do
41
+ trigger_error = true
42
+ post '/api/v1/facts/MY_UUID', {"key" => "value"}
43
+ expect(last_response).to_not be_ok
44
+ expect(last_response.status).to eq 500
45
+ expect(last_response.body).to eq('{"id":"MY_UUID","ok":false,"status":500,"message":"my custom error message"}')
46
+ expect(executed).to eq 1
47
+ end
48
+
49
+ it "should return 404 without id" do
50
+ trigger_error = true
51
+ post '/api/v1/facts/', {"key" => "value"}
52
+ expect(last_response).to_not be_ok
53
+ expect(last_response.status).to eq 404
54
+ expect(last_response.body).to eq('{"id":null,"ok":false,"status":404,"message":"Sinatra::NotFound"}')
55
+ expect(executed).to eq 0
56
+ end
57
+ end
58
+ end
@@ -0,0 +1,77 @@
1
+ # encoding: utf-8
2
+ require_relative '../../plugins/index'
3
+
4
+ require 'webmock/rspec'
5
+
6
+ noop = lambda {|env|}
7
+
8
+ config = Inventory::Server::Config::DEFAULTS
9
+
10
+ RSpec.describe Inventory::Server::Index, '#call' do
11
+ # needed for code climates to work after rspec
12
+ before(:all) do
13
+ WebMock.disable_net_connect!
14
+ end
15
+ after(:all) do
16
+ WebMock.allow_net_connect!
17
+ end
18
+
19
+ context "without id" do
20
+ env = {:facts => { :key => 'value' }}
21
+ it "should throw an error" do
22
+ expect {
23
+ Inventory::Server::Index.new(noop, config).call(env)
24
+ }.to raise_error 'id is missing'
25
+ end
26
+ end
27
+
28
+ context "without facts" do
29
+ env = {:id => 'MY_UUID' }
30
+ it "should throw an error" do
31
+ expect {
32
+ Inventory::Server::Index.new(noop, config).call(env)
33
+ }.to raise_error 'facts is missing'
34
+ end
35
+ end
36
+
37
+ context "with an ElasticSearch Server Crashed" do
38
+ env = {:id => 'MY_UUID', :facts => { :key => 'value' } }
39
+
40
+ it "should throw an error" do
41
+ stub_request(:put, "#{config[:es_host]}/inventory_facts/1-0-0/MY_UUID").to_return(:status => [500, "Internal Server Error"], :body => '{"OK": false}')
42
+
43
+ expect {
44
+ Inventory::Server::Index.new(noop, config).call(env)
45
+ }.to raise_error(/500 Internal Server Error: {"OK": false}/)
46
+ end
47
+ end
48
+
49
+ context "with an ElasticSearch Server" do
50
+ it "should call ElasticSearch" do
51
+ env = {:id => 'MY_UUID', :facts => { :key => 'value' } }
52
+ stub = stub_request(:put, "#{config[:es_host]}/inventory_facts/1-0-0/MY_UUID").to_return(:body => '{"OK": true}')
53
+
54
+ Inventory::Server::Index.new(noop, config).call(env)
55
+
56
+ expect(stub).to have_been_requested
57
+ end
58
+
59
+ it "should change url depending on the type and version" do
60
+ env = {:id => 'MY_UUID', :facts => { 'key' => 'value', 'type' => 'my_type', 'version' => 'my_version' } }
61
+ stub = stub_request(:put, "#{config[:es_host]}/inventory_my_type/my_version/MY_UUID").to_return(:body => '{"OK": true}')
62
+
63
+ Inventory::Server::Index.new(noop, config).call(env)
64
+
65
+ expect(stub).to have_been_requested
66
+ end
67
+
68
+ it "should change not pass dot, spaces and utf8 to elasticsearch" do
69
+ env = {:id => 'MY_UUID', :facts => { 'key' => 'value', 'type' => 'my typé.1', 'version' => 'my vérsion.1' } }
70
+ stub = stub_request(:put, "#{config[:es_host]}/inventory_my_typ-1/my_vrsion-1/MY_UUID").to_return(:body => '{"OK": true}')
71
+
72
+ Inventory::Server::Index.new(noop, config).call(env)
73
+
74
+ expect(stub).to have_been_requested
75
+ end
76
+ end
77
+ end
@@ -0,0 +1,126 @@
1
+ require_relative '../../plugins/json_schema_validator'
2
+
3
+ require 'rspec/mocks'
4
+
5
+ noop = lambda {|env|}
6
+
7
+ config = Inventory::Server::Config::DEFAULTS
8
+
9
+ RSpec.describe Inventory::Server::JsonSchemaValidator, '#call' do
10
+
11
+ before(:each) do
12
+ JSON::Validator.clear_cache
13
+ end
14
+
15
+ context "without facts" do
16
+ it "should throw an error" do
17
+ expect {
18
+ Inventory::Server::JsonSchemaValidator.new(noop, config).call({})
19
+ }.to raise_error 'facts is missing'
20
+ end
21
+ end
22
+
23
+ context "without version and type" do
24
+ env = { :facts => { 'key' => 'value'} }
25
+ it "should use the default config" do
26
+ expect(File).to receive(:file?).with("#{config[:json_schema_dir]}/facts/1-0-0.json").and_return false
27
+ Inventory::Server::JsonSchemaValidator.new(noop, config).call(env)
28
+ end
29
+ end
30
+
31
+ context "with facts" do
32
+ env = { :facts => { 'key' => 'value', 'type' => 'my_fact', 'version' => 'my_version' } }
33
+
34
+ context "without JSON schema" do
35
+ it "should pass" do
36
+ Inventory::Server::JsonSchemaValidator.new(noop, config).call(env)
37
+ end
38
+ end
39
+
40
+ context "with JSON schema" do
41
+ it "should fail if the file is not redable" do
42
+ expect(File).to receive(:file?).with("#{config[:json_schema_dir]}/my_fact/my_version.json").and_return true
43
+ expect {
44
+ Inventory::Server::JsonSchemaValidator.new(noop, config).call(env)
45
+ }.to raise_error Errno::ENOENT
46
+ end
47
+
48
+ it "should fail if the file is not a valid JSON" do
49
+ expect(File).to receive(:file?).with("#{config[:json_schema_dir]}/my_fact/my_version.json").and_return true
50
+ expect(File).to receive(:read).with("#{config[:json_schema_dir]}/my_fact/my_version.json").and_return '{"dsf": dsf}'
51
+ expect {
52
+ Inventory::Server::JsonSchemaValidator.new(noop, config).call(env)
53
+ }.to raise_error MultiJson::ParseError
54
+ end
55
+
56
+ it "should fail if the facts do not respect the type" do
57
+ schema = {
58
+ "type" => "object",
59
+ "properties" => {
60
+ "key"=> {"type" => "integer" }
61
+ }
62
+ }
63
+ expect(File).to receive(:file?).with("#{config[:json_schema_dir]}/my_fact/my_version.json").and_return true
64
+ expect(File).to receive(:read).with("#{config[:json_schema_dir]}/my_fact/my_version.json").and_return schema.to_json
65
+ expect {
66
+ Inventory::Server::JsonSchemaValidator.new(noop, config).call(env)
67
+ }.to raise_error JSON::Schema::ValidationError
68
+ end
69
+
70
+ it "should pass if the facts validate the JSON Schema" do
71
+ schema = {
72
+ "type" => "object",
73
+ "properties" => {
74
+ "key"=> {"type" => "string" }
75
+ }
76
+ }
77
+ expect(File).to receive(:file?).with("#{config[:json_schema_dir]}/my_fact/my_version.json").and_return true
78
+ expect(File).to receive(:read).with("#{config[:json_schema_dir]}/my_fact/my_version.json").and_return schema.to_json
79
+
80
+ Inventory::Server::JsonSchemaValidator.new(noop, config).call(env)
81
+ end
82
+
83
+ it "should pass if the facts contains more attributes than the JSON Schema " do
84
+ schema = {
85
+ "type" => "object",
86
+ "properties" => {
87
+ }
88
+ }
89
+ expect(File).to receive(:file?).with("#{config[:json_schema_dir]}/my_fact/my_version.json").and_return true
90
+ expect(File).to receive(:read).with("#{config[:json_schema_dir]}/my_fact/my_version.json").and_return schema.to_json
91
+
92
+ Inventory::Server::JsonSchemaValidator.new(noop, config).call(env)
93
+ end
94
+
95
+ it "should pass if optional fields are not present " do
96
+ schema = {
97
+ "type" => "object",
98
+ "properties" => {
99
+ "optional"=> {"type" => "string" }
100
+ }
101
+ }
102
+ expect(File).to receive(:file?).with("#{config[:json_schema_dir]}/my_fact/my_version.json").and_return true
103
+ expect(File).to receive(:read).with("#{config[:json_schema_dir]}/my_fact/my_version.json").and_return schema.to_json
104
+
105
+ Inventory::Server::JsonSchemaValidator.new(noop, config).call(env)
106
+ end
107
+
108
+ it "should fail if mandatory fields are not present " do
109
+ schema = {
110
+ "type" => "object",
111
+ "required" => ["mandatory"],
112
+ "properties" => {
113
+ "mandatory"=> {"type" => "string" }
114
+ }
115
+ }
116
+ expect(File).to receive(:file?).with("#{config[:json_schema_dir]}/my_fact/my_version.json").and_return true
117
+ expect(File).to receive(:read).with("#{config[:json_schema_dir]}/my_fact/my_version.json").and_return schema.to_json
118
+
119
+ expect {
120
+ Inventory::Server::JsonSchemaValidator.new(noop, config).call(env)
121
+ }.to raise_error JSON::Schema::ValidationError
122
+ end
123
+ end
124
+ end
125
+
126
+ end
@@ -0,0 +1,34 @@
1
+ require 'inventory/server/loader'
2
+
3
+ RSpec.describe Inventory::Server::Loader do
4
+
5
+ context "without plugin_path" do
6
+ loader = Inventory::Server::Loader.new(Inventory::Server::Config::DEFAULTS)
7
+
8
+ it "should throw an error when loading non existing plugins" do
9
+ expect {
10
+ plugins = loader.load_plugins 'blabla'
11
+ }.to raise_error 'Plugin blabla not found'
12
+ end
13
+
14
+ it "should load official plugins" do
15
+ plugins = loader.load_plugins 'index', 'facts_parser'
16
+ expect(plugins[0]).to eq Inventory::Server::Index
17
+ expect(plugins[1]).to eq Inventory::Server::FactsParser
18
+ end
19
+ end
20
+
21
+ context "with an existing plugin_path" do
22
+ loader = Inventory::Server::Loader.new(:plugins_path => File.join(File.dirname(__FILE__), 'fixtures'))
23
+ it "should load custom plugins" do
24
+ plugins = loader.load_plugins 'simple_plugin'
25
+ expect(plugins[0]).to eq Inventory::Server::SimplePlugin
26
+ end
27
+
28
+ it "should throw an error if plugins_path not found" do
29
+ expect {
30
+ loader = Inventory::Server::Loader.new(:plugins_path => '/tmp/blabla/plugins')
31
+ }.to raise_error 'plugins_path /tmp/blabla/plugins not found'
32
+ end
33
+ end
34
+ end
@@ -0,0 +1,50 @@
1
+ require_relative '../../plugins/log_failures_on_disk'
2
+ require 'rspec/mocks'
3
+
4
+ noop = lambda {|env|}
5
+
6
+ RSpec.describe Inventory::Server::LogFailuresOnDisk do
7
+ config = { :failed_facts_dir => './log' }
8
+
9
+ context "without body" do
10
+ env = { :id => 'id', :body => nil }
11
+ it "should throw an error" do
12
+ expect {
13
+ Inventory::Server::LogFailuresOnDisk.new(noop, config).call(env)
14
+ Inventory::Server::FactsParser.new(noop, {}).call(env)
15
+ }.to raise_error 'body missing'
16
+ end
17
+ end
18
+
19
+ context "without id" do
20
+ env = { :id => nil, :body => 'body' }
21
+ it "should throw an error" do
22
+ expect {
23
+ Inventory::Server::LogFailuresOnDisk.new(noop, config).call(env)
24
+ Inventory::Server::FactsParser.new(noop, {}).call(env)
25
+ }.to raise_error 'id missing'
26
+ end
27
+ end
28
+
29
+ context "with all mandatory params" do
30
+ env = { :id => 'MY_UUID', :body => 'body' }
31
+
32
+ context "without error" do
33
+ it "should pass without writing anything" do
34
+ Inventory::Server::LogFailuresOnDisk.new(noop, config).call(env)
35
+ expect(File).to_not receive(:write)
36
+ end
37
+ end
38
+
39
+ context "with error" do
40
+ it "should write facts" do
41
+ raise_error = lambda{ |e| raise "an error" }
42
+ expect(File).to receive(:write).with('./log/MY_UUID', 'body')
43
+ expect(File).to receive(:write).with('./log/MY_UUID.log', /an error/)
44
+ expect {
45
+ Inventory::Server::LogFailuresOnDisk.new(raise_error, config).call(env)
46
+ }.to raise_error 'an error'
47
+ end
48
+ end
49
+ end
50
+ end
@@ -0,0 +1,11 @@
1
+ require 'inventory/server.rb'
2
+
3
+ RSpec.describe Inventory::Server::Server do
4
+ it "should instantiate without error" do
5
+ expect(Inventory::Server::InventoryLogger).to_not receive(:setup).with(any_args).once
6
+ server = Inventory::Server::Server.new({})
7
+
8
+ expect(server.config).to_not eq nil
9
+ expect(server.middlewares).to_not eq nil
10
+ end
11
+ end
@@ -0,0 +1,68 @@
1
+ require 'inventory/server/smtp_server'
2
+
3
+ require 'mail'
4
+ require "middleware"
5
+
6
+ PORT=2526
7
+ HOST="127.0.0.1"
8
+
9
+ Mail.defaults do
10
+ delivery_method :smtp, address: HOST, port: PORT
11
+ end
12
+
13
+ RSpec.describe Inventory::Server::SMTPServer do
14
+ context "With an SMTPServer running" do
15
+
16
+ smtp_server = nil
17
+ executed = nil
18
+ trigger_error = nil
19
+ mail = nil
20
+
21
+ before(:all) do
22
+
23
+ # Start SMTPServer
24
+ config = {
25
+ :host => HOST,
26
+ :smtp_port => PORT,
27
+ :max_connections => 1,
28
+ }
29
+ middleware = lambda { |env|
30
+ executed += 1
31
+ raise 'my custom error message' if trigger_error
32
+ }
33
+
34
+ smtp_server = Inventory::Server::SMTPServer.new(config, middleware)
35
+ smtp_server.audit = true
36
+ smtp_server.start
37
+ end
38
+
39
+ before(:each) do
40
+ # Reset context variables
41
+ executed = 0
42
+ trigger_error = false
43
+
44
+ mail = Mail.new do
45
+ from 'rspec@localhost'
46
+ to 'midi@localhost'
47
+ subject 'MY_UUID'
48
+ body '{"key": "value"}'
49
+ end
50
+ end
51
+
52
+ it "should accept mails" do
53
+ mail.deliver!
54
+
55
+ expect(executed).to eq 1
56
+ end
57
+
58
+ it "should not raise error when processing fails" do
59
+ trigger_error = true
60
+ mail.deliver!
61
+ expect(executed).to eq 1
62
+ end
63
+
64
+ after(:all) do
65
+ smtp_server.stop
66
+ end
67
+ end
68
+ end
data/tmp/.gitignore ADDED
File without changes
metadata ADDED
@@ -0,0 +1,434 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: inventory-server
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.0.1
5
+ platform: ruby
6
+ authors:
7
+ - Filirom1
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2015-03-01 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: midi-smtp-server
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - "~>"
18
+ - !ruby/object:Gem::Version
19
+ version: '1.1'
20
+ type: :runtime
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - "~>"
25
+ - !ruby/object:Gem::Version
26
+ version: '1.1'
27
+ - !ruby/object:Gem::Dependency
28
+ name: rest-client
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - "~>"
32
+ - !ruby/object:Gem::Version
33
+ version: '1.7'
34
+ type: :runtime
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - "~>"
39
+ - !ruby/object:Gem::Version
40
+ version: '1.7'
41
+ - !ruby/object:Gem::Dependency
42
+ name: gserver
43
+ requirement: !ruby/object:Gem::Requirement
44
+ requirements:
45
+ - - "~>"
46
+ - !ruby/object:Gem::Version
47
+ version: '0.0'
48
+ type: :runtime
49
+ prerelease: false
50
+ version_requirements: !ruby/object:Gem::Requirement
51
+ requirements:
52
+ - - "~>"
53
+ - !ruby/object:Gem::Version
54
+ version: '0.0'
55
+ - !ruby/object:Gem::Dependency
56
+ name: mail
57
+ requirement: !ruby/object:Gem::Requirement
58
+ requirements:
59
+ - - "~>"
60
+ - !ruby/object:Gem::Version
61
+ version: '2.6'
62
+ type: :runtime
63
+ prerelease: false
64
+ version_requirements: !ruby/object:Gem::Requirement
65
+ requirements:
66
+ - - "~>"
67
+ - !ruby/object:Gem::Version
68
+ version: '2.6'
69
+ - !ruby/object:Gem::Dependency
70
+ name: filum
71
+ requirement: !ruby/object:Gem::Requirement
72
+ requirements:
73
+ - - "~>"
74
+ - !ruby/object:Gem::Version
75
+ version: '2.2'
76
+ type: :runtime
77
+ prerelease: false
78
+ version_requirements: !ruby/object:Gem::Requirement
79
+ requirements:
80
+ - - "~>"
81
+ - !ruby/object:Gem::Version
82
+ version: '2.2'
83
+ - !ruby/object:Gem::Dependency
84
+ name: json
85
+ requirement: !ruby/object:Gem::Requirement
86
+ requirements:
87
+ - - "~>"
88
+ - !ruby/object:Gem::Version
89
+ version: '1.8'
90
+ type: :runtime
91
+ prerelease: false
92
+ version_requirements: !ruby/object:Gem::Requirement
93
+ requirements:
94
+ - - "~>"
95
+ - !ruby/object:Gem::Version
96
+ version: '1.8'
97
+ - !ruby/object:Gem::Dependency
98
+ name: activesupport
99
+ requirement: !ruby/object:Gem::Requirement
100
+ requirements:
101
+ - - "~>"
102
+ - !ruby/object:Gem::Version
103
+ version: '4.2'
104
+ type: :runtime
105
+ prerelease: false
106
+ version_requirements: !ruby/object:Gem::Requirement
107
+ requirements:
108
+ - - "~>"
109
+ - !ruby/object:Gem::Version
110
+ version: '4.2'
111
+ - !ruby/object:Gem::Dependency
112
+ name: libxml-to-hash
113
+ requirement: !ruby/object:Gem::Requirement
114
+ requirements:
115
+ - - "~>"
116
+ - !ruby/object:Gem::Version
117
+ version: '0.2'
118
+ type: :runtime
119
+ prerelease: false
120
+ version_requirements: !ruby/object:Gem::Requirement
121
+ requirements:
122
+ - - "~>"
123
+ - !ruby/object:Gem::Version
124
+ version: '0.2'
125
+ - !ruby/object:Gem::Dependency
126
+ name: middleware
127
+ requirement: !ruby/object:Gem::Requirement
128
+ requirements:
129
+ - - "~>"
130
+ - !ruby/object:Gem::Version
131
+ version: '0.1'
132
+ type: :runtime
133
+ prerelease: false
134
+ version_requirements: !ruby/object:Gem::Requirement
135
+ requirements:
136
+ - - "~>"
137
+ - !ruby/object:Gem::Version
138
+ version: '0.1'
139
+ - !ruby/object:Gem::Dependency
140
+ name: app_configuration
141
+ requirement: !ruby/object:Gem::Requirement
142
+ requirements:
143
+ - - "~>"
144
+ - !ruby/object:Gem::Version
145
+ version: '0.0'
146
+ type: :runtime
147
+ prerelease: false
148
+ version_requirements: !ruby/object:Gem::Requirement
149
+ requirements:
150
+ - - "~>"
151
+ - !ruby/object:Gem::Version
152
+ version: '0.0'
153
+ - !ruby/object:Gem::Dependency
154
+ name: sinatra
155
+ requirement: !ruby/object:Gem::Requirement
156
+ requirements:
157
+ - - "~>"
158
+ - !ruby/object:Gem::Version
159
+ version: '1.4'
160
+ type: :runtime
161
+ prerelease: false
162
+ version_requirements: !ruby/object:Gem::Requirement
163
+ requirements:
164
+ - - "~>"
165
+ - !ruby/object:Gem::Version
166
+ version: '1.4'
167
+ - !ruby/object:Gem::Dependency
168
+ name: ensure-encoding
169
+ requirement: !ruby/object:Gem::Requirement
170
+ requirements:
171
+ - - "~>"
172
+ - !ruby/object:Gem::Version
173
+ version: '0.1'
174
+ type: :runtime
175
+ prerelease: false
176
+ version_requirements: !ruby/object:Gem::Requirement
177
+ requirements:
178
+ - - "~>"
179
+ - !ruby/object:Gem::Version
180
+ version: '0.1'
181
+ - !ruby/object:Gem::Dependency
182
+ name: json-schema
183
+ requirement: !ruby/object:Gem::Requirement
184
+ requirements:
185
+ - - "~>"
186
+ - !ruby/object:Gem::Version
187
+ version: '2.5'
188
+ type: :runtime
189
+ prerelease: false
190
+ version_requirements: !ruby/object:Gem::Requirement
191
+ requirements:
192
+ - - "~>"
193
+ - !ruby/object:Gem::Version
194
+ version: '2.5'
195
+ - !ruby/object:Gem::Dependency
196
+ name: unicorn
197
+ requirement: !ruby/object:Gem::Requirement
198
+ requirements:
199
+ - - "~>"
200
+ - !ruby/object:Gem::Version
201
+ version: '4.8'
202
+ type: :runtime
203
+ prerelease: false
204
+ version_requirements: !ruby/object:Gem::Requirement
205
+ requirements:
206
+ - - "~>"
207
+ - !ruby/object:Gem::Version
208
+ version: '4.8'
209
+ - !ruby/object:Gem::Dependency
210
+ name: bundler
211
+ requirement: !ruby/object:Gem::Requirement
212
+ requirements:
213
+ - - "~>"
214
+ - !ruby/object:Gem::Version
215
+ version: '1.7'
216
+ type: :development
217
+ prerelease: false
218
+ version_requirements: !ruby/object:Gem::Requirement
219
+ requirements:
220
+ - - "~>"
221
+ - !ruby/object:Gem::Version
222
+ version: '1.7'
223
+ - !ruby/object:Gem::Dependency
224
+ name: rake
225
+ requirement: !ruby/object:Gem::Requirement
226
+ requirements:
227
+ - - "~>"
228
+ - !ruby/object:Gem::Version
229
+ version: '10.0'
230
+ type: :development
231
+ prerelease: false
232
+ version_requirements: !ruby/object:Gem::Requirement
233
+ requirements:
234
+ - - "~>"
235
+ - !ruby/object:Gem::Version
236
+ version: '10.0'
237
+ - !ruby/object:Gem::Dependency
238
+ name: rack-test
239
+ requirement: !ruby/object:Gem::Requirement
240
+ requirements:
241
+ - - "~>"
242
+ - !ruby/object:Gem::Version
243
+ version: '0.6'
244
+ type: :development
245
+ prerelease: false
246
+ version_requirements: !ruby/object:Gem::Requirement
247
+ requirements:
248
+ - - "~>"
249
+ - !ruby/object:Gem::Version
250
+ version: '0.6'
251
+ - !ruby/object:Gem::Dependency
252
+ name: codeclimate-test-reporter
253
+ requirement: !ruby/object:Gem::Requirement
254
+ requirements:
255
+ - - "~>"
256
+ - !ruby/object:Gem::Version
257
+ version: '0.4'
258
+ type: :development
259
+ prerelease: false
260
+ version_requirements: !ruby/object:Gem::Requirement
261
+ requirements:
262
+ - - "~>"
263
+ - !ruby/object:Gem::Version
264
+ version: '0.4'
265
+ - !ruby/object:Gem::Dependency
266
+ name: rspec
267
+ requirement: !ruby/object:Gem::Requirement
268
+ requirements:
269
+ - - "~>"
270
+ - !ruby/object:Gem::Version
271
+ version: '3.0'
272
+ type: :development
273
+ prerelease: false
274
+ version_requirements: !ruby/object:Gem::Requirement
275
+ requirements:
276
+ - - "~>"
277
+ - !ruby/object:Gem::Version
278
+ version: '3.0'
279
+ - !ruby/object:Gem::Dependency
280
+ name: rspec-mocks
281
+ requirement: !ruby/object:Gem::Requirement
282
+ requirements:
283
+ - - "~>"
284
+ - !ruby/object:Gem::Version
285
+ version: '3.2'
286
+ type: :development
287
+ prerelease: false
288
+ version_requirements: !ruby/object:Gem::Requirement
289
+ requirements:
290
+ - - "~>"
291
+ - !ruby/object:Gem::Version
292
+ version: '3.2'
293
+ - !ruby/object:Gem::Dependency
294
+ name: webmock
295
+ requirement: !ruby/object:Gem::Requirement
296
+ requirements:
297
+ - - "~>"
298
+ - !ruby/object:Gem::Version
299
+ version: '1.20'
300
+ type: :development
301
+ prerelease: false
302
+ version_requirements: !ruby/object:Gem::Requirement
303
+ requirements:
304
+ - - "~>"
305
+ - !ruby/object:Gem::Version
306
+ version: '1.20'
307
+ - !ruby/object:Gem::Dependency
308
+ name: thin
309
+ requirement: !ruby/object:Gem::Requirement
310
+ requirements:
311
+ - - "~>"
312
+ - !ruby/object:Gem::Version
313
+ version: '1.6'
314
+ type: :development
315
+ prerelease: false
316
+ version_requirements: !ruby/object:Gem::Requirement
317
+ requirements:
318
+ - - "~>"
319
+ - !ruby/object:Gem::Version
320
+ version: '1.6'
321
+ - !ruby/object:Gem::Dependency
322
+ name: parallel
323
+ requirement: !ruby/object:Gem::Requirement
324
+ requirements:
325
+ - - "~>"
326
+ - !ruby/object:Gem::Version
327
+ version: '1.4'
328
+ type: :development
329
+ prerelease: false
330
+ version_requirements: !ruby/object:Gem::Requirement
331
+ requirements:
332
+ - - "~>"
333
+ - !ruby/object:Gem::Version
334
+ version: '1.4'
335
+ description: Inventory server store and index data sent from the agent
336
+ email:
337
+ - filirom1@gmail.com
338
+ executables:
339
+ - inventory-server
340
+ extensions: []
341
+ extra_rdoc_files: []
342
+ files:
343
+ - ".gitignore"
344
+ - ".rspec"
345
+ - ".travis.yml"
346
+ - Dockerfile
347
+ - Dockerfile-passenger
348
+ - Dockerfile-unicorn
349
+ - Gemfile
350
+ - LICENSE.txt
351
+ - README.md
352
+ - Rakefile
353
+ - bin/inventory-server
354
+ - circle.yml
355
+ - config.ru
356
+ - docker/passenger/passenger.conf
357
+ - docker/passenger/run-httpd.sh
358
+ - docker/unicorn/nginx.conf
359
+ - docker/unicorn/run-unicorn.sh
360
+ - docker/unicorn/unicorn.conf
361
+ - docker/unicorn/unicorn.rb
362
+ - fig.yml
363
+ - inventory-server.gemspec
364
+ - lib/inventory/server.rb
365
+ - lib/inventory/server/cli.rb
366
+ - lib/inventory/server/config.rb
367
+ - lib/inventory/server/email_parser.rb
368
+ - lib/inventory/server/http_server.rb
369
+ - lib/inventory/server/inventory_error.rb
370
+ - lib/inventory/server/loader.rb
371
+ - lib/inventory/server/logger.rb
372
+ - lib/inventory/server/smtp_server.rb
373
+ - lib/inventory/server/version.rb
374
+ - plugins/facts_parser.rb
375
+ - plugins/index.rb
376
+ - plugins/json_schema_validator.rb
377
+ - plugins/log_failures_on_disk.rb
378
+ - public/.gitignore
379
+ - spec/integration/fixtures/facter.xml
380
+ - spec/integration/http_spec.rb
381
+ - spec/spec_helper.rb
382
+ - spec/unit/cli_spec.rb
383
+ - spec/unit/config_spec.rb
384
+ - spec/unit/email_parser_spec.rb
385
+ - spec/unit/facts_parser_spec.rb
386
+ - spec/unit/fixtures/simple_plugin.rb
387
+ - spec/unit/http_server_spec.rb
388
+ - spec/unit/index_spec.rb
389
+ - spec/unit/json_schema_validator_spec.rb
390
+ - spec/unit/loader_spec.rb
391
+ - spec/unit/log_failures_on_disk_spec.rb
392
+ - spec/unit/server_spec.rb
393
+ - spec/unit/smtp_server_spec.rb
394
+ - tmp/.gitignore
395
+ homepage: ''
396
+ licenses:
397
+ - MIT
398
+ metadata: {}
399
+ post_install_message:
400
+ rdoc_options: []
401
+ require_paths:
402
+ - lib
403
+ required_ruby_version: !ruby/object:Gem::Requirement
404
+ requirements:
405
+ - - ">="
406
+ - !ruby/object:Gem::Version
407
+ version: '0'
408
+ required_rubygems_version: !ruby/object:Gem::Requirement
409
+ requirements:
410
+ - - ">="
411
+ - !ruby/object:Gem::Version
412
+ version: '0'
413
+ requirements: []
414
+ rubyforge_project:
415
+ rubygems_version: 2.4.5
416
+ signing_key:
417
+ specification_version: 4
418
+ summary: Inventory server store and index data sent from the agent
419
+ test_files:
420
+ - spec/integration/fixtures/facter.xml
421
+ - spec/integration/http_spec.rb
422
+ - spec/spec_helper.rb
423
+ - spec/unit/cli_spec.rb
424
+ - spec/unit/config_spec.rb
425
+ - spec/unit/email_parser_spec.rb
426
+ - spec/unit/facts_parser_spec.rb
427
+ - spec/unit/fixtures/simple_plugin.rb
428
+ - spec/unit/http_server_spec.rb
429
+ - spec/unit/index_spec.rb
430
+ - spec/unit/json_schema_validator_spec.rb
431
+ - spec/unit/loader_spec.rb
432
+ - spec/unit/log_failures_on_disk_spec.rb
433
+ - spec/unit/server_spec.rb
434
+ - spec/unit/smtp_server_spec.rb