scout-camp 0.1.13 → 0.1.14

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 (49) hide show
  1. checksums.yaml +4 -4
  2. data/.vimproject +52 -11
  3. data/Rakefile +5 -0
  4. data/VERSION +1 -1
  5. data/bin/scout-camp +46 -0
  6. data/doc/terraform.md +188 -0
  7. data/lib/scout/aws/s3.rb +6 -4
  8. data/lib/scout/offsite/resource.rb +110 -5
  9. data/lib/scout/offsite/step.rb +21 -14
  10. data/lib/scout/offsite/sync.rb +38 -10
  11. data/lib/scout/offsite.rb +1 -0
  12. data/lib/scout/render/engine.rb +119 -0
  13. data/lib/scout/render/helpers.rb +92 -0
  14. data/lib/scout/render/resource.rb +54 -0
  15. data/lib/scout/render.rb +3 -0
  16. data/lib/scout/sinatra/auth.rb +158 -0
  17. data/lib/scout/sinatra/base/assets.rb +245 -0
  18. data/lib/scout/sinatra/base/favicon.rb +43 -0
  19. data/lib/scout/sinatra/base/headers.rb +77 -0
  20. data/lib/scout/sinatra/base/helpers.rb +14 -0
  21. data/lib/scout/sinatra/base/parameters.rb +147 -0
  22. data/lib/scout/sinatra/base/post_processing.rb +18 -0
  23. data/lib/scout/sinatra/base/session.rb +72 -0
  24. data/lib/scout/sinatra/base.rb +253 -0
  25. data/lib/scout/sinatra/entity.rb +259 -0
  26. data/lib/scout/sinatra/finder.rb +9 -0
  27. data/lib/scout/sinatra/fragment.rb +275 -0
  28. data/lib/scout/sinatra/htmx.rb +68 -0
  29. data/lib/scout/sinatra/knowledge_base.rb +14 -0
  30. data/lib/scout/sinatra/tool.rb +11 -0
  31. data/lib/scout/sinatra/workflow.rb +129 -0
  32. data/lib/scout-camp.rb +1 -1
  33. data/scout-camp.gemspec +39 -3
  34. data/scout_commands/find +83 -0
  35. data/scout_commands/glob +90 -0
  36. data/share/aws/lambda_function.rb +53 -30
  37. data/share/terraform/aws/efs_host/data.tf +1 -2
  38. data/share/terraform/aws/efs_host/main.tf +1 -1
  39. data/share/terraform/aws/efs_host/variables.tf +5 -1
  40. data/test/scout/render/test_engine.rb +88 -0
  41. data/test/scout/render/test_resource.rb +29 -0
  42. data/test/scout/sinatra/base/test_headers.rb +125 -0
  43. data/test/scout/sinatra/base/test_parameters.rb +88 -0
  44. data/test/scout/sinatra/test_base.rb +27 -0
  45. data/test/scout/sinatra/test_entity.rb +44 -0
  46. data/test/scout/sinatra/test_render.rb +44 -0
  47. data/test/scout/sinatra/test_workflow.rb +157 -0
  48. data/test/test_helper.rb +26 -0
  49. metadata +103 -2
@@ -0,0 +1,157 @@
1
+ require File.expand_path(__FILE__).sub(%r(/test/.*), '/test/test_helper.rb')
2
+ require File.expand_path(__FILE__).sub(%r(.*/test/), '').sub(/test_(.*)\.rb/,'\1')
3
+
4
+ module Pantry
5
+ extend Resource
6
+ self.subdir = 'share/pantry'
7
+ Pantry.claim Pantry.eggs, :proc do
8
+ Log.info "Buying Eggs in the store"
9
+ "Eggs"
10
+ end
11
+
12
+ Pantry.claim Pantry.flour, :proc do
13
+ Log.info "Buying Flour in the store"
14
+ "Flour"
15
+ end
16
+
17
+ Pantry.claim Pantry.blueberries, :proc do
18
+ Log.info "Buying Bluberries in the store"
19
+ "Bluberries"
20
+ end
21
+ end
22
+
23
+ module Baking
24
+ extend Workflow
25
+
26
+ self.description = <<-EOF
27
+ This is the Baking workflow
28
+ EOF
29
+
30
+ helper :whisk do |eggs|
31
+ "Whisking eggs from #{eggs}"
32
+ end
33
+
34
+ helper :mix do |base, mixer|
35
+ "Mixing base (#{base}) with mixer (#{mixer})"
36
+ end
37
+
38
+ helper :bake do |batter|
39
+ "Baking batter (#{batter})"
40
+ end
41
+
42
+ task :whisk_eggs => :string do
43
+ whisk(Pantry.eggs.produce)
44
+ end
45
+
46
+ dep :whisk_eggs
47
+ input :add_bluberries, :boolean
48
+ task :prepare_batter => :string do |add_bluberries|
49
+ whisked_eggs = step(:whisk_eggs).load
50
+ batter = mix(whisked_eggs, Pantry.flour.produce)
51
+
52
+ if add_bluberries
53
+ batter = mix(batter, Pantry.blueberries.produce)
54
+ end
55
+
56
+ batter
57
+ end
58
+
59
+ dep :prepare_batter
60
+ task :bake_muffin_tray => :string do
61
+ file('test').write "TEST FILE"
62
+ bake(step(:prepare_batter).load)
63
+ end
64
+
65
+
66
+ export :bake_muffin_tray
67
+ end
68
+
69
+
70
+ require 'rack/test'
71
+ class TestSinatraWorkflows < Test::Unit::TestCase
72
+ include Rack::Test::Methods
73
+
74
+ class TestApp < Sinatra::Base
75
+ register SinatraScoutBase
76
+ register SinatraScoutWorkflow
77
+ set :protection, false
78
+ end
79
+
80
+ setup do
81
+ header 'Host', 'localhost'
82
+ #Baking.directory = tmpdir.var.jobs.baking.find
83
+ app.add_workflow Baking
84
+ app.set :protection, false
85
+ Pantry.path_maps[:test_tmp] = tmpdir.dup
86
+ Pantry.path_maps[:default] = :test_tmp
87
+ Pantry.map_order = [:test_tmp]
88
+ end
89
+
90
+ def app
91
+ TestApp
92
+ end
93
+
94
+ def test_workflow_exports_json
95
+ get '/Baking', { '_format' => 'json'}
96
+ assert_equal 200, last_response.status, "expected 200 got #{last_response.status}: #{last_response.errors}"
97
+ body = JSON.parse(last_response.body)
98
+ assert body.key?('exec'), "expected 'exec' key in #{body.inspect}"
99
+ assert body.key?('stream'), "expected 'stream' key in #{body.inspect}"
100
+ assert body.key?('synchronous'), "expected 'synchronous' key in #{body.inspect}"
101
+ assert body.key?('asynchronous'), "expected 'asynchronous' key in #{body.inspect}"
102
+ end
103
+
104
+ def _test_documentation_json
105
+ get '/Baking/documentation', { '_format' => 'json' }
106
+ assert_equal 200, last_response.status
107
+ body = JSON.parse(last_response.body)
108
+ assert_include body['description'], 'Baking'
109
+ end
110
+
111
+ def _test_task_info_json
112
+ get '/Baking/bake_muffin_tray/info', { '_format' => 'json' }
113
+ assert_equal 200, last_response.status
114
+ body = JSON.parse(last_response.body)
115
+ assert body.key?('inputs'), "task_info should contain inputs: #{body.inspect}"
116
+ end
117
+
118
+ def _test_create_job_via_post
119
+ post '/Baking/bake_muffin_tray', { 'add_bluberries' => true, '_format' => 'json' }
120
+ assert_equal 200, last_response.status, "POST failed: #{last_response.body}"
121
+ body = JSON.parse(last_response.body)
122
+ assert body.key?('jobname'), "expected jobname in response: #{body.inspect}"
123
+ assert body.key?('status'), "expected status in response: #{body.inspect}"
124
+ end
125
+
126
+ def _test_get_job_info
127
+ post '/Baking/bake_muffin_tray', { 'add_bluberries' => true, '_format' => 'json' }
128
+ assert_equal 200, last_response.status, "POST failed: #{last_response.body}"
129
+ body = JSON.parse(last_response.body)
130
+ get "/Baking/bake_muffin_tray/#{body['jobname']}", { '_format' => 'json' }
131
+ assert_equal 200, last_response.status
132
+ body = JSON.parse(last_response.body)
133
+ assert (body.is_a?(Hash) && (body.key?('status') || body.key?('job'))), "unexpected job info response: #{body.inspect}"
134
+ end
135
+
136
+ def _test_list_job_files
137
+ post '/Baking/bake_muffin_tray', { 'add_bluberries' => true, '_format' => 'json' }
138
+ assert_equal 200, last_response.status, "POST failed: #{last_response.body}"
139
+ body = JSON.parse(last_response.body)
140
+ get "/Baking/bake_muffin_tray/#{body['jobname']}/files", { '_format' => 'json' }
141
+ body = JSON.parse(last_response.body)
142
+ assert_kind_of Array, body
143
+ end
144
+
145
+ def _test_delete_job
146
+ post '/Baking/bake_muffin_tray', { 'add_bluberries' => true, '_format' => 'json' }
147
+ assert_equal 200, last_response.status, "POST failed: #{last_response.body}"
148
+ body = JSON.parse(last_response.body)
149
+ delete "/Baking/bake_muffin_tray/#{body['jobname']}"
150
+ assert_equal 200, last_response.status
151
+ body = JSON.parse(last_response.body)
152
+ assert_equal true, body['ok']
153
+ get "/Baking/bake_muffin_tray/#{body['jobname']}", { '_format' => 'json' }
154
+ assert_equal 404, last_response.status
155
+ end
156
+ end
157
+
data/test/test_helper.rb CHANGED
@@ -4,8 +4,34 @@ require 'scout/log'
4
4
  $LOAD_PATH.unshift(File.expand_path(File.join(File.dirname(__FILE__), '..', 'lib')))
5
5
  $LOAD_PATH.unshift(__dir__)
6
6
 
7
+ require 'scout'
7
8
  class Test::Unit::TestCase
8
9
 
10
+ def self.tmpdir
11
+ @@tmpdir ||= Path.setup('tmp/test_tmpdir').find
12
+ end
13
+
14
+ def tmpdir
15
+ @tmpdir ||= Test::Unit::TestCase.tmpdir
16
+ end
17
+
18
+ setup do
19
+ Open.rm_rf tmpdir
20
+ TmpFile.tmpdir = tmpdir.tmpfiles
21
+ Log::ProgressBar.default_severity = 0
22
+ Persist.cache_dir = tmpdir.var.cache
23
+ Persist::MEMORY_CACHE.clear
24
+ Open.remote_cache_dir = tmpdir.var.cache
25
+ Workflow.directory = tmpdir.var.jobs
26
+ Workflow.workflows.each{|wf| wf.directory = Workflow.directory[wf.name] }
27
+ Entity.entity_property_cache = tmpdir.entity_properties if defined?(Entity)
28
+ ScoutRender.app_dir = tmpdir.var.render
29
+ end
30
+
31
+ teardown do
32
+ Open.rm_rf tmpdir
33
+ Workflow.job_cache.clear
34
+ end
9
35
  def with_tmp_file
10
36
  name = 'test_file_terraform_' + rand(100000).to_s
11
37
  file = File.join('/tmp', name)
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: scout-camp
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.13
4
+ version: 0.1.14
5
5
  platform: ruby
6
6
  authors:
7
7
  - Miguel Vazquez
@@ -23,6 +23,76 @@ dependencies:
23
23
  - - ">="
24
24
  - !ruby/object:Gem::Version
25
25
  version: '0'
26
+ - !ruby/object:Gem::Dependency
27
+ name: aws-sdk-s3
28
+ requirement: !ruby/object:Gem::Requirement
29
+ requirements:
30
+ - - ">="
31
+ - !ruby/object:Gem::Version
32
+ version: '0'
33
+ type: :runtime
34
+ prerelease: false
35
+ version_requirements: !ruby/object:Gem::Requirement
36
+ requirements:
37
+ - - ">="
38
+ - !ruby/object:Gem::Version
39
+ version: '0'
40
+ - !ruby/object:Gem::Dependency
41
+ name: sinatra
42
+ requirement: !ruby/object:Gem::Requirement
43
+ requirements:
44
+ - - ">="
45
+ - !ruby/object:Gem::Version
46
+ version: '0'
47
+ type: :runtime
48
+ prerelease: false
49
+ version_requirements: !ruby/object:Gem::Requirement
50
+ requirements:
51
+ - - ">="
52
+ - !ruby/object:Gem::Version
53
+ version: '0'
54
+ - !ruby/object:Gem::Dependency
55
+ name: omniauth
56
+ requirement: !ruby/object:Gem::Requirement
57
+ requirements:
58
+ - - ">="
59
+ - !ruby/object:Gem::Version
60
+ version: '0'
61
+ type: :runtime
62
+ prerelease: false
63
+ version_requirements: !ruby/object:Gem::Requirement
64
+ requirements:
65
+ - - ">="
66
+ - !ruby/object:Gem::Version
67
+ version: '0'
68
+ - !ruby/object:Gem::Dependency
69
+ name: mimemagic
70
+ requirement: !ruby/object:Gem::Requirement
71
+ requirements:
72
+ - - ">="
73
+ - !ruby/object:Gem::Version
74
+ version: '0'
75
+ type: :runtime
76
+ prerelease: false
77
+ version_requirements: !ruby/object:Gem::Requirement
78
+ requirements:
79
+ - - ">="
80
+ - !ruby/object:Gem::Version
81
+ version: '0'
82
+ - !ruby/object:Gem::Dependency
83
+ name: omniauth-google-oauth2
84
+ requirement: !ruby/object:Gem::Requirement
85
+ requirements:
86
+ - - ">="
87
+ - !ruby/object:Gem::Version
88
+ version: '0'
89
+ type: :runtime
90
+ prerelease: false
91
+ version_requirements: !ruby/object:Gem::Requirement
92
+ requirements:
93
+ - - ">="
94
+ - !ruby/object:Gem::Version
95
+ version: '0'
26
96
  description: Functionalities to deploy and use scouts in remote servers like AWS
27
97
  email: mikisvaz@gmail.com
28
98
  executables:
@@ -38,6 +108,7 @@ files:
38
108
  - Rakefile
39
109
  - VERSION
40
110
  - bin/scout-camp
111
+ - doc/terraform.md
41
112
  - lib/scout-camp.rb
42
113
  - lib/scout/aws/s3.rb
43
114
  - lib/scout/offsite.rb
@@ -46,10 +117,32 @@ files:
46
117
  - lib/scout/offsite/ssh.rb
47
118
  - lib/scout/offsite/step.rb
48
119
  - lib/scout/offsite/sync.rb
120
+ - lib/scout/render.rb
121
+ - lib/scout/render/engine.rb
122
+ - lib/scout/render/helpers.rb
123
+ - lib/scout/render/resource.rb
124
+ - lib/scout/sinatra/auth.rb
125
+ - lib/scout/sinatra/base.rb
126
+ - lib/scout/sinatra/base/assets.rb
127
+ - lib/scout/sinatra/base/favicon.rb
128
+ - lib/scout/sinatra/base/headers.rb
129
+ - lib/scout/sinatra/base/helpers.rb
130
+ - lib/scout/sinatra/base/parameters.rb
131
+ - lib/scout/sinatra/base/post_processing.rb
132
+ - lib/scout/sinatra/base/session.rb
133
+ - lib/scout/sinatra/entity.rb
134
+ - lib/scout/sinatra/finder.rb
135
+ - lib/scout/sinatra/fragment.rb
136
+ - lib/scout/sinatra/htmx.rb
137
+ - lib/scout/sinatra/knowledge_base.rb
138
+ - lib/scout/sinatra/tool.rb
139
+ - lib/scout/sinatra/workflow.rb
49
140
  - lib/scout/terraform_dsl.rb
50
141
  - lib/scout/terraform_dsl/deployment.rb
51
142
  - lib/scout/terraform_dsl/util.rb
52
143
  - scout-camp.gemspec
144
+ - scout_commands/find
145
+ - scout_commands/glob
53
146
  - scout_commands/offsite
54
147
  - scout_commands/sync
55
148
  - scout_commands/terraform/add/lambda
@@ -123,6 +216,14 @@ files:
123
216
  - test/scout/offsite/test_ssh.rb
124
217
  - test/scout/offsite/test_step.rb
125
218
  - test/scout/offsite/test_sync.rb
219
+ - test/scout/render/test_engine.rb
220
+ - test/scout/render/test_resource.rb
221
+ - test/scout/sinatra/base/test_headers.rb
222
+ - test/scout/sinatra/base/test_parameters.rb
223
+ - test/scout/sinatra/test_base.rb
224
+ - test/scout/sinatra/test_entity.rb
225
+ - test/scout/sinatra/test_render.rb
226
+ - test/scout/sinatra/test_workflow.rb
126
227
  - test/scout/test_terraform_dsl.rb
127
228
  - test/test_helper.rb
128
229
  homepage: http://github.com/mikisvaz/scout-camp
@@ -143,7 +244,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
143
244
  - !ruby/object:Gem::Version
144
245
  version: '0'
145
246
  requirements: []
146
- rubygems_version: 3.6.7
247
+ rubygems_version: 3.7.0.dev
147
248
  specification_version: 4
148
249
  summary: Deploy you scouts
149
250
  test_files: []