mushy 0.1.3 → 0.2.3
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.
- checksums.yaml +4 -4
- data/bin/mushy +1 -1
- data/lib/mushy.rb +2 -8
- data/lib/mushy/builder/api.rb +11 -1
- data/lib/mushy/builder/index.rb +83 -39
- data/lib/mushy/flow.rb +2 -2
- data/lib/mushy/fluxs/browser.rb +14 -6
- data/lib/mushy/fluxs/read_csv.rb +22 -2
- data/lib/mushy/fluxs/read_file.rb +44 -0
- data/lib/mushy/fluxs/screenshot.rb +46 -0
- data/lib/mushy/fluxs/write_file.rb +5 -2
- data/mushy.gemspec +1 -1
- metadata +3 -1
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 8c7cd35133c18b25798aa2d8f41b917435e2eb2c766c8bd0798413bd86787d54
|
4
|
+
data.tar.gz: 06bf70b427dbb2ae5611cfe6d7fce4f6eff1910b291a768fc22ff6de67dd7330
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 6b382bab1d6384c96b0c0b3da3e94fb6adb578103b8372509719288dcbb82b2b0e19d9b3a6711ad0dd678ded5af296d527d4142de9bfe2446d7dda464aeaf7ed
|
7
|
+
data.tar.gz: 00e17640e86de55782f0876318d8a1c18415c0a8f80f8c2891a79b28ddf7260ee8c199b67d3e78ea6ea7c2f710453df33297ccc10d58caab4bfcc47548c0ccad
|
data/bin/mushy
CHANGED
data/lib/mushy.rb
CHANGED
@@ -3,15 +3,9 @@ require 'symbolized'
|
|
3
3
|
|
4
4
|
Dir[File.dirname(__FILE__) + '/mushy/*.rb'].each { |f| require f }
|
5
5
|
|
6
|
-
important_flux_files = ['bash'].map { |x| "#{x}.rb" }
|
6
|
+
important_flux_files = ['bash', 'browser'].map { |x| "#{x}.rb" }
|
7
7
|
Dir[File.dirname(__FILE__) + '/mushy/fluxs/*.rb']
|
8
8
|
.sort_by { |f| important_flux_files.any? { |x| f.end_with?(x) } ? 0 : 1 }
|
9
9
|
.each { |f| require f }
|
10
10
|
|
11
|
-
Dir[File.dirname(__FILE__) + '/mushy/builder/*.rb'].each { |f| require f }
|
12
|
-
|
13
|
-
module Mushy
|
14
|
-
def self.hi
|
15
|
-
puts 'hello'
|
16
|
-
end
|
17
|
-
end
|
11
|
+
Dir[File.dirname(__FILE__) + '/mushy/builder/*.rb'].each { |f| require f }
|
data/lib/mushy/builder/api.rb
CHANGED
@@ -40,7 +40,17 @@ module Mushy
|
|
40
40
|
def self.get_flow file
|
41
41
|
puts "trying to get: #{file}"
|
42
42
|
file = "#{file}.json" unless file.downcase.end_with?('.json')
|
43
|
-
JSON.parse File.open(file).read
|
43
|
+
data = JSON.parse File.open(file).read
|
44
|
+
data['fluxs']
|
45
|
+
.reject { |x| x['parents'] }
|
46
|
+
.each { |x| x['parents'] = [x['parent']].select { |y| y } }
|
47
|
+
data['fluxs']
|
48
|
+
.select { |x| x['parent'] }
|
49
|
+
.each { |x| x.delete 'parent' }
|
50
|
+
data['fluxs']
|
51
|
+
.select { |x| x['parents'] }
|
52
|
+
.each { |x| x['parents'] = x['parents'].select { |y| y } }
|
53
|
+
data
|
44
54
|
rescue
|
45
55
|
{ fluxs: [] }
|
46
56
|
end
|
data/lib/mushy/builder/index.rb
CHANGED
@@ -20,16 +20,14 @@ module Mushy
|
|
20
20
|
</tr>
|
21
21
|
<tr v-for="flux in flow.fluxs">
|
22
22
|
<td>{{flux.name}}</td>
|
23
|
-
<td>{{flux_name_for(flux.
|
23
|
+
<td>{{flux_name_for(flux.parents, flow.fluxs)}}</td>
|
24
24
|
<td>
|
25
25
|
<button v-on:click.prevent.stop="editFlux({ flux: flux, setup: setup, configs: configs })">Edit</button>
|
26
26
|
<button v-on:click.prevent.stop="deleteFlux({ flux: flux, flow: flow })">Delete</button>
|
27
27
|
</td>
|
28
28
|
</tr>
|
29
29
|
</table>
|
30
|
-
<button v-if="setup.showFlux == false" v-on:click.prevent.stop="startNew({ setup: setup, configs: configs })">
|
31
|
-
<button v-if="setup.showFlux == false" v-on:click.prevent.stop="saveFlow({ setup: setup, flow: flow })">Save This Flow</button>
|
32
|
-
<button v-if="setup.showFlux" v-on:click.prevent.stop="setup.showFlux = false">< Go Back To List</button>
|
30
|
+
<button v-if="setup.showFlux == false" v-on:click.prevent.stop="startNew({ setup: setup, configs: configs })">Add a New Flux To This Flow</button>
|
33
31
|
<div v-if="setup.showFlux">
|
34
32
|
<mip-heavy :data="setup"></mip-heavy>
|
35
33
|
<mip-heavy v-for="(data, id) in configs" v-show="setup.flux.value === id" :data="data"></mip-heavy>
|
@@ -109,7 +107,7 @@ module Mushy
|
|
109
107
|
};
|
110
108
|
},
|
111
109
|
props: ['label', 'placeholder', 'disabled', 'readonly', 'value', 'description', 'view'],
|
112
|
-
template: '<div><mip-h4 :id="id" :label="label" :description="description"></mip-h4> <pre><code>{{show(view, value)}}</code></pre><button :disabled="view==\\'beautiful\\'" v-on:click.prevent.stop="view=toggle(view)">
|
110
|
+
template: '<div><mip-h4 :id="id" :label="label" :description="description"></mip-h4> <pre><code>{{show(view, value)}}</code></pre><button :disabled="view==\\'beautiful\\'" v-on:click.prevent.stop="view=toggle(view)">View Pretty</button><button :disabled="view!=\\'beautiful\\'" v-on:click.prevent.stop="view=toggle(view)">View Smaller</button><button v-on:click.prevent.stop="copy(view, value)">Copy</button></div>'
|
113
111
|
},
|
114
112
|
radio: {
|
115
113
|
props: ['label', 'value', 'options', 'description', 'shrink'],
|
@@ -123,6 +121,32 @@ module Mushy
|
|
123
121
|
props: ['label', 'value', 'options', 'description', 'shrink'],
|
124
122
|
template: '<div><mip-label :id="id" :label="label" :description="description" :hide_description="shrink"></mip-label> <a href="#" v-on:click.prevent.stop="shrink=false" v-show="shrink && !value">[^]</a><select :name="id" v-if="value || !shrink" v-on:input="$emit(\\'update:value\\', $event.target.value)"><option v-for="option in options" v-bind:value="option.id" :selected="value == option.id">{{option.name}}</option></select></div>'
|
125
123
|
},
|
124
|
+
selectmanyrecords: {
|
125
|
+
data: function() {
|
126
|
+
return {
|
127
|
+
selectedValue: '',
|
128
|
+
remove: function(value, set) {
|
129
|
+
if (set.includes(value) == false) return;
|
130
|
+
for(var i = 0; i < set.length; i++)
|
131
|
+
{
|
132
|
+
if (set[i] === value)
|
133
|
+
{
|
134
|
+
set.splice(i, 1);
|
135
|
+
i--;
|
136
|
+
}
|
137
|
+
}
|
138
|
+
return set;
|
139
|
+
},
|
140
|
+
doit: function(value, set) {
|
141
|
+
if (set.includes(value) == false)
|
142
|
+
set.push(value);
|
143
|
+
return set;
|
144
|
+
},
|
145
|
+
};
|
146
|
+
},
|
147
|
+
props: ['label', 'value', 'options', 'description', 'shrink'],
|
148
|
+
template: '<div><mip-label :id="id" :label="label" :description="description" :hide_description="shrink"></mip-label> <a href="#" v-on:click.prevent.stop="shrink=false" v-show="shrink && !value">[^]</a> <span v-for="option in options" v-if="value && value.includes(option.id)">{{option.name}} <a href="#" v-on:click.prevent.stop="remove(option.id, value);$emit(\\'update:value\\', value)">[X]</a> </span> <a href="#" v-on:click.prevent.stop="doit(selectedValue, value);$emit(\\'update:value\\', value)">ADD</a> <select :name="id" v-if="value || !shrink" v-on:input="selectedValue=$event.target.value;"><option v-for="option in options" v-bind:value="option.id">{{option.name}}</option></select></div>'
|
149
|
+
},
|
126
150
|
boolean: {
|
127
151
|
props: ['label', 'value', 'options', 'description', 'shrink'],
|
128
152
|
template: '<div><mip-label :id="id" :label="label" :description="description" :hide_description="shrink"></mip-label> <a href="#" v-on:click.prevent.stop="shrink=false" v-show="shrink && !value">[^]</a><select :name="id" v-if="(value != undefined && value != null && value != \\'\\') || !shrink" v-on:input="$emit(\\'update:value\\', $event.target.value)"><option v-for="option in [true, false]" v-bind:value="option" :selected="value == option">{{option}}</option></select></div>'
|
@@ -240,44 +264,63 @@ module Mushy
|
|
240
264
|
for(var type in fluxTypes)
|
241
265
|
options.push(fluxTypes[type]);
|
242
266
|
|
267
|
+
var saveTheFlux = function(input)
|
268
|
+
{
|
269
|
+
var theApp = input.app;
|
270
|
+
var config = input.config;
|
271
|
+
delete config.test_event;
|
272
|
+
var setup = thingToData(theApp.setup);
|
273
|
+
var flux = {
|
274
|
+
id: setup.id,
|
275
|
+
name: setup.name,
|
276
|
+
flux: setup.flux,
|
277
|
+
parents: setup.parents,
|
278
|
+
config: config,
|
279
|
+
};
|
280
|
+
var index = -1;
|
281
|
+
for(var i = 0; i < theApp.flow.fluxs.length; i++)
|
282
|
+
if (theApp.flow.fluxs[i].id == flux.id)
|
283
|
+
index = i;
|
284
|
+
|
285
|
+
if (index < 0)
|
286
|
+
theApp.flow.fluxs.push(flux);
|
287
|
+
else
|
288
|
+
theApp.flow.fluxs[index] = flux;
|
289
|
+
};
|
290
|
+
|
291
|
+
var saveTheFlow = function(input)
|
292
|
+
{
|
293
|
+
var setup = input.setup;
|
294
|
+
var flow = input.flow;
|
295
|
+
axios.post('/save', flow)
|
296
|
+
.then(function(result){});
|
297
|
+
};
|
298
|
+
|
299
|
+
var saveFlux = function(config) {
|
300
|
+
};
|
301
|
+
|
302
|
+
var ignoreFlux = function(config) {
|
303
|
+
};
|
304
|
+
|
243
305
|
var setup = {
|
244
306
|
showFlux: false,
|
245
307
|
id: { type: 'hide', value: '' },
|
246
308
|
name: { type: 'text', value: '' },
|
247
309
|
flux: { type: 'select', value: fluxdata.fluxs[0].name, options: options},
|
248
|
-
|
310
|
+
parents: { type: 'selectmanyrecords', label: 'Receive Events From', value: '', options: flowdata.fluxs },
|
249
311
|
};
|
250
312
|
|
251
313
|
for (var key in configs)
|
252
314
|
{
|
253
|
-
configs[key].save = { type: 'button', name: 'Save
|
254
|
-
|
255
|
-
|
256
|
-
|
257
|
-
|
258
|
-
|
259
|
-
|
260
|
-
|
261
|
-
|
262
|
-
parent: setup.parent,
|
263
|
-
config: config,
|
264
|
-
};
|
265
|
-
var index = -1;
|
266
|
-
for(var i = 0; i < app.flow.fluxs.length; i++)
|
267
|
-
if (app.flow.fluxs[i].id == flux.id)
|
268
|
-
index = i;
|
269
|
-
if (index < 0)
|
270
|
-
app.flow.fluxs.push(flux);
|
271
|
-
else
|
272
|
-
app.flow.fluxs[index] = flux;
|
273
|
-
|
274
|
-
setTimeout(function(){
|
275
|
-
Vue.set(hey.save, 'name', nameOfTheSaveButton);
|
276
|
-
app.setup.id.value = '';
|
277
|
-
|
278
|
-
Vue.set(app.setup, 'showFlux', false);
|
279
|
-
}, 500);
|
280
|
-
}
|
315
|
+
configs[key].save = { type: 'button', name: 'Save Changes', click: function(config) {
|
316
|
+
saveTheFlux({ app: app, config: config });
|
317
|
+
saveTheFlow({ setup: app.setup, flow: app.flow });
|
318
|
+
app.setup.showFlux = false;
|
319
|
+
}
|
320
|
+
};
|
321
|
+
configs[key].cancel = { type: 'button', name: 'Ignore Changes', click: function() {
|
322
|
+
app.setup.showFlux = false;
|
323
|
+
}
|
281
324
|
};
|
282
325
|
|
283
326
|
configs[key].test_event = { type: 'json', value: '{}', default: '{}' };
|
@@ -317,7 +360,7 @@ module Mushy
|
|
317
360
|
Vue.set(setup.id, 'value', flux.id);
|
318
361
|
Vue.set(setup.name, 'value', flux.name);
|
319
362
|
Vue.set(setup.flux, 'value', flux.flux);
|
320
|
-
Vue.set(setup.
|
363
|
+
Vue.set(setup.parents, 'value', flux.parents);
|
321
364
|
|
322
365
|
var applicable_config = configs[flux.flux];
|
323
366
|
for(var key in applicable_config)
|
@@ -331,7 +374,7 @@ module Mushy
|
|
331
374
|
|
332
375
|
options = flowdata.fluxs.filter(function(x){ return x.id != flux.id });
|
333
376
|
options.unshift( { id: '', name: '' } );
|
334
|
-
setup.
|
377
|
+
setup.parents.options = options;
|
335
378
|
|
336
379
|
Vue.set(setup, 'showFlux', true);
|
337
380
|
app.results = [];
|
@@ -351,6 +394,7 @@ module Mushy
|
|
351
394
|
flux = {
|
352
395
|
id: uuidv4(),
|
353
396
|
name: '',
|
397
|
+
parents: [],
|
354
398
|
config: {}
|
355
399
|
};
|
356
400
|
loadThisFlux({ flux: flux, setup: x.setup, configs: x.configs });
|
@@ -375,9 +419,9 @@ module Mushy
|
|
375
419
|
},
|
376
420
|
configs: configs,
|
377
421
|
setup: setup,
|
378
|
-
flux_name_for: function(
|
379
|
-
var
|
380
|
-
return
|
422
|
+
flux_name_for: function(ids, fluxes) {
|
423
|
+
var fluxs = fluxes.filter(function(x){ return ids.includes(x.id) });
|
424
|
+
return fluxs.map(function(x){ return x.name }).join(', ');
|
381
425
|
},
|
382
426
|
results: [],
|
383
427
|
}
|
data/lib/mushy/flow.rb
CHANGED
@@ -30,14 +30,14 @@ module Mushy
|
|
30
30
|
data = JSON.parse data
|
31
31
|
|
32
32
|
data_fluxs = data['fluxs'] || []
|
33
|
-
data_fluxs.select { |x| x['parent'] }.map { |r| r["
|
33
|
+
data_fluxs.select { |x| x['parent'] }.map { |r| r["parents"] = [r["parent"]] }
|
34
34
|
|
35
35
|
flow = new
|
36
36
|
|
37
37
|
flow.fluxs = data_fluxs.map { |s| build_flux s }
|
38
38
|
|
39
39
|
fluxs_with_parent_ids = flow.fluxs.reduce({}) { |t, i| t[i.id] = []; t }
|
40
|
-
data_fluxs.map { |r| fluxs_with_parent_ids[r['id']] = r['
|
40
|
+
data_fluxs.map { |r| fluxs_with_parent_ids[r['id']] = r['parents'] || [] }
|
41
41
|
|
42
42
|
flow.fluxs.each do |flux|
|
43
43
|
flux.parent_fluxs = flow.fluxs.select { |x| fluxs_with_parent_ids[flux.id].include?(x.id) }
|
data/lib/mushy/fluxs/browser.rb
CHANGED
@@ -51,10 +51,10 @@ module Mushy
|
|
51
51
|
],
|
52
52
|
},
|
53
53
|
carry_cookies_from: {
|
54
|
-
description: 'Carry the cookies from this path in the event.',
|
54
|
+
description: 'Carry the cookies from this path in the event. Defaults to "cookies".',
|
55
55
|
type: 'text',
|
56
56
|
shrink: true,
|
57
|
-
value: '
|
57
|
+
value: '',
|
58
58
|
},
|
59
59
|
headers: {
|
60
60
|
description: 'Headers for the web request. These can be received from a previous browser event with {{headers}}, or can be typed manually.',
|
@@ -63,10 +63,10 @@ module Mushy
|
|
63
63
|
value: {},
|
64
64
|
},
|
65
65
|
carry_headers_from: {
|
66
|
-
description: 'Carry the headers from this path in the event.',
|
66
|
+
description: 'Carry the headers from this path in the event. Defaults to "headers".',
|
67
67
|
type: 'text',
|
68
68
|
shrink: true,
|
69
|
-
value: '
|
69
|
+
value: '',
|
70
70
|
},
|
71
71
|
wait_before_closing: {
|
72
72
|
description: 'Wait this many seconds before closing the browser.',
|
@@ -105,13 +105,20 @@ module Mushy
|
|
105
105
|
body: browser.body
|
106
106
|
}
|
107
107
|
|
108
|
+
result = special_browser_action browser, result
|
109
|
+
|
108
110
|
browser.quit
|
109
111
|
|
110
112
|
result
|
111
113
|
end
|
112
114
|
|
115
|
+
def special_browser_action browser, result
|
116
|
+
result
|
117
|
+
end
|
118
|
+
|
113
119
|
def get_the_cookies_from event, config
|
114
|
-
|
120
|
+
carry_cookies_from = config[:carry_cookies_from].to_s == '' ? 'cookies' : config[:carry_cookies_from]
|
121
|
+
cookies = event[carry_cookies_from.to_sym]
|
115
122
|
cookies = [] unless cookies.is_a?(Array)
|
116
123
|
config[:cookies] = [] unless config[:cookies].is_a?(Array)
|
117
124
|
config[:cookies].each { |x| cookies << x }
|
@@ -119,7 +126,8 @@ module Mushy
|
|
119
126
|
end
|
120
127
|
|
121
128
|
def get_the_headers_from event, config
|
122
|
-
|
129
|
+
carry_headers_from = config[:carry_headers_from].to_s == '' ? 'headers' : config[:carry_headers_from]
|
130
|
+
headers = event[carry_headers_from.to_sym]
|
123
131
|
headers = {} unless headers.is_a?(Hash)
|
124
132
|
config[:headers] = {} unless config[:headers].is_a?(Hash)
|
125
133
|
config[:headers].each { |k, v| headers[k] = v }
|
data/lib/mushy/fluxs/read_csv.rb
CHANGED
@@ -4,10 +4,30 @@ module Mushy
|
|
4
4
|
|
5
5
|
class ReadCsv < Flux
|
6
6
|
|
7
|
+
def self.details
|
8
|
+
{
|
9
|
+
name: 'ReadCsv',
|
10
|
+
description: 'Read CSV content into events.',
|
11
|
+
config: {
|
12
|
+
data: {
|
13
|
+
description: 'The data to convert to a CSV.',
|
14
|
+
type: 'text',
|
15
|
+
value: '{{data}}',
|
16
|
+
},
|
17
|
+
headers: {
|
18
|
+
description: 'The CSV contains headers. Defaults to false.',
|
19
|
+
type: 'boolean',
|
20
|
+
shrink: true,
|
21
|
+
value: '',
|
22
|
+
},
|
23
|
+
},
|
24
|
+
}
|
25
|
+
end
|
26
|
+
|
7
27
|
def process event, config
|
8
|
-
data =
|
28
|
+
data = config[:data]
|
9
29
|
|
10
|
-
headers = config[:headers].to_s.strip.downcase == 'true'
|
30
|
+
headers = config[:headers].to_s.strip.downcase == 'true'
|
11
31
|
|
12
32
|
rows = CSV.new data, headers: headers
|
13
33
|
|
@@ -0,0 +1,44 @@
|
|
1
|
+
module Mushy
|
2
|
+
|
3
|
+
class ReadFile < Flux
|
4
|
+
|
5
|
+
def self.details
|
6
|
+
{
|
7
|
+
name: 'ReadFile',
|
8
|
+
description: 'Read a file.',
|
9
|
+
config: {
|
10
|
+
name: {
|
11
|
+
description: 'The name of the file to read.',
|
12
|
+
type: 'text',
|
13
|
+
value: 'file.csv',
|
14
|
+
},
|
15
|
+
directory: {
|
16
|
+
description: 'The directory in which to read the file. Leave blank for the current directory.',
|
17
|
+
type: 'text',
|
18
|
+
shrink: true,
|
19
|
+
value: '',
|
20
|
+
},
|
21
|
+
path: {
|
22
|
+
description: 'The path in the event to return the contents of the file.',
|
23
|
+
type: 'text',
|
24
|
+
value: 'content',
|
25
|
+
},
|
26
|
+
},
|
27
|
+
}
|
28
|
+
end
|
29
|
+
|
30
|
+
def process event, config
|
31
|
+
file = config[:name]
|
32
|
+
|
33
|
+
file = File.join(config[:directory], file) if config[:directory].to_s != ''
|
34
|
+
|
35
|
+
content = File.open(file).read
|
36
|
+
|
37
|
+
{
|
38
|
+
config[:path] => content
|
39
|
+
}
|
40
|
+
end
|
41
|
+
|
42
|
+
end
|
43
|
+
|
44
|
+
end
|
@@ -0,0 +1,46 @@
|
|
1
|
+
module Mushy
|
2
|
+
|
3
|
+
class Screenshot < Browser
|
4
|
+
|
5
|
+
def self.details
|
6
|
+
details = Browser.details
|
7
|
+
details['name'] = 'Screenshot'
|
8
|
+
details['description'] = 'Take a screenshot of the browser.'
|
9
|
+
|
10
|
+
details[:config][:path] = {
|
11
|
+
description: 'The path of the file to save.',
|
12
|
+
type: 'text',
|
13
|
+
value: 'picture.jpg',
|
14
|
+
}
|
15
|
+
details[:config][:quality] = {
|
16
|
+
description: 'The quality of the image, a value beteen 0-100. Only applies to jpg.',
|
17
|
+
type: 'integer',
|
18
|
+
shrink: true,
|
19
|
+
value: '',
|
20
|
+
}
|
21
|
+
details[:config][:full] = {
|
22
|
+
description: 'Take a screenshot of the entire page. If false, the screenshot is limited to the viewport.',
|
23
|
+
type: 'boolean',
|
24
|
+
shrink: true,
|
25
|
+
value: '',
|
26
|
+
}
|
27
|
+
details
|
28
|
+
end
|
29
|
+
|
30
|
+
def special_browser_action browser, result
|
31
|
+
|
32
|
+
options = {
|
33
|
+
path: config[:path],
|
34
|
+
full: ['true', ''].include?(config[:full].to_s),
|
35
|
+
quality: (config[:quality].to_s == '' ? '100' : config[:quality]).to_i
|
36
|
+
}
|
37
|
+
|
38
|
+
browser.screenshot options
|
39
|
+
|
40
|
+
options
|
41
|
+
|
42
|
+
end
|
43
|
+
|
44
|
+
end
|
45
|
+
|
46
|
+
end
|
@@ -27,12 +27,15 @@ module Mushy
|
|
27
27
|
end
|
28
28
|
|
29
29
|
def process event, config
|
30
|
+
file = config[:name]
|
30
31
|
|
31
|
-
File.
|
32
|
+
file = File.join(config[:directory], file) if config[:directory].to_s != ''
|
33
|
+
|
34
|
+
File.open(file, 'w') { |f| f.write config[:data] }
|
32
35
|
|
33
36
|
{}
|
34
37
|
end
|
35
38
|
|
36
39
|
end
|
37
40
|
|
38
|
-
end
|
41
|
+
end
|
data/mushy.gemspec
CHANGED
@@ -4,7 +4,7 @@ require 'mushy/version'
|
|
4
4
|
|
5
5
|
Gem::Specification.new do |s|
|
6
6
|
s.name = 'mushy'
|
7
|
-
s.version = '0.
|
7
|
+
s.version = '0.2.3'
|
8
8
|
s.date = '2020-11-23'
|
9
9
|
s.summary = 'Process streams of work using common modules.'
|
10
10
|
s.description = 'This tool assists in the creation and processing of workflows.'
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: mushy
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.2.3
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Darren Cauthon
|
@@ -150,6 +150,8 @@ files:
|
|
150
150
|
- lib/mushy/fluxs/ls.rb
|
151
151
|
- lib/mushy/fluxs/parse_html.rb
|
152
152
|
- lib/mushy/fluxs/read_csv.rb
|
153
|
+
- lib/mushy/fluxs/read_file.rb
|
154
|
+
- lib/mushy/fluxs/screenshot.rb
|
153
155
|
- lib/mushy/fluxs/write_file.rb
|
154
156
|
- lib/mushy/masher.rb
|
155
157
|
- lib/mushy/run.rb
|