kanseishitsu 0.1.1

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,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
@@ -0,0 +1,10 @@
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_relative 'kanseishitsu/cron'
10
+ require_relative 'kanseishitsu/watch'
metadata ADDED
@@ -0,0 +1,96 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: kanseishitsu
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.1.1
5
+ platform: ruby
6
+ authors:
7
+ - Nels Nelson
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2024-05-16 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: nokogiri
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - "~>"
18
+ - !ruby/object:Gem::Version
19
+ version: 1.16.4
20
+ type: :runtime
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - "~>"
25
+ - !ruby/object:Gem::Version
26
+ version: 1.16.4
27
+ force_ruby_platform: false
28
+ - !ruby/object:Gem::Dependency
29
+ name: syslog
30
+ requirement: !ruby/object:Gem::Requirement
31
+ requirements:
32
+ - - "~>"
33
+ - !ruby/object:Gem::Version
34
+ version: 0.1.2
35
+ type: :runtime
36
+ prerelease: false
37
+ version_requirements: !ruby/object:Gem::Requirement
38
+ requirements:
39
+ - - "~>"
40
+ - !ruby/object:Gem::Version
41
+ version: 0.1.2
42
+ force_ruby_platform: false
43
+ description: Simplified LaunchAgents management for macOS. This gem packageprovides
44
+ command-line tools for managing macOS launch agents.
45
+ email: nels@nelsnelson.org
46
+ executables:
47
+ - cron.rb
48
+ - watch.rb
49
+ extensions: []
50
+ extra_rdoc_files: []
51
+ files:
52
+ - LICENSE.md
53
+ - README.md
54
+ - bin/cron.rb
55
+ - bin/watch.rb
56
+ - lib/kanseishitsu.rb
57
+ - lib/kanseishitsu/cron.rb
58
+ - lib/kanseishitsu/cron/argument_parser.rb
59
+ - lib/kanseishitsu/cron/launch_agent_manager_rexml.rb
60
+ - lib/kanseishitsu/launch_agent_constants.rb
61
+ - lib/kanseishitsu/launch_agent_manager.rb
62
+ - lib/kanseishitsu/logging.rb
63
+ - lib/kanseishitsu/plist_parser.rb
64
+ - lib/kanseishitsu/version.rb
65
+ - lib/kanseishitsu/watch.rb
66
+ - lib/kanseishitsu/watch/argument_parser.rb
67
+ - lib/kanseishitsu/which.rb
68
+ - lib/kanseishitsu/xml_helper.rb
69
+ - lib/kanseishitsu/xml_helper_rexml.rb
70
+ homepage: https://rubygems.org/gems/kanseishitsu
71
+ licenses:
72
+ - MIT
73
+ metadata:
74
+ source_code_uri: https://gitlab.com/nelsnelson/kanseishitsu
75
+ bug_tracker_uri: https://gitlab.com/nelsnelson/kanseishitsu/issues
76
+ rubygems_mfa_required: 'true'
77
+ post_install_message:
78
+ rdoc_options: []
79
+ require_paths:
80
+ - lib
81
+ required_ruby_version: !ruby/object:Gem::Requirement
82
+ requirements:
83
+ - - ">="
84
+ - !ruby/object:Gem::Version
85
+ version: 2.6.8
86
+ required_rubygems_version: !ruby/object:Gem::Requirement
87
+ requirements:
88
+ - - ">="
89
+ - !ruby/object:Gem::Version
90
+ version: '0'
91
+ requirements: []
92
+ rubygems_version: 3.5.9
93
+ signing_key:
94
+ specification_version: 4
95
+ summary: Simplified LaunchAgents management for macOS packaged as a gem.
96
+ test_files: []