gloo 0.3.0 → 0.5.3

Sign up to get free protection for your applications and to get access to all the features.
Files changed (112) hide show
  1. checksums.yaml +4 -4
  2. data/.DS_Store +0 -0
  3. data/.rubocop.yml +73 -0
  4. data/Gemfile +2 -2
  5. data/Gemfile.lock +86 -83
  6. data/Rakefile +7 -6
  7. data/bin/console +4 -4
  8. data/gloo.gemspec +22 -18
  9. data/lib/gloo.rb +6 -6
  10. data/lib/gloo/app/args.rb +30 -31
  11. data/lib/gloo/app/engine.rb +80 -30
  12. data/lib/gloo/app/help.rb +17 -11
  13. data/lib/gloo/app/info.rb +3 -3
  14. data/lib/gloo/app/log.rb +17 -17
  15. data/lib/gloo/app/mode.rb +4 -4
  16. data/lib/gloo/app/settings.rb +51 -41
  17. data/lib/gloo/convert/string_to_datetime.rb +21 -0
  18. data/lib/gloo/convert/string_to_decimal.rb +20 -0
  19. data/lib/gloo/convert/string_to_integer.rb +20 -0
  20. data/lib/gloo/core/baseo.rb +7 -7
  21. data/lib/gloo/core/dictionary.rb +30 -27
  22. data/lib/gloo/core/error.rb +50 -0
  23. data/lib/gloo/core/event_manager.rb +17 -23
  24. data/lib/gloo/core/factory.rb +149 -39
  25. data/lib/gloo/core/gloo_system.rb +121 -54
  26. data/lib/gloo/core/heap.rb +15 -13
  27. data/lib/gloo/core/it.rb +5 -5
  28. data/lib/gloo/core/literal.rb +7 -7
  29. data/lib/gloo/core/obj.rb +138 -79
  30. data/lib/gloo/core/obj_finder.rb +9 -14
  31. data/lib/gloo/core/op.rb +8 -8
  32. data/lib/gloo/core/parser.rb +27 -26
  33. data/lib/gloo/core/pn.rb +68 -52
  34. data/lib/gloo/core/script.rb +7 -7
  35. data/lib/gloo/core/tokens.rb +39 -41
  36. data/lib/gloo/core/verb.rb +30 -19
  37. data/lib/gloo/exec/dispatch.rb +30 -0
  38. data/lib/gloo/exec/runner.rb +43 -0
  39. data/lib/gloo/expr/expression.rb +36 -43
  40. data/lib/gloo/expr/l_boolean.rb +7 -6
  41. data/lib/gloo/expr/l_decimal.rb +34 -0
  42. data/lib/gloo/expr/l_integer.rb +5 -4
  43. data/lib/gloo/expr/l_string.rb +13 -15
  44. data/lib/gloo/expr/op_div.rb +5 -5
  45. data/lib/gloo/expr/op_minus.rb +5 -5
  46. data/lib/gloo/expr/op_mult.rb +5 -5
  47. data/lib/gloo/expr/op_plus.rb +7 -7
  48. data/lib/gloo/objs/basic/alias.rb +111 -0
  49. data/lib/gloo/objs/basic/boolean.rb +63 -38
  50. data/lib/gloo/objs/basic/container.rb +71 -12
  51. data/lib/gloo/objs/basic/decimal.rb +96 -0
  52. data/lib/gloo/objs/basic/integer.rb +45 -16
  53. data/lib/gloo/objs/basic/script.rb +62 -38
  54. data/lib/gloo/objs/basic/string.rb +47 -15
  55. data/lib/gloo/objs/basic/text.rb +69 -21
  56. data/lib/gloo/objs/basic/untyped.rb +35 -10
  57. data/lib/gloo/objs/cli/banner.rb +137 -0
  58. data/lib/gloo/objs/cli/bar.rb +141 -0
  59. data/lib/gloo/objs/cli/colorize.rb +54 -24
  60. data/lib/gloo/objs/cli/confirm.rb +63 -29
  61. data/lib/gloo/objs/cli/menu.rb +236 -0
  62. data/lib/gloo/objs/cli/menu_item.rb +128 -0
  63. data/lib/gloo/objs/cli/pastel.rb +120 -0
  64. data/lib/gloo/objs/cli/prompt.rb +73 -31
  65. data/lib/gloo/objs/cli/select.rb +153 -0
  66. data/lib/gloo/objs/ctrl/each.rb +128 -61
  67. data/lib/gloo/objs/ctrl/repeat.rb +129 -0
  68. data/lib/gloo/objs/data/markdown.rb +109 -0
  69. data/lib/gloo/objs/data/table.rb +168 -0
  70. data/lib/gloo/objs/dev/git.rb +98 -64
  71. data/lib/gloo/objs/dt/date.rb +72 -0
  72. data/lib/gloo/objs/dt/datetime.rb +84 -0
  73. data/lib/gloo/objs/dt/time.rb +72 -0
  74. data/lib/gloo/objs/ror/erb.rb +82 -41
  75. data/lib/gloo/objs/ror/eval.rb +73 -31
  76. data/lib/gloo/objs/snd/play.rb +71 -0
  77. data/lib/gloo/objs/snd/say.rb +120 -0
  78. data/lib/gloo/objs/system/file_handle.rb +129 -48
  79. data/lib/gloo/objs/system/system.rb +84 -38
  80. data/lib/gloo/objs/web/http_get.rb +103 -46
  81. data/lib/gloo/objs/web/http_post.rb +70 -44
  82. data/lib/gloo/objs/web/json.rb +155 -0
  83. data/lib/gloo/objs/web/slack.rb +89 -58
  84. data/lib/gloo/objs/web/teams.rb +88 -53
  85. data/lib/gloo/objs/web/uri.rb +160 -0
  86. data/lib/gloo/persist/file_loader.rb +95 -85
  87. data/lib/gloo/persist/file_saver.rb +12 -12
  88. data/lib/gloo/persist/file_storage.rb +15 -15
  89. data/lib/gloo/persist/line_splitter.rb +79 -0
  90. data/lib/gloo/persist/persist_man.rb +63 -39
  91. data/lib/gloo/utils/words.rb +2 -2
  92. data/lib/gloo/verbs/alert.rb +67 -16
  93. data/lib/gloo/verbs/beep.rb +70 -0
  94. data/lib/gloo/verbs/cls.rb +67 -0
  95. data/lib/gloo/verbs/context.rb +61 -21
  96. data/lib/gloo/verbs/create.rb +52 -21
  97. data/lib/gloo/verbs/help.rb +186 -27
  98. data/lib/gloo/verbs/if.rb +55 -21
  99. data/lib/gloo/verbs/list.rb +55 -24
  100. data/lib/gloo/verbs/load.rb +47 -12
  101. data/lib/gloo/verbs/move.rb +128 -0
  102. data/lib/gloo/verbs/put.rb +90 -34
  103. data/lib/gloo/verbs/quit.rb +43 -12
  104. data/lib/gloo/verbs/run.rb +63 -18
  105. data/lib/gloo/verbs/save.rb +45 -10
  106. data/lib/gloo/verbs/show.rb +56 -22
  107. data/lib/gloo/verbs/tell.rb +45 -13
  108. data/lib/gloo/verbs/unless.rb +56 -21
  109. data/lib/gloo/verbs/version.rb +42 -12
  110. data/lib/gloo/verbs/wait.rb +73 -0
  111. data/lib/run.rb +5 -5
  112. metadata +90 -12
@@ -0,0 +1,120 @@
1
+ # Author:: Eric Crane (mailto:eric.crane@mac.com)
2
+ # Copyright:: Copyright (c) 2020 Eric Crane. All rights reserved.
3
+ #
4
+ # Show colorized output with the pastel gem.
5
+ #
6
+ require 'pastel'
7
+
8
+ module Gloo
9
+ module Objs
10
+ class Pastel < Gloo::Core::Obj
11
+
12
+ KEYWORD = 'pastel'.freeze
13
+ KEYWORD_SHORT = 'pastel'.freeze
14
+ TEXT = 'text'.freeze
15
+ COLOR = 'color'.freeze
16
+
17
+ #
18
+ # The name of the object type.
19
+ #
20
+ def self.typename
21
+ return KEYWORD
22
+ end
23
+
24
+ #
25
+ # The short name of the object type.
26
+ #
27
+ def self.short_typename
28
+ return KEYWORD_SHORT
29
+ end
30
+
31
+ #
32
+ # Get the text from the child object.
33
+ #
34
+ def text_value
35
+ o = find_child TEXT
36
+ return '' unless o
37
+
38
+ return o.value
39
+ end
40
+
41
+ #
42
+ # Get the color from the child object.
43
+ #
44
+ def color_value
45
+ o = find_child COLOR
46
+ return '' unless o
47
+
48
+ return o.value
49
+ end
50
+
51
+ # ---------------------------------------------------------------------
52
+ # Children
53
+ # ---------------------------------------------------------------------
54
+
55
+ # Does this object have children to add when an object
56
+ # is created in interactive mode?
57
+ # This does not apply during obj load, etc.
58
+ def add_children_on_create?
59
+ return true
60
+ end
61
+
62
+ # Add children to this object.
63
+ # This is used by containers to add children needed
64
+ # for default configurations.
65
+ def add_default_children
66
+ fac = $engine.factory
67
+ fac.create_string TEXT, '', self
68
+ fac.create_string COLOR, '', self
69
+ end
70
+
71
+ # ---------------------------------------------------------------------
72
+ # Messages
73
+ # ---------------------------------------------------------------------
74
+
75
+ #
76
+ # Get a list of message names that this object receives.
77
+ #
78
+ def self.messages
79
+ return super + %w[show]
80
+ end
81
+
82
+ #
83
+ # Show the banner bar
84
+ #
85
+ def msg_show
86
+ pastel = ::Pastel.new
87
+ c = self.color_value.split( ' ' ).map( &:to_sym )
88
+ puts pastel.decorate( self.text_value, *c )
89
+ end
90
+
91
+ # ---------------------------------------------------------------------
92
+ # Help
93
+ # ---------------------------------------------------------------------
94
+
95
+ #
96
+ # Get help for this object type.
97
+ #
98
+ def self.help
99
+ return <<~TEXT
100
+ PASTEL OBJECT TYPE
101
+ NAME: pastel
102
+ SHORTCUT: pastel
103
+
104
+ DESCRIPTION
105
+ Show colorized text with the pastel gem.
106
+
107
+ CHILDREN
108
+ text - string
109
+ The text that will be colorized.
110
+ color - string
111
+ The colors. See pastel for options.
112
+
113
+ MESSAGES
114
+ show - Show the colorized text.
115
+ TEXT
116
+ end
117
+
118
+ end
119
+ end
120
+ end
@@ -7,45 +7,46 @@
7
7
  module Gloo
8
8
  module Objs
9
9
  class Prompt < Gloo::Core::Obj
10
-
11
- KEYWORD = 'prompt'
12
- KEYWORD_SHORT = 'ask'
13
- PROMPT = 'prompt'
14
- RESULT = 'result'
15
10
 
16
- #
11
+ KEYWORD = 'prompt'.freeze
12
+ KEYWORD_SHORT = 'ask'.freeze
13
+ PROMPT = 'prompt'.freeze
14
+ RESULT = 'result'.freeze
15
+
16
+ #
17
17
  # The name of the object type.
18
- #
18
+ #
19
19
  def self.typename
20
20
  return KEYWORD
21
21
  end
22
22
 
23
- #
23
+ #
24
24
  # The short name of the object type.
25
- #
25
+ #
26
26
  def self.short_typename
27
27
  return KEYWORD_SHORT
28
28
  end
29
-
30
- #
31
- # Get the URI from the child object.
29
+
30
+ #
31
+ # Get the prompt from the child object.
32
32
  # Returns nil if there is none.
33
- #
34
- def get_prompt
33
+ #
34
+ def prompt_value
35
35
  o = find_child PROMPT
36
36
  return nil unless o
37
+
37
38
  return o.value
38
39
  end
39
-
40
- #
40
+
41
+ #
41
42
  # Set the result of the system call.
42
- #
43
- def set_result data
43
+ #
44
+ def set_result( data )
44
45
  r = find_child RESULT
45
46
  return nil unless r
47
+
46
48
  r.set_value data
47
49
  end
48
-
49
50
 
50
51
  # ---------------------------------------------------------------------
51
52
  # Children
@@ -57,36 +58,77 @@ module Gloo
57
58
  def add_children_on_create?
58
59
  return true
59
60
  end
60
-
61
+
61
62
  # Add children to this object.
62
- # This is used by containers to add children needed
63
+ # This is used by containers to add children needed
63
64
  # for default configurations.
64
65
  def add_default_children
65
66
  fac = $engine.factory
66
- fac.create "prompt", "string", "> ", self
67
- fac.create "result", "string", nil, self
67
+ fac.create_string PROMPT, '>', self
68
+ fac.create_string RESULT, nil, self
68
69
  end
69
70
 
70
-
71
71
  # ---------------------------------------------------------------------
72
72
  # Messages
73
73
  # ---------------------------------------------------------------------
74
74
 
75
- #
75
+ #
76
76
  # Get a list of message names that this object receives.
77
- #
77
+ #
78
78
  def self.messages
79
- return super + [ "run" ]
79
+ return super + %w[run multiline]
80
80
  end
81
-
82
- # Run the system command.
81
+
82
+ #
83
+ # Show a multiline prompt and get the user's input.
84
+ #
85
+ def msg_multiline
86
+ prompt = prompt_value
87
+ return unless prompt
88
+
89
+ result = $prompt.multiline( prompt )
90
+ set_result result.join
91
+ end
92
+
93
+ #
94
+ # Show the prompt and get the user's input.
95
+ #
83
96
  def msg_run
84
- prompt = get_prompt
97
+ prompt = prompt_value
85
98
  return unless prompt
99
+
86
100
  result = $prompt.ask( prompt )
87
101
  set_result result
88
102
  end
89
-
103
+
104
+ # ---------------------------------------------------------------------
105
+ # Help
106
+ # ---------------------------------------------------------------------
107
+
108
+ #
109
+ # Get help for this object type.
110
+ #
111
+ def self.help
112
+ return <<~TEXT
113
+ PROMPT OBJECT TYPE
114
+ NAME: prompt
115
+ SHORTCUT: ask
116
+
117
+ DESCRIPTION
118
+ CLI prompt for user input.
119
+
120
+ CHILDREN
121
+ prompt - string - '> '
122
+ The prompt displayed to the user.
123
+ result - string - none
124
+ The result with the user's input.
125
+
126
+ MESSAGES
127
+ run - Prompt the user and then set the result.
128
+ multiline - Show a multiline prompt.
129
+ TEXT
130
+ end
131
+
90
132
  end
91
133
  end
92
134
  end
@@ -0,0 +1,153 @@
1
+ # Author:: Eric Crane (mailto:eric.crane@mac.com)
2
+ # Copyright:: Copyright (c) 2020 Eric Crane. All rights reserved.
3
+ #
4
+ # Show a CLI prompt and user selection from a list.
5
+ #
6
+
7
+ module Gloo
8
+ module Objs
9
+ class Select < Gloo::Core::Obj
10
+
11
+ KEYWORD = 'select'.freeze
12
+ KEYWORD_SHORT = 'sel'.freeze
13
+ PROMPT = 'prompt'.freeze
14
+ OPTIONS = 'options'.freeze
15
+ RESULT = 'result'.freeze
16
+
17
+ #
18
+ # The name of the object type.
19
+ #
20
+ def self.typename
21
+ return KEYWORD
22
+ end
23
+
24
+ #
25
+ # The short name of the object type.
26
+ #
27
+ def self.short_typename
28
+ return KEYWORD_SHORT
29
+ end
30
+
31
+ #
32
+ # Get the prompt from the child object.
33
+ # Returns nil if there is none.
34
+ #
35
+ def prompt_value
36
+ o = find_child PROMPT
37
+ return nil unless o
38
+
39
+ return o.value
40
+ end
41
+
42
+ #
43
+ # Get the list of options for selection.
44
+ #
45
+ def options
46
+ o = find_child OPTIONS
47
+ return [] unless o
48
+
49
+ return o.children.map( &:name )
50
+ end
51
+
52
+ #
53
+ # Get the value of the selected item.
54
+ #
55
+ def key_for_option( selected )
56
+ o = find_child OPTIONS
57
+ return nil unless o
58
+
59
+ o.children.each do |c|
60
+ return c.value if c.name == selected
61
+ end
62
+
63
+ return nil
64
+ end
65
+
66
+ #
67
+ # Set the result of the system call.
68
+ #
69
+ def set_result( data )
70
+ r = find_child RESULT
71
+ return nil unless r
72
+
73
+ r.set_value data
74
+ end
75
+
76
+ # ---------------------------------------------------------------------
77
+ # Children
78
+ # ---------------------------------------------------------------------
79
+
80
+ # Does this object have children to add when an object
81
+ # is created in interactive mode?
82
+ # This does not apply during obj load, etc.
83
+ def add_children_on_create?
84
+ return true
85
+ end
86
+
87
+ # Add children to this object.
88
+ # This is used by containers to add children needed
89
+ # for default configurations.
90
+ def add_default_children
91
+ fac = $engine.factory
92
+ fac.create_string PROMPT, '>', self
93
+ fac.create_can OPTIONS, self
94
+ fac.create_string RESULT, nil, self
95
+ end
96
+
97
+ # ---------------------------------------------------------------------
98
+ # Messages
99
+ # ---------------------------------------------------------------------
100
+
101
+ #
102
+ # Get a list of message names that this object receives.
103
+ #
104
+ def self.messages
105
+ return super + %w[run]
106
+ end
107
+
108
+ #
109
+ # Show the prompt and get the user's selection.
110
+ #
111
+ def msg_run
112
+ prompt = prompt_value
113
+ return unless prompt
114
+
115
+ per = Gloo::App::Settings.page_size
116
+ result = $prompt.select( prompt, options, :per_page => per )
117
+ set_result self.key_for_option( result )
118
+ end
119
+
120
+ # ---------------------------------------------------------------------
121
+ # Help
122
+ # ---------------------------------------------------------------------
123
+
124
+ #
125
+ # Get help for this object type.
126
+ #
127
+ def self.help
128
+ return <<~TEXT
129
+ SELECT OBJECT TYPE
130
+ NAME: select
131
+ SHORTCUT: sel
132
+
133
+ DESCRIPTION
134
+ Prompt for user to select from a list of options.
135
+
136
+ CHILDREN
137
+ prompt - string - '> '
138
+ The prompt displayed to the user.
139
+ options - container
140
+ The list of options for the selection list.
141
+ The name of each option will be presented to the user, but
142
+ the value will be put in the result.
143
+ result - string - none
144
+ The result with the user's selection.
145
+
146
+ MESSAGES
147
+ run - Prompt the user for a selection and then set the result.
148
+ TEXT
149
+ end
150
+
151
+ end
152
+ end
153
+ end
@@ -12,49 +12,47 @@
12
12
  module Gloo
13
13
  module Objs
14
14
  class Each < Gloo::Core::Obj
15
-
16
- KEYWORD = 'each'
17
- KEYWORD_SHORT = 'each'
18
- WORD = 'word'
19
- LINE = 'line'
20
- FILE = 'file'
21
- REPO = 'repo'
22
- IN = 'IN'
23
- DO = 'do'
24
-
25
- #
15
+
16
+ KEYWORD = 'each'.freeze
17
+ KEYWORD_SHORT = 'each'.freeze
18
+ CHILD = 'child'.freeze
19
+ WORD = 'word'.freeze
20
+ LINE = 'line'.freeze
21
+ FILE = 'file'.freeze
22
+ REPO = 'repo'.freeze
23
+ IN = 'IN'.freeze
24
+ DO = 'do'.freeze
25
+
26
+ #
26
27
  # The name of the object type.
27
- #
28
+ #
28
29
  def self.typename
29
30
  return KEYWORD
30
31
  end
31
32
 
32
- #
33
+ #
33
34
  # The short name of the object type.
34
- #
35
+ #
35
36
  def self.short_typename
36
37
  return KEYWORD_SHORT
37
38
  end
38
-
39
- #
39
+
40
+ #
40
41
  # Get the URI from the child object.
41
42
  # Returns nil if there is none.
42
- #
43
- def get_in
43
+ #
44
+ def in_value
44
45
  o = find_child IN
45
- return nil unless o
46
- return o.value
46
+ return o ? o.value : nil
47
47
  end
48
-
48
+
49
49
  # Run the do script once.
50
50
  def run_do
51
51
  o = find_child DO
52
- if o.can_receive_message? "run"
53
- o.send_message "run"
54
- end
55
- end
52
+ return unless o
56
53
 
57
-
54
+ Gloo::Exec::Dispatch.message 'run', o
55
+ end
58
56
 
59
57
  # ---------------------------------------------------------------------
60
58
  # Children
@@ -66,32 +64,33 @@ module Gloo
66
64
  def add_children_on_create?
67
65
  return true
68
66
  end
69
-
67
+
70
68
  # Add children to this object.
71
- # This is used by containers to add children needed
69
+ # This is used by containers to add children needed
72
70
  # for default configurations.
73
71
  def add_default_children
74
72
  fac = $engine.factory
75
- fac.create "word", "string", "", self
76
- fac.create "in", "string", "", self
77
- fac.create "do", "script", "", self
73
+ fac.create_string WORD, '', self
74
+ fac.create_string IN, '', self
75
+ fac.create_script DO, '', self
78
76
  end
79
77
 
80
-
81
78
  # ---------------------------------------------------------------------
82
79
  # Messages
83
80
  # ---------------------------------------------------------------------
84
81
 
85
- #
82
+ #
86
83
  # Get a list of message names that this object receives.
87
- #
84
+ #
88
85
  def self.messages
89
- return super + [ "run" ]
86
+ return super + [ 'run' ]
90
87
  end
91
-
88
+
92
89
  # Run the system command.
93
90
  def msg_run
94
- if each_word?
91
+ if each_child?
92
+ run_each_child
93
+ elsif each_word?
95
94
  run_each_word
96
95
  elsif each_line?
97
96
  run_each_line
@@ -99,8 +98,40 @@ module Gloo
99
98
  run_each_repo
100
99
  end
101
100
  end
102
-
103
-
101
+
102
+ # ---------------------------------------------------------------------
103
+ # Child Object
104
+ # ---------------------------------------------------------------------
105
+
106
+ # Is it set up to run for each word?
107
+ # If there is a child object by the name "word"
108
+ # then we will loop for each word in the string.
109
+ def each_child?
110
+ return true if contains_child? CHILD
111
+
112
+ return false
113
+ end
114
+
115
+ # Run for each word.
116
+ def run_each_child
117
+ o = find_child IN
118
+ return unless o
119
+
120
+ o = Gloo::Objs::Alias.resolve_alias( o )
121
+ o.children.each do |child|
122
+ set_child child
123
+ run_do
124
+ end
125
+ end
126
+
127
+ # Set the child alias.
128
+ def set_child( obj )
129
+ o = find_child CHILD
130
+ return unless o
131
+
132
+ o.set_value obj.pn
133
+ end
134
+
104
135
  # ---------------------------------------------------------------------
105
136
  # Word
106
137
  # ---------------------------------------------------------------------
@@ -109,28 +140,29 @@ module Gloo
109
140
  # If there is a child object by the name "word"
110
141
  # then we will loop for each word in the string.
111
142
  def each_word?
112
- o = find_child WORD
113
- return true if o
143
+ return true if find_child WORD
144
+
114
145
  return false
115
146
  end
116
147
 
117
148
  # Run for each word.
118
149
  def run_each_word
119
- str = get_in
150
+ str = in_value
120
151
  return unless str
121
- str.split( " " ).each do |word|
152
+
153
+ str.split( ' ' ).each do |word|
122
154
  set_word word
123
155
  run_do
124
156
  end
125
157
  end
126
-
158
+
127
159
  # Set the value of the word.
128
- def set_word word
160
+ def set_word( word )
129
161
  o = find_child WORD
130
162
  return unless o
163
+
131
164
  o.set_value word
132
165
  end
133
-
134
166
 
135
167
  # ---------------------------------------------------------------------
136
168
  # Line
@@ -140,30 +172,30 @@ module Gloo
140
172
  # If there is a child object by the name "line"
141
173
  # then we will loop for each line in the string.
142
174
  def each_line?
143
- o = find_child LINE
144
- return true if o
175
+ return true if find_child LINE
176
+
145
177
  return false
146
178
  end
147
-
179
+
148
180
  # Run for each line.
149
181
  def run_each_line
150
- str = get_in
182
+ str = in_value
151
183
  return unless str
152
- str.split( "\n" ).each do |line|
184
+
185
+ str.each_line do |line|
153
186
  set_line line
154
187
  run_do
155
188
  end
156
189
  end
157
-
190
+
158
191
  # Set the value of the word.
159
- def set_line line
192
+ def set_line( line )
160
193
  o = find_child LINE
161
194
  return unless o
195
+
162
196
  o.set_value line
163
197
  end
164
198
 
165
-
166
-
167
199
  # ---------------------------------------------------------------------
168
200
  # Git Repo
169
201
  # ---------------------------------------------------------------------
@@ -172,11 +204,11 @@ module Gloo
172
204
  # If there is a child object by the name "repo"
173
205
  # then we will loop for each repo in the directory.
174
206
  def each_repo?
175
- o = find_child REPO
176
- return true if o
207
+ return true if find_child REPO
208
+
177
209
  return false
178
210
  end
179
-
211
+
180
212
  def find_all_git_projects( path )
181
213
  path.children.collect do |f|
182
214
  if f.directory? && ( File.basename( f ) == '.git' )
@@ -189,8 +221,9 @@ module Gloo
189
221
 
190
222
  # Run for each line.
191
223
  def run_each_repo
192
- path = get_in
224
+ path = in_value
193
225
  return unless path
226
+
194
227
  path = Pathname.new( path )
195
228
  repos = find_all_git_projects( path )
196
229
  repos.each do |o|
@@ -198,15 +231,49 @@ module Gloo
198
231
  run_do
199
232
  end
200
233
  end
201
-
234
+
202
235
  # Set the value of the repo.
203
236
  # This is a path to the repo.
204
- def set_repo path
237
+ def set_repo( path )
205
238
  o = find_child REPO
206
239
  return unless o
240
+
207
241
  o.set_value path
208
242
  end
209
243
 
244
+ # ---------------------------------------------------------------------
245
+ # Help
246
+ # ---------------------------------------------------------------------
247
+
248
+ #
249
+ # Get help for this object type.
250
+ #
251
+ def self.help
252
+ return <<~TEXT
253
+ EACH OBJECT TYPE
254
+ NAME: each
255
+ SHORTCUT: each
256
+
257
+ DESCRIPTION
258
+ Perform an action for each item in a collection.
259
+
260
+ CHILDREN
261
+ child | word | line | repo - string - none
262
+ The entity we want to loop for.
263
+ It will hold the current value while the script is running.
264
+ in - string - none
265
+ The collection we will iterate in.
266
+ In the case of <word> or <line> this will be a string or text.
267
+ In the case of <repo> this will be the root path.
268
+ do - script - none
269
+ The action we want to perform for each found item.
270
+
271
+ MESSAGES
272
+ run - Look through the collecion and perform this for each
273
+ found item.
274
+ TEXT
275
+ end
276
+
210
277
  end
211
278
  end
212
279
  end