nutella_framework 0.3.1 → 0.4.0

Sign up to get free protection for your applications and to get access to all the features.
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