nutella_framework 0.3.1 → 0.4.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.
Files changed (61) hide show
  1. checksums.yaml +4 -4
  2. data/Gemfile +3 -0
  3. data/README.md +3 -4
  4. data/VERSION +1 -1
  5. data/data/startup +3 -3
  6. data/framework_components/example_framework_interface/dandelion-flowers-card.jpg +0 -0
  7. data/framework_components/example_framework_interface/index.html +18 -0
  8. data/framework_components/main_interface/main_interface_bot.rb +183 -0
  9. data/framework_components/main_interface/public/index.html +54 -0
  10. data/framework_components/main_interface/views/index.erb +63 -0
  11. data/framework_components/order.json.example +6 -0
  12. data/framework_components/runs_list_bot/app_runs_list_bot.rb +15 -0
  13. data/lib/{core/commands → commands}/broker.rb +2 -2
  14. data/lib/{core/commands → commands}/checkup.rb +2 -2
  15. data/lib/commands/compile.rb +13 -0
  16. data/lib/commands/dependencies.rb +13 -0
  17. data/lib/commands/help.rb +35 -0
  18. data/lib/{core/commands → commands}/install.rb +19 -15
  19. data/lib/commands/meta/command.rb +19 -0
  20. data/lib/commands/meta/run_command.rb +114 -0
  21. data/lib/{core → commands/meta}/template_command.rb +1 -1
  22. data/lib/commands/new.rb +60 -0
  23. data/lib/commands/runs.rb +54 -0
  24. data/lib/commands/start.rb +321 -0
  25. data/lib/commands/stop.rb +101 -0
  26. data/lib/{core/commands → commands}/template.rb +59 -39
  27. data/lib/config/current_app_utils.rb +51 -0
  28. data/lib/config/persisted_hash.rb +14 -12
  29. data/lib/config/runlist.rb +116 -16
  30. data/lib/{cli → core}/nutella_cli.rb +1 -1
  31. data/lib/core/nutella_core.rb +2 -6
  32. data/lib/nutella_framework.rb +5 -3
  33. data/lib/nutella_lib_framework/api.rb +333 -0
  34. data/lib/tmux/tmux.rb +76 -0
  35. data/nutella_framework.gemspec +42 -29
  36. data/test/commands/test_cmd_cli_params_parsing.rb +56 -0
  37. data/test/commands/test_command_template.rb +31 -0
  38. data/test/config/test_current_app_utils.rb +34 -0
  39. data/test/config/test_persisted_hash.rb +48 -0
  40. data/test/config/test_runlist.rb +15 -23
  41. data/test/framework_apis/test_framework_api.rb +74 -0
  42. metadata +74 -27
  43. data/actors/main_interface/main_interface_bot.rb +0 -163
  44. data/actors/main_interface/public/index.html +0 -51
  45. data/actors/main_interface/views/index.erb +0 -45
  46. data/lib/config/current_project.rb +0 -58
  47. data/lib/core/command.rb +0 -12
  48. data/lib/core/commands/compile.rb +0 -21
  49. data/lib/core/commands/dependencies.rb +0 -21
  50. data/lib/core/commands/help.rb +0 -28
  51. data/lib/core/commands/new.rb +0 -60
  52. data/lib/core/commands/runs.rb +0 -52
  53. data/lib/core/commands/start.rb +0 -271
  54. data/lib/core/commands/stop.rb +0 -100
  55. data/lib/core/run_command.rb +0 -106
  56. data/lib/core/tmux.rb +0 -38
  57. data/test/config/test_config.rb +0 -48
  58. data/test/config/test_project.rb +0 -34
  59. data/test/test_run_command.rb +0 -54
  60. /data/{actors → framework_components}/main_interface/startup +0 -0
  61. /data/{actors → framework_components}/main_interface/views/not_found_404.erb +0 -0
@@ -0,0 +1,48 @@
1
+ require 'helper'
2
+
3
+ module Nutella
4
+
5
+ class TestNutellaConfig < MiniTest::Test
6
+
7
+ def setup
8
+ @config = PersistedHash.new( 'runlist.json' )
9
+ end
10
+
11
+
12
+ should 'set a key value' do
13
+ assert_equal 'value1', @config['key1']='value1'
14
+ end
15
+
16
+ should 'return \'nil\' if a key doesn\'t exist' do
17
+ assert_nil @config['fakekey']
18
+ end
19
+
20
+ should 'return the value associated with a key whenever that key exists' do
21
+ @config['key2']='value2'
22
+ assert_equal 'value2', @config['key2']
23
+ end
24
+
25
+ should 'return true if a key exists' do
26
+ @config['key3']='value3'
27
+ assert @config.has_key?('key3')
28
+ end
29
+
30
+ should 'return false if a key doesn\'t exist' do
31
+ refute @config.has_key?('key4')
32
+ end
33
+
34
+ should 'access nested hashes' do
35
+ @config['key5']={'k55' => 'v55'}
36
+ assert_equal 'v55', @config['key5']['k55']
37
+ end
38
+
39
+
40
+ def teardown
41
+ @config.send(:remove_file)
42
+ end
43
+
44
+ end
45
+
46
+ end
47
+
48
+
@@ -5,49 +5,41 @@ module Nutella
5
5
  class TestRunList < MiniTest::Test
6
6
 
7
7
  def setup
8
- Nutella.runlist.send(:remove_file)
8
+ @runlist = RunListHash.new( 'runlist.json' )
9
9
  end
10
-
10
+
11
11
  should 'return true if the list is empty' do
12
- assert Nutella.runlist.empty?
12
+ assert @runlist.empty?
13
13
  end
14
14
 
15
15
  should 'return false if the list is not empty' do
16
- refute_nil Nutella.runlist.add?( 'run1', '/path/to/my/run1')
17
- refute Nutella.runlist.empty?
16
+ assert @runlist.add?('app_id_a', 'run_id_1', '/just/a/random/path')
17
+ refute @runlist.empty?
18
18
  end
19
19
 
20
20
  should 'return empty array if the list is empty' do
21
- assert_empty Nutella.runlist.runs_by_project
21
+ assert_empty @runlist.all_runs
22
22
  end
23
23
 
24
24
  should 'return an array of runs in the list if not empty' do
25
- refute_nil Nutella.runlist.add?( 'run1', '/path/to/my/run1' )
26
- refute_nil Nutella.runlist.add?( 'run2', '/path/to/my/run2' )
27
- assert_equal %w{run1 run2}, Nutella.runlist.runs_by_project
25
+ refute_nil @runlist.add?( 'app_a', 'run1', '/path/to/my/run1' )
26
+ refute_nil @runlist.add?( 'app_a', 'run2', '/path/to/my/run2' )
27
+ assert_equal %w{run1 run2}, @runlist.runs_for_app('app_a')
28
28
  end
29
29
 
30
30
  should 'return false if trying to add the same element twice' do
31
- assert Nutella.runlist.add?( 'run1', '/path/to/my/run1' )
32
- refute Nutella.runlist.add?( 'run1', '/path/to/my/run1' )
31
+ assert @runlist.add?( 'app_a', 'run1', '/path/to/my/run1' )
32
+ refute @runlist.add?( 'app_a', 'run1', '/path/to/my/run1' )
33
33
  end
34
34
 
35
35
  should 'return properly when deleting an item' do
36
- assert Nutella.runlist.add?( 'run1', '/path/to/my/run1' )
37
- assert Nutella.runlist.delete? 'run1'
38
- refute Nutella.runlist.delete? 'run1'
36
+ assert @runlist.add?('app_a', 'run1', '/path/to/my/run1' )
37
+ assert @runlist.delete?('app_a', 'run1')
38
+ refute @runlist.delete?('app_a', 'run1')
39
39
  end
40
40
 
41
- should 'properly indicate if an item is in the list' do
42
- refute Nutella.runlist.include? 'run1'
43
- assert Nutella.runlist.add?( 'run1', '/path/to/my/run1' )
44
- assert Nutella.runlist.include? 'run1'
45
- assert Nutella.runlist.delete? 'run1'
46
- refute Nutella.runlist.include? 'run1'
47
- end
48
-
49
41
  def teardown
50
- Nutella.runlist.send(:remove_file)
42
+ @runlist.remove_file
51
43
  end
52
44
 
53
45
  end
@@ -0,0 +1,74 @@
1
+ require 'helper'
2
+
3
+ require_relative '../../lib/nutella_lib_framework/api'
4
+
5
+
6
+
7
+ module Nutella
8
+ class TestFrameworkApi < MiniTest::Test
9
+
10
+ # nutella.init_as_f_component('localhost', 'my_component_id')
11
+
12
+
13
+ # should 'pub_sub_on_framework_channels' do
14
+ # cb_executed = false
15
+ # cb = lambda do |message, from|
16
+ # cb_executed = true
17
+ # puts "Received message from #{from['component_id']}/#{from['resource_id']}. Message: #{message}"
18
+ # end
19
+ # nutella.net.f.subscribe('demo0', cb)
20
+ # sleep 1
21
+ # nutella.net.f.publish('demo0', 'test_message')
22
+ # # Make sure we wait for the message to be delivered
23
+ # sleep 1
24
+ # assert cb_executed
25
+ # end
26
+ #
27
+ #
28
+ # should 'request_response_on_framework_channel' do
29
+ # nutella.set_resource_id 'my_resource_id_3'
30
+ # nutella.net.f.handle_requests('demo3', lambda do |message, from|
31
+ # puts "We received a request: message #{message}, from #{from['component_id']}/#{from['resource_id']}."
32
+ # #Then we are going to return some random JSON
33
+ # {my:'json'}
34
+ # end)
35
+ # response = nutella.net.f.sync_request('demo3', 'my request is a string')
36
+ # assert_equal({'my' => 'json'}, response)
37
+ # nutella.net.f.async_request( 'demo3', 'my request is a string', lambda do |response|
38
+ # assert_equal({'my' => 'json'}, response)
39
+ # end)
40
+ # sleep 2
41
+ # end
42
+
43
+
44
+ # Framework-to-run (broadcasting)
45
+
46
+ # should 'test_app_run_pub_sub_all' do
47
+ # nutella.set_resource_id 'my_resource_id_5'
48
+ # cb = lambda do |message, app_id, run_id, from|
49
+ # puts "Received message from run_id #{from['run_id']} on #{app_id}/#{run_id}. Message: #{message}"
50
+ # # nutella.net.f.unsubscribe_from_all_runs 'demo5'
51
+ # end
52
+ # nutella.net.f.subscribe_to_all_runs('demo5', cb)
53
+ # sleep 1
54
+ # nutella.net.f.publish_to_all_runs('demo5', 'test_message')
55
+ # # Make sure we wait for the message to be delivered
56
+ # sleep 2
57
+ # end
58
+
59
+ # def test_app_run_req_res_all
60
+ # nutella.set_resource_id 'my_resource_id_6'
61
+ # nutella.net.f.handle_requests_on_all_runs('demo6', lambda do |message, app_id, run_id, from|
62
+ # puts "We received a request: message '#{message}', on app_id/run_id #{app_id}/#{run_id} from #{from}."
63
+ # 'response' # Return something
64
+ # end)
65
+ # sleep 1
66
+ # nutella.net.f.async_request_to_all_runs('demo6', 'my request is a string', lambda do |response|
67
+ # puts response
68
+ # end)
69
+ # sleep 2
70
+ # end
71
+
72
+ end
73
+ end
74
+
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: nutella_framework
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.3.1
4
+ version: 0.4.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Alessandro Gnoli
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2015-02-26 00:00:00.000000000 Z
11
+ date: 2015-03-13 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: ansi
@@ -110,6 +110,26 @@ dependencies:
110
110
  - - "~>"
111
111
  - !ruby/object:Gem::Version
112
112
  version: 1.4.5
113
+ - !ruby/object:Gem::Dependency
114
+ name: thin
115
+ requirement: !ruby/object:Gem::Requirement
116
+ requirements:
117
+ - - ">="
118
+ - !ruby/object:Gem::Version
119
+ version: 1.6.3
120
+ - - "~>"
121
+ - !ruby/object:Gem::Version
122
+ version: 1.6.3
123
+ type: :runtime
124
+ prerelease: false
125
+ version_requirements: !ruby/object:Gem::Requirement
126
+ requirements:
127
+ - - ">="
128
+ - !ruby/object:Gem::Version
129
+ version: 1.6.3
130
+ - - "~>"
131
+ - !ruby/object:Gem::Version
132
+ version: 1.6.3
113
133
  - !ruby/object:Gem::Dependency
114
134
  name: nokogiri
115
135
  requirement: !ruby/object:Gem::Requirement
@@ -150,6 +170,26 @@ dependencies:
150
170
  - - "~>"
151
171
  - !ruby/object:Gem::Version
152
172
  version: 4.0.0
173
+ - !ruby/object:Gem::Dependency
174
+ name: nutella_lib
175
+ requirement: !ruby/object:Gem::Requirement
176
+ requirements:
177
+ - - ">="
178
+ - !ruby/object:Gem::Version
179
+ version: 0.4.0
180
+ - - "~>"
181
+ - !ruby/object:Gem::Version
182
+ version: 0.4.0
183
+ type: :runtime
184
+ prerelease: false
185
+ version_requirements: !ruby/object:Gem::Requirement
186
+ requirements:
187
+ - - ">="
188
+ - !ruby/object:Gem::Version
189
+ version: 0.4.0
190
+ - - "~>"
191
+ - !ruby/object:Gem::Version
192
+ version: 0.4.0
153
193
  - !ruby/object:Gem::Dependency
154
194
  name: shoulda
155
195
  requirement: !ruby/object:Gem::Requirement
@@ -286,46 +326,53 @@ files:
286
326
  - README.md
287
327
  - Rakefile
288
328
  - VERSION
289
- - actors/main_interface/main_interface_bot.rb
290
- - actors/main_interface/public/index.html
291
- - actors/main_interface/startup
292
- - actors/main_interface/views/index.erb
293
- - actors/main_interface/views/not_found_404.erb
294
329
  - bin/nutella
295
330
  - data/index.html
296
331
  - data/startup
297
- - lib/cli/nutella_cli.rb
332
+ - framework_components/example_framework_interface/dandelion-flowers-card.jpg
333
+ - framework_components/example_framework_interface/index.html
334
+ - framework_components/main_interface/main_interface_bot.rb
335
+ - framework_components/main_interface/public/index.html
336
+ - framework_components/main_interface/startup
337
+ - framework_components/main_interface/views/index.erb
338
+ - framework_components/main_interface/views/not_found_404.erb
339
+ - framework_components/order.json.example
340
+ - framework_components/runs_list_bot/app_runs_list_bot.rb
341
+ - lib/commands/broker.rb
342
+ - lib/commands/checkup.rb
343
+ - lib/commands/compile.rb
344
+ - lib/commands/dependencies.rb
345
+ - lib/commands/help.rb
346
+ - lib/commands/install.rb
347
+ - lib/commands/meta/command.rb
348
+ - lib/commands/meta/run_command.rb
349
+ - lib/commands/meta/template_command.rb
350
+ - lib/commands/new.rb
351
+ - lib/commands/runs.rb
352
+ - lib/commands/start.rb
353
+ - lib/commands/stop.rb
354
+ - lib/commands/template.rb
298
355
  - lib/config/config.rb
299
- - lib/config/current_project.rb
356
+ - lib/config/current_app_utils.rb
300
357
  - lib/config/persisted_hash.rb
301
358
  - lib/config/runlist.rb
302
- - lib/core/command.rb
303
- - lib/core/commands/broker.rb
304
- - lib/core/commands/checkup.rb
305
- - lib/core/commands/compile.rb
306
- - lib/core/commands/dependencies.rb
307
- - lib/core/commands/help.rb
308
- - lib/core/commands/install.rb
309
- - lib/core/commands/new.rb
310
- - lib/core/commands/runs.rb
311
- - lib/core/commands/start.rb
312
- - lib/core/commands/stop.rb
313
- - lib/core/commands/template.rb
359
+ - lib/core/nutella_cli.rb
314
360
  - lib/core/nutella_core.rb
315
- - lib/core/run_command.rb
316
- - lib/core/template_command.rb
317
- - lib/core/tmux.rb
318
361
  - lib/logging/nutella_logger-remote.rb
319
362
  - lib/logging/nutella_logger.rb
320
363
  - lib/logging/nutella_logging.rb
321
364
  - lib/nutella_framework.rb
365
+ - lib/nutella_lib_framework/api.rb
366
+ - lib/tmux/tmux.rb
322
367
  - nutella_framework.gemspec
323
- - test/config/test_config.rb
324
- - test/config/test_project.rb
368
+ - test/commands/test_cmd_cli_params_parsing.rb
369
+ - test/commands/test_command_template.rb
370
+ - test/config/test_current_app_utils.rb
371
+ - test/config/test_persisted_hash.rb
325
372
  - test/config/test_runlist.rb
373
+ - test/framework_apis/test_framework_api.rb
326
374
  - test/helper.rb
327
375
  - test/logging/test_logging.rb
328
- - test/test_run_command.rb
329
376
  homepage: https://github.com/nutella-framework/nutella_framework
330
377
  licenses:
331
378
  - MIT
@@ -1,163 +0,0 @@
1
- require 'json'
2
- require 'sinatra'
3
- require 'nokogiri'
4
-
5
- # Configuration file and runlist (runlist as global)
6
- config_file = ARGV[0]
7
- $runlist_file = ARGV[1]
8
-
9
- # Try to parse the both config file and runlist and terminate if we can't
10
- begin
11
- config_h = JSON.parse(IO.read(config_file))
12
- JSON.parse(IO.read($runlist_file))
13
- rescue
14
- # something went wrong
15
- abort 'Impossible to parse configuration and/or runlist files!'
16
- end
17
-
18
- # Set Sinatra to run in production mode
19
- set :environment, :production
20
-
21
- # Set Sinatra's port to nutella's main_interface_port
22
- set :port, config_h['main_interface_port']
23
-
24
-
25
- # Display the form to input the run_id
26
- get '/' do
27
- send_file File.join("#{config_h['nutella_home']}/actors/main_interface/public", 'index.html')
28
- end
29
-
30
-
31
- # Redirect if there is no slash after the run_id
32
- get '/:run_id' do
33
- redirect "#{request.url}/"
34
- end
35
-
36
-
37
- # Renders the run template
38
- get '/:run_id/' do
39
-
40
- # Parse the run_id from URL and extract the run path from runlist.json
41
- @run_id = params[:run_id]
42
- @run_path = get_run_path @run_id
43
- @project_name = @run_path[@run_path.rindex('/')+1..@run_path.length] unless @run_path.nil?
44
-
45
- # If there is no run with this name, render error page
46
- return erb( :not_found_404, :locals => {:not_found_type => 'run'} ) if @run_path.nil?
47
-
48
- # If there is an 'index.erb' file inside the 'interfaces' folder, render it
49
- custom_index_file = "#{@run_path}/interfaces/index.erb"
50
- return erb(File.read( custom_index_file )) if File.exist? custom_index_file
51
-
52
- # If no 'index.erb' is provided we need to generate one
53
- # In order to do so we need to load a bunch of details
54
- # (folder, title/name, description) for each interface
55
- @interfaces = load_interfaces_details
56
-
57
- # Finally render the interfaces summary page
58
- erb :index
59
- end
60
-
61
-
62
- # Redirect if there is a slash after the interface
63
- get '/:run_id/:interface/' do
64
- redirect "#{request.url[0..-2]}"
65
- end
66
-
67
-
68
- # Serves the index.html file for each individual interface augmented with nutella query string parameters
69
- get '/:run_id/:interface' do
70
-
71
- # Parse the run_id and the interface name from URL
72
- run_id = params[:run_id]
73
- interface = params[:interface]
74
-
75
- # Extract the run path from runlist.json
76
- run_path = get_run_path run_id
77
-
78
- # Compose the path of interface index file
79
- index_file_path = "#{run_path}/interfaces/#{interface}/index.html"
80
-
81
- # If the index file doesn't exist, render error page
82
- return erb( :not_found_404, :locals => {:not_found_type => 'idx'} ) unless File.exist? index_file_path
83
-
84
- # If the index file exists, compose query string and redirect
85
- index_with_query_url = "#{request.path}/index.html?run_id=#{run_id}&broker=#{config_h['broker']}"
86
- redirect index_with_query_url
87
- end
88
-
89
-
90
- # Serves the files contained in each interface folder
91
- get '/:run_id/:interface/*' do
92
-
93
- # Parse the run_id, the interface name and the file_path from URL
94
- run_id = params[:run_id]
95
- interface = params[:interface]
96
- relative_file_path = params[:splat][0]
97
-
98
- # Extract the run path from runlist.json
99
- run_path = get_run_path run_id
100
-
101
- # Compose the path of the file we are trying to serve
102
- file_path = "#{run_path}/interfaces/#{interface}/#{relative_file_path}"
103
-
104
- # If the file we are trying to serve doesn't exist, render error page
105
- return erb( :not_found_404, :locals => {:not_found_type => 'file'} ) unless File.exist? file_path
106
-
107
- # If the file exists, render it
108
- send_file file_path
109
- end
110
-
111
-
112
- # Utility function:
113
- # Gets the path associated with a certain run
114
- def get_run_path (run_id)
115
- begin
116
- runs_h = JSON.parse(IO.read($runlist_file))
117
- runs_h[run_id]
118
- rescue
119
- nil
120
- end
121
- end
122
-
123
- # Utility function:
124
- # Loads all the details for all interfaces and stores them into an array of hashes
125
- def load_interfaces_details
126
- interfaces = Array.new
127
- interfaces_path = "#{@run_path}/interfaces/"
128
- Dir.entries(interfaces_path).select {|entry| File.directory?(File.join(interfaces_path, entry)) && !(entry =='.' || entry == '..') }.each do |iface_dir|
129
- interfaces.push extract_interface_info( interfaces_path, iface_dir )
130
- end
131
- interfaces
132
- end
133
-
134
- # Utility function:
135
- # Extracts name, description and folder for a single interface
136
- def extract_interface_info( interfaces_path, iface_dir )
137
- iface_props = Hash.new
138
-
139
- index_path = "#{interfaces_path}#{iface_dir}/index.html"
140
-
141
- unless File.exist? index_path
142
- iface_props[:name] = iface_dir
143
- iface_props[:description] = 'My designer was a bit lazy and didn\'t include an index.html file in the main interface directory :('
144
- return iface_props
145
- end
146
-
147
- # If file exists, parse it and extract info
148
- f = File.open index_path
149
- doc = Nokogiri::HTML f
150
- f.close
151
- iface_props[:name] = doc.css('title').empty? ? iface_dir : doc.css('title').text
152
- if doc.css("meta[name='description']").empty?
153
- iface_props[:description] = 'My designer was a bit lazy and didn\'t include a &lt;meta name="description" content="Description of this interface"&gt; tag in the index.html file :('
154
- else
155
- if doc.css("meta[name='description']").attribute('content').nil?
156
- iface_props[:description] = 'There was no attribute content in &lt;meta name="description" content="Description of this interface"&gt; tag in the index.html file :('
157
- else
158
- iface_props[:description] = doc.css("meta[name='description']").attribute('content').text
159
- end
160
- end
161
- iface_props[:url] = "#{iface_dir}"
162
- iface_props
163
- end
@@ -1,51 +0,0 @@
1
- <!DOCTYPE html>
2
- <html lang="en">
3
- <head>
4
- <meta charset="utf-8">
5
- <meta http-equiv="X-UA-Compatible" content="IE=edge">
6
- <meta name="viewport" content="width=device-width, initial-scale=1">
7
- <title>Welcome to nutella</title>
8
- <link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.1/css/bootstrap.min.css">
9
-
10
- <style type="text/css">
11
- div {
12
- margin-top: 4em;
13
- text-align: center;
14
- font-size: 3em;
15
- }
16
- .form-control {
17
- height: 50px;
18
- width: 40%;
19
- text-align: center;
20
- font-size: .7em;
21
- display: inline-block;
22
- }
23
- .center {
24
- text-align:center;
25
- }
26
- .center form {
27
- display:inline-block;
28
- }
29
- </style>
30
- </head>
31
- <body>
32
-
33
- <!-- Content -->
34
- <div>
35
- <p>What is your run id?</p>
36
- <input id="run_id_input" type="text" value="" class="form-control" autofocus>
37
- </div>
38
-
39
- <!-- Scripts -->
40
- <script>
41
- el = document.getElementById('run_id_input');
42
- el.addEventListener('change', function() {
43
- url = location.href
44
- if (url.substr(url.length - 1)=="/")
45
- window.location = url + this.value + '/';
46
- else
47
- window.location = url + '/' + this.value + '/';
48
- });
49
- </script>
50
- </body>
51
- </html>
@@ -1,45 +0,0 @@
1
- <!DOCTYPE html>
2
- <html lang="en">
3
- <head>
4
- <meta charset="utf-8">
5
- <meta http-equiv="X-UA-Compatible" content="IE=edge">
6
- <meta name="viewport" content="width=device-width, initial-scale=1">
7
- <title><%= @run_id %> interfaces</title>
8
- <link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.1/css/bootstrap.min.css">
9
-
10
- <style type="text/css">
11
- .row {
12
- margin-bottom: 20px;
13
- }
14
- </style>
15
- </head>
16
- <body>
17
-
18
- <!-- Content -->
19
- <div class="container">
20
- <div class="page-header">
21
- <% if @run_id == @project_name %>
22
- <h1>Welcome to <em><%= @project_name %></em></h1>
23
- <% else %>
24
- <h1>Welcome to <em><%= @project_name %></em>, run <em><%= @run_id %></em></h1>
25
- <% end %>
26
- <p class="lead">Click on the buttons to launch the intereface</p>
27
- </div>
28
-
29
- <% @interfaces.each do |i| %>
30
- <div class="row">
31
- <div class="col-xs-1 col-sm-1 col-lg-1"><a href="<%= i[:url] %>" target="_blank" type="button" class="btn btn-danger">Launch!</a></div>
32
- <div class="col-xs-2 col-sm-2 col-lg-2 text-center"><strong><%= i[:name] %></strong></div>
33
- <div class="col-xs-9 col-sm-9 col-lg-9"><%= i[:description] %></div>
34
- </div>
35
-
36
- <% end %>
37
-
38
- </div>
39
-
40
- <!-- Scripts -->
41
- <script>
42
-
43
- </script>
44
- </body>
45
- </html>
@@ -1,58 +0,0 @@
1
- # handles current project files
2
- require 'json'
3
-
4
- module Nutella
5
-
6
- module CurrentProjectUtils
7
-
8
- # Checks that the current directory is actually a nutella project
9
- # @return [Boolean] true if the current directory is a nutella project, false otherwise
10
- def CurrentProjectUtils.exist?
11
- cur_prj_dir = Dir.pwd
12
- nutella_json_file = "#{cur_prj_dir}/nutella.json"
13
- # Check that there is a nutella.json file in the main directory of the project
14
- if File.exist? nutella_json_file
15
- conf = JSON.parse( IO.read(nutella_json_file) )
16
- if conf['nutella_version'].nil?
17
- console.warn 'The current directory is not a nutella project: nutella_version unspecified in nutella.json file'
18
- return false
19
- end
20
- else
21
- console.warn 'The current directory is not a nutella project: impossible to read nutella.json file'
22
- return false
23
- end
24
- true
25
- end
26
-
27
- # Builds a PersistedHash of the project nutella.json file and returns it.
28
- # This method is used to ease access to the project nutella.json file.
29
- # @return [PersistedHash] the PersistedHash of the project nutella.json file
30
- def CurrentProjectUtils.config
31
- cur_prj_dir = Dir.pwd
32
- nutella_json_file = "#{cur_prj_dir}/nutella.json"
33
- if File.exist? nutella_json_file
34
- return PersistedHash.new nutella_json_file
35
- else
36
- console.error 'The current directory is not a nutella project: impossible to read nutella.json file'
37
- end
38
- end
39
-
40
- # Retrieves the current project directory
41
- # @return [String] the current project home
42
- def CurrentProjectUtils.dir
43
- Dir.pwd
44
- end
45
-
46
- end
47
-
48
-
49
- # Calling this method (Nutella.current_project) simply returns
50
- # a reference to the CurrentProjectUtils module
51
- def Nutella.current_project
52
- CurrentProjectUtils
53
- end
54
-
55
- end
56
-
57
-
58
-
data/lib/core/command.rb DELETED
@@ -1,12 +0,0 @@
1
- # CLI command
2
-
3
- module Nutella
4
- class Command
5
- class << self; attr_accessor :description end
6
-
7
- # Commands overload this method to execute
8
- def run( args=nil )
9
- console.error 'Running the generic command!!! WAT?'
10
- end
11
- end
12
- end