envo 0.1.0

Sign up to get free protection for your applications and to get access to all the features.
@@ -0,0 +1,35 @@
1
+ module Envo
2
+ class NoVal
3
+ def value
4
+ nil
5
+ end
6
+
7
+ # casts
8
+ def type
9
+ :empty
10
+ end
11
+ def accept_assign?(other)
12
+ true
13
+ end
14
+ def invalid_description
15
+ nil
16
+ end
17
+ def list?
18
+ false
19
+ end
20
+ def to_list
21
+ return ListVal.new([])
22
+ end
23
+ def to_s
24
+ ''
25
+ end
26
+ def pretty_print(ctx)
27
+ ctx.puts '<empty>'
28
+ end
29
+ def to_env_s
30
+ nil
31
+ end
32
+ def clean!
33
+ end
34
+ end
35
+ end
@@ -0,0 +1,24 @@
1
+ module Envo
2
+ class PathListVal < ListVal
3
+ def initialize(host, ar)
4
+ super(ar)
5
+ @host = host
6
+ end
7
+ def type
8
+ :"path list"
9
+ end
10
+ def accept_assign?(other)
11
+ other.type == type
12
+ end
13
+ def accept_item?(item)
14
+ item.type == :path
15
+ end
16
+ def pp_attribs(elem)
17
+ super + (@host.path_exists?(elem) ? ' ' : 'N')
18
+ end
19
+ def clean!
20
+ super
21
+ @ar.select! { |s| @host.path_exists?(s) }
22
+ end
23
+ end
24
+ end
@@ -0,0 +1,41 @@
1
+ module Envo
2
+ class PathVal
3
+ def initialize(host, str)
4
+ @host = host
5
+ @path = str
6
+ end
7
+ attr_reader :host
8
+ attr_accessor :path
9
+ # casts
10
+ def type
11
+ :path
12
+ end
13
+ def accept_assign?(other)
14
+ other.type == type
15
+ end
16
+ def invalid_description
17
+ @host.path_exists?(@path) ? nil : 'non-existing path'
18
+ end
19
+ def list?
20
+ false
21
+ end
22
+ def to_list
23
+ return PathListVal.new(@host, [@path])
24
+ end
25
+ def to_s
26
+ @path
27
+ end
28
+ def pretty_print(ctx)
29
+ ctx.puts @path
30
+ inv = invalid_description
31
+ return if !inv
32
+ ctx.warn "Warning: #{inv}"
33
+ end
34
+ def to_env_s
35
+ @path
36
+ end
37
+ def clean!
38
+ @path = nil if @path && !@path.empty? && !@host.path_exists?(@path)
39
+ end
40
+ end
41
+ end
@@ -0,0 +1,40 @@
1
+ module Envo
2
+ class StringVal
3
+ def initialize(str)
4
+ @value = str
5
+ end
6
+ attr_accessor :value
7
+
8
+ # casts
9
+ def type
10
+ :string
11
+ end
12
+ def accept_assign?(other)
13
+ true
14
+ end
15
+ def invalid_description
16
+ @value.empty? ? "empty string" : nil
17
+ end
18
+ def list?
19
+ false
20
+ end
21
+ def to_list
22
+ return ListVal.new([@value])
23
+ end
24
+ def to_s
25
+ @value
26
+ end
27
+ def pretty_print(ctx)
28
+ ctx.puts @value
29
+ inv = invalid_description
30
+ return if !inv
31
+ ctx.warn "Warning: #{inv}"
32
+ end
33
+ def to_env_s
34
+ @value
35
+ end
36
+ def clean!
37
+ @value = nil if @value && @value.empty?
38
+ end
39
+ end
40
+ end
@@ -0,0 +1,59 @@
1
+ require 'pathname'
2
+
3
+ module Envo
4
+ module ValBuilder
5
+ extend self
6
+
7
+ def from_env_string(str, host)
8
+ return NoVal.new if !str
9
+
10
+ is_list = host.shell.likely_list?(str)
11
+ is_path = host.shell.likely_abs_path?(str)
12
+
13
+ if is_list
14
+ ar = host.shell.list_to_ar(str)
15
+ if is_path
16
+ return PathListVal.new(host, ar)
17
+ else
18
+ return ListVal.new(ar)
19
+ end
20
+ elsif is_path
21
+ return PathVal.new(host, str)
22
+ else
23
+ return StringVal.new(str)
24
+ end
25
+ end
26
+
27
+ def from_user_string(str, host)
28
+ if host.shell.likely_abs_path?(str)
29
+ return PathVal.new(host, host.shell.fix_path(str))
30
+ end
31
+
32
+ if host.shell.likely_rel_path?(str)
33
+ # the pathname approach is not multi-platform
34
+ # ie windows paths won't work on non-windows host
35
+ # we should reimplement pathname joins for windows for this to work
36
+ path = Pathname.new host.pwd
37
+ path += str
38
+ return PathVal.new(host, host.shell.fix_path(path.cleanpath.to_s))
39
+ end
40
+
41
+ return StringVal.new str
42
+ end
43
+
44
+ def from_user_text(text, host)
45
+ return from_user_string(text, host) if text.class != Array
46
+ return NoVal.new if text.empty?
47
+
48
+ elems = text.map { |str| from_user_string(str, host) }
49
+
50
+ # array of 1 is as good as nothing
51
+ return elems[0] if elems.size == 1
52
+
53
+ is_path = elems[0].type == :path
54
+ elems.map! { |elem| elem.to_s }
55
+
56
+ return is_path ? PathListVal.new(host, elems) : ListVal.new(elems)
57
+ end
58
+ end
59
+ end
@@ -0,0 +1,4 @@
1
+ module Envo
2
+ VERSION = '0.1.0'
3
+ VERSION_TYPE = 'alpha'
4
+ end
metadata ADDED
@@ -0,0 +1,89 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: envo
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.1.0
5
+ platform: ruby
6
+ authors:
7
+ - Borislav Stanimirov
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2020-11-14 00:00:00.000000000 Z
12
+ dependencies: []
13
+ description: View, set, unset and manage environment variables (strings, lists, paths)
14
+ on all platforms.
15
+ email: b.stanimirov@abv.bg
16
+ executables:
17
+ - envo-install
18
+ - envo_run
19
+ extensions: []
20
+ extra_rdoc_files: []
21
+ files:
22
+ - bin/envo-install
23
+ - bin/envo_gen_tmp_helper.rb
24
+ - bin/envo_run
25
+ - lib/envo.rb
26
+ - lib/envo/cli/envo.bat
27
+ - lib/envo/cli/envo.sh
28
+ - lib/envo/cli/help.rb
29
+ - lib/envo/cli/installer_bash.rb
30
+ - lib/envo/cli/installer_win_cmd.rb
31
+ - lib/envo/cli/runner.rb
32
+ - lib/envo/cli_parser.rb
33
+ - lib/envo/cmd_clean.rb
34
+ - lib/envo/cmd_copy.rb
35
+ - lib/envo/cmd_list.rb
36
+ - lib/envo/cmd_list_add.rb
37
+ - lib/envo/cmd_list_del.rb
38
+ - lib/envo/cmd_path.rb
39
+ - lib/envo/cmd_reset.rb
40
+ - lib/envo/cmd_run.rb
41
+ - lib/envo/cmd_set.rb
42
+ - lib/envo/cmd_show.rb
43
+ - lib/envo/cmd_swap.rb
44
+ - lib/envo/cmd_unset.rb
45
+ - lib/envo/context.rb
46
+ - lib/envo/error.rb
47
+ - lib/envo/host.rb
48
+ - lib/envo/host_shell.rb
49
+ - lib/envo/logger.rb
50
+ - lib/envo/parse_result.rb
51
+ - lib/envo/parsed_cmd.rb
52
+ - lib/envo/script_parser.rb
53
+ - lib/envo/shell/bash.rb
54
+ - lib/envo/shell/win_cmd.rb
55
+ - lib/envo/state.rb
56
+ - lib/envo/val/list_val.rb
57
+ - lib/envo/val/no_val.rb
58
+ - lib/envo/val/path_list_val.rb
59
+ - lib/envo/val/path_val.rb
60
+ - lib/envo/val/string_val.rb
61
+ - lib/envo/val/val_builder.rb
62
+ - lib/envo/version.rb
63
+ homepage: https://github.com/iboB/envo
64
+ licenses:
65
+ - MIT
66
+ metadata: {}
67
+ post_install_message: |
68
+ Thanks for installing envo!
69
+ For this tool to work, you must also run the installation program: 'envo-install'.
70
+ Running it will complete the setup and 'envo' should be available as a command.
71
+ rdoc_options: []
72
+ require_paths:
73
+ - lib
74
+ required_ruby_version: !ruby/object:Gem::Requirement
75
+ requirements:
76
+ - - ">="
77
+ - !ruby/object:Gem::Version
78
+ version: '0'
79
+ required_rubygems_version: !ruby/object:Gem::Requirement
80
+ requirements:
81
+ - - ">="
82
+ - !ruby/object:Gem::Version
83
+ version: '0'
84
+ requirements: []
85
+ rubygems_version: 3.1.4
86
+ signing_key:
87
+ specification_version: 4
88
+ summary: An CLI environment variable manager
89
+ test_files: []