mushy 0.5.3 → 0.10.0

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: 06d11ce2fc1a5da26f1272caf5b4b8a5bc7e8ff110b0169932778b9bdb7bb2bc
4
- data.tar.gz: 96b68f95bff616ff46084d97630d0eab8d1496a99e902efae7fad965a16485dd
3
+ metadata.gz: ed2624dde9bf79c8dd70a430474613a591b647ba78c67cb04078da5ddfb64940
4
+ data.tar.gz: 42ea21e12bdea8fc767aee5e30c4d9c32a82ab83c786ea7bb101fcc3f7b1d154
5
5
  SHA512:
6
- metadata.gz: efc7c6b028efa5c75033b92ff9db8b422c6d81aae240a48178371b4208c1231ac63d8a2e437acfaccddb9e8a233c263b0284c85b16678036f99125f6ed757f6c
7
- data.tar.gz: 5d19241ba64eddd10937f09aeb19d5c3d809d68e8ca100b7d94e64362e8a1a32fc0da56fabf7aeebd6f6303be5cce00db382333400f8e000c408535f63ad64f1
6
+ metadata.gz: b904acfb460d9e6e5515274d7b435700b7e26903dbcdcc69471f0bf521f50c67dd6a0fd4857e95de3836d1cbf40c7facc4968ead6cec4d70b8e47a4ac77d0cb7
7
+ data.tar.gz: 4b9ceca6ce17b561ec36c84ba31f9772beb0557b02b6da5f703b2699622c3de2b6a272c2a4627bee1a653283c988db4be4dc92a58fed181f6baf51c26cbdc7b0
@@ -23,15 +23,15 @@ module Mushy
23
23
 
24
24
  def self.save file, data
25
25
 
26
- file = "#{file}.json" unless file.downcase.end_with?('.json')
26
+ file = "#{file}.mushy" unless file.downcase.end_with?('.mushy')
27
27
 
28
28
  data = SymbolizedHash.new JSON.parse(data)
29
- Mushy::WriteFile.new.process( {}, { name: file, data: data.to_json })
29
+ Mushy::WriteFile.new.process( {}, { name: file, data: JSON.pretty_generate(data) })
30
30
 
31
31
  end
32
32
 
33
33
  def self.start file, event
34
- file = "#{file}.json" unless file.downcase.end_with?('.json')
34
+ file = "#{file}.mushy" unless file.downcase.end_with?('.mushy')
35
35
  flow = File.open(file).read
36
36
  flow = Mushy::Flow.parse flow
37
37
 
@@ -40,16 +40,25 @@ module Mushy
40
40
  pwd = Dir.pwd
41
41
 
42
42
  if service_fluxes.any?
43
- calls = service_fluxes
43
+
44
+ things = service_fluxes
44
45
  .map { |s| { flux: s, proc: ->(e) do
45
46
  Dir.chdir pwd
46
47
  Mushy::Runner.new.start e, s, flow
47
- end } }
48
+ end,
49
+ run_method: (s.config[:run_strategy] == 'daemon' ? :run_this_as_a_daemon : :run_this_inline),
50
+ }
51
+ }.group_by { |x| x[:run_method] }
52
+
53
+ calls = (things[:run_this_as_a_daemon] || [])
48
54
  .map { |p| ->() { p[:flux].loop &p[:proc] } }
49
55
  .map { |x| ->() { loop &x } }
50
- .map { |x| run_as_a_daemon &x }
56
+ .map { |x| run_this_as_a_daemon &x }
51
57
 
52
- puts calls.inspect
58
+ (things[:run_this_inline] || [])
59
+ .map { |p| ->() { p[:flux].loop &p[:proc] } }
60
+ .map { |x| ->() { loop &x } }
61
+ .map { |x| run_this_inline &x }
53
62
 
54
63
  exit
55
64
  end
@@ -59,14 +68,17 @@ module Mushy
59
68
  Mushy::Runner.new.start event, cli_flux, flow
60
69
  end
61
70
 
62
- def self.run_as_a_daemon &block
63
- #block.call
71
+ def self.run_this_inline &block
72
+ block.call
73
+ end
74
+
75
+ def self.run_this_as_a_daemon &block
64
76
  Daemons.call(&block).pid.pid
65
77
  end
66
78
 
67
79
  def self.get_flow file
68
80
  puts "trying to get: #{file}"
69
- file = "#{file}.json" unless file.downcase.end_with?('.json')
81
+ file = "#{file}.mushy" unless file.downcase.end_with?('.mushy')
70
82
  data = JSON.parse File.open(file).read
71
83
  data['fluxs']
72
84
  .reject { |x| x['parents'] }
@@ -104,6 +116,16 @@ module Mushy
104
116
  shrink: true,
105
117
  }
106
118
 
119
+ if flux.new.respond_to? :loop
120
+ details[:config][:run_strategy] = {
121
+ description: 'Run this using this strategy. (select "daemon" if this should be run in the background)',
122
+ type: 'select',
123
+ options: ['', 'inline', 'daemon'],
124
+ value: '',
125
+ shrink: true,
126
+ }
127
+ end
128
+
107
129
  details[:config]
108
130
  .select { |_, v| v[:type] == 'keyvalue' }
109
131
  .select { |_, v| v[:editors].nil? }
@@ -115,7 +137,7 @@ module Mushy
115
137
  end
116
138
 
117
139
  details
118
- end
140
+ end.sort_by { |x| x[:name] }
119
141
  }
120
142
  end
121
143
 
@@ -22,6 +22,8 @@ module Mushy
22
22
  method = i[1] || i[0]
23
23
  t[i[0]] = now.send method
24
24
  t
25
+ end.tap do |hash|
26
+ hash[:seconds_ago] = Time.now - now
25
27
  end
26
28
  end
27
29
 
data/lib/mushy/flow.rb CHANGED
@@ -17,15 +17,28 @@ module Mushy
17
17
  .flatten
18
18
  end
19
19
 
20
+ def adjust_data data
21
+ fluxs
22
+ .select { |x| x.respond_to? :adjust_data }
23
+ .reduce(data) { |t, i| i.adjust_data t }
24
+ end
25
+
20
26
  def self.build_flux record
21
27
  type = record[:type] || record['type'] || record[:flux] || record['flux'] || 'Flux'
22
28
  flux = Object.const_get("Mushy::#{type}").new
23
29
  flux.id = record[:id] || record['id'] || flux.id
24
30
  flux.type = type
25
31
  flux.config = SymbolizedHash.new(record[:config] || record['config'])
32
+ flux.flow = Mushy::Flow.new
26
33
  flux
27
34
  end
28
35
 
36
+ def build_flux record
37
+ Mushy::Flow.build_flux(record).tap do |flux|
38
+ flux.flow = self
39
+ end
40
+ end
41
+
29
42
  def self.parse data
30
43
  data = JSON.parse data
31
44
 
@@ -34,7 +47,7 @@ module Mushy
34
47
 
35
48
  flow = new
36
49
 
37
- flow.fluxs = data_fluxs.map { |s| build_flux s }
50
+ flow.fluxs = data_fluxs.map { |s| flow.build_flux s }
38
51
 
39
52
  fluxs_with_parent_ids = flow.fluxs.reduce({}) { |t, i| t[i.id] = []; t }
40
53
  data_fluxs.map { |r| fluxs_with_parent_ids[r['id']] = r['parents'] || [] }
data/lib/mushy/flux.rb CHANGED
@@ -8,6 +8,7 @@ module Mushy
8
8
  attr_accessor :subscribed_to
9
9
  attr_accessor :config
10
10
  attr_accessor :masher
11
+ attr_accessor :flow
11
12
 
12
13
  def initialize
13
14
  guard
@@ -39,20 +40,18 @@ module Mushy
39
40
 
40
41
  incoming_event = SymbolizedHash.new(incoming_event) if incoming_event.is_a?(Hash)
41
42
 
42
- event = incoming_event
43
-
44
- incoming_split = masher.mash(config, event)[:incoming_split]
43
+ incoming_split = masher.mash(config, incoming_event)[:incoming_split]
45
44
  config_considering_an_imcoming_split = config
46
45
  .reject { |x, _| incoming_split && x.to_s == 'join' }
47
46
  .reduce({}) { |t, i| t[i[0]] = i[1]; t }
48
47
 
49
- events = incoming_split ? incoming_event[incoming_split] : [event]
48
+ events = incoming_split ? incoming_event[incoming_split] : [incoming_event]
50
49
 
51
50
  results = events.map { |e| execute_single_event e, config_considering_an_imcoming_split }
52
51
 
53
52
  return results.first unless incoming_split
54
53
 
55
- results = join_these_results([results].flatten, event, config[:join]) if config[:join]
54
+ results = join_these_results([results].flatten, incoming_event, config[:join]) if config[:join]
56
55
 
57
56
  results.flatten
58
57
  end
@@ -2,8 +2,6 @@ module Mushy
2
2
 
3
3
  class Collection < Flux
4
4
 
5
- attr_accessor :collection
6
-
7
5
  def self.details
8
6
  {
9
7
  name: 'Collection',
@@ -11,9 +9,14 @@ module Mushy
11
9
  config: {
12
10
  id: {
13
11
  description: 'The path to the unique id in the body of the element.',
14
- type: 'id',
15
- value: { url: 'a|@href' },
12
+ type: 'text',
13
+ value: '{{id}}',
16
14
  },
15
+ collection_name: {
16
+ description: 'The name of the collection to interact with.',
17
+ type: 'text',
18
+ value: 'records',
19
+ },
17
20
  operation: {
18
21
  description: 'Perform this operation.',
19
22
  type: 'select',
@@ -24,31 +27,26 @@ module Mushy
24
27
  }
25
28
  end
26
29
 
27
- def initialize
28
- self.collection = {}
29
- super
30
- end
31
-
32
30
  def process event, config
33
31
  self.send(config[:operation].to_sym, event, config)
34
32
  end
35
33
 
36
34
  def get_the_id event, config
37
- event[config[:id]]
35
+ config[:id]
38
36
  end
39
37
 
40
38
  def all event, config
41
- self.collection.values
39
+ the_collection(config).values
42
40
  end
43
41
 
44
42
  def delete event, config
45
- self.collection.delete get_the_id(event, config)
43
+ the_collection(config).delete get_the_id(event, config)
46
44
  event[config[:operation_performed]] = 'deleted' if config[:operation_performed]
47
45
  event
48
46
  end
49
47
 
50
48
  def upsert event, config
51
- if self.collection[get_the_id(event, config)]
49
+ if the_collection(config)[get_the_id(event, config)]
52
50
  update event, config
53
51
  else
54
52
  insert event, config
@@ -56,18 +54,38 @@ module Mushy
56
54
  end
57
55
 
58
56
  def update event, config
59
- item = self.collection[get_the_id(event, config)]
57
+ item = the_collection(config)[get_the_id(event, config)]
60
58
  event.each { |k, v| item[k] = v } if item
61
59
  event[config[:operation_performed]] = (item ? 'updated' : 'not exist') if config[:operation_performed]
62
60
  event
63
61
  end
64
62
 
65
63
  def insert event, config
66
- self.collection[get_the_id(event, config)] = event
64
+ the_collection(config)[get_the_id(event, config)] = event
67
65
  event[config[:operation_performed]] = 'inserted' if config[:operation_performed]
68
66
  event
69
67
  end
70
68
 
69
+ def the_collection config
70
+ Mushy::Collection.guard_the_flow self.flow
71
+ the_collection_name = config[:collection_name]
72
+
73
+ get_the_collection the_collection_name
74
+ end
75
+
76
+ def get_the_collection name
77
+ found_collection = self.flow.collection_data[name]
78
+ return found_collection if found_collection
79
+ self.flow.collection_data[name] = SymbolizedHash.new
80
+ end
81
+
82
+ def self.guard_the_flow flow
83
+ return if flow.respond_to?(:collection_data)
84
+
85
+ flow.instance_eval { class << self; self end }.send(:attr_accessor, :collection_data)
86
+ flow.collection_data = {}
87
+ end
88
+
71
89
  end
72
90
 
73
91
  end
@@ -0,0 +1,46 @@
1
+ require 'listen'
2
+
3
+ module Mushy
4
+
5
+ class FileWatch < Flux
6
+
7
+ def self.details
8
+ {
9
+ name: 'FileWatch',
10
+ description: 'Watch for file changes.',
11
+ config: {
12
+ directory: {
13
+ description: 'The directory to watch.',
14
+ type: 'text',
15
+ value: '',
16
+ },
17
+ },
18
+ }
19
+ end
20
+
21
+ def loop &block
22
+
23
+ directory = config[:directory].to_s != '' ? config[:directory] : Dir.pwd
24
+
25
+ listener = Listen.to(directory) do |modified, added, removed|
26
+ the_event = {
27
+ modified: modified,
28
+ added: added,
29
+ removed: removed,
30
+ }
31
+ block.call the_event
32
+ end
33
+
34
+ listener.start
35
+
36
+ sleep
37
+
38
+ end
39
+
40
+ def process event, config
41
+ event
42
+ end
43
+
44
+ end
45
+
46
+ end
@@ -0,0 +1,39 @@
1
+ module Mushy
2
+
3
+ class GlobalVariables < Flux
4
+
5
+ attr_accessor :state
6
+
7
+ def self.details
8
+ {
9
+ name: 'GlobalVariables',
10
+ description: 'Add global variables.',
11
+ config: {
12
+ values: {
13
+ description: 'Provide key/value pairs that will be set as global variables.',
14
+ label: 'Variables',
15
+ type: 'keyvalue',
16
+ value: {},
17
+ },
18
+ },
19
+ }
20
+ end
21
+
22
+ def initialize
23
+ super
24
+ self.state = SymbolizedHash.new
25
+ end
26
+
27
+ def adjust_data data
28
+ state.merge data
29
+ end
30
+
31
+ def process event, config
32
+ values = config[:values] || SymbolizedHash.new
33
+ state.merge! values
34
+ event
35
+ end
36
+
37
+ end
38
+
39
+ end
@@ -4,8 +4,8 @@ module Mushy
4
4
 
5
5
  def self.details
6
6
  details = Browser.details
7
- details['name'] = 'Pdf'
8
- details['description'] = 'Turn a URL into a PDF.'
7
+ details[:name] = 'Pdf'
8
+ details[:description] = 'Turn a URL into a PDF.'
9
9
 
10
10
  details[:config][:path] = {
11
11
  description: 'The path of the PDF file to save.',
@@ -37,7 +37,10 @@ module Mushy
37
37
 
38
38
  the_browser.pdf options
39
39
 
40
- options
40
+ {
41
+ options: options,
42
+ file: Mushy::Ls.new.process({}, { path: options[:path] })[0]
43
+ }
41
44
 
42
45
  end
43
46
 
@@ -1,8 +1,50 @@
1
1
  require 'pony'
2
2
 
3
3
  module Mushy
4
+
5
+ class EmailBase < Flux
6
+
7
+ def process event, config
8
+ options = adjust(cleanup({
9
+ from: config[:from],
10
+ to: config[:to],
11
+ subject: config[:subject],
12
+ body: config[:body],
13
+ html_body: config[:html_body],
14
+ via_options: get_via_options_from(config)
15
+ }))
16
+
17
+ if (config[:attachment_file].to_s != '')
18
+ options[:attachments] = { config[:attachment_file].split("\/")[-1] => File.read(config[:attachment_file]) }
19
+ end
20
+
21
+ result = Pony.mail options
22
+ options.tap { |x| x.delete(:via_options) }
23
+ end
24
+
25
+ def adjust options
26
+ end
27
+
28
+ def cleanup options
29
+ options.tap do |hash|
30
+ hash.delete_if { |_, v| v.to_s == '' }
31
+ end
32
+ end
33
+
34
+ def get_via_options_from config
35
+ {
36
+ address: config[:address],
37
+ port: config[:port].to_s,
38
+ user_name: config[:username],
39
+ password: config[:password],
40
+ domain: config[:domain],
41
+ authentication: :plain,
42
+ enable_starttls_auto: true,
43
+ }
44
+ end
45
+ end
4
46
 
5
- class Smtp < Flux
47
+ class Smtp < EmailBase
6
48
 
7
49
  def self.details
8
50
  {
@@ -70,46 +112,10 @@ module Mushy
70
112
  }
71
113
  end
72
114
 
73
- def process event, config
74
- options = adjust(cleanup({
75
- from: config[:from],
76
- to: config[:to],
77
- subject: config[:subject],
78
- body: config[:body],
79
- html_body: config[:html_body],
80
- via_options: get_via_options_from(config)
81
- }))
82
-
83
- if (config[:attachment_file].to_s != '')
84
- options[:attachments] = { config[:attachment_file].split("\/")[-1] => File.read(config[:attachment_file]) }
85
- end
86
-
87
- result = Pony.mail options
88
- options.tap { |x| x.delete(:via_options) }
89
- end
90
-
91
115
  def adjust options
92
116
  options.tap { |x| x[:via] = 'smtp' }
93
117
  end
94
118
 
95
- def cleanup options
96
- options.tap do |hash|
97
- hash.delete_if { |_, v| v.to_s == '' }
98
- end
99
- end
100
-
101
- def get_via_options_from config
102
- {
103
- address: config[:address],
104
- port: config[:port].to_s,
105
- user_name: config[:username],
106
- password: config[:password],
107
- domain: config[:domain],
108
- authentication: :plain,
109
- enable_starttls_auto: true,
110
- }
111
- end
112
-
113
119
  end
114
120
 
115
121
  end
@@ -0,0 +1,29 @@
1
+ module Mushy
2
+
3
+ class Times < Flux
4
+
5
+ def self.details
6
+ {
7
+ name: 'Times',
8
+ description: 'Return the event passed to it, X times.',
9
+ config: {
10
+ times: {
11
+ description: 'The number of times this event should be returned.',
12
+ type: 'integer',
13
+ value: '1',
14
+ },
15
+ }
16
+ }
17
+ end
18
+
19
+ def process event, config
20
+ config[:times]
21
+ .to_i
22
+ .times
23
+ .each_with_index
24
+ .map { |x, i| event.dup.tap { |e| e[:index] = i } }
25
+ end
26
+
27
+ end
28
+
29
+ end
data/lib/mushy/masher.rb CHANGED
@@ -45,7 +45,15 @@ module Mushy
45
45
  segments = key.split '.'
46
46
 
47
47
  segments.each do |segment|
48
- data = data.is_a?(Hash) ? (data[segment] || data[segment.to_sym]) : (data ? data.send(segment.to_sym) : nil)
48
+ if segment.include?('[') && segment.include?(']')
49
+ the_splits = segment.split('[')
50
+ segment = the_splits[0]
51
+ index = the_splits[1].sub(']', '')
52
+ data = data.is_a?(Hash) ? (data[segment] || data[segment.to_sym]) : (data ? data.send(segment.to_sym) : nil)
53
+ data = data[index.to_i]
54
+ else
55
+ data = data.is_a?(Hash) ? (data[segment] || data[segment.to_sym]) : (data ? data.send(segment.to_sym) : nil)
56
+ end
49
57
  end
50
58
 
51
59
  data
data/lib/mushy/runner.rb CHANGED
@@ -12,7 +12,7 @@ module Mushy
12
12
  run = find_run flux, flow
13
13
  starting_event = build_event event_data, flow.id, run.id, flux.id
14
14
 
15
- events = run_event_with_flux starting_event, flux
15
+ events = run_event_with_flux starting_event, flux, flow
16
16
 
17
17
  while events.any?
18
18
  events = events.map { |e| runner.run_event_in_flow e, flow }.flatten
@@ -23,12 +23,14 @@ module Mushy
23
23
 
24
24
  def run_event_in_flow event, flow
25
25
  flow.fluxs_for(event)
26
- .map { |s| runner.run_event_with_flux event, s }
26
+ .map { |s| runner.run_event_with_flux event, s, flow }
27
27
  .flatten
28
28
  end
29
29
 
30
- def run_event_with_flux event, flux
31
- [flux.execute(event.data)]
30
+ def run_event_with_flux event, flux, flow
31
+ data = event.data
32
+ data = flow.adjust_data data
33
+ [flux.execute(data)]
32
34
  .flatten
33
35
  .reject { |x| x.nil? }
34
36
  .map { |x| x.is_a?(Hash) ? build_event(x, event.flow_id, event.run_id, flux.id) : x }
data/lib/site.rb CHANGED
@@ -2,7 +2,7 @@ require 'sinatra'
2
2
 
3
3
  require_relative 'mushy'
4
4
 
5
- the_file = 'hey.json'
5
+ the_file = 'hey.mushy'
6
6
 
7
7
  get '/' do
8
8
  Mushy::Builder::Index.file
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.5.3'
7
+ s.version = '0.10.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.'
@@ -16,14 +16,15 @@ Gem::Specification.new do |s|
16
16
  s.homepage = 'https://cauthon.com'
17
17
  s.license = 'MIT'
18
18
 
19
- s.add_development_dependency 'minitest'
20
- s.add_runtime_dependency 'sinatra'
21
- s.add_runtime_dependency 'symbolized'
22
- s.add_runtime_dependency 'thor'
23
- s.add_runtime_dependency 'liquid'
24
- s.add_runtime_dependency 'ferrum'
25
- s.add_runtime_dependency 'nokogiri'
26
- s.add_runtime_dependency 'faraday'
27
- s.add_runtime_dependency 'pony'
28
- s.add_runtime_dependency 'daemons'
19
+ s.add_development_dependency 'minitest', '~> 5'
20
+ s.add_runtime_dependency 'sinatra', '~> 2.1'
21
+ s.add_runtime_dependency 'symbolized', '~> 0.0.1'
22
+ s.add_runtime_dependency 'thor', '~> 1.1'
23
+ s.add_runtime_dependency 'liquid', '~> 5'
24
+ s.add_runtime_dependency 'ferrum','~> 0.11'
25
+ s.add_runtime_dependency 'nokogiri', '~> 1'
26
+ s.add_runtime_dependency 'faraday', '~> 1'
27
+ s.add_runtime_dependency 'pony', '~> 1.13'
28
+ s.add_runtime_dependency 'daemons', '~> 1'
29
+ s.add_runtime_dependency 'listen', '~> 3.5'
29
30
  end
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.5.3
4
+ version: 0.10.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Darren Cauthon
@@ -14,142 +14,156 @@ dependencies:
14
14
  name: minitest
15
15
  requirement: !ruby/object:Gem::Requirement
16
16
  requirements:
17
- - - ">="
17
+ - - "~>"
18
18
  - !ruby/object:Gem::Version
19
- version: '0'
19
+ version: '5'
20
20
  type: :development
21
21
  prerelease: false
22
22
  version_requirements: !ruby/object:Gem::Requirement
23
23
  requirements:
24
- - - ">="
24
+ - - "~>"
25
25
  - !ruby/object:Gem::Version
26
- version: '0'
26
+ version: '5'
27
27
  - !ruby/object:Gem::Dependency
28
28
  name: sinatra
29
29
  requirement: !ruby/object:Gem::Requirement
30
30
  requirements:
31
- - - ">="
31
+ - - "~>"
32
32
  - !ruby/object:Gem::Version
33
- version: '0'
33
+ version: '2.1'
34
34
  type: :runtime
35
35
  prerelease: false
36
36
  version_requirements: !ruby/object:Gem::Requirement
37
37
  requirements:
38
- - - ">="
38
+ - - "~>"
39
39
  - !ruby/object:Gem::Version
40
- version: '0'
40
+ version: '2.1'
41
41
  - !ruby/object:Gem::Dependency
42
42
  name: symbolized
43
43
  requirement: !ruby/object:Gem::Requirement
44
44
  requirements:
45
- - - ">="
45
+ - - "~>"
46
46
  - !ruby/object:Gem::Version
47
- version: '0'
47
+ version: 0.0.1
48
48
  type: :runtime
49
49
  prerelease: false
50
50
  version_requirements: !ruby/object:Gem::Requirement
51
51
  requirements:
52
- - - ">="
52
+ - - "~>"
53
53
  - !ruby/object:Gem::Version
54
- version: '0'
54
+ version: 0.0.1
55
55
  - !ruby/object:Gem::Dependency
56
56
  name: thor
57
57
  requirement: !ruby/object:Gem::Requirement
58
58
  requirements:
59
- - - ">="
59
+ - - "~>"
60
60
  - !ruby/object:Gem::Version
61
- version: '0'
61
+ version: '1.1'
62
62
  type: :runtime
63
63
  prerelease: false
64
64
  version_requirements: !ruby/object:Gem::Requirement
65
65
  requirements:
66
- - - ">="
66
+ - - "~>"
67
67
  - !ruby/object:Gem::Version
68
- version: '0'
68
+ version: '1.1'
69
69
  - !ruby/object:Gem::Dependency
70
70
  name: liquid
71
71
  requirement: !ruby/object:Gem::Requirement
72
72
  requirements:
73
- - - ">="
73
+ - - "~>"
74
74
  - !ruby/object:Gem::Version
75
- version: '0'
75
+ version: '5'
76
76
  type: :runtime
77
77
  prerelease: false
78
78
  version_requirements: !ruby/object:Gem::Requirement
79
79
  requirements:
80
- - - ">="
80
+ - - "~>"
81
81
  - !ruby/object:Gem::Version
82
- version: '0'
82
+ version: '5'
83
83
  - !ruby/object:Gem::Dependency
84
84
  name: ferrum
85
85
  requirement: !ruby/object:Gem::Requirement
86
86
  requirements:
87
- - - ">="
87
+ - - "~>"
88
88
  - !ruby/object:Gem::Version
89
- version: '0'
89
+ version: '0.11'
90
90
  type: :runtime
91
91
  prerelease: false
92
92
  version_requirements: !ruby/object:Gem::Requirement
93
93
  requirements:
94
- - - ">="
94
+ - - "~>"
95
95
  - !ruby/object:Gem::Version
96
- version: '0'
96
+ version: '0.11'
97
97
  - !ruby/object:Gem::Dependency
98
98
  name: nokogiri
99
99
  requirement: !ruby/object:Gem::Requirement
100
100
  requirements:
101
- - - ">="
101
+ - - "~>"
102
102
  - !ruby/object:Gem::Version
103
- version: '0'
103
+ version: '1'
104
104
  type: :runtime
105
105
  prerelease: false
106
106
  version_requirements: !ruby/object:Gem::Requirement
107
107
  requirements:
108
- - - ">="
108
+ - - "~>"
109
109
  - !ruby/object:Gem::Version
110
- version: '0'
110
+ version: '1'
111
111
  - !ruby/object:Gem::Dependency
112
112
  name: faraday
113
113
  requirement: !ruby/object:Gem::Requirement
114
114
  requirements:
115
- - - ">="
115
+ - - "~>"
116
116
  - !ruby/object:Gem::Version
117
- version: '0'
117
+ version: '1'
118
118
  type: :runtime
119
119
  prerelease: false
120
120
  version_requirements: !ruby/object:Gem::Requirement
121
121
  requirements:
122
- - - ">="
122
+ - - "~>"
123
123
  - !ruby/object:Gem::Version
124
- version: '0'
124
+ version: '1'
125
125
  - !ruby/object:Gem::Dependency
126
126
  name: pony
127
127
  requirement: !ruby/object:Gem::Requirement
128
128
  requirements:
129
- - - ">="
129
+ - - "~>"
130
130
  - !ruby/object:Gem::Version
131
- version: '0'
131
+ version: '1.13'
132
132
  type: :runtime
133
133
  prerelease: false
134
134
  version_requirements: !ruby/object:Gem::Requirement
135
135
  requirements:
136
- - - ">="
136
+ - - "~>"
137
137
  - !ruby/object:Gem::Version
138
- version: '0'
138
+ version: '1.13'
139
139
  - !ruby/object:Gem::Dependency
140
140
  name: daemons
141
141
  requirement: !ruby/object:Gem::Requirement
142
142
  requirements:
143
- - - ">="
143
+ - - "~>"
144
144
  - !ruby/object:Gem::Version
145
- version: '0'
145
+ version: '1'
146
146
  type: :runtime
147
147
  prerelease: false
148
148
  version_requirements: !ruby/object:Gem::Requirement
149
149
  requirements:
150
- - - ">="
150
+ - - "~>"
151
151
  - !ruby/object:Gem::Version
152
- version: '0'
152
+ version: '1'
153
+ - !ruby/object:Gem::Dependency
154
+ name: listen
155
+ requirement: !ruby/object:Gem::Requirement
156
+ requirements:
157
+ - - "~>"
158
+ - !ruby/object:Gem::Version
159
+ version: '3.5'
160
+ type: :runtime
161
+ prerelease: false
162
+ version_requirements: !ruby/object:Gem::Requirement
163
+ requirements:
164
+ - - "~>"
165
+ - !ruby/object:Gem::Version
166
+ version: '3.5'
153
167
  description: This tool assists in the creation and processing of workflows.
154
168
  email: darren@cauthon.com
155
169
  executables:
@@ -175,10 +189,12 @@ files:
175
189
  - lib/mushy/fluxs/collection.rb
176
190
  - lib/mushy/fluxs/document.rb
177
191
  - lib/mushy/fluxs/environment.rb
192
+ - lib/mushy/fluxs/file_watch.rb
178
193
  - lib/mushy/fluxs/filter.rb
179
194
  - lib/mushy/fluxs/format.rb
180
195
  - lib/mushy/fluxs/get.rb
181
196
  - lib/mushy/fluxs/git_log.rb
197
+ - lib/mushy/fluxs/global_variables.rb
182
198
  - lib/mushy/fluxs/interval.rb
183
199
  - lib/mushy/fluxs/ls.rb
184
200
  - lib/mushy/fluxs/parse_html.rb
@@ -189,6 +205,7 @@ files:
189
205
  - lib/mushy/fluxs/read_file.rb
190
206
  - lib/mushy/fluxs/screenshot.rb
191
207
  - lib/mushy/fluxs/smtp.rb
208
+ - lib/mushy/fluxs/times.rb
192
209
  - lib/mushy/fluxs/write_file.rb
193
210
  - lib/mushy/masher.rb
194
211
  - lib/mushy/run.rb