crontab.rb 0.1.2

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.
@@ -0,0 +1,38 @@
1
+ # encoding: utf-8
2
+ # frozen_string_literal: false
3
+
4
+ # -*- mode: ruby -*-
5
+ # vi: set ft=ruby :
6
+
7
+ # Copyright Nels Nelson 2024 but freely usable (see license)
8
+
9
+ # Define module Which
10
+ module Which
11
+ # Find the full path to a given executable in the PATH
12
+ # system environment variable
13
+ def find_executable_in_path(cmd)
14
+ return if cmd.nil?
15
+
16
+ directory = ENV['PATH'].split(File::PATH_SEPARATOR).find do |dir|
17
+ File.executable?(File.join(dir, cmd))
18
+ end
19
+ directory.nil? ? nil : File.join(directory, cmd)
20
+ end
21
+
22
+ def executable?(exe)
23
+ !exe.empty? && File.executable?(exe) && !File.directory?(exe)
24
+ end
25
+
26
+ def explicit_which(cmd)
27
+ exe = `which #{cmd}`.chomp
28
+ executable?(exe) ? exe : nil
29
+ rescue Errno::ENOENT => _e
30
+ nil
31
+ end
32
+
33
+ def portable_which(cmd)
34
+ explicit_which(cmd) || find_executable_in_path(cmd)
35
+ end
36
+ alias which portable_which
37
+ end
38
+ # module Which
@@ -0,0 +1,53 @@
1
+ # encoding: utf-8
2
+ # frozen_string_literal: false
3
+
4
+ # vi: set ft=ruby :
5
+ # -*- mode: ruby -*-
6
+
7
+ # Copyright Nels Nelson 2024 but freely usable (see license)
8
+
9
+ # Define module XMLHelperInstanceMethods
10
+ module XMLHelperInstanceMethods
11
+ CDATA_PATTERN = /[<>&'"\n]+/
12
+ KEYS_REQUIRING_CDATA = ['PATH'].freeze
13
+
14
+ def create_xml_tag(doc, parent, key, value)
15
+ element = case value
16
+ when Hash then create_dict(doc, value)
17
+ when Array then create_array(doc, value)
18
+ else create_simple_element(doc, key, value)
19
+ end
20
+ parent << doc.create_element('key', key.to_s) unless element.nil?
21
+ parent << element unless element.nil?
22
+ end
23
+
24
+ def create_dict(doc, value)
25
+ dict = doc.create_element('dict')
26
+ value.each do |k, v|
27
+ create_xml_tag(doc, dict, k, v)
28
+ end
29
+ dict
30
+ end
31
+
32
+ def create_array(doc, value)
33
+ array = doc.create_element('array')
34
+ value.each do |v|
35
+ string = doc.create_element('string', v.to_s)
36
+ array << string
37
+ end
38
+ array
39
+ end
40
+
41
+ def create_simple_element(doc, key, value)
42
+ # Decide whether to wrap value in CDATA tag specifier
43
+ if value.to_s.match?(CDATA_PATTERN) || KEYS_REQUIRING_CDATA.include?(key.to_s)
44
+ cdata = doc.create_cdata(value.to_s)
45
+ string_value = doc.create_element('string')
46
+ string_value << cdata
47
+ string_value
48
+ else
49
+ doc.create_element(value.class.to_s.downcase, value.to_s)
50
+ end
51
+ end
52
+ end
53
+ # module XMLHelperInstanceMethods
@@ -0,0 +1,56 @@
1
+ # encoding: utf-8
2
+ # frozen_string_literal: false
3
+
4
+ # vi: set ft=ruby :
5
+ # -*- mode: ruby -*-
6
+
7
+ # Copyright Nels Nelson 2024 but freely usable (see license)
8
+
9
+ require 'rexml/document'
10
+
11
+ # Define module XMLHelperInstanceMethods
12
+ module XMLHelperInstanceMethods
13
+ CDATA_PATTERN = /[<>&'"\n]+/
14
+ KEYS_REQUIRING_CDATA = ['PATH'].freeze
15
+
16
+ def create_xml_tag(parent, key, value)
17
+ element = case value
18
+ when Hash then create_dict(value)
19
+ when Array then create_array(value)
20
+ else create_simple_element(key, value)
21
+ end
22
+ parent.add_element(element) unless element.nil?
23
+ end
24
+
25
+ private
26
+
27
+ def create_dict(value)
28
+ dict = REXML::Element.new('dict')
29
+ value.each do |k, v|
30
+ create_xml_tag(dict, k, v)
31
+ end
32
+ dict
33
+ end
34
+
35
+ def create_array(value)
36
+ array = REXML::Element.new('array')
37
+ value.each do |v|
38
+ array.add_element('string').add_text(v.to_s)
39
+ end
40
+ array
41
+ end
42
+
43
+ def create_simple_element(key, value)
44
+ # Decide whether to wrap value in CDATA tag specifier
45
+ if value.to_s.match(CDATA_PATTERN) || KEYS_REQUIRING_CDATA.include?(key.to_s)
46
+ string_value = REXML::Element.new('string')
47
+ string_value.add(REXML::CData.new(value.to_s))
48
+ string_value
49
+ else
50
+ el = REXML::Element.new(value.class.to_s.downcase)
51
+ el.add_text(value.to_s)
52
+ el
53
+ end
54
+ end
55
+ end
56
+ # module XMLHelperInstanceMethods
metadata ADDED
@@ -0,0 +1,108 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: crontab.rb
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.1.2
5
+ platform: ruby
6
+ authors:
7
+ - Nels Nelson
8
+ bindir: bin
9
+ cert_chain: []
10
+ date: 1980-01-02 00:00:00.000000000 Z
11
+ dependencies:
12
+ - !ruby/object:Gem::Dependency
13
+ name: logger
14
+ requirement: !ruby/object:Gem::Requirement
15
+ requirements:
16
+ - - "~>"
17
+ - !ruby/object:Gem::Version
18
+ version: 1.7.0
19
+ type: :runtime
20
+ prerelease: false
21
+ version_requirements: !ruby/object:Gem::Requirement
22
+ requirements:
23
+ - - "~>"
24
+ - !ruby/object:Gem::Version
25
+ version: 1.7.0
26
+ - !ruby/object:Gem::Dependency
27
+ name: nokogiri
28
+ requirement: !ruby/object:Gem::Requirement
29
+ requirements:
30
+ - - "~>"
31
+ - !ruby/object:Gem::Version
32
+ version: 1.16.4
33
+ type: :runtime
34
+ prerelease: false
35
+ version_requirements: !ruby/object:Gem::Requirement
36
+ requirements:
37
+ - - "~>"
38
+ - !ruby/object:Gem::Version
39
+ version: 1.16.4
40
+ - !ruby/object:Gem::Dependency
41
+ name: syslog
42
+ requirement: !ruby/object:Gem::Requirement
43
+ requirements:
44
+ - - "~>"
45
+ - !ruby/object:Gem::Version
46
+ version: 0.1.2
47
+ type: :runtime
48
+ prerelease: false
49
+ version_requirements: !ruby/object:Gem::Requirement
50
+ requirements:
51
+ - - "~>"
52
+ - !ruby/object:Gem::Version
53
+ version: 0.1.2
54
+ description: Simplified LaunchAgents management for macOS. This gem package provides
55
+ command-line tools for managing macOS launch agents.
56
+ email: nels@nelsnelson.org
57
+ executables:
58
+ - cron.rb
59
+ - login.rb
60
+ - watch.rb
61
+ extensions: []
62
+ extra_rdoc_files: []
63
+ files:
64
+ - LICENSE.md
65
+ - README.md
66
+ - bin/cron.rb
67
+ - bin/login.rb
68
+ - bin/watch.rb
69
+ - lib/crontab.rb
70
+ - lib/crontab.rb.d/cron.rb
71
+ - lib/crontab.rb.d/cron/argument_parser.rb
72
+ - lib/crontab.rb.d/cron/launch_agent_manager_rexml.rb
73
+ - lib/crontab.rb.d/launch_agent_constants.rb
74
+ - lib/crontab.rb.d/launch_agent_manager.rb
75
+ - lib/crontab.rb.d/logging.rb
76
+ - lib/crontab.rb.d/login/argument_parser.rb
77
+ - lib/crontab.rb.d/plist_parser.rb
78
+ - lib/crontab.rb.d/version.rb
79
+ - lib/crontab.rb.d/watch.rb
80
+ - lib/crontab.rb.d/watch/argument_parser.rb
81
+ - lib/crontab.rb.d/which.rb
82
+ - lib/crontab.rb.d/xml_helper.rb
83
+ - lib/crontab.rb.d/xml_helper_rexml.rb
84
+ homepage: https://rubygems.org/gems/crontab.rb
85
+ licenses:
86
+ - MIT
87
+ metadata:
88
+ source_code_uri: https://gitlab.com/nelsnelson/crontab.rb
89
+ bug_tracker_uri: https://gitlab.com/nelsnelson/crontab.rb/issues
90
+ rubygems_mfa_required: 'true'
91
+ rdoc_options: []
92
+ require_paths:
93
+ - lib
94
+ required_ruby_version: !ruby/object:Gem::Requirement
95
+ requirements:
96
+ - - ">="
97
+ - !ruby/object:Gem::Version
98
+ version: 2.6.8
99
+ required_rubygems_version: !ruby/object:Gem::Requirement
100
+ requirements:
101
+ - - ">="
102
+ - !ruby/object:Gem::Version
103
+ version: '0'
104
+ requirements: []
105
+ rubygems_version: 3.7.2
106
+ specification_version: 4
107
+ summary: Simplified LaunchAgents management for macOS packaged as a gem.
108
+ test_files: []