pult 0.0.16 → 0.0.17

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: de6f2c05929b5d4e99b1ce3c73ecd398548d3319d1b82f30279b4265a53db66d
4
- data.tar.gz: 2f141819fd1a3d1568e120102c504bddb8165dd70d0cf7307898dde33ee36880
3
+ metadata.gz: c9f1bcde4e6702f684b1d23bbb99e759027b39de1eac7b04d3a85d55ac16d2fc
4
+ data.tar.gz: b6ff29cc06748be7f82502506c0f897805a4455d9ac644fe54e6b74a944981b9
5
5
  SHA512:
6
- metadata.gz: 996dda774d0419509a11f34b12bf0ee18f05134d4adabf62df95fe7e4a11d6921e4f4acd9e4389d1343d4d80126b83680e3b1d95e06fee40811fc7896adbe175
7
- data.tar.gz: c59c2d33525f1f80dd9832bb6948962572f9f262f503cf8d652e2af15be6b453361f5af3c9b7d09cc191b13c03f0a5cd81d34711ced1a2dc31f84f0d88958d45
6
+ metadata.gz: bea18e532c25a0866376ff008d931dd8c2ae63a3df35e6eddadaa758767aed0402bc2b441bfb28cc354500150f21df1bdb4ec98f9918d38a8c5769ff0f4480e1
7
+ data.tar.gz: 5da5043e7e5acaf42daccb519efbafe58502b75e35b945d5bd9d226781fa6d7c2122318937248fcafb8ed953143cc6aea4f9fa0a07bcc3fc2a2f1052a0c2e7d1
@@ -4,6 +4,16 @@ All notable changes to this project will be documented in this file.
4
4
  The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
5
5
  and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
6
6
 
7
+ ## [0.0.16] - 2019-22-09
8
+ ### Status
9
+ - Dev version
10
+
11
+ ### Updates
12
+ - Providers pattern for comliping panel hash
13
+ - `pult` provider added for `.pult.yml` (was, but not in pattern)
14
+ - `rake` provider added for rake tasks (**new**!)
15
+ - `PULT_RAKEPATH` env is `r` by default (prefix in API)
16
+
7
17
  ## [0.0.16] - 2019-19-09
8
18
  ### Status
9
19
  - Dev version
data/README.md CHANGED
@@ -6,6 +6,10 @@ Development progress can be reached at [CHANGELOG](./CHANGELOG.md)
6
6
 
7
7
  Ruby *>= 2.3.0* require
8
8
 
9
+ ```diff
10
+ - **TODO**: Refactor README (new concept, new feature)
11
+ ```
12
+
9
13
  # What is Pult?
10
14
 
11
15
  Universal API service for manage your appications and system tasks via Ruby or HTTP.
@@ -39,11 +43,11 @@ Manage many applications is the feature of Pult. But to understand the concept a
39
43
 
40
44
  ### 1.1. Configure app actions via pult.yml
41
45
 
42
- Put `pult.yml` anywere into your app folder, some kind of `<app>/pult.yml` or `<app>/config/pult.yml`, and create any actions you need for manage your app:
46
+ Put `.pult.yml` into root of your app folder `<app>/.pult.yml` and create any actions you need for manage app:
43
47
  ```yaml
44
- # actions is a simple linux shell commands
45
-
48
+ ---
46
49
  appname:
50
+ # actions is a simple linux shell commands
47
51
  test: 'sleep 20 && echo 123'
48
52
 
49
53
  # can combine actions of the same level
@@ -1,9 +1,12 @@
1
1
  module Pult
2
2
 
3
- ROOT = ENV['PULT_ROOT'] || Dir.pwd
4
- FILE = ENV['PULT_FILE'] || '.pult.yml'
3
+ FILE = ENV['PULT_FILE']
5
4
 
6
- PORT = ENV['PULT_PORT'] || 7070
5
+ ROOT = ENV['PULT_ROOT'] || Dir.pwd
7
6
 
8
- MULTIACT = ENV['PULT_MULTIACT'] || 'join' # 'clone'
7
+ PORT = ENV['PULT_PORT'] || 7070
8
+
9
+ MULTIACT = ENV['PULT_MULTIACT'] || 'join' # 'clone'
10
+
11
+ RAKEPATH = ENV['PULT_RAKEPATH']
9
12
  end
@@ -9,6 +9,9 @@ require_relative '../pult/executor'
9
9
  require_relative '../pult/executor/screener'
10
10
  require_relative '../pult/executor/terminator'
11
11
 
12
+ require_relative '../pult/panel/provider'
13
+ require_relative '../pult/panel/provider/pult'
14
+ require_relative '../pult/panel/provider/rake'
12
15
  require_relative '../pult/panel/dot_accessible'
13
16
  require_relative '../pult/panel/injector'
14
17
  require_relative '../pult/panel'
@@ -16,6 +16,10 @@ module Pult
16
16
  end
17
17
 
18
18
  class Panel < Hash
19
+ module Provider
20
+ module Pult; end
21
+ module Rake; end
22
+ end
19
23
  module App
20
24
  module DotAccessible; end
21
25
  module Injector; end
@@ -6,70 +6,35 @@ class Pult::Panel
6
6
  attr_accessor :_file
7
7
 
8
8
  def initialize auto: true
9
+ @_file = Provider::Pult::FILE
9
10
  @_root = Pult::ROOT
10
- @_file = Pult::FILE
11
11
 
12
12
  init! if auto && allow_init?
13
13
  end
14
14
 
15
15
  def init!
16
- if allow_init?
17
- to_panel!
18
- else
19
- raise StandardError, 'Init is not allowed!'
20
- end
16
+ allow_init? ? \
17
+ to_panel! : raise(StandardError, 'Init is not allowed!')
21
18
  end
22
19
 
23
20
  private
24
21
 
25
- def allow_init?
26
- true_abs_path?(@_file) || (!!@_root && !!@_file)
27
- end
28
-
29
- def true_abs_path? path
30
- path[0] == '/' && File.exists(path)
31
- end
32
-
33
22
  def to_panel!
34
- compile_from_pult_files!
35
-
36
23
  class_eval { include DotAccessible }
37
24
 
38
- Injector.inject! self
39
-
40
- make_apps!
41
- end
42
-
43
- def make_apps!
44
- @_apps = []
45
-
46
- for app_name in keys
47
- app = self[app_name]
25
+ Provider::Pult.mixin! self
26
+ Provider::Rake.mixin! self
48
27
 
49
- @_apps << app_name
28
+ Injector.inject! self
50
29
 
51
- App.to_app! app, self, app_name
52
- end
30
+ App.make_apps! self
53
31
  end
54
32
 
55
- def compile_from_pult_files!
56
- scan = @_root + '/**/' + @_file
57
-
58
- Dir[scan].each do |pult_file|
59
- pult_hash = YAML.load_file(pult_file)
60
-
61
- dir! pult_hash, pult_file
62
-
63
- merge! pult_hash
64
- end
33
+ def allow_init?
34
+ true_abs_path?(@_file) || (!!@_root && !!@_file)
65
35
  end
66
36
 
67
- def dir! hash, path
68
- app = hash.keys.first
69
- dir = Pathname.new(path).dirname.to_s
70
-
71
- config = (hash[app]['config'] ||= {})
72
-
73
- config['dir'] ||= dir
37
+ def true_abs_path? path
38
+ path[0] == '/' && File.exists(path)
74
39
  end
75
40
  end
@@ -1,22 +1,44 @@
1
1
  module Pult::Panel::App
2
2
 
3
- def self.to_app! hash, panel, app
4
- multi_action! hash
3
+ def self.config_dir! app_hash, path
4
+ app_name = app_hash.keys.first
5
5
 
6
- hash.class_eval { include DotAccessible }
6
+ dir = Pathname.new(path).dirname.to_s
7
7
 
8
- Injector.inject! hash, panel, app
8
+ config = (app_hash[app_name]['config'] ||= {})
9
9
 
10
- hash.values.each do |target|
11
- to_app!(target, panel, app) if target.is_a?(Hash)
10
+ config['dir'] ||= dir
11
+ end
12
+
13
+ def self.make_apps! panel
14
+ panel.instance_variable_set(:@_apps, [])
15
+
16
+ for app_name in panel.keys
17
+ hash = panel[app_name]
18
+
19
+ panel._apps << app_name
20
+
21
+ to_app! hash, panel, app_name
22
+ end
23
+ end
24
+
25
+ def self.to_app! app_hash, panel, app_name
26
+ multi_action! app_hash
27
+
28
+ app_hash.class_eval { include DotAccessible }
29
+
30
+ Injector.inject! app_hash, panel, app_name
31
+
32
+ app_hash.values.each do |target|
33
+ to_app!(target, panel, app_name) if target.is_a?(Hash)
12
34
  end
13
35
 
14
- hash
36
+ app_hash
15
37
  end
16
38
 
17
- def self.multi_action! hash
18
- hash.keys.each do |key|
19
- value = hash[key]
39
+ def self.multi_action! app_hash
40
+ app_hash.keys.each do |key|
41
+ value = app_hash[key]
20
42
 
21
43
  case value.class.name
22
44
 
@@ -27,13 +49,13 @@ module Pult::Panel::App
27
49
  case Pult::MULTIACT
28
50
 
29
51
  when 'clone'
30
- clone hash
52
+ clone app_hash
31
53
  complex = {}
32
- value.each{ |elm| complex[elm] = hash[elm] }
33
- hash[key] = complex
54
+ value.each{ |elm| complex[elm] = app_hash[elm] }
55
+ app_hash[key] = complex
34
56
 
35
57
  when 'join'
36
- hash[key] = '$(' + value.join(') && $(') + ')'
58
+ app_hash[key] = '$(' + value.join(') && $(') + ')'
37
59
  end
38
60
  end
39
61
  end
@@ -0,0 +1,9 @@
1
+ module Pult::Panel::Provider
2
+
3
+ #
4
+ # here logic for multi or single app mode
5
+ #
6
+ def self.files file, root
7
+ root + '/**/' + file
8
+ end
9
+ end
@@ -0,0 +1,21 @@
1
+ module Pult::Panel::Provider::Pult
2
+
3
+ FILE = Pult::FILE || '.pult.yml'
4
+
5
+ def self.mixin! panel
6
+ pult_files = Pult::Panel::Provider.files(panel._file, panel._root)
7
+
8
+ Dir[pult_files].each do |pult_file|
9
+
10
+ hash = pult_hash pult_file
11
+
12
+ Pult::Panel::App.config_dir! hash, pult_file
13
+
14
+ panel.merge! hash
15
+ end
16
+ end
17
+
18
+ def self.pult_hash file
19
+ YAML.load_file(file)
20
+ end
21
+ end
@@ -0,0 +1,49 @@
1
+ module Pult::Panel::Provider::Rake
2
+
3
+ FILE = 'Rakefile'
4
+ COMMAND = 'rake'
5
+
6
+ PATH = Pult::RAKEPATH || 'r'
7
+
8
+ def self.mixin! panel
9
+ rake_files = Pult::Panel::Provider.files(FILE, panel._root)
10
+
11
+ Dir[rake_files].each do |rake_file|
12
+
13
+ hash = pult_hash rake_file
14
+
15
+ Pult::Panel::App.config_dir! hash, rake_file
16
+
17
+ panel.merge! hash
18
+ end
19
+ end
20
+
21
+ def self.pult_hash file
22
+ hash = {}
23
+ tasks = self.tasks(file)
24
+
25
+ for task in tasks
26
+ count = task.count(':')
27
+
28
+ n = -1
29
+ task.split(':').reduce(hash) do |h, t|
30
+ (n += 1) && n == count ? h[t] = "#{COMMAND} #{task}" : h[t] = {}
31
+ end
32
+ end
33
+
34
+ { PATH => hash }
35
+ end
36
+
37
+ def self.tasks file
38
+ app_dir = Pathname.new(file).dirname.to_s
39
+
40
+ runner = Pult::Executor.run! "#{COMMAND} --tasks", app_dir
41
+
42
+ tasks = runner[:stdout].split(/\n/).map do |s|
43
+ s.sub(/^#{COMMAND} (\S+).*/, '\1')
44
+ end
45
+
46
+ # temp ignore params
47
+ tasks.map{ |t| t.sub /\[.+/, '' }
48
+ end
49
+ end
@@ -1,3 +1,3 @@
1
1
  module Pult
2
- VERSION = "0.0.16"
2
+ VERSION = "0.0.17"
3
3
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: pult
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.16
4
+ version: 0.0.17
5
5
  platform: ruby
6
6
  authors:
7
7
  - dmitryck
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2019-09-19 00:00:00.000000000 Z
11
+ date: 2019-09-22 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler
@@ -164,6 +164,9 @@ files:
164
164
  - lib/pult/panel/dot_accessible.rb
165
165
  - lib/pult/panel/executor.rb
166
166
  - lib/pult/panel/injector.rb
167
+ - lib/pult/panel/provider.rb
168
+ - lib/pult/panel/provider/pult.rb
169
+ - lib/pult/panel/provider/rake.rb
167
170
  - lib/pult/panel/runner/dot_accessible.rb
168
171
  - lib/pult/panel/runner/injector.rb
169
172
  - lib/pult/version.rb