zygote 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.
- checksums.yaml +4 -4
- data/lib/zygote/cell_queue.rb +1 -1
- data/lib/zygote/http.rb +10 -12
- data/lib/zygote/test.rb +81 -0
- data/lib/zygote/util.rb +1 -1
- data/lib/zygote/version.rb +1 -1
- metadata +14 -13
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: eebe118f907539d05c38e4364bd52a89e6d0191a
|
4
|
+
data.tar.gz: 52be5146b4bf92e912ee2ff8fb0c43a3a3fbe0e7
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 8fca27b1b6f6fb84e97fd01f058bf651bbaa08915e895d085561a1379eefdfb79079fd8e1cb722c9b3a17763302df584e1914e08af6f5a8efd9eb81896a641c5
|
7
|
+
data.tar.gz: ef8dbc472d282de13ae75c6566a033cbd68e31858c1c67bb619ea4c228f9c5a69145d487e5ceb85d4a4a3757f2f176eebcc78548463d271a73ef9f0de378c7be
|
data/lib/zygote/cell_queue.rb
CHANGED
data/lib/zygote/http.rb
CHANGED
@@ -10,7 +10,6 @@ require 'zygote/cell_queue'
|
|
10
10
|
# Main HTTP class, handles routing methods
|
11
11
|
# Uses sinatra format (all sinatra docs on routing methods apply)
|
12
12
|
class ZygoteWeb < Genesis::Http::Handler
|
13
|
-
|
14
13
|
# Requested by iPXE on boot, chains into /boot.
|
15
14
|
# This enables us to customize what details we want iPXE to send us
|
16
15
|
# The iPXE undionly.kpxe should contain an embedded script to call this URL
|
@@ -24,7 +23,7 @@ class ZygoteWeb < Genesis::Http::Handler
|
|
24
23
|
cleaned = clean_params(params.to_h)
|
25
24
|
# Add the request ip into the params
|
26
25
|
ip = request.ip == '127.0.0.1' ? @env['HTTP_X_FORWARDED_FOR'] : request.ip
|
27
|
-
ip = '127.0.0.1' if
|
26
|
+
ip = '127.0.0.1' if ENV['TESTING'] || ip.nil? || ip.empty?
|
28
27
|
cleaned['ip'] = ip
|
29
28
|
# Compute SKU from parameters
|
30
29
|
sku = compute_sku(cleaned['manufacturer'], cleaned['serial'], cleaned['board-serial'])
|
@@ -33,7 +32,7 @@ class ZygoteWeb < Genesis::Http::Handler
|
|
33
32
|
queued_data = CellQueue.shift(sku)
|
34
33
|
cleaned.merge!(queued_data) if queued_data
|
35
34
|
@channel << cleaned
|
36
|
-
body { erb :menu, locals: { opts: ZygoteWeb
|
35
|
+
body { erb :menu, locals: { opts: ZygoteWeb.cell_config.merge('params' => cleaned || {}) } }
|
37
36
|
end
|
38
37
|
|
39
38
|
# Render an action for a particular cell
|
@@ -43,7 +42,7 @@ class ZygoteWeb < Genesis::Http::Handler
|
|
43
42
|
# Add the cell to the parameters
|
44
43
|
cell = cleaned['cell']
|
45
44
|
# Merge the cleaned params in with any cell options
|
46
|
-
cell_opts = ZygoteWeb
|
45
|
+
cell_opts = ZygoteWeb.cell_config['index']['cells'][cell] || {}
|
47
46
|
opts = cell_opts.merge('params' => cleaned || {})
|
48
47
|
@channel << opts # for debugging
|
49
48
|
body { erb :"#{cell}/#{cleaned['action']}".to_sym, locals: { opts: opts } }
|
@@ -59,7 +58,7 @@ class ZygoteWeb < Genesis::Http::Handler
|
|
59
58
|
CellQueue.all.each do |queue_entry|
|
60
59
|
response[queue_entry.name] = queue_entry.data
|
61
60
|
end
|
62
|
-
body { JSON.pretty_generate(response)}
|
61
|
+
body { JSON.pretty_generate(response) }
|
63
62
|
end
|
64
63
|
|
65
64
|
# Delete the queue for a SKU
|
@@ -69,7 +68,6 @@ class ZygoteWeb < Genesis::Http::Handler
|
|
69
68
|
end
|
70
69
|
|
71
70
|
post %r{/queue/bulk$} do
|
72
|
-
|
73
71
|
bulk_queue = JSON.parse(request.body.read)
|
74
72
|
bulk_queue.each do |asset, queue|
|
75
73
|
queue = [queue] unless queue.is_a?(Array)
|
@@ -95,11 +93,11 @@ class ZygoteWeb < Genesis::Http::Handler
|
|
95
93
|
puts args if ENV['DEBUG']
|
96
94
|
end
|
97
95
|
|
98
|
-
|
96
|
+
def self::cell_config
|
99
97
|
@@cell_config
|
100
|
-
|
98
|
+
end
|
101
99
|
|
102
|
-
def
|
100
|
+
def self::cell_config=(value)
|
103
101
|
@@cell_config = value
|
104
102
|
end
|
105
103
|
end
|
@@ -107,15 +105,15 @@ end
|
|
107
105
|
def zygote(port: 7000, threads:1000, config_path: nil, cells: [], debug:false)
|
108
106
|
debug ||= ENV['DEBUG']
|
109
107
|
|
110
|
-
cell_config= YAML.load(File.read(config_path || File.join(Dir.pwd, 'config', 'cells.yml')))
|
111
|
-
ZygoteWeb
|
108
|
+
cell_config = YAML.load(File.read(config_path || File.join(Dir.pwd, 'config', 'cells.yml')))
|
109
|
+
ZygoteWeb.cell_config = cell_config
|
112
110
|
zygote = Genesis::Reactor.new(
|
113
111
|
threads: threads,
|
114
112
|
protocols: {
|
115
113
|
Genesis::Http::Protocol => port
|
116
114
|
},
|
117
115
|
handlers: [ZygoteWeb],
|
118
|
-
views: [File.expand_path('../../../views', __FILE__), cells
|
116
|
+
views: [File.expand_path('../../../views', __FILE__), cells].flatten,
|
119
117
|
debug: debug
|
120
118
|
)
|
121
119
|
if debug
|
data/lib/zygote/test.rb
ADDED
@@ -0,0 +1,81 @@
|
|
1
|
+
require 'net/http'
|
2
|
+
require 'socket'
|
3
|
+
require 'fileutils'
|
4
|
+
|
5
|
+
require 'rspec'
|
6
|
+
require 'em-synchrony'
|
7
|
+
require 'em-synchrony/em-http'
|
8
|
+
|
9
|
+
module Zygote
|
10
|
+
|
11
|
+
module TestConfig
|
12
|
+
extend self
|
13
|
+
attr_reader :config_path, :cells, :port, :fixtures
|
14
|
+
def setup(fixtures: fixtures, config_path: config_path, cells: cells, port: port)
|
15
|
+
@fixtures = fixtures || File.expand_path('../../../spec/fixtures', __FILE__)
|
16
|
+
@config_path = config_path || File.join(@fixtures, 'cells.yml')
|
17
|
+
@cells = cells || File.join(@fixtures, 'cells')
|
18
|
+
@port = port || 7000
|
19
|
+
end
|
20
|
+
end
|
21
|
+
|
22
|
+
# Run within synchrony block to prevent blocking
|
23
|
+
module ZygoteSpec
|
24
|
+
def self.append_features(mod)
|
25
|
+
mod.class_eval %[
|
26
|
+
around(:each) do |example|
|
27
|
+
EM.synchrony do
|
28
|
+
zygote(
|
29
|
+
config_path: TestConfig.config_path,
|
30
|
+
cells: TestConfig.cells
|
31
|
+
).start
|
32
|
+
example.run
|
33
|
+
EM.stop
|
34
|
+
end
|
35
|
+
end
|
36
|
+
]
|
37
|
+
end
|
38
|
+
end
|
39
|
+
|
40
|
+
# Use a fresh database fro seed for each run
|
41
|
+
module MemorySpec
|
42
|
+
def self.append_features(mod)
|
43
|
+
mod.class_eval %[
|
44
|
+
around(:each) do |example|
|
45
|
+
seed = File.join(TestConfig.fixtures, 'memory_seed.db')
|
46
|
+
FileUtils.cp(seed, ENV['DATABASE_PATH'])
|
47
|
+
Memory::load
|
48
|
+
example.run
|
49
|
+
end
|
50
|
+
]
|
51
|
+
end
|
52
|
+
end
|
53
|
+
|
54
|
+
def match_fixture(name, actual)
|
55
|
+
path = File.join(TestConfig.fixtures, 'data', "#{name}.txt")
|
56
|
+
File.open(path, 'w') { |f| f.write(actual) } if ENV['FIXTURE_RECORD']
|
57
|
+
expect(actual).to eq(File.read(path))
|
58
|
+
end
|
59
|
+
|
60
|
+
# Returns EventMachine::HttpClient
|
61
|
+
def get(uri, params = {})
|
62
|
+
uriq = "#{uri}#{parameterize(params)}"
|
63
|
+
EM::Synchrony.sync(EventMachine::HttpRequest.new(File.join("http://#{Socket.gethostname}:#{TestConfig.port}/", uriq)).aget(query: params))
|
64
|
+
end
|
65
|
+
|
66
|
+
# Returns EventMachine::HttpClient
|
67
|
+
def delete(uri, params = {})
|
68
|
+
uriq = "#{uri}#{parameterize(params)}"
|
69
|
+
EM::Synchrony.sync(EventMachine::HttpRequest.new(File.join("http://#{Socket.gethostname}:#{TestConfig.port}/", uriq)).adelete(query: params))
|
70
|
+
end
|
71
|
+
|
72
|
+
# Returns EventMachine::HttpClient
|
73
|
+
def post(uri, params = {})
|
74
|
+
EM::Synchrony.sync(EventMachine::HttpRequest.new("http://#{Socket.gethostname}:#{TestConfig.port}/#{uri}").apost(body: params))
|
75
|
+
end
|
76
|
+
|
77
|
+
def parameterize(params)
|
78
|
+
q = params.to_query
|
79
|
+
q.empty? ? '' : "?#{q}"
|
80
|
+
end
|
81
|
+
end
|
data/lib/zygote/util.rb
CHANGED
data/lib/zygote/version.rb
CHANGED
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: zygote
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
4
|
+
version: 0.0.2
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Dale Hamel
|
@@ -30,14 +30,14 @@ dependencies:
|
|
30
30
|
requirements:
|
31
31
|
- - '='
|
32
32
|
- !ruby/object:Gem::Version
|
33
|
-
version: 0.0.
|
33
|
+
version: 0.0.5
|
34
34
|
type: :runtime
|
35
35
|
prerelease: false
|
36
36
|
version_requirements: !ruby/object:Gem::Requirement
|
37
37
|
requirements:
|
38
38
|
- - '='
|
39
39
|
- !ruby/object:Gem::Version
|
40
|
-
version: 0.0.
|
40
|
+
version: 0.0.5
|
41
41
|
- !ruby/object:Gem::Dependency
|
42
42
|
name: supermodel
|
43
43
|
requirement: !ruby/object:Gem::Requirement
|
@@ -53,47 +53,47 @@ dependencies:
|
|
53
53
|
- !ruby/object:Gem::Version
|
54
54
|
version: 0.1.6
|
55
55
|
- !ruby/object:Gem::Dependency
|
56
|
-
name:
|
56
|
+
name: em-http-request
|
57
57
|
requirement: !ruby/object:Gem::Requirement
|
58
58
|
requirements:
|
59
59
|
- - '='
|
60
60
|
- !ruby/object:Gem::Version
|
61
|
-
version:
|
62
|
-
type: :
|
61
|
+
version: 1.1.2
|
62
|
+
type: :runtime
|
63
63
|
prerelease: false
|
64
64
|
version_requirements: !ruby/object:Gem::Requirement
|
65
65
|
requirements:
|
66
66
|
- - '='
|
67
67
|
- !ruby/object:Gem::Version
|
68
|
-
version:
|
68
|
+
version: 1.1.2
|
69
69
|
- !ruby/object:Gem::Dependency
|
70
|
-
name: pry
|
70
|
+
name: pry
|
71
71
|
requirement: !ruby/object:Gem::Requirement
|
72
72
|
requirements:
|
73
73
|
- - '='
|
74
74
|
- !ruby/object:Gem::Version
|
75
|
-
version:
|
75
|
+
version: 0.10.3
|
76
76
|
type: :development
|
77
77
|
prerelease: false
|
78
78
|
version_requirements: !ruby/object:Gem::Requirement
|
79
79
|
requirements:
|
80
80
|
- - '='
|
81
81
|
- !ruby/object:Gem::Version
|
82
|
-
version:
|
82
|
+
version: 0.10.3
|
83
83
|
- !ruby/object:Gem::Dependency
|
84
|
-
name:
|
84
|
+
name: pry-byebug
|
85
85
|
requirement: !ruby/object:Gem::Requirement
|
86
86
|
requirements:
|
87
87
|
- - '='
|
88
88
|
- !ruby/object:Gem::Version
|
89
|
-
version:
|
89
|
+
version: 3.3.0
|
90
90
|
type: :development
|
91
91
|
prerelease: false
|
92
92
|
version_requirements: !ruby/object:Gem::Requirement
|
93
93
|
requirements:
|
94
94
|
- - '='
|
95
95
|
- !ruby/object:Gem::Version
|
96
|
-
version:
|
96
|
+
version: 3.3.0
|
97
97
|
- !ruby/object:Gem::Dependency
|
98
98
|
name: rake
|
99
99
|
requirement: !ruby/object:Gem::Requirement
|
@@ -146,6 +146,7 @@ files:
|
|
146
146
|
- lib/zygote/cell_queue.rb
|
147
147
|
- lib/zygote/http.rb
|
148
148
|
- lib/zygote/memory.rb
|
149
|
+
- lib/zygote/test.rb
|
149
150
|
- lib/zygote/util.rb
|
150
151
|
- lib/zygote/version.rb
|
151
152
|
- views/boot.erb
|