mushy 0.18.0 → 0.21.0

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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 88a3578100f93b47791d83299597e4b6a1d1ccabfaa8628eb5172617facf9b95
4
- data.tar.gz: fa722d8dd776c1e311bea24ad94303785fd93ccc16eeebcd93783f9d25c3e0f5
3
+ metadata.gz: cfd4d2f868fa9bd4c147f4cd9c7af24cea6ad38934d2e2bec53a6c8c9e396345
4
+ data.tar.gz: bf919c0d4f927dbc8ef6705b183fea9aa8d2fa73f61354603e83d2c8d01e3842
5
5
  SHA512:
6
- metadata.gz: 4eafe788eccb281c1e15bdc0cfae4dca68f1146894a7d28569347673f28ef265b5b8aa90f7fb6c21245e1ba15fceac2f2677420cc643dd535c8cd54062c7642d
7
- data.tar.gz: 2568f50f7cdf5569605d89fe7e088036d48f106d10f2b45c2b29a25038f145d29bb2566f9d7271f642b11307cb5e9259e72ac4fb1f1b3826178e977532e7c8b3
6
+ metadata.gz: 9de7dae32eb11e0ae5448c0990e6a4be38483f3f38552e4bf519e6bdec047de6694c86734e57f2b3fe002a1ca263f9b0ed7232b1b42cc5290a2e99ee3d34745f
7
+ data.tar.gz: da103a79f76baa1cadc52d6a0f5100cfdb848212c9e6e1ac3b9dcb79fa14a527a8f1e7af8a4dc0d91e0e5d7ff77a142f8258308ecba819bfcf517a5772b03b68
@@ -62,7 +62,9 @@ module Mushy
62
62
  </header>
63
63
  <section class="modal-card-body">
64
64
  <div class="content">
65
- <div v-for="(fluxType, id) in fluxTypes">
65
+ <div v-for="(fluxGroup) in fluxGroups">
66
+ <h2 style="font-style:italic">{{fluxGroup.name}}</h2>
67
+ <div v-for="(fluxType, id) in fluxGroup.fluxs">
66
68
  <div class="level">
67
69
  <div class="level-left"><h2>{{fluxType.title || fluxType.name}}</h2></div>
68
70
  <div class="level-right">
@@ -87,6 +89,7 @@ module Mushy
87
89
  <div v-for="(a, b) in fluxType.documentation" v-if="fluxType['detailsTab'] == b" v-html="a"></div>
88
90
  </div>
89
91
  </div>
92
+ </div>
90
93
  </div>
91
94
  </section>
92
95
  <footer class="modal-card-foot">
@@ -236,7 +239,7 @@ module Mushy
236
239
  };
237
240
  },
238
241
  props: ['label', 'value', 'options', 'description', 'shrink'],
239
- template: '<div><div class="level"><div class="level-left"><div class="level-item"><mip-label :id="id" :label="label" :description="description" :hide_description="shrink && !value"></mip-label></div><div class="level-item"> <a href="#" v-on:click.prevent.stop="shrink=false" v-show="shrink && !value">[^]</a></div></div></div> <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> <div class="control"><select :name="id" v-if="value || !shrink" v-on:input="selectedValue=$event.target.value;" class="select"><option v-for="option in options" v-bind:value="option.id">{{option.name}}</option></select></div></div>'
242
+ template: '<div><div class="level"><div class="level-left"><div class="level-item"><mip-label :id="id" :label="label" :description="description" :hide_description="shrink && !value"></mip-label></div><div class="level-item"> <a href="#" v-on:click.prevent.stop="shrink=false" v-show="shrink && !value">[^]</a></div></div></div> <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> <div class="control"><select :name="id" v-if="value || !shrink" v-on:input="selectedValue=$event.target.value;" class="select" v-on:change.prevent.stop="doit(selectedValue, value);$emit(\\'update:value\\', value);$event.target.value=\\'\\';"><option v-for="option in options" v-bind:value="option.id">{{option.name}}</option></select></div></div>'
240
243
  },
241
244
  boolean: {
242
245
  props: ['label', 'value', 'options', 'description', 'shrink'],
@@ -324,7 +327,7 @@ module Mushy
324
327
  });
325
328
  }
326
329
 
327
- var thingTemplate = '<div v-bind:class="{ \\\'ml-3\\\': data.foghat==\\\'free\\\', \\\'column\\\': data.foghat!=\\\'free\\\', \\\'is-full\\\': data.foghat!=\\\'half\\\' && data.foghat!=\\\'free\\\', \\\'is-half\\\': data.foghat==\\\'half\\\' }">';
330
+ var thingTemplate = '<div v-show="data.hide != true" v-bind:class="{ \\\'ml-3\\\': data.foghat==\\\'free\\\', \\\'column\\\': data.foghat!=\\\'free\\\', \\\'is-full\\\': data.foghat!=\\\'half\\\' && data.foghat!=\\\'free\\\', \\\'is-half\\\': data.foghat==\\\'half\\\' }">';
328
331
  for (var property in components)
329
332
  thingTemplate = thingTemplate + '<mip-' + property + ' v-if="data.type == \\'' + property + '\\'" :id="id" ' + components[property].props.map(function(x){ return ':' + x + '.sync="data.' + x + '"';}).join(' ') + '></mip-' + property + '>'
330
333
  thingTemplate = thingTemplate + '</div>';
@@ -335,7 +338,7 @@ module Mushy
335
338
  console: console,
336
339
  }
337
340
  },
338
- props: ['data', 'value', 'id', 'model', 'foghat'],
341
+ props: ['data', 'value', 'id', 'model', 'foghat', 'hide'],
339
342
  template: thingTemplate
340
343
  });
341
344
 
@@ -385,6 +388,16 @@ module Mushy
385
388
  x['detailsTab'] = Object.getOwnPropertyNames(x.documentation)[0];
386
389
  } );
387
390
 
391
+ fluxGroups = []
392
+ fluxdata.fluxs.map(function(x) {
393
+ if (x.fluxGroup) {} else { x.fluxGroup = { name: 'Others', position: 999999 } };
394
+ rowboat = fluxGroups.filter(function(y) { return y.name == x.fluxGroup.name })[0];
395
+ if (rowboat) {} else { fluxGroups.push(x.fluxGroup); x.fluxGroup.fluxs = [] }
396
+ rowboat = fluxGroups.filter(function(y) { return y.name == x.fluxGroup.name })[0];
397
+ rowboat.fluxs.push(x);
398
+ } );
399
+ fluxGroups = fluxGroups.sort(function(x, y) { return (x.position || 1000) - (y.position || 1000); })
400
+
388
401
  var configs = {};
389
402
  fluxdata.fluxs.map(function(x){
390
403
  configs[x.name] = x.config;
@@ -446,7 +459,7 @@ module Mushy
446
459
  },
447
460
  id: { type: 'hide', value: '' },
448
461
  name: { type: 'text', value: '' },
449
- flux: { type: 'select', value: fluxdata.fluxs[0].name, options: options},
462
+ flux: { type: 'select', value: fluxdata.fluxs[0].name, options: options, hide: true },
450
463
  open_flux: { type: 'button', name: 'Select a Flux', foghat: 'free', medium: 'hey', color: 'is-primary',
451
464
  click: function() {
452
465
  Vue.set(app.setup.fluxTypeSelect, 'is-active', true);
@@ -566,6 +579,7 @@ module Mushy
566
579
  },
567
580
  configs: configs,
568
581
  fluxTypes: fluxTypesWithDetails,
582
+ fluxGroups: fluxGroups,
569
583
  setup: setup,
570
584
  flux_name_for: function(ids, fluxes) {
571
585
  var fluxs = fluxes.filter(function(x){ return ids.includes(x.id) });
@@ -5,7 +5,9 @@ module Mushy
5
5
  def self.details
6
6
  {
7
7
  name: 'Bash',
8
+ title: 'Execute a command via bash',
8
9
  description: 'Run a bash command.',
10
+ fluxGroup: { name: 'Execute' },
9
11
  config: {
10
12
  command: {
11
13
  description: 'The command to run in bash.',
@@ -7,6 +7,8 @@ module Mushy
7
7
  def self.details
8
8
  {
9
9
  name: 'Browser',
10
+ title: 'Use a browser',
11
+ fluxGroup: { name: 'Web' },
10
12
  description: 'Visit a page in a browser.',
11
13
  config: {
12
14
  url: {
@@ -9,6 +9,7 @@ module Mushy
9
9
  name: 'BuildCsv',
10
10
  title: "Build CSV",
11
11
  description: 'Build a CSV.',
12
+ fluxGroup: { name: 'CSV' },
12
13
  config: {
13
14
  input_path: {
14
15
  description: 'The path to the set of records to include in the CSV.',
@@ -5,7 +5,8 @@ module Mushy
5
5
  def self.details
6
6
  {
7
7
  name: 'Cli',
8
- title: 'Command Line Interface',
8
+ title: 'Start a flow via command line',
9
+ fluxGroup: { name: 'Starters', position: 0 },
9
10
  description: 'Accept CLI arguments from the run command.',
10
11
  config: {
11
12
  },
@@ -5,7 +5,9 @@ module Mushy
5
5
  def self.details
6
6
  {
7
7
  name: 'Collection',
8
- description: 'Collects events.',
8
+ title: 'Collect and retrieve events',
9
+ description: 'Collect and retrieve events for the flow.',
10
+ fluxGroup: { name: 'Flows' },
9
11
  config: {
10
12
  id: {
11
13
  description: 'The path to the unique id in the body of the element.',
@@ -5,7 +5,9 @@ module Mushy
5
5
  def self.details
6
6
  {
7
7
  name: 'Document',
8
+ title: 'Make a multi-line liquid value',
8
9
  description: 'Create a multi-line document.',
10
+ fluxGroup: { name: 'Flows' },
9
11
  config: {
10
12
  document: {
11
13
  description: 'The multi-line document you wish to create.',
@@ -5,8 +5,9 @@ module Mushy
5
5
  def self.details
6
6
  {
7
7
  name: 'Environment',
8
- title: 'Environment Variables',
8
+ title: 'Pull environment variables',
9
9
  description: 'Pull environment variables.',
10
+ fluxGroup: { name: 'Environment' },
10
11
  config: {
11
12
  variables: {
12
13
  description: 'Map the environment variables to a new event.',
@@ -7,7 +7,8 @@ module Mushy
7
7
  def self.details
8
8
  {
9
9
  name: 'FileWatch',
10
- title: 'File Watcher',
10
+ title: 'Start a flow when files change',
11
+ fluxGroup: { name: 'Starters', position: 0 },
11
12
  description: 'Watch for file changes.',
12
13
  config: {
13
14
  directory: {
@@ -16,6 +17,12 @@ module Mushy
16
17
  shrink: true,
17
18
  value: '',
18
19
  },
20
+ include_all_file_details: {
21
+ description: 'If true, returns all details for the file. If false, just path & name are returned',
22
+ type: 'boolean',
23
+ shrink: true,
24
+ value: '',
25
+ }
19
26
  },
20
27
  examples: {
21
28
  "Files Added" => {
@@ -46,15 +53,14 @@ module Mushy
46
53
  }
47
54
  end
48
55
 
49
- def loop &block
50
-
56
+ def loop(&block)
51
57
  directory = config[:directory].to_s != '' ? config[:directory] : Dir.pwd
52
58
 
53
59
  listener = Listen.to(directory) do |modified, added, removed|
54
60
  the_event = {
55
- modified: modified,
56
- added: added,
57
- removed: removed,
61
+ modified: modified.map { |f| get_the_details_for(f) },
62
+ added: added.map { |f| get_the_details_for(f) },
63
+ removed: removed.map { |f| get_the_details_for(f) }
58
64
  }
59
65
  block.call the_event
60
66
  end
@@ -69,6 +75,17 @@ module Mushy
69
75
  event
70
76
  end
71
77
 
78
+ def get_the_details_for(file)
79
+ if config[:include_all_file_details].to_s == 'true'
80
+ Mushy::Ls.new.process({}, { path: file })[0]
81
+ else
82
+ {
83
+ path: file,
84
+ name: file.split("\/").pop
85
+ }
86
+ end
87
+ end
88
+
72
89
  end
73
90
 
74
91
  end
@@ -5,7 +5,9 @@ module Mushy
5
5
  def self.details
6
6
  {
7
7
  name: 'Filter',
8
+ title: 'Filter events',
8
9
  description: 'Filters events based on criteria.',
10
+ fluxGroup: { name: 'Flows' },
9
11
  config: {
10
12
  equal: {
11
13
  description: 'Provide key/value pairs that must match in the event.',
@@ -5,7 +5,9 @@ module Mushy
5
5
  def self.details
6
6
  {
7
7
  name: 'Format',
8
+ title: 'Alter the format of an event',
8
9
  description: 'Return the event passed to it. This opens the opportunity to use the common fluxing to alter the event.',
10
+ fluxGroup: { name: 'Flows' },
9
11
  config: {},
10
12
  examples: {
11
13
  "Simplest Example" => {
@@ -5,7 +5,9 @@ module Mushy
5
5
  def self.details
6
6
  {
7
7
  name: 'GitLog',
8
+ title: 'Get git logs',
8
9
  description: 'Return git logs.',
10
+ fluxGroup: { name: 'Git' },
9
11
  config: {
10
12
  directory: {
11
13
  description: 'The working directory in which the command will be run.',
@@ -7,7 +7,8 @@ module Mushy
7
7
  def self.details
8
8
  {
9
9
  name: 'GlobalVariables',
10
- title: 'Global Variables',
10
+ title: 'Set global variables',
11
+ fluxGroup: { name: 'Flows' },
11
12
  description: 'Add global variables to use in any future flux. Returns what was passed to it.',
12
13
  config: {
13
14
  values: {
@@ -17,6 +17,8 @@ module Mushy
17
17
  def self.details
18
18
  {
19
19
  name: 'Interval',
20
+ title: 'Start a flow on a regular interval',
21
+ fluxGroup: { name: 'Starters', position: 0 },
20
22
  description: 'Fire an event every X minutes.',
21
23
  config: {},
22
24
  }.tap do |c|
@@ -2,10 +2,30 @@ module Mushy
2
2
 
3
3
  class Ls < Bash
4
4
 
5
+ def self.the_ls_command
6
+ @the_ls_command ||= find_the_right_ls_command_to_use
7
+ end
8
+
9
+ def self.find_the_right_ls_command_to_use
10
+ commands = [
11
+ 'ls', # the normal method used to pull file information
12
+ 'gls' # BSD users don't get the version of ls this needs,
13
+ # so we might need to use gls after the user runs (brew install coreutils)
14
+ ]
15
+
16
+ the_command_to_use = nil
17
+ while the_command_to_use.nil? && (command = commands.shift) # keep trying till we find one that works
18
+ the_command_to_use = command if Mushy::Bash.new.process({}, { command: "#{command} --full-time" })[:success]
19
+ end
20
+ the_command_to_use || -1
21
+ end
22
+
5
23
  def self.details
6
24
  {
7
25
  name: 'Ls',
26
+ title: 'List Files',
8
27
  description: 'Run the "ls" command.',
28
+ fluxGroup: { name: 'Files' },
9
29
  config: Mushy::Bash.details[:config].tap { |c| c.delete :command },
10
30
  }.tap do |c|
11
31
  c[:config][:recursive] = {
@@ -132,6 +152,8 @@ module Mushy
132
152
  end
133
153
 
134
154
  def process event, config
155
+ raise 'ls is not available' if self.class.the_ls_command == -1
156
+
135
157
  arguments = build_the_arguments_from config
136
158
 
137
159
  config[:command] = build_the_command_from arguments
@@ -142,7 +164,8 @@ module Mushy
142
164
  end
143
165
 
144
166
  def build_the_command_from arguments
145
- "ls #{arguments.join(' ')}"
167
+ command = self.class.the_ls_command
168
+ "#{command} #{arguments.join(' ')}"
146
169
  end
147
170
 
148
171
  def build_the_arguments_from config
@@ -230,6 +253,10 @@ module Mushy
230
253
 
231
254
  result[:date] = Mushy::DateParts.parse result[:date]
232
255
 
256
+ if File.exist?(result[:name]) && result[:name].start_with?(directory)
257
+ result[:name] = result[:name].split("\/")[-1]
258
+ end
259
+
233
260
  result[:directory] = directory
234
261
 
235
262
  if result[:type] == 'd' && result[:directory] == result[:name]
@@ -8,6 +8,7 @@ module Mushy
8
8
  {
9
9
  name: 'ParseHtml',
10
10
  title: 'Parse HTML',
11
+ fluxGroup: { name: 'Web' },
11
12
  description: 'Extract data from HTML.',
12
13
  config: {
13
14
  path: {
@@ -90,6 +90,7 @@ module Mushy
90
90
  }
91
91
  },
92
92
  }
93
+ config[:fluxGroup] = { name: 'Export' }
93
94
  end
94
95
  end
95
96
 
@@ -5,7 +5,9 @@ module Mushy
5
5
  def self.details
6
6
  {
7
7
  name: 'Pwd',
8
+ title: 'Get the working directory',
8
9
  description: 'Run the "pwd" command.',
10
+ fluxGroup: { name: 'Environment' },
9
11
  config: Mushy::Bash.details[:config].tap { |c| c.delete :command },
10
12
  }.tap do |c|
11
13
  c[:examples] = {
@@ -8,6 +8,7 @@ module Mushy
8
8
  {
9
9
  name: 'ReadCsv',
10
10
  title: 'Read CSV',
11
+ fluxGroup: { name: 'CSV' },
11
12
  description: 'Read CSV content into events.',
12
13
  config: {
13
14
  data: {
@@ -6,6 +6,7 @@ module Mushy
6
6
  {
7
7
  name: 'ReadFile',
8
8
  title: 'Read File',
9
+ fluxGroup: { name: 'Files' },
9
10
  description: 'Read a file.',
10
11
  config: {
11
12
  file: {
@@ -8,6 +8,7 @@ module Mushy
8
8
  {
9
9
  name: 'ReadJson',
10
10
  title: 'Deserialize JSON',
11
+ fluxGroup: { name: 'JSON' },
11
12
  description: 'Read JSON and output it as an event.',
12
13
  config: {
13
14
  key: {
@@ -0,0 +1,64 @@
1
+ module Mushy
2
+ class RegexMatches < Flux
3
+ def self.details
4
+ {
5
+ name: 'RegexMatches',
6
+ title: 'Find regex matches',
7
+ description: 'Use a regex to search content.',
8
+ fluxGroup: { name: 'Regex' },
9
+ config: {
10
+ regex: { description: 'The regular expression to use.',
11
+ type: 'text',
12
+ value: '(\w+)' },
13
+ value: { description: 'The value against which to use the regular expression.',
14
+ type: 'text',
15
+ value: '{{value}}' }
16
+ },
17
+ examples: {
18
+ 'Simple Example' => {
19
+ description: 'The simplest regex.',
20
+ input: { text: 'apple orange' },
21
+ config: {
22
+ regex: '(\w+)',
23
+ value: 'apple orange'
24
+ },
25
+ result: [ { match1: 'apple' }, { match2: 'orange' } ]
26
+ },
27
+ 'Named Parameters' => {
28
+ description: 'Named Parameters.',
29
+ input: {
30
+ text: 'apple 1 orange 2'
31
+ },
32
+ config: {
33
+ regex: '(?&lt;name&gt;\w+) (?&lt;count&gt;\d+)',
34
+ value: '{{text}}'
35
+ },
36
+ result: [ { name: 'apple', count: '1' }, { name: 'orange', count: '2' } ]
37
+ },
38
+ }
39
+ }
40
+ end
41
+
42
+ def process(_, config)
43
+ return [] unless config[:value]
44
+ return [] if (config[:regex] || '').strip == ''
45
+
46
+ keys = config[:regex].scan(/\?<(\w+)>/).flatten
47
+
48
+ regex = Regexp.new config[:regex]
49
+
50
+ config[:value].scan(regex).map do |match|
51
+ convert_the_match_to_a_hash match, keys
52
+ end
53
+ end
54
+
55
+ def convert_the_match_to_a_hash(match, keys)
56
+ {}.tap do |hash|
57
+ match.each_with_index do |item, index|
58
+ key = (keys[index] || "match#{index + 1}").to_sym
59
+ hash[key] = item
60
+ end
61
+ end
62
+ end
63
+ end
64
+ end
@@ -92,6 +92,7 @@ module Mushy
92
92
  }
93
93
  },
94
94
  }
95
+ config[:fluxGroup] = { name: 'Export' }
95
96
  end
96
97
  end
97
98
 
@@ -5,7 +5,9 @@ module Mushy
5
5
  def self.details
6
6
  {
7
7
  name: 'SenseHatEnvironmentalSensors',
8
+ title: 'Read Environmental Sensors',
8
9
  description: 'Pull values from the Sense HAT environmental sensors.',
10
+ fluxGroup: { name: 'SenseHAT' },
9
11
  config: Mushy::SimplePythonProgram.default_config,
10
12
  }.tap do |c|
11
13
  measurements
@@ -5,7 +5,9 @@ module Mushy
5
5
  def self.details
6
6
  {
7
7
  name: 'SenseHatLedMatrix',
8
+ title: 'Use LED Matrix',
8
9
  description: 'Interface with the LED Matrix.',
10
+ fluxGroup: { name: 'SenseHAT' },
9
11
  config: Mushy::SimplePythonProgram.default_config.tap do |config|
10
12
  config[:get_pixels] = {
11
13
  description: 'Specify the pixels you want returned as events. Use "all" to return all 64, 3,3 to return x:3 y:3, or "none" to return none.',
@@ -6,6 +6,7 @@ module Mushy
6
6
  Mushy::Bash.details[:config].tap do |config|
7
7
  config.delete :command
8
8
  config.delete :directory
9
+ config[:fluxGroup] = { name: 'Execute' }
9
10
  end
10
11
  end
11
12
 
@@ -48,8 +48,9 @@ module Mushy
48
48
 
49
49
  def self.details
50
50
  {
51
- name: 'Smtp',
51
+ name: 'Send Email Using SMTP',
52
52
  description: 'Send email through SMTP.',
53
+ fluxGroup: { name: 'Email' },
53
54
  config: {
54
55
  from: {
55
56
  description: 'From whom the email will be sent.',
@@ -5,7 +5,8 @@ module Mushy
5
5
  def self.details
6
6
  {
7
7
  name: 'Stdout',
8
- title: 'Stdout / Print',
8
+ title: 'Export text to stdout',
9
+ fluxGroup: { name: 'Environment' },
9
10
  description: 'Standard Out',
10
11
  config: {
11
12
  message: {
@@ -5,7 +5,9 @@ module Mushy
5
5
  def self.details
6
6
  {
7
7
  name: 'Times',
8
+ title: 'Repeat an event X times',
8
9
  description: 'Return the event passed to it, X times.',
10
+ fluxGroup: { name: 'Flows' },
9
11
  config: {
10
12
  times: {
11
13
  description: 'The number of times this event should be returned.',
@@ -5,7 +5,8 @@ module Mushy
5
5
  def self.details
6
6
  {
7
7
  name: 'TwilioMessage',
8
- title: 'Twilio Message',
8
+ title: 'Send SMS',
9
+ fluxGroup: { name: 'Twilio' },
9
10
  description: 'Send a Twilio Message.',
10
11
  config: {
11
12
  account_sid: {
@@ -7,6 +7,7 @@ module Mushy
7
7
  name: 'WriteFile',
8
8
  title: 'Write File',
9
9
  description: 'Write a file.',
10
+ fluxGroup: { name: 'Files' },
10
11
  config: file_saving_config.merge({
11
12
  data: {
12
13
  description: 'The text to write. You can use Liquid templating here to pull data from the event, or write hardcoded data.',
@@ -9,6 +9,7 @@ module Mushy
9
9
  name: 'WriteJson',
10
10
  title: 'Serialize as JSON',
11
11
  description: 'Write the incoming event as JSON.',
12
+ fluxGroup: { name: 'JSON' },
12
13
  config: {
13
14
  key: {
14
15
  description: 'The key of the outgoing field that will contain the JSON.',
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.18.0'
7
+ s.version = '0.21.0'
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.18.0
4
+ version: 0.21.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Darren Cauthon
@@ -205,6 +205,7 @@ files:
205
205
  - lib/mushy/fluxs/read_csv.rb
206
206
  - lib/mushy/fluxs/read_file.rb
207
207
  - lib/mushy/fluxs/read_json.rb
208
+ - lib/mushy/fluxs/regex_matches.rb
208
209
  - lib/mushy/fluxs/screenshot.rb
209
210
  - lib/mushy/fluxs/sense_hat_environmental_sensors.rb
210
211
  - lib/mushy/fluxs/sense_hat_led_matrix.rb