pennyworth 9.5.0 → 11.1.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (68) hide show
  1. checksums.yaml +4 -4
  2. checksums.yaml.gz.sig +0 -0
  3. data.tar.gz.sig +0 -0
  4. data/README.adoc +341 -31
  5. data/bin/pennyworth +1 -3
  6. data/lib/pennyworth.rb +11 -2
  7. data/lib/pennyworth/cli/actions/config.rb +35 -0
  8. data/lib/pennyworth/cli/actions/encodings.rb +23 -0
  9. data/lib/pennyworth/cli/actions/git_hub.rb +27 -0
  10. data/lib/pennyworth/cli/actions/http_statuses.rb +23 -0
  11. data/lib/pennyworth/cli/actions/ruby_gems.rb +27 -0
  12. data/lib/pennyworth/cli/actions/system/errors.rb +25 -0
  13. data/lib/pennyworth/cli/actions/system/signals.rb +25 -0
  14. data/lib/pennyworth/cli/actions/text.rb +23 -0
  15. data/lib/pennyworth/cli/configuration/content.rb +28 -0
  16. data/lib/pennyworth/cli/configuration/defaults.yml +25 -0
  17. data/lib/pennyworth/cli/configuration/loader.rb +37 -0
  18. data/lib/pennyworth/cli/parsers.rb +11 -0
  19. data/lib/pennyworth/cli/parsers/assembler.rb +32 -0
  20. data/lib/pennyworth/cli/parsers/core.rb +100 -0
  21. data/lib/pennyworth/cli/parsers/git_hub.rb +51 -0
  22. data/lib/pennyworth/cli/parsers/ruby_gems.rb +35 -0
  23. data/lib/pennyworth/cli/shell.rb +82 -0
  24. data/lib/pennyworth/container.rb +40 -0
  25. data/lib/pennyworth/identity.rb +2 -1
  26. data/lib/pennyworth/inflector.rb +18 -0
  27. data/lib/pennyworth/integrations/git_hub/client.rb +59 -0
  28. data/lib/pennyworth/integrations/git_hub/response.rb +33 -0
  29. data/lib/pennyworth/integrations/ruby_gems/client.rb +29 -0
  30. data/lib/pennyworth/loaders/encodings.rb +31 -0
  31. data/lib/pennyworth/loaders/http_statuses.rb +28 -0
  32. data/lib/pennyworth/loaders/projects.rb +22 -0
  33. data/lib/pennyworth/loaders/system/errors.rb +33 -0
  34. data/lib/pennyworth/loaders/system/signals.rb +21 -0
  35. data/lib/pennyworth/loaders/text.rb +27 -0
  36. data/lib/pennyworth/models/encoding.rb +8 -0
  37. data/lib/pennyworth/models/http_status.rb +8 -0
  38. data/lib/pennyworth/models/system/error.rb +10 -0
  39. data/lib/pennyworth/models/system/signal.rb +10 -0
  40. data/lib/pennyworth/models/text.rb +8 -0
  41. data/lib/pennyworth/presenters/encoding.rb +22 -0
  42. data/lib/pennyworth/presenters/gem.rb +48 -0
  43. data/lib/pennyworth/presenters/http_status.rb +41 -0
  44. data/lib/pennyworth/presenters/repository.rb +35 -0
  45. data/lib/pennyworth/presenters/system/error.rb +28 -0
  46. data/lib/pennyworth/presenters/system/signal.rb +22 -0
  47. data/lib/pennyworth/presenters/text.rb +25 -0
  48. data/lib/pennyworth/processor.rb +68 -0
  49. data/lib/pennyworth/serializers/encoding.rb +33 -0
  50. data/lib/pennyworth/serializers/http_status.rb +41 -0
  51. data/lib/pennyworth/serializers/project.rb +52 -0
  52. data/lib/pennyworth/serializers/system/error.rb +46 -0
  53. data/lib/pennyworth/serializers/system/signal.rb +40 -0
  54. data/lib/pennyworth/serializers/text.rb +31 -0
  55. metadata +125 -34
  56. metadata.gz.sig +0 -0
  57. data/lib/pennyworth/cli.rb +0 -140
  58. data/lib/pennyworth/templates/workflows/user.workflow.B59B22A2-1880-4765-9358-412791BE9202/icon.png +0 -0
  59. data/lib/pennyworth/templates/workflows/user.workflow.B59B22A2-1880-4765-9358-412791BE9202/info.plist +0 -159
  60. data/lib/pennyworth/templates/workflows/user.workflow.C431E56A-0EC2-47EE-94D5-D67D9FE323BE/icon.png +0 -0
  61. data/lib/pennyworth/templates/workflows/user.workflow.C431E56A-0EC2-47EE-94D5-D67D9FE323BE/info.plist +0 -272
  62. data/lib/pennyworth/templates/workflows/user.workflow.C431E56A-0EC2-47EE-94D5-D67D9FE323BE/string-camelcase.png +0 -0
  63. data/lib/pennyworth/templates/workflows/user.workflow.C431E56A-0EC2-47EE-94D5-D67D9FE323BE/string-capitalize.png +0 -0
  64. data/lib/pennyworth/templates/workflows/user.workflow.C431E56A-0EC2-47EE-94D5-D67D9FE323BE/string-lowercase.png +0 -0
  65. data/lib/pennyworth/templates/workflows/user.workflow.C431E56A-0EC2-47EE-94D5-D67D9FE323BE/string-size.png +0 -0
  66. data/lib/pennyworth/templates/workflows/user.workflow.C431E56A-0EC2-47EE-94D5-D67D9FE323BE/string-snakecase.png +0 -0
  67. data/lib/pennyworth/templates/workflows/user.workflow.C431E56A-0EC2-47EE-94D5-D67D9FE323BE/string-titleize.png +0 -0
  68. data/lib/pennyworth/templates/workflows/user.workflow.C431E56A-0EC2-47EE-94D5-D67D9FE323BE/string-uppercase.png +0 -0
metadata.gz.sig CHANGED
Binary file
@@ -1,140 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- require "thor"
4
- require "thor/actions"
5
- require "refinements/strings"
6
- require "runcom"
7
-
8
- module Pennyworth
9
- # The Command Line Interface (CLI) for the gem.
10
- # rubocop:disable Metrics/ClassLength
11
- class CLI < Thor
12
- include Thor::Actions
13
- using Refinements::Strings
14
-
15
- package_name Identity::VERSION_LABEL
16
-
17
- def self.source_root
18
- File.expand_path File.join(File.dirname(__FILE__), "templates")
19
- end
20
-
21
- def self.configuration
22
- Runcom::Config.new "#{Identity::NAME}/configuration.yml"
23
- end
24
-
25
- def initialize args = [], options = {}, config = {}
26
- super args, options, config
27
- end
28
-
29
- desc "-s, [--string=VALUE]", "Manipulate strings."
30
- map %w[-s --string] => :string
31
- method_option :downcase,
32
- aliases: "-d",
33
- desc: "Downcase string.",
34
- type: :boolean,
35
- default: false
36
- method_option :upcase,
37
- aliases: "-u",
38
- desc: "Upcase string.",
39
- type: :boolean,
40
- default: false
41
- method_option :titleize,
42
- aliases: "-t",
43
- desc: "Capitalize each word and delimit with space or forward slash.",
44
- type: :boolean,
45
- default: false
46
- method_option :camelcase,
47
- aliases: "-c",
48
- desc: "Capitalize each word and delimit with nothing or double colon.",
49
- type: :boolean,
50
- default: false
51
- method_option :snakecase,
52
- aliases: "-s",
53
- desc: "Downcase each word and delimit with underscore or forward slash.",
54
- type: :boolean,
55
- default: false
56
- method_option :size,
57
- aliases: "-s",
58
- desc: "Calculate string size.",
59
- type: :boolean,
60
- default: false
61
- def string value
62
- if options.downcase? then say value.downcase
63
- elsif options.upcase? then say value.upcase
64
- elsif options.titleize? then say value.titleize
65
- elsif options.camelcase? then say value.camelcase
66
- elsif options.snakecase? then say value.snakecase
67
- elsif options.size? then say value.size
68
- else say "Type 'pennyworth help string' for usage."
69
- end
70
- end
71
-
72
- desc "-i, [--install]", "Install Alfred Workflows."
73
- map %w[-i --install] => :install
74
- def install
75
- say
76
-
77
- alfred_settings_root = self.class.configuration.to_h[:alfred_settings_root]
78
-
79
- if valid_file? alfred_settings_root, "Invalid directory for Alfred settings root"
80
- if yes? "Installing Alfred Workflows will destroy exiting, identical, workflows. " \
81
- "Continue (y/n)?"
82
-
83
- say_status :info, "Installing Alfred Workflows...", :green
84
-
85
- workflows = Dir.glob File.join(self.class.source_root, "workflows", "**")
86
- alfred_workflows_root = File.join alfred_settings_root, "workflows"
87
- workflows.each do |workflow|
88
- name = File.basename workflow
89
- destination = File.join alfred_workflows_root, name
90
- remove_file destination
91
- directory File.join("workflows", name), destination
92
- end
93
-
94
- say_status :info, "Alfred Workflows installed.", :green
95
- else
96
- say_status :info, "Alfred Workflows installation cancelled.", :green
97
- end
98
- else
99
- say_status :error, "Invalid Alfred settings directory: #{alfred_settings_root}", :red
100
- end
101
-
102
- say
103
- end
104
-
105
- desc "-c, [--config]", "Manage gem configuration."
106
- map %w[-c --config] => :config
107
- method_option :edit,
108
- aliases: "-e",
109
- desc: "Edit gem configuration.",
110
- type: :boolean,
111
- default: false
112
- method_option :info,
113
- aliases: "-i",
114
- desc: "Print gem configuration.",
115
- type: :boolean,
116
- default: false
117
- def config
118
- path = self.class.configuration.current
119
-
120
- if options.edit? then `#{ENV["EDITOR"]} #{path}`
121
- elsif options.info?
122
- path ? say(path) : say("Configuration doesn't exist.")
123
- else help :config
124
- end
125
- end
126
-
127
- desc "-v, [--version]", "Show gem version."
128
- map %w[-v --version] => :version
129
- def version
130
- say Identity::VERSION_LABEL
131
- end
132
-
133
- desc "-h, [--help=COMMAND]", "Show this message or get help for a command."
134
- map %w[-h --help] => :help
135
- def help task = nil
136
- say and super
137
- end
138
- end
139
- # rubocop:enable Metrics/ClassLength
140
- end
@@ -1,159 +0,0 @@
1
- <?xml version="1.0" encoding="UTF-8"?>
2
- <!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
3
- <plist version="1.0">
4
- <dict>
5
- <key>bundleid</key>
6
- <string>io.alchemists.rails.workflow</string>
7
- <key>category</key>
8
- <string>Tools</string>
9
- <key>connections</key>
10
- <dict>
11
- <key>9AF7E939-D5FB-483D-927D-537571A9F4C1</key>
12
- <array>
13
- <dict>
14
- <key>destinationuid</key>
15
- <string>F5AE9865-912A-42EA-804C-368DF8AB71B0</string>
16
- <key>modifiers</key>
17
- <integer>0</integer>
18
- <key>modifiersubtext</key>
19
- <string></string>
20
- <key>vitoclose</key>
21
- <false/>
22
- </dict>
23
- </array>
24
- <key>F5AE9865-912A-42EA-804C-368DF8AB71B0</key>
25
- <array>
26
- <dict>
27
- <key>destinationuid</key>
28
- <string>A3A3916E-1338-4403-BA88-39E4D9E1B703</string>
29
- <key>modifiers</key>
30
- <integer>0</integer>
31
- <key>modifiersubtext</key>
32
- <string></string>
33
- <key>vitoclose</key>
34
- <false/>
35
- </dict>
36
- </array>
37
- </dict>
38
- <key>createdby</key>
39
- <string>Brooke Kuhlmann</string>
40
- <key>description</key>
41
- <string>A collection of Ruby on Rails shortcuts.</string>
42
- <key>disabled</key>
43
- <false/>
44
- <key>name</key>
45
- <string>Ruby on Rails</string>
46
- <key>objects</key>
47
- <array>
48
- <dict>
49
- <key>config</key>
50
- <dict>
51
- <key>argumenttrimmode</key>
52
- <integer>0</integer>
53
- <key>argumenttype</key>
54
- <integer>1</integer>
55
- <key>fixedorder</key>
56
- <false/>
57
- <key>items</key>
58
- <string>[{"title":"Local","subtitle":"Open development server."},{"title":"Routes","arg":"rails\/routes","subtitle":"View routes."},{"title":"Mailers","arg":"rails\/mailers","subtitle":"View email."}]</string>
59
- <key>keyword</key>
60
- <string>ror</string>
61
- <key>runningsubtext</key>
62
- <string></string>
63
- <key>subtext</key>
64
- <string>Open Rails in default browser.</string>
65
- <key>title</key>
66
- <string>Ruby on Rails</string>
67
- <key>withspace</key>
68
- <true/>
69
- </dict>
70
- <key>type</key>
71
- <string>alfred.workflow.input.listfilter</string>
72
- <key>uid</key>
73
- <string>9AF7E939-D5FB-483D-927D-537571A9F4C1</string>
74
- <key>version</key>
75
- <integer>1</integer>
76
- </dict>
77
- <dict>
78
- <key>config</key>
79
- <dict>
80
- <key>browser</key>
81
- <string></string>
82
- <key>spaces</key>
83
- <string></string>
84
- <key>url</key>
85
- <string>{var:url}</string>
86
- <key>utf8</key>
87
- <true/>
88
- </dict>
89
- <key>type</key>
90
- <string>alfred.workflow.action.openurl</string>
91
- <key>uid</key>
92
- <string>A3A3916E-1338-4403-BA88-39E4D9E1B703</string>
93
- <key>version</key>
94
- <integer>1</integer>
95
- </dict>
96
- <dict>
97
- <key>config</key>
98
- <dict>
99
- <key>argument</key>
100
- <string>{query}</string>
101
- <key>variables</key>
102
- <dict>
103
- <key>url</key>
104
- <string>{var:host}:{var:port}/{query}</string>
105
- </dict>
106
- </dict>
107
- <key>type</key>
108
- <string>alfred.workflow.utility.argument</string>
109
- <key>uid</key>
110
- <string>F5AE9865-912A-42EA-804C-368DF8AB71B0</string>
111
- <key>version</key>
112
- <integer>1</integer>
113
- </dict>
114
- </array>
115
- <key>readme</key>
116
- <string>= Overview
117
-
118
- Provides a collection of Ruby on Rails utilities when interacting with the application locally.</string>
119
- <key>uidata</key>
120
- <dict>
121
- <key>9AF7E939-D5FB-483D-927D-537571A9F4C1</key>
122
- <dict>
123
- <key>xpos</key>
124
- <integer>30</integer>
125
- <key>ypos</key>
126
- <integer>20</integer>
127
- </dict>
128
- <key>A3A3916E-1338-4403-BA88-39E4D9E1B703</key>
129
- <dict>
130
- <key>xpos</key>
131
- <integer>290</integer>
132
- <key>ypos</key>
133
- <integer>20</integer>
134
- </dict>
135
- <key>F5AE9865-912A-42EA-804C-368DF8AB71B0</key>
136
- <dict>
137
- <key>note</key>
138
- <string>url</string>
139
- <key>xpos</key>
140
- <integer>200</integer>
141
- <key>ypos</key>
142
- <integer>50</integer>
143
- </dict>
144
- </dict>
145
- <key>variables</key>
146
- <dict>
147
- <key>host</key>
148
- <string>http://localhost</string>
149
- <key>port</key>
150
- <string>3000</string>
151
- </dict>
152
- <key>variablesdontexport</key>
153
- <array/>
154
- <key>version</key>
155
- <string>1.0.0</string>
156
- <key>webaddress</key>
157
- <string>https://www.alchemists.io</string>
158
- </dict>
159
- </plist>
@@ -1,272 +0,0 @@
1
- <?xml version="1.0" encoding="UTF-8"?>
2
- <!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
3
- <plist version="1.0">
4
- <dict>
5
- <key>bundleid</key>
6
- <string>io.alchemists.pennyworth.workflow</string>
7
- <key>category</key>
8
- <string>Tools</string>
9
- <key>connections</key>
10
- <dict>
11
- <key>3A7EDDC3-8686-4988-998C-9EA7A1B804D1</key>
12
- <array>
13
- <dict>
14
- <key>destinationuid</key>
15
- <string>ED21B4FA-CD4A-4F43-8F17-4E6C62C2F6F1</string>
16
- <key>modifiers</key>
17
- <integer>0</integer>
18
- <key>modifiersubtext</key>
19
- <string></string>
20
- <key>vitoclose</key>
21
- <false/>
22
- </dict>
23
- <dict>
24
- <key>destinationuid</key>
25
- <string>9F8D5496-FDF9-42A7-9247-60D15CCCE012</string>
26
- <key>modifiers</key>
27
- <integer>0</integer>
28
- <key>modifiersubtext</key>
29
- <string></string>
30
- <key>vitoclose</key>
31
- <false/>
32
- </dict>
33
- </array>
34
- <key>F6F8148B-CEA3-47D4-BC24-142C40A03CBC</key>
35
- <array>
36
- <dict>
37
- <key>destinationuid</key>
38
- <string>3A7EDDC3-8686-4988-998C-9EA7A1B804D1</string>
39
- <key>modifiers</key>
40
- <integer>0</integer>
41
- <key>modifiersubtext</key>
42
- <string></string>
43
- <key>vitoclose</key>
44
- <false/>
45
- </dict>
46
- </array>
47
- </dict>
48
- <key>createdby</key>
49
- <string>Brooke Kuhlmann</string>
50
- <key>description</key>
51
- <string>Associated workflows for the Pennyworth Ruby Gem.</string>
52
- <key>disabled</key>
53
- <false/>
54
- <key>name</key>
55
- <string>Pennyworth</string>
56
- <key>objects</key>
57
- <array>
58
- <dict>
59
- <key>config</key>
60
- <dict>
61
- <key>lastpathcomponent</key>
62
- <false/>
63
- <key>onlyshowifquerypopulated</key>
64
- <false/>
65
- <key>removeextension</key>
66
- <false/>
67
- <key>text</key>
68
- <string>{query}</string>
69
- <key>title</key>
70
- <string>Pennyworth</string>
71
- </dict>
72
- <key>type</key>
73
- <string>alfred.workflow.output.notification</string>
74
- <key>uid</key>
75
- <string>ED21B4FA-CD4A-4F43-8F17-4E6C62C2F6F1</string>
76
- <key>version</key>
77
- <integer>1</integer>
78
- </dict>
79
- <dict>
80
- <key>config</key>
81
- <dict>
82
- <key>alfredfiltersresults</key>
83
- <false/>
84
- <key>alfredfiltersresultsmatchmode</key>
85
- <integer>0</integer>
86
- <key>argumenttreatemptyqueryasnil</key>
87
- <false/>
88
- <key>argumenttrimmode</key>
89
- <integer>0</integer>
90
- <key>argumenttype</key>
91
- <integer>0</integer>
92
- <key>escaping</key>
93
- <integer>0</integer>
94
- <key>keyword</key>
95
- <string>p</string>
96
- <key>queuedelaycustom</key>
97
- <integer>3</integer>
98
- <key>queuedelayimmediatelyinitially</key>
99
- <false/>
100
- <key>queuedelaymode</key>
101
- <integer>0</integer>
102
- <key>queuemode</key>
103
- <integer>1</integer>
104
- <key>runningsubtext</key>
105
- <string>Displaying Pennyworth options...</string>
106
- <key>script</key>
107
- <string>cat &lt;&lt; EOB
108
- {
109
- "items": [
110
- {
111
- "uid": "aa8c8944-18f8-4165-a2a4-ab073d936dba",
112
- "title": "Uppercase",
113
- "subtitle": "Convert all characters to uppercase.",
114
- "arg": "pennyworth --string --upcase \"{query}\"",
115
- "icon": {
116
- "path": "string-uppercase.png"
117
- }
118
- },
119
- {
120
- "uid": "de2a88ca-298f-46a7-849a-2cfa8cbdf0d1",
121
- "title": "Lowercase",
122
- "subtitle": "Convert all characters to lowercase.",
123
- "arg": "pennyworth --string --downcase \"{query}\"",
124
- "icon": {
125
- "path": "string-lowercase.png"
126
- }
127
- },
128
- {
129
- "uid": "b68ce20c-5e07-469a-9d08-08203a921035",
130
- "title": "Titleize",
131
- "subtitle": "Capitalize each word and delimit with space or forward slash.",
132
- "arg": "pennyworth --string --titleize \"{query}\"",
133
- "icon": {
134
- "path": "string-titleize.png"
135
- }
136
- },
137
- {
138
- "uid": "1ab75806-8cf5-4f79-9094-77946cd2b8ec",
139
- "title": "Camelcase",
140
- "subtitle": "Capitalize each word and delimit with nothing or double colon.",
141
- "arg": "pennyworth --string --camelcase \"{query}\"",
142
- "icon": {
143
- "path": "string-camelcase.png"
144
- }
145
- },
146
- {
147
- "uid": "06ea20b0-6b54-499c-8c21-c34c9870b621",
148
- "title": "Snakecase",
149
- "subtitle": "Lowercase each word and delimit with underscore or forward slash.",
150
- "arg": "pennyworth --string --snakecase \"{query}\"",
151
- "icon": {
152
- "path": "string-snakecase.png"
153
- }
154
- },
155
- {
156
- "uid": "f57ef3e2-7d3a-429d-a564-9df0167047c8",
157
- "title": "Size",
158
- "subtitle": "Calculate string size.",
159
- "arg": "pennyworth --string --size \"{query}\"",
160
- "icon": {
161
- "path": "string-size.png"
162
- }
163
- }
164
- ]
165
- }
166
- EOB
167
- </string>
168
- <key>scriptargtype</key>
169
- <integer>0</integer>
170
- <key>scriptfile</key>
171
- <string></string>
172
- <key>subtext</key>
173
- <string>Display Pennyworth options.</string>
174
- <key>title</key>
175
- <string>Pennyworth</string>
176
- <key>type</key>
177
- <integer>0</integer>
178
- <key>withspace</key>
179
- <true/>
180
- </dict>
181
- <key>type</key>
182
- <string>alfred.workflow.input.scriptfilter</string>
183
- <key>uid</key>
184
- <string>F6F8148B-CEA3-47D4-BC24-142C40A03CBC</string>
185
- <key>version</key>
186
- <integer>3</integer>
187
- </dict>
188
- <dict>
189
- <key>config</key>
190
- <dict>
191
- <key>concurrently</key>
192
- <false/>
193
- <key>escaping</key>
194
- <integer>127</integer>
195
- <key>script</key>
196
- <string>export PATH="/usr/local/bin:$PATH"
197
- source "$HOME/.bashrc"
198
-
199
- eval {query}</string>
200
- <key>scriptargtype</key>
201
- <integer>0</integer>
202
- <key>scriptfile</key>
203
- <string></string>
204
- <key>type</key>
205
- <integer>0</integer>
206
- </dict>
207
- <key>type</key>
208
- <string>alfred.workflow.action.script</string>
209
- <key>uid</key>
210
- <string>3A7EDDC3-8686-4988-998C-9EA7A1B804D1</string>
211
- <key>version</key>
212
- <integer>2</integer>
213
- </dict>
214
- <dict>
215
- <key>config</key>
216
- <dict>
217
- <key>autopaste</key>
218
- <false/>
219
- <key>clipboardtext</key>
220
- <string>{query}</string>
221
- <key>transient</key>
222
- <false/>
223
- </dict>
224
- <key>type</key>
225
- <string>alfred.workflow.output.clipboard</string>
226
- <key>uid</key>
227
- <string>9F8D5496-FDF9-42A7-9247-60D15CCCE012</string>
228
- <key>version</key>
229
- <integer>3</integer>
230
- </dict>
231
- </array>
232
- <key>readme</key>
233
- <string>= Pennyworth
234
-
235
- Provides a collection of workflows for interacting with the Pennyworth CLI.</string>
236
- <key>uidata</key>
237
- <dict>
238
- <key>3A7EDDC3-8686-4988-998C-9EA7A1B804D1</key>
239
- <dict>
240
- <key>xpos</key>
241
- <integer>240</integer>
242
- <key>ypos</key>
243
- <integer>80</integer>
244
- </dict>
245
- <key>9F8D5496-FDF9-42A7-9247-60D15CCCE012</key>
246
- <dict>
247
- <key>xpos</key>
248
- <integer>440</integer>
249
- <key>ypos</key>
250
- <integer>140</integer>
251
- </dict>
252
- <key>ED21B4FA-CD4A-4F43-8F17-4E6C62C2F6F1</key>
253
- <dict>
254
- <key>xpos</key>
255
- <integer>440</integer>
256
- <key>ypos</key>
257
- <integer>20</integer>
258
- </dict>
259
- <key>F6F8148B-CEA3-47D4-BC24-142C40A03CBC</key>
260
- <dict>
261
- <key>xpos</key>
262
- <integer>40</integer>
263
- <key>ypos</key>
264
- <integer>80</integer>
265
- </dict>
266
- </dict>
267
- <key>version</key>
268
- <string>1.1.0</string>
269
- <key>webaddress</key>
270
- <string>https://www.alchemists.io</string>
271
- </dict>
272
- </plist>