ronin-core 0.1.0.beta1
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.
- checksums.yaml +7 -0
- data/.document +5 -0
- data/.github/workflows/ruby.yml +41 -0
- data/.gitignore +12 -0
- data/.rspec +1 -0
- data/.rubocop.yml +160 -0
- data/.ruby-version +1 -0
- data/.yardopts +1 -0
- data/COPYING.txt +165 -0
- data/ChangeLog.md +11 -0
- data/Gemfile +30 -0
- data/README.md +299 -0
- data/Rakefile +34 -0
- data/examples/ruby_shell.rb +11 -0
- data/gemspec.yml +28 -0
- data/lib/ronin/core/class_registry.rb +246 -0
- data/lib/ronin/core/cli/command.rb +87 -0
- data/lib/ronin/core/cli/command_shell/command.rb +110 -0
- data/lib/ronin/core/cli/command_shell.rb +345 -0
- data/lib/ronin/core/cli/generator/options/author.rb +106 -0
- data/lib/ronin/core/cli/generator/options/description.rb +54 -0
- data/lib/ronin/core/cli/generator/options/reference.rb +60 -0
- data/lib/ronin/core/cli/generator/options/summary.rb +54 -0
- data/lib/ronin/core/cli/generator.rb +238 -0
- data/lib/ronin/core/cli/logging.rb +59 -0
- data/lib/ronin/core/cli/options/param.rb +68 -0
- data/lib/ronin/core/cli/options/values/arches.rb +45 -0
- data/lib/ronin/core/cli/options/values/oses.rb +32 -0
- data/lib/ronin/core/cli/printing/arch.rb +71 -0
- data/lib/ronin/core/cli/printing/metadata.rb +113 -0
- data/lib/ronin/core/cli/printing/os.rb +54 -0
- data/lib/ronin/core/cli/printing/params.rb +69 -0
- data/lib/ronin/core/cli/ruby_shell.rb +131 -0
- data/lib/ronin/core/cli/shell.rb +186 -0
- data/lib/ronin/core/git.rb +73 -0
- data/lib/ronin/core/home.rb +86 -0
- data/lib/ronin/core/metadata/authors/author.rb +241 -0
- data/lib/ronin/core/metadata/authors.rb +120 -0
- data/lib/ronin/core/metadata/description.rb +100 -0
- data/lib/ronin/core/metadata/id.rb +88 -0
- data/lib/ronin/core/metadata/references.rb +87 -0
- data/lib/ronin/core/metadata/summary.rb +78 -0
- data/lib/ronin/core/metadata/version.rb +74 -0
- data/lib/ronin/core/params/exceptions.rb +38 -0
- data/lib/ronin/core/params/mixin.rb +317 -0
- data/lib/ronin/core/params/param.rb +137 -0
- data/lib/ronin/core/params/types/boolean.rb +64 -0
- data/lib/ronin/core/params/types/enum.rb +107 -0
- data/lib/ronin/core/params/types/float.rb +68 -0
- data/lib/ronin/core/params/types/integer.rb +100 -0
- data/lib/ronin/core/params/types/numeric.rb +106 -0
- data/lib/ronin/core/params/types/regexp.rb +67 -0
- data/lib/ronin/core/params/types/string.rb +118 -0
- data/lib/ronin/core/params/types/type.rb +54 -0
- data/lib/ronin/core/params/types/uri.rb +72 -0
- data/lib/ronin/core/params/types.rb +62 -0
- data/lib/ronin/core/params.rb +19 -0
- data/lib/ronin/core/version.rb +24 -0
- data/ronin-core.gemspec +59 -0
- data/spec/class_registry_spec.rb +224 -0
- data/spec/cli/command_shell/command_spec.rb +113 -0
- data/spec/cli/command_shell_spec.rb +1114 -0
- data/spec/cli/command_spec.rb +16 -0
- data/spec/cli/fixtures/irb_command +8 -0
- data/spec/cli/fixtures/template/dir/file1.txt +1 -0
- data/spec/cli/fixtures/template/dir/file2.txt +1 -0
- data/spec/cli/fixtures/template/file.erb +1 -0
- data/spec/cli/fixtures/template/file.txt +1 -0
- data/spec/cli/generator/options/author_spec.rb +121 -0
- data/spec/cli/generator/options/description_spec.rb +45 -0
- data/spec/cli/generator/options/reference_spec.rb +53 -0
- data/spec/cli/generator/options/summary_spec.rb +45 -0
- data/spec/cli/generator_spec.rb +244 -0
- data/spec/cli/logging_spec.rb +95 -0
- data/spec/cli/options/param_spec.rb +67 -0
- data/spec/cli/options/values/arches_spec.rb +62 -0
- data/spec/cli/printing/arch_spec.rb +130 -0
- data/spec/cli/printing/metadata_spec.rb +211 -0
- data/spec/cli/printing/os_spec.rb +64 -0
- data/spec/cli/printing/params_spec.rb +63 -0
- data/spec/cli/ruby_shell.rb +99 -0
- data/spec/cli/shell_spec.rb +211 -0
- data/spec/fixtures/example_class_registry/base_class.rb +9 -0
- data/spec/fixtures/example_class_registry/classes/loaded_class.rb +9 -0
- data/spec/fixtures/example_class_registry/classes/name_mismatch.rb +9 -0
- data/spec/fixtures/example_class_registry/classes/no_module.rb +4 -0
- data/spec/fixtures/example_class_registry.rb +8 -0
- data/spec/git_spec.rb +58 -0
- data/spec/home_spec.rb +64 -0
- data/spec/metadata/authors/author_spec.rb +335 -0
- data/spec/metadata/authors_spec.rb +126 -0
- data/spec/metadata/description_spec.rb +74 -0
- data/spec/metadata/id_spec.rb +92 -0
- data/spec/metadata/references_spec.rb +100 -0
- data/spec/metadata/summary_spec.rb +74 -0
- data/spec/metadata/version_spec.rb +72 -0
- data/spec/params/mixin_spec.rb +484 -0
- data/spec/params/param_spec.rb +164 -0
- data/spec/params/types/boolean_spec.rb +56 -0
- data/spec/params/types/enum_spec.rb +94 -0
- data/spec/params/types/float_spec.rb +107 -0
- data/spec/params/types/integer_spec.rb +155 -0
- data/spec/params/types/numeric_spec.rb +138 -0
- data/spec/params/types/regexp_spec.rb +64 -0
- data/spec/params/types/string_spec.rb +174 -0
- data/spec/params/types/type_spec.rb +14 -0
- data/spec/params/types/uri_spec.rb +62 -0
- data/spec/spec_helper.rb +11 -0
- metadata +252 -0
|
@@ -0,0 +1,241 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
#
|
|
3
|
+
# Copyright (c) 2021-2022 Hal Brodigan (postmodern.mod3 at gmail.com)
|
|
4
|
+
#
|
|
5
|
+
# ronin-core is free software: you can redistribute it and/or modify
|
|
6
|
+
# it under the terms of the GNU Lesser General Public License as published
|
|
7
|
+
# by the Free Software Foundation, either version 3 of the License, or
|
|
8
|
+
# (at your option) any later version.
|
|
9
|
+
#
|
|
10
|
+
# ronin-core is distributed in the hope that it will be useful,
|
|
11
|
+
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
12
|
+
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
13
|
+
# GNU Lesser General Public License for more details.
|
|
14
|
+
#
|
|
15
|
+
# You should have received a copy of the GNU Lesser General Public License
|
|
16
|
+
# along with ronin-core. If not, see <https://www.gnu.org/licenses/>.
|
|
17
|
+
#
|
|
18
|
+
|
|
19
|
+
module Ronin
|
|
20
|
+
module Core
|
|
21
|
+
module Metadata
|
|
22
|
+
module Authors
|
|
23
|
+
class Author
|
|
24
|
+
|
|
25
|
+
# The author's name.
|
|
26
|
+
#
|
|
27
|
+
# @return [String]
|
|
28
|
+
attr_reader :name
|
|
29
|
+
|
|
30
|
+
# The author's email.
|
|
31
|
+
#
|
|
32
|
+
# @return [String, nil]
|
|
33
|
+
attr_reader :email
|
|
34
|
+
|
|
35
|
+
# The author's PGP Key ID.
|
|
36
|
+
#
|
|
37
|
+
# @return [String, nil]
|
|
38
|
+
attr_reader :pgp
|
|
39
|
+
|
|
40
|
+
# The author's website
|
|
41
|
+
#
|
|
42
|
+
# @return [String, nil]
|
|
43
|
+
attr_reader :website
|
|
44
|
+
|
|
45
|
+
# The author's blog.
|
|
46
|
+
#
|
|
47
|
+
# @return [String, nil]
|
|
48
|
+
attr_reader :blog
|
|
49
|
+
|
|
50
|
+
# The author's GitHub user name.
|
|
51
|
+
#
|
|
52
|
+
# @return [String, nil]
|
|
53
|
+
attr_reader :github
|
|
54
|
+
|
|
55
|
+
# The author's GitLab user name.
|
|
56
|
+
#
|
|
57
|
+
# @return [String, nil]
|
|
58
|
+
attr_reader :gitlab
|
|
59
|
+
|
|
60
|
+
# The author's Twitter handle.
|
|
61
|
+
#
|
|
62
|
+
# @return [String, nil]
|
|
63
|
+
attr_reader :twitter
|
|
64
|
+
|
|
65
|
+
# The author's Discord handle.
|
|
66
|
+
#
|
|
67
|
+
# @return [String, nil]
|
|
68
|
+
attr_reader :discord
|
|
69
|
+
|
|
70
|
+
#
|
|
71
|
+
# Initializes the author.
|
|
72
|
+
#
|
|
73
|
+
# @param [String] name
|
|
74
|
+
# The author's name.
|
|
75
|
+
#
|
|
76
|
+
# @param [String, nil] email
|
|
77
|
+
# The author's email.
|
|
78
|
+
#
|
|
79
|
+
# @param [String, nil] pgp
|
|
80
|
+
# The author's PGP Key ID.
|
|
81
|
+
#
|
|
82
|
+
# @param [String, nil] website
|
|
83
|
+
# The author's website.
|
|
84
|
+
#
|
|
85
|
+
# @param [String, nil] blog
|
|
86
|
+
# The author's blog.
|
|
87
|
+
#
|
|
88
|
+
# @param [String, nil] github
|
|
89
|
+
# The author's GitHub user name.
|
|
90
|
+
#
|
|
91
|
+
# @param [String, nil] gitlab
|
|
92
|
+
# The author's GitLab user name.
|
|
93
|
+
#
|
|
94
|
+
# @param [String, nil] twitter
|
|
95
|
+
# The author's Twitter handle.
|
|
96
|
+
#
|
|
97
|
+
# @param [String, nil] discord
|
|
98
|
+
# The author's Discord handle.
|
|
99
|
+
#
|
|
100
|
+
def initialize(name, email: nil,
|
|
101
|
+
pgp: nil,
|
|
102
|
+
website: nil,
|
|
103
|
+
blog: nil,
|
|
104
|
+
github: nil,
|
|
105
|
+
gitlab: nil,
|
|
106
|
+
twitter: nil,
|
|
107
|
+
discord: nil)
|
|
108
|
+
@name = name
|
|
109
|
+
@email = email
|
|
110
|
+
@pgp = pgp
|
|
111
|
+
|
|
112
|
+
@website = website
|
|
113
|
+
@blog = blog
|
|
114
|
+
@github = github
|
|
115
|
+
@gitlab = gitlab
|
|
116
|
+
@twitter = twitter
|
|
117
|
+
@discord = discord
|
|
118
|
+
end
|
|
119
|
+
|
|
120
|
+
#
|
|
121
|
+
# Determines if the author has an {#email} set.
|
|
122
|
+
#
|
|
123
|
+
# @return [Boolean]
|
|
124
|
+
#
|
|
125
|
+
def email?
|
|
126
|
+
@email != nil
|
|
127
|
+
end
|
|
128
|
+
|
|
129
|
+
#
|
|
130
|
+
# Determines if the author has a {#pgp} Key ID set.
|
|
131
|
+
#
|
|
132
|
+
# @return [Boolean]
|
|
133
|
+
#
|
|
134
|
+
def pgp?
|
|
135
|
+
@pgp != nil
|
|
136
|
+
end
|
|
137
|
+
|
|
138
|
+
#
|
|
139
|
+
# Determines if the author has a {#website} set.
|
|
140
|
+
#
|
|
141
|
+
# @return [Boolean]
|
|
142
|
+
#
|
|
143
|
+
def website?
|
|
144
|
+
@website != nil
|
|
145
|
+
end
|
|
146
|
+
|
|
147
|
+
#
|
|
148
|
+
# Determines if the author has a {#blog} set.
|
|
149
|
+
#
|
|
150
|
+
# @return [Boolean]
|
|
151
|
+
#
|
|
152
|
+
def blog?
|
|
153
|
+
@blog != nil
|
|
154
|
+
end
|
|
155
|
+
|
|
156
|
+
#
|
|
157
|
+
# Determines if the author has a {#github} user name set.
|
|
158
|
+
#
|
|
159
|
+
# @return [Boolean]
|
|
160
|
+
#
|
|
161
|
+
def github?
|
|
162
|
+
@github != nil
|
|
163
|
+
end
|
|
164
|
+
|
|
165
|
+
#
|
|
166
|
+
# Determines if the author has a {#gitlab} user name set.
|
|
167
|
+
#
|
|
168
|
+
# @return [Boolean]
|
|
169
|
+
#
|
|
170
|
+
def gitlab?
|
|
171
|
+
@gitlab != nil
|
|
172
|
+
end
|
|
173
|
+
|
|
174
|
+
#
|
|
175
|
+
# Determines if the author has a {#twitter} handle set.
|
|
176
|
+
#
|
|
177
|
+
# @return [Boolean]
|
|
178
|
+
#
|
|
179
|
+
def twitter?
|
|
180
|
+
@twitter != nil
|
|
181
|
+
end
|
|
182
|
+
|
|
183
|
+
#
|
|
184
|
+
# Determines if the author has a {#discord} handle set.
|
|
185
|
+
#
|
|
186
|
+
# @return [Boolean]
|
|
187
|
+
#
|
|
188
|
+
def discord?
|
|
189
|
+
@discord != nil
|
|
190
|
+
end
|
|
191
|
+
|
|
192
|
+
#
|
|
193
|
+
# Returns the URL to the author's GitHub profile.
|
|
194
|
+
#
|
|
195
|
+
# @return [String, nil]
|
|
196
|
+
# Returns the URL to the author's GitHub profile, or `nil`
|
|
197
|
+
# if no {#github} user name has been set.
|
|
198
|
+
#
|
|
199
|
+
def github_url
|
|
200
|
+
"https://github.com/#{@github.sub(/\A@/,'')}" if @github
|
|
201
|
+
end
|
|
202
|
+
|
|
203
|
+
#
|
|
204
|
+
# Returns the URL to the author's GitLab profile.
|
|
205
|
+
#
|
|
206
|
+
# @return [String, nil]
|
|
207
|
+
# Returns the URL to the author's GitLab profile, or `nil`
|
|
208
|
+
# if no {#gitlab} user name has been set.
|
|
209
|
+
#
|
|
210
|
+
def gitlab_url
|
|
211
|
+
"https://gitlab.com/#{@gitlab.sub(/\A@/,'')}" if @gitlab
|
|
212
|
+
end
|
|
213
|
+
|
|
214
|
+
#
|
|
215
|
+
# Returns the URL to the author's Twitter profile.
|
|
216
|
+
#
|
|
217
|
+
# @return [String, nil]
|
|
218
|
+
# Returns the URL to the author's Twitter profile, or `nil`
|
|
219
|
+
# if no {#twitter} user name has been set.
|
|
220
|
+
#
|
|
221
|
+
def twitter_url
|
|
222
|
+
"https://twitter.com/#{@twitter.sub(/\A@/,'')}" if @twitter
|
|
223
|
+
end
|
|
224
|
+
|
|
225
|
+
#
|
|
226
|
+
# Converts the author to a String.
|
|
227
|
+
#
|
|
228
|
+
# @return [String]
|
|
229
|
+
# The author's name and/or email.
|
|
230
|
+
#
|
|
231
|
+
def to_s
|
|
232
|
+
if @email then "#{@name} <#{@email}>"
|
|
233
|
+
else @name
|
|
234
|
+
end
|
|
235
|
+
end
|
|
236
|
+
|
|
237
|
+
end
|
|
238
|
+
end
|
|
239
|
+
end
|
|
240
|
+
end
|
|
241
|
+
end
|
|
@@ -0,0 +1,120 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
#
|
|
3
|
+
# Copyright (c) 2021-2022 Hal Brodigan (postmodern.mod3 at gmail.com)
|
|
4
|
+
#
|
|
5
|
+
# ronin-core is free software: you can redistribute it and/or modify
|
|
6
|
+
# it under the terms of the GNU Lesser General Public License as published
|
|
7
|
+
# by the Free Software Foundation, either version 3 of the License, or
|
|
8
|
+
# (at your option) any later version.
|
|
9
|
+
#
|
|
10
|
+
# ronin-core is distributed in the hope that it will be useful,
|
|
11
|
+
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
12
|
+
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
13
|
+
# GNU Lesser General Public License for more details.
|
|
14
|
+
#
|
|
15
|
+
# You should have received a copy of the GNU Lesser General Public License
|
|
16
|
+
# along with ronin-core. If not, see <https://www.gnu.org/licenses/>.
|
|
17
|
+
#
|
|
18
|
+
|
|
19
|
+
require 'ronin/core/metadata/authors/author'
|
|
20
|
+
|
|
21
|
+
module Ronin
|
|
22
|
+
module Core
|
|
23
|
+
module Metadata
|
|
24
|
+
#
|
|
25
|
+
# Adds {Authors::ClassMethods#author authors} metadata attribute to a
|
|
26
|
+
# class.
|
|
27
|
+
#
|
|
28
|
+
# ### Example
|
|
29
|
+
#
|
|
30
|
+
# class MyModule
|
|
31
|
+
#
|
|
32
|
+
# include Ronin::Core::Metadata::Authors
|
|
33
|
+
#
|
|
34
|
+
# author 'John Doe'
|
|
35
|
+
# author 'John Smith', email: 'john.smith@example.com'
|
|
36
|
+
#
|
|
37
|
+
# end
|
|
38
|
+
#
|
|
39
|
+
# puts MyModule.authors
|
|
40
|
+
# # John Doe
|
|
41
|
+
# # John Smith <john.smith@example.com>
|
|
42
|
+
#
|
|
43
|
+
module Authors
|
|
44
|
+
#
|
|
45
|
+
# Adds {ClassMethods} to the class.
|
|
46
|
+
#
|
|
47
|
+
# @param [Class] base
|
|
48
|
+
# The base class which is including {Authors}.
|
|
49
|
+
#
|
|
50
|
+
# @api private
|
|
51
|
+
#
|
|
52
|
+
def self.included(base)
|
|
53
|
+
base.extend ClassMethods
|
|
54
|
+
end
|
|
55
|
+
|
|
56
|
+
module ClassMethods
|
|
57
|
+
#
|
|
58
|
+
# The authors associated with the class.
|
|
59
|
+
#
|
|
60
|
+
# @return [Array<Authors::Author>]
|
|
61
|
+
#
|
|
62
|
+
# @api semipublic
|
|
63
|
+
#
|
|
64
|
+
def authors
|
|
65
|
+
@authors ||= if superclass.kind_of?(ClassMethods)
|
|
66
|
+
superclass.authors.dup
|
|
67
|
+
else
|
|
68
|
+
[]
|
|
69
|
+
end
|
|
70
|
+
end
|
|
71
|
+
|
|
72
|
+
#
|
|
73
|
+
# Adds an author.
|
|
74
|
+
#
|
|
75
|
+
# @param [String, nil] name
|
|
76
|
+
# The new author name to add.
|
|
77
|
+
#
|
|
78
|
+
# @param [Hash{Symbol => Object}] kwargs
|
|
79
|
+
# Additional keyword arguments for {Author#initialize}.
|
|
80
|
+
#
|
|
81
|
+
# @option kwargs [String, nil] :email
|
|
82
|
+
# The author's email.
|
|
83
|
+
#
|
|
84
|
+
# @option kwargs [String, nil] :pgp
|
|
85
|
+
# The author's PGP Key ID.
|
|
86
|
+
#
|
|
87
|
+
# @option kwargs [String, nil] :website
|
|
88
|
+
# The author's website.
|
|
89
|
+
#
|
|
90
|
+
# @option kwargs [String, nil] :blog
|
|
91
|
+
# The author's blog.
|
|
92
|
+
#
|
|
93
|
+
# @option kwargs [String, nil] :github
|
|
94
|
+
# The author's GitHub user name.
|
|
95
|
+
#
|
|
96
|
+
# @option kwargs [String, nil] :gitlab
|
|
97
|
+
# The author's GitLab user name.
|
|
98
|
+
#
|
|
99
|
+
# @option kwargs [String, nil] :twitter
|
|
100
|
+
# The author's Twitter handle.
|
|
101
|
+
#
|
|
102
|
+
# @option kwargs [String, nil] :discord
|
|
103
|
+
# The author's Discord handle.
|
|
104
|
+
#
|
|
105
|
+
# @example Adds an author name:
|
|
106
|
+
# author 'John Smith'
|
|
107
|
+
#
|
|
108
|
+
# @example Adds an author name and email:
|
|
109
|
+
# author 'John Smith', email: 'john.smith@example.com'
|
|
110
|
+
#
|
|
111
|
+
# @api public
|
|
112
|
+
#
|
|
113
|
+
def author(name,**kwargs)
|
|
114
|
+
authors << Ronin::Core::Metadata::Authors::Author.new(name,**kwargs)
|
|
115
|
+
end
|
|
116
|
+
end
|
|
117
|
+
end
|
|
118
|
+
end
|
|
119
|
+
end
|
|
120
|
+
end
|
|
@@ -0,0 +1,100 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
#
|
|
3
|
+
# Copyright (c) 2021-2022 Hal Brodigan (postmodern.mod3 at gmail.com)
|
|
4
|
+
#
|
|
5
|
+
# ronin-core is free software: you can redistribute it and/or modify
|
|
6
|
+
# it under the terms of the GNU Lesser General Public License as published
|
|
7
|
+
# by the Free Software Foundation, either version 3 of the License, or
|
|
8
|
+
# (at your option) any later version.
|
|
9
|
+
#
|
|
10
|
+
# ronin-core is distributed in the hope that it will be useful,
|
|
11
|
+
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
12
|
+
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
13
|
+
# GNU Lesser General Public License for more details.
|
|
14
|
+
#
|
|
15
|
+
# You should have received a copy of the GNU Lesser General Public License
|
|
16
|
+
# along with ronin-core. If not, see <https://www.gnu.org/licenses/>.
|
|
17
|
+
#
|
|
18
|
+
|
|
19
|
+
module Ronin
|
|
20
|
+
module Core
|
|
21
|
+
module Metadata
|
|
22
|
+
#
|
|
23
|
+
# Adds a {Description::ClassMethods#description description} metadata
|
|
24
|
+
# attribute to a class.
|
|
25
|
+
#
|
|
26
|
+
# ### Example
|
|
27
|
+
#
|
|
28
|
+
# class MyModule
|
|
29
|
+
#
|
|
30
|
+
# include Ronin::Core::Metadata::Description
|
|
31
|
+
#
|
|
32
|
+
# description <<~DESC
|
|
33
|
+
# Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do
|
|
34
|
+
# eiusmod tempor incididunt ut labore et dolore magna aliqua.
|
|
35
|
+
#
|
|
36
|
+
# Ut enim ad minim veniam, quis nostrud exercitation ullamco
|
|
37
|
+
# laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure
|
|
38
|
+
# dolor in reprehenderit in voluptate velit esse cillum dolore eu
|
|
39
|
+
#
|
|
40
|
+
# fugiat nulla pariatur. Excepteur sint occaecat cupidatat non
|
|
41
|
+
# proident, sunt in culpa qui officia deserunt mollit anim id est
|
|
42
|
+
# laborum.
|
|
43
|
+
# DESC
|
|
44
|
+
#
|
|
45
|
+
# end
|
|
46
|
+
#
|
|
47
|
+
module Description
|
|
48
|
+
#
|
|
49
|
+
# Adds {ClassMethods} to the class.
|
|
50
|
+
#
|
|
51
|
+
# @param [Class] base
|
|
52
|
+
# The base class which is including {Description}.
|
|
53
|
+
#
|
|
54
|
+
# @api private
|
|
55
|
+
#
|
|
56
|
+
def self.included(base)
|
|
57
|
+
base.extend ClassMethods
|
|
58
|
+
end
|
|
59
|
+
|
|
60
|
+
module ClassMethods
|
|
61
|
+
#
|
|
62
|
+
# Gets or sets the description.
|
|
63
|
+
#
|
|
64
|
+
# @param [String, nil] new_description
|
|
65
|
+
# The optional new description text to set.
|
|
66
|
+
#
|
|
67
|
+
# @return [String, nil]
|
|
68
|
+
# The previously set description text.
|
|
69
|
+
#
|
|
70
|
+
# @example Setting the description:
|
|
71
|
+
# description <<~DESC
|
|
72
|
+
# Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do
|
|
73
|
+
# eiusmod tempor incididunt ut labore et dolore magna aliqua.
|
|
74
|
+
#
|
|
75
|
+
# Ut enim ad minim veniam, quis nostrud exercitation ullamco
|
|
76
|
+
# laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure
|
|
77
|
+
# dolor in reprehenderit in voluptate velit esse cillum dolore eu
|
|
78
|
+
#
|
|
79
|
+
# fugiat nulla pariatur. Excepteur sint occaecat cupidatat non
|
|
80
|
+
# proident, sunt in culpa qui officia deserunt mollit anim id est
|
|
81
|
+
# laborum.
|
|
82
|
+
# DESC
|
|
83
|
+
#
|
|
84
|
+
# @example Getting the description:
|
|
85
|
+
# MyModule.description
|
|
86
|
+
#
|
|
87
|
+
def description(new_description=nil)
|
|
88
|
+
if new_description
|
|
89
|
+
@description = new_description
|
|
90
|
+
else
|
|
91
|
+
@description || if superclass.kind_of?(ClassMethods)
|
|
92
|
+
superclass.description
|
|
93
|
+
end
|
|
94
|
+
end
|
|
95
|
+
end
|
|
96
|
+
end
|
|
97
|
+
end
|
|
98
|
+
end
|
|
99
|
+
end
|
|
100
|
+
end
|
|
@@ -0,0 +1,88 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
#
|
|
3
|
+
# Copyright (c) 2021-2022 Hal Brodigan (postmodern.mod3 at gmail.com)
|
|
4
|
+
#
|
|
5
|
+
# ronin-core is free software: you can redistribute it and/or modify
|
|
6
|
+
# it under the terms of the GNU Lesser General Public License as published
|
|
7
|
+
# by the Free Software Foundation, either version 3 of the License, or
|
|
8
|
+
# (at your option) any later version.
|
|
9
|
+
#
|
|
10
|
+
# ronin-core is distributed in the hope that it will be useful,
|
|
11
|
+
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
12
|
+
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
13
|
+
# GNU Lesser General Public License for more details.
|
|
14
|
+
#
|
|
15
|
+
# You should have received a copy of the GNU Lesser General Public License
|
|
16
|
+
# along with ronin-core. If not, see <https://www.gnu.org/licenses/>.
|
|
17
|
+
#
|
|
18
|
+
|
|
19
|
+
module Ronin
|
|
20
|
+
module Core
|
|
21
|
+
module Metadata
|
|
22
|
+
#
|
|
23
|
+
# Adds a {ID::ClassMethods#id id} metadata attribute to a class.
|
|
24
|
+
#
|
|
25
|
+
# ### Example
|
|
26
|
+
#
|
|
27
|
+
# class MyClass
|
|
28
|
+
#
|
|
29
|
+
# include Ronin::Core::Metadata::ID
|
|
30
|
+
#
|
|
31
|
+
# id 'my_class'
|
|
32
|
+
#
|
|
33
|
+
# end
|
|
34
|
+
#
|
|
35
|
+
module ID
|
|
36
|
+
#
|
|
37
|
+
# Adds {ClassMethods} to the class.
|
|
38
|
+
#
|
|
39
|
+
# @param [Class] base
|
|
40
|
+
# The base class which is including {ID}.
|
|
41
|
+
#
|
|
42
|
+
# @private
|
|
43
|
+
#
|
|
44
|
+
def self.included(base)
|
|
45
|
+
base.extend ClassMethods
|
|
46
|
+
end
|
|
47
|
+
|
|
48
|
+
module ClassMethods
|
|
49
|
+
#
|
|
50
|
+
# Gets or sets the class `id`.
|
|
51
|
+
#
|
|
52
|
+
# @param [String, nil] new_id
|
|
53
|
+
# The optional new class `id` to set.
|
|
54
|
+
#
|
|
55
|
+
# @return [String, nil]
|
|
56
|
+
# The previously set class `id`.
|
|
57
|
+
#
|
|
58
|
+
# @example Setting the class `id`:
|
|
59
|
+
# class MyClass
|
|
60
|
+
# include Ronin::Core::Metadata::ID
|
|
61
|
+
# id 'my_class'
|
|
62
|
+
# end
|
|
63
|
+
#
|
|
64
|
+
# @example Getting the class `id`:
|
|
65
|
+
# MyClass.id
|
|
66
|
+
# # => "my_class"
|
|
67
|
+
#
|
|
68
|
+
def id(new_id=nil)
|
|
69
|
+
if new_id then @id = new_id
|
|
70
|
+
else @id
|
|
71
|
+
end
|
|
72
|
+
end
|
|
73
|
+
end
|
|
74
|
+
|
|
75
|
+
#
|
|
76
|
+
# The {ClassMethods#id id} of the class.
|
|
77
|
+
#
|
|
78
|
+
# @return [String, nil]
|
|
79
|
+
#
|
|
80
|
+
# @see ClassMethods#id
|
|
81
|
+
#
|
|
82
|
+
def class_id
|
|
83
|
+
self.class.id
|
|
84
|
+
end
|
|
85
|
+
end
|
|
86
|
+
end
|
|
87
|
+
end
|
|
88
|
+
end
|
|
@@ -0,0 +1,87 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
#
|
|
3
|
+
# Copyright (c) 2021-2022 Hal Brodigan (postmodern.mod3 at gmail.com)
|
|
4
|
+
#
|
|
5
|
+
# ronin-core is free software: you can redistribute it and/or modify
|
|
6
|
+
# it under the terms of the GNU Lesser General Public License as published
|
|
7
|
+
# by the Free Software Foundation, either version 3 of the License, or
|
|
8
|
+
# (at your option) any later version.
|
|
9
|
+
#
|
|
10
|
+
# ronin-core is distributed in the hope that it will be useful,
|
|
11
|
+
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
12
|
+
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
13
|
+
# GNU Lesser General Public License for more details.
|
|
14
|
+
#
|
|
15
|
+
# You should have received a copy of the GNU Lesser General Public License
|
|
16
|
+
# along with ronin-core. If not, see <https://www.gnu.org/licenses/>.
|
|
17
|
+
#
|
|
18
|
+
|
|
19
|
+
module Ronin
|
|
20
|
+
module Core
|
|
21
|
+
module Metadata
|
|
22
|
+
#
|
|
23
|
+
# Adds a {References::ClassMethods#references references} metadata
|
|
24
|
+
# attribute to a class.
|
|
25
|
+
#
|
|
26
|
+
# ### Example
|
|
27
|
+
#
|
|
28
|
+
# class MyModule
|
|
29
|
+
#
|
|
30
|
+
# include Ronin::Core::Metadata::References
|
|
31
|
+
#
|
|
32
|
+
# references [
|
|
33
|
+
# "https://...",
|
|
34
|
+
# ...
|
|
35
|
+
# ]
|
|
36
|
+
#
|
|
37
|
+
# end
|
|
38
|
+
#
|
|
39
|
+
module References
|
|
40
|
+
#
|
|
41
|
+
# Adds {ClassMethods} to the class.
|
|
42
|
+
#
|
|
43
|
+
# @param [Class] base
|
|
44
|
+
# The base class which is including {References}.
|
|
45
|
+
#
|
|
46
|
+
# @api private
|
|
47
|
+
#
|
|
48
|
+
def self.included(base)
|
|
49
|
+
base.extend ClassMethods
|
|
50
|
+
end
|
|
51
|
+
|
|
52
|
+
module ClassMethods
|
|
53
|
+
#
|
|
54
|
+
# Gets or sets the reference links.
|
|
55
|
+
#
|
|
56
|
+
# @param [Array<String>, nil] new_references
|
|
57
|
+
# The optional new reference links to set.
|
|
58
|
+
#
|
|
59
|
+
# @return [Array<String>]
|
|
60
|
+
# The previously set reference links.
|
|
61
|
+
#
|
|
62
|
+
# @example Set the references:
|
|
63
|
+
# references [
|
|
64
|
+
# "https://...",
|
|
65
|
+
# ...
|
|
66
|
+
# ]
|
|
67
|
+
#
|
|
68
|
+
# @example Get the reference links:
|
|
69
|
+
# MyModule.references
|
|
70
|
+
# # => ["https://...", ...]
|
|
71
|
+
#
|
|
72
|
+
def references(new_references=nil)
|
|
73
|
+
if new_references
|
|
74
|
+
@references = references() + new_references
|
|
75
|
+
else
|
|
76
|
+
@references || if superclass.kind_of?(ClassMethods)
|
|
77
|
+
superclass.references
|
|
78
|
+
else
|
|
79
|
+
[]
|
|
80
|
+
end
|
|
81
|
+
end
|
|
82
|
+
end
|
|
83
|
+
end
|
|
84
|
+
end
|
|
85
|
+
end
|
|
86
|
+
end
|
|
87
|
+
end
|
|
@@ -0,0 +1,78 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
#
|
|
3
|
+
# Copyright (c) 2021-2022 Hal Brodigan (postmodern.mod3 at gmail.com)
|
|
4
|
+
#
|
|
5
|
+
# ronin-core is free software: you can redistribute it and/or modify
|
|
6
|
+
# it under the terms of the GNU Lesser General Public License as published
|
|
7
|
+
# by the Free Software Foundation, either version 3 of the License, or
|
|
8
|
+
# (at your option) any later version.
|
|
9
|
+
#
|
|
10
|
+
# ronin-core is distributed in the hope that it will be useful,
|
|
11
|
+
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
12
|
+
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
13
|
+
# GNU Lesser General Public License for more details.
|
|
14
|
+
#
|
|
15
|
+
# You should have received a copy of the GNU Lesser General Public License
|
|
16
|
+
# along with ronin-core. If not, see <https://www.gnu.org/licenses/>.
|
|
17
|
+
#
|
|
18
|
+
|
|
19
|
+
module Ronin
|
|
20
|
+
module Core
|
|
21
|
+
module Metadata
|
|
22
|
+
#
|
|
23
|
+
# Adds a {Summary::ClassMethods#summary summary} metadata
|
|
24
|
+
# attribute to a class.
|
|
25
|
+
#
|
|
26
|
+
# ### Example
|
|
27
|
+
#
|
|
28
|
+
# class MyModule
|
|
29
|
+
#
|
|
30
|
+
# include Ronin::Core::Metadata::Summary
|
|
31
|
+
#
|
|
32
|
+
# summary "Lorem ipsum dolor sit amet, consectetur adipiscing elit"
|
|
33
|
+
#
|
|
34
|
+
# end
|
|
35
|
+
#
|
|
36
|
+
module Summary
|
|
37
|
+
#
|
|
38
|
+
# Adds {ClassMethods} to the class.
|
|
39
|
+
#
|
|
40
|
+
# @param [Class] base
|
|
41
|
+
# The base class which is including {Summary}.
|
|
42
|
+
#
|
|
43
|
+
# @api private
|
|
44
|
+
#
|
|
45
|
+
def self.included(base)
|
|
46
|
+
base.extend ClassMethods
|
|
47
|
+
end
|
|
48
|
+
|
|
49
|
+
module ClassMethods
|
|
50
|
+
#
|
|
51
|
+
# Gets or sets the summary.
|
|
52
|
+
#
|
|
53
|
+
# @param [String, nil] new_summary
|
|
54
|
+
# The optional new summary text to set.
|
|
55
|
+
#
|
|
56
|
+
# @return [String, nil]
|
|
57
|
+
# The previously set summary text.
|
|
58
|
+
#
|
|
59
|
+
# @example Setting the summary:
|
|
60
|
+
# summary "Lorem ipsum dolor sit amet, consectetur adipiscing elit"
|
|
61
|
+
#
|
|
62
|
+
# @example Getting the summary:
|
|
63
|
+
# MyModule.summary
|
|
64
|
+
#
|
|
65
|
+
def summary(new_summary=nil)
|
|
66
|
+
if new_summary
|
|
67
|
+
@summary = new_summary
|
|
68
|
+
else
|
|
69
|
+
@summary || if superclass.kind_of?(ClassMethods)
|
|
70
|
+
superclass.summary
|
|
71
|
+
end
|
|
72
|
+
end
|
|
73
|
+
end
|
|
74
|
+
end
|
|
75
|
+
end
|
|
76
|
+
end
|
|
77
|
+
end
|
|
78
|
+
end
|