kanseishitsu 0.1.1

Sign up to get free protection for your applications and to get access to all the features.
@@ -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: []