splunk-sdk-ruby 0.1.0
Sign up to get free protection for your applications and to get access to all the features.
- data/CHANGELOG.md +160 -0
- data/Gemfile +8 -0
- data/LICENSE +177 -0
- data/README.md +310 -0
- data/Rakefile +40 -0
- data/examples/1_connect.rb +51 -0
- data/examples/2_manage.rb +103 -0
- data/examples/3_blocking_searches.rb +82 -0
- data/examples/4_asynchronous_searches.rb +79 -0
- data/examples/5_stream_data_to_splunk.rb +79 -0
- data/lib/splunk-sdk-ruby.rb +47 -0
- data/lib/splunk-sdk-ruby/ambiguous_entity_reference.rb +28 -0
- data/lib/splunk-sdk-ruby/atomfeed.rb +323 -0
- data/lib/splunk-sdk-ruby/collection.rb +417 -0
- data/lib/splunk-sdk-ruby/collection/apps.rb +35 -0
- data/lib/splunk-sdk-ruby/collection/case_insensitive_collection.rb +58 -0
- data/lib/splunk-sdk-ruby/collection/configuration_file.rb +50 -0
- data/lib/splunk-sdk-ruby/collection/configurations.rb +80 -0
- data/lib/splunk-sdk-ruby/collection/jobs.rb +136 -0
- data/lib/splunk-sdk-ruby/collection/messages.rb +51 -0
- data/lib/splunk-sdk-ruby/context.rb +522 -0
- data/lib/splunk-sdk-ruby/entity.rb +260 -0
- data/lib/splunk-sdk-ruby/entity/index.rb +191 -0
- data/lib/splunk-sdk-ruby/entity/job.rb +339 -0
- data/lib/splunk-sdk-ruby/entity/message.rb +36 -0
- data/lib/splunk-sdk-ruby/entity/saved_search.rb +71 -0
- data/lib/splunk-sdk-ruby/entity/stanza.rb +45 -0
- data/lib/splunk-sdk-ruby/entity_not_ready.rb +26 -0
- data/lib/splunk-sdk-ruby/illegal_operation.rb +27 -0
- data/lib/splunk-sdk-ruby/namespace.rb +239 -0
- data/lib/splunk-sdk-ruby/resultsreader.rb +716 -0
- data/lib/splunk-sdk-ruby/service.rb +339 -0
- data/lib/splunk-sdk-ruby/splunk_http_error.rb +49 -0
- data/lib/splunk-sdk-ruby/synonyms.rb +50 -0
- data/lib/splunk-sdk-ruby/version.rb +27 -0
- data/lib/splunk-sdk-ruby/xml_shim.rb +117 -0
- data/splunk-sdk-ruby.gemspec +27 -0
- data/test/atom_test_data.rb +472 -0
- data/test/data/atom/atom_feed_with_message.xml +19 -0
- data/test/data/atom/atom_with_feed.xml +99 -0
- data/test/data/atom/atom_with_several_entries.xml +101 -0
- data/test/data/atom/atom_with_simple_entries.xml +30 -0
- data/test/data/atom/atom_without_feed.xml +248 -0
- data/test/data/export/4.2.5/export_results.xml +88 -0
- data/test/data/export/4.3.5/export_results.xml +87 -0
- data/test/data/export/5.0.1/export_results.xml +78 -0
- data/test/data/export/5.0.1/nonreporting.xml +232 -0
- data/test/data/results/4.2.5/results-empty.xml +0 -0
- data/test/data/results/4.2.5/results-preview.xml +255 -0
- data/test/data/results/4.2.5/results.xml +336 -0
- data/test/data/results/4.3.5/results-empty.xml +0 -0
- data/test/data/results/4.3.5/results-preview.xml +1057 -0
- data/test/data/results/4.3.5/results.xml +626 -0
- data/test/data/results/5.0.2/results-empty.xml +1 -0
- data/test/data/results/5.0.2/results-empty_preview.xml +1 -0
- data/test/data/results/5.0.2/results-preview.xml +448 -0
- data/test/data/results/5.0.2/results.xml +501 -0
- data/test/export_test_data.json +360 -0
- data/test/resultsreader_test_data.json +1119 -0
- data/test/services.server.info.xml +43 -0
- data/test/services.xml +111 -0
- data/test/test_atomfeed.rb +71 -0
- data/test/test_collection.rb +278 -0
- data/test/test_configuration_file.rb +124 -0
- data/test/test_context.rb +119 -0
- data/test/test_entity.rb +95 -0
- data/test/test_helper.rb +250 -0
- data/test/test_http_error.rb +52 -0
- data/test/test_index.rb +91 -0
- data/test/test_jobs.rb +319 -0
- data/test/test_messages.rb +17 -0
- data/test/test_namespace.rb +188 -0
- data/test/test_restarts.rb +49 -0
- data/test/test_resultsreader.rb +106 -0
- data/test/test_roles.rb +41 -0
- data/test/test_saved_searches.rb +119 -0
- data/test/test_service.rb +65 -0
- data/test/test_users.rb +33 -0
- data/test/test_xml_shim.rb +28 -0
- data/test/testfile.txt +1 -0
- metadata +200 -0
@@ -0,0 +1,339 @@
|
|
1
|
+
#--
|
2
|
+
# Copyright 2011-2013 Splunk, Inc.
|
3
|
+
#
|
4
|
+
# Licensed under the Apache License, Version 2.0 (the "License"): you may
|
5
|
+
# not use this file except in compliance with the License. You may obtain
|
6
|
+
# a copy of the License at
|
7
|
+
#
|
8
|
+
# http://www.apache.org/licenses/LICENSE-2.0
|
9
|
+
#
|
10
|
+
# Unless required by applicable law or agreed to in writing, software
|
11
|
+
# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
|
12
|
+
# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
|
13
|
+
# License for the specific language governing permissions and limitations
|
14
|
+
# under the License.
|
15
|
+
#++
|
16
|
+
|
17
|
+
require_relative 'atomfeed'
|
18
|
+
require_relative 'collection'
|
19
|
+
require_relative 'collection/apps'
|
20
|
+
require_relative 'collection/configurations'
|
21
|
+
require_relative 'collection/jobs'
|
22
|
+
require_relative 'collection/messages'
|
23
|
+
require_relative 'collection/case_insensitive_collection'
|
24
|
+
require_relative 'context'
|
25
|
+
require_relative 'entity'
|
26
|
+
require_relative 'entity/index'
|
27
|
+
require_relative 'entity/job'
|
28
|
+
require_relative 'entity/message'
|
29
|
+
require_relative 'entity/saved_search'
|
30
|
+
require_relative 'entity/stanza'
|
31
|
+
|
32
|
+
##
|
33
|
+
# This module provides the +Service+ class, which encapsulates the interaction
|
34
|
+
# with Splunk.
|
35
|
+
#
|
36
|
+
|
37
|
+
module Splunk
|
38
|
+
# The paths used by service.
|
39
|
+
PATH_APPS_LOCAL = ["apps", "local"]
|
40
|
+
PATH_CAPABILITIES = ["authorization", "capabilities"]
|
41
|
+
PATH_LOGGER = ["server","logger"]
|
42
|
+
PATH_ROLES = ["authentication", "roles"]
|
43
|
+
PATH_USERS = ['authentication','users']
|
44
|
+
PATH_MESSAGES = ['messages']
|
45
|
+
PATH_INFO = ["server", "info"]
|
46
|
+
PATH_SETTINGS = ["server", "settings"]
|
47
|
+
PATH_INDEXES = ["data","indexes"]
|
48
|
+
PATH_CONFS = ["properties"]
|
49
|
+
PATH_CONF = ["configs"]
|
50
|
+
PATH_SAVED_SEARCHES = ["saved", "searches"]
|
51
|
+
PATH_STANZA = ["configs","conf-%s","%s"]
|
52
|
+
PATH_JOBS = ["search", "jobs"]
|
53
|
+
PATH_EXPORT = ["search", "jobs", "export"]
|
54
|
+
|
55
|
+
##
|
56
|
+
# Create a logged in reference to a Splunk instance.
|
57
|
+
#
|
58
|
+
# +connect+ takes a hash of values as its sole argument. The keys it
|
59
|
+
# understands are:
|
60
|
+
#
|
61
|
+
# * `:username` - log in to Splunk as this user (no default)
|
62
|
+
# * `:password` - password to use when logging in (no default)
|
63
|
+
# * `:host` - Splunk host (e.g. "10.1.2.3") (defaults to 'localhost')
|
64
|
+
# * `:port` - the Splunk management port (defaults to '8089')
|
65
|
+
# * `:protocol` - either 'https' or 'http' (defaults to 'https')
|
66
|
+
# * `:namespace` - application namespace option. 'username:appname'
|
67
|
+
# (defaults to nil)
|
68
|
+
# * `:token` - a preauthenticated Splunk token (default to nil)
|
69
|
+
#
|
70
|
+
# Returns: a logged in +Service+ object.
|
71
|
+
#
|
72
|
+
# *Example:*
|
73
|
+
#
|
74
|
+
# require 'splunk-sdk-ruby'
|
75
|
+
# service = Splunk::connect(:username => "admin", :password => "changeme")
|
76
|
+
#
|
77
|
+
def self.connect(args)
|
78
|
+
Service.new(args).login()
|
79
|
+
end
|
80
|
+
|
81
|
+
##
|
82
|
+
# A user friendly interface to the Splunk REST API.
|
83
|
+
#
|
84
|
+
# +Service+ subclasses +Context+ (which provides the methods to login to
|
85
|
+
# Splunk and make requests to the REST API), and adds convenience methods
|
86
|
+
# for accessing the major collections of entities, such as indexes,
|
87
|
+
# search jobs, and configurations.
|
88
|
+
#
|
89
|
+
class Service < Context
|
90
|
+
##
|
91
|
+
# Returns a collection of all the apps installed on Splunk.
|
92
|
+
#
|
93
|
+
# Returns a +Collection+ containing +Entity+ objects.
|
94
|
+
#
|
95
|
+
# *Examples:*:
|
96
|
+
#
|
97
|
+
# require 'splunk-sdk-ruby'
|
98
|
+
# service = Splunk::connect(:username => 'admin',
|
99
|
+
# :password => 'changeme')
|
100
|
+
# service.apps.each do |app|
|
101
|
+
# puts app.name
|
102
|
+
# end
|
103
|
+
#
|
104
|
+
def apps
|
105
|
+
Apps.new(self, PATH_APPS_LOCAL)
|
106
|
+
end
|
107
|
+
|
108
|
+
##
|
109
|
+
# Returns an +Array+ of all the capabilities roles may have in Splunk.
|
110
|
+
#
|
111
|
+
# Capabilities are a fixed list on the server, so this method returns
|
112
|
+
# an +Array+ rather than an +Entity+.
|
113
|
+
#
|
114
|
+
# Returns: an +Array+ of +Strings+.
|
115
|
+
#
|
116
|
+
# *Example:*
|
117
|
+
#
|
118
|
+
# service = Splunk::connect(:username => 'admin',
|
119
|
+
# :password => 'changeme')
|
120
|
+
# puts service.capabilities
|
121
|
+
# # Prints: ["admin_all_objects", "change_authentication",
|
122
|
+
# # "change_own_password", "delete_by_keyword", ...]
|
123
|
+
def capabilities
|
124
|
+
response = request(:resource => PATH_CAPABILITIES)
|
125
|
+
feed = AtomFeed.new(response.body)
|
126
|
+
feed.entries[0]["content"]["capabilities"]
|
127
|
+
end
|
128
|
+
|
129
|
+
##
|
130
|
+
# Returns a +Collection+ of all the configuration files visible on Splunk.
|
131
|
+
#
|
132
|
+
# The configurations you see are dependent on the namespace your +Service+
|
133
|
+
# is connected with. So if you are connected in the system namespace, you
|
134
|
+
# may see different values than if you're connected in the app namespace
|
135
|
+
# associated with a particular app, since the app may override some values
|
136
|
+
# within its scope.
|
137
|
+
#
|
138
|
+
# The configuration files which are the contents of this +Collection+ are
|
139
|
+
# not +Entity+ objects, but +Collection+ objects in their own right. They
|
140
|
+
# contain +Entity+ objects representing the stanzas in that configuration
|
141
|
+
# file.
|
142
|
+
#
|
143
|
+
# Returns: +Configurations+ (a subclass of +Collection+ containing
|
144
|
+
# +ConfigurationFile+ objects).
|
145
|
+
#
|
146
|
+
def confs
|
147
|
+
Configurations.new(self)
|
148
|
+
end
|
149
|
+
|
150
|
+
##
|
151
|
+
# Creates a blocking search.
|
152
|
+
#
|
153
|
+
# The +create_oneshot+ method starts a search _query_, and any optional
|
154
|
+
# arguments specified in a hash (which are identical to those taken by
|
155
|
+
# +create+). It then blocks until the job finished, and returns the
|
156
|
+
# results, as transformed by any transforming search commands in _query_
|
157
|
+
# (equivalent to calling the +results+ method on a +Job+).
|
158
|
+
#
|
159
|
+
# Returns: a stream readable by +ResultsReader+.
|
160
|
+
#
|
161
|
+
def create_oneshot(query, args={})
|
162
|
+
jobs.create_oneshot(query, args)
|
163
|
+
end
|
164
|
+
|
165
|
+
##
|
166
|
+
# Creates an asynchronous search job.
|
167
|
+
#
|
168
|
+
# The search job requires a _query_, and takes a hash of other, optional
|
169
|
+
# arguments, which are documented in the {Splunk REST documentation}[http://docs.splunk.com/Documentation/Splunk/latest/RESTAPI/RESTsearch#search.2Fjobs].
|
170
|
+
#
|
171
|
+
def create_search(query, args={})
|
172
|
+
jobs.create(query, args)
|
173
|
+
end
|
174
|
+
|
175
|
+
##
|
176
|
+
# Creates a blocking search without transforming search commands.
|
177
|
+
#
|
178
|
+
# The +create_export+ method starts a search _query_, and any optional
|
179
|
+
# arguments specified in a hash (which are identical to those taken by
|
180
|
+
# the +create+ methods). It then blocks until the job is finished, and
|
181
|
+
# returns the events found by the job before any transforming search
|
182
|
+
# commands (equivalent to calling +events+ on a +Job+).
|
183
|
+
#
|
184
|
+
# Returns: a stream readable by +MultiResultsReader+.
|
185
|
+
#
|
186
|
+
def create_export(query, args={}) # :nodoc:
|
187
|
+
jobs.create_export(query, args)
|
188
|
+
end
|
189
|
+
|
190
|
+
# DEPRECATED. Use create_export instead.
|
191
|
+
def create_stream(query, args={})
|
192
|
+
warn "[DEPRECATION] Service#create_stream is deprecated. Use Service#create_export instead."
|
193
|
+
jobs.create_export(query, args)
|
194
|
+
end
|
195
|
+
|
196
|
+
##
|
197
|
+
# Returns a +Collection+ of all +Index+ objects.
|
198
|
+
#
|
199
|
+
# +Index+ is a subclass of +Entity+, with additional methods for
|
200
|
+
# manipulating indexes in particular.
|
201
|
+
#
|
202
|
+
def indexes
|
203
|
+
Collection.new(self, PATH_INDEXES, entity_class=Index)
|
204
|
+
end
|
205
|
+
|
206
|
+
##
|
207
|
+
# Returns a +Hash+ containing Splunk's runtime information.
|
208
|
+
#
|
209
|
+
# The +Hash+ has keys such as "+build+" (the number of the build of this
|
210
|
+
# Splunk instance) and "+cpu_arch+" (what CPU Splunk is running on), and
|
211
|
+
# "+os_name+" (the name of the operating system Splunk is running on).
|
212
|
+
#
|
213
|
+
# Returns: A +Hash+ that has +Strings+ as both keys and values.
|
214
|
+
#
|
215
|
+
def info
|
216
|
+
response = request(:namespace => Splunk::namespace(:sharing => "default"),
|
217
|
+
:resource => PATH_INFO)
|
218
|
+
feed = AtomFeed.new(response.body)
|
219
|
+
feed.entries[0]["content"]
|
220
|
+
end
|
221
|
+
|
222
|
+
##
|
223
|
+
# Returns a collection of all the search jobs running on Splunk.
|
224
|
+
#
|
225
|
+
# The +Jobs+ object returned is a subclass of +Collection+, but also has
|
226
|
+
# convenience methods for starting oneshot and streaming jobs as well as
|
227
|
+
# creating normal, asynchronous jobs.
|
228
|
+
#
|
229
|
+
# Returns: A +Jobs+ object.
|
230
|
+
def jobs
|
231
|
+
Jobs.new(self)
|
232
|
+
end
|
233
|
+
|
234
|
+
##
|
235
|
+
# Returns a collection of the loggers in Splunk.
|
236
|
+
#
|
237
|
+
# Each logger logs errors, warnings, debug info, or informational
|
238
|
+
# information about a specific part of the Splunk system (e.g.,
|
239
|
+
# +WARN+ on +DeploymentClient+).
|
240
|
+
#
|
241
|
+
# Returns: a +Collection+ of +Entity+ objects representing loggers.
|
242
|
+
#
|
243
|
+
# *Example*:
|
244
|
+
# service = Splunk::connect(:username => 'admin', :password => 'foo')
|
245
|
+
# service.loggers.each do |logger|
|
246
|
+
# puts logger.name + ":" + logger['level']
|
247
|
+
# end
|
248
|
+
# # Prints:
|
249
|
+
# # ...
|
250
|
+
# # DedupProcessor:WARN
|
251
|
+
# # DeployedApplication:INFO
|
252
|
+
# # DeployedServerClass:WARN
|
253
|
+
# # DeploymentClient:WARN
|
254
|
+
# # DeploymentClientAdminHandler:WARN
|
255
|
+
# # DeploymentMetrics:INFO
|
256
|
+
# # ...
|
257
|
+
#
|
258
|
+
def loggers
|
259
|
+
Collection.new(self, PATH_LOGGER)
|
260
|
+
end
|
261
|
+
|
262
|
+
##
|
263
|
+
# Returns a collection of the global messages on Splunk.
|
264
|
+
#
|
265
|
+
# Messages include such things as warnings and notices that Splunk needs to
|
266
|
+
# restart.
|
267
|
+
#
|
268
|
+
# Returns: A +Collection+ of +Message+ objects (which are subclasses
|
269
|
+
# of +Entity+).
|
270
|
+
#
|
271
|
+
def messages
|
272
|
+
Messages.new(self, PATH_MESSAGES, entity_class=Message)
|
273
|
+
end
|
274
|
+
|
275
|
+
##
|
276
|
+
# Returns a collection of the roles on the system.
|
277
|
+
#
|
278
|
+
# Returns: A +Collection+ of +Entity+ objects representing the roles on
|
279
|
+
# this Splunk instance.
|
280
|
+
#
|
281
|
+
def roles
|
282
|
+
CaseInsensitiveCollection.new(self, PATH_ROLES)
|
283
|
+
end
|
284
|
+
|
285
|
+
##
|
286
|
+
#
|
287
|
+
#
|
288
|
+
#
|
289
|
+
def saved_searches
|
290
|
+
Collection.new(self, PATH_SAVED_SEARCHES, entity_class=SavedSearch)
|
291
|
+
end
|
292
|
+
|
293
|
+
##
|
294
|
+
# Returns an +Entity+ of Splunk's mutable runtime information.
|
295
|
+
#
|
296
|
+
# The +settings+ method includes values such as "+SPLUNK_DB+"
|
297
|
+
# and "+SPLUNK_HOME+". Unlike the values returned by the +info+ method,
|
298
|
+
# these settings can be updated.
|
299
|
+
#
|
300
|
+
# Returns: an +Entity+ with all server settings.
|
301
|
+
#
|
302
|
+
# *Example*:
|
303
|
+
# service = Splunk::connect(:username => 'admin', :password => 'foo')
|
304
|
+
# puts svc.settings.read
|
305
|
+
# # Prints:
|
306
|
+
# # {"SPLUNK_DB" => "/path/to/splunk_home/var/lib/splunk",
|
307
|
+
# # "SPLUNK_HOME" => "/path/to/splunk_home",
|
308
|
+
# # ...}
|
309
|
+
#
|
310
|
+
def settings
|
311
|
+
# Though settings looks like a collection on the server, it always has
|
312
|
+
# a single entity, of the same name, giving the actual settings. We access
|
313
|
+
# that entity directly rather than putting a collection inbetween.
|
314
|
+
Entity.new(self, Splunk::namespace(:sharing => "default"),
|
315
|
+
PATH_SETTINGS, "settings").refresh()
|
316
|
+
end
|
317
|
+
|
318
|
+
##
|
319
|
+
# Returns the version of Splunk this +Service+ is connected to.
|
320
|
+
#
|
321
|
+
# The version is represented as an +Array+ of length 3, with each
|
322
|
+
# of its components an integer. For example, on Splunk 4.3.5,
|
323
|
+
# +splunk_version+ would return [+4, 3, 5+], while on Splunk 5.0.2,
|
324
|
+
# +splunk_version+ would return [+5, 0, 2+].
|
325
|
+
#
|
326
|
+
# Returns: An +Array+ of +Integers+ of length 3.
|
327
|
+
#
|
328
|
+
def splunk_version
|
329
|
+
info["version"].split(".").map() {|v| Integer(v)}
|
330
|
+
end
|
331
|
+
|
332
|
+
##
|
333
|
+
# Return a +Collection+ of the users defined on Splunk.
|
334
|
+
#
|
335
|
+
def users
|
336
|
+
CaseInsensitiveCollection.new(self, PATH_USERS)
|
337
|
+
end
|
338
|
+
end
|
339
|
+
end
|
@@ -0,0 +1,49 @@
|
|
1
|
+
#--
|
2
|
+
# Copyright 2011-2013 Splunk, Inc.
|
3
|
+
#
|
4
|
+
# Licensed under the Apache License, Version 2.0 (the "License"): you may
|
5
|
+
# not use this file except in compliance with the License. You may obtain
|
6
|
+
# a copy of the License at
|
7
|
+
#
|
8
|
+
# http://www.apache.org/licenses/LICENSE-2.0
|
9
|
+
#
|
10
|
+
# Unless required by applicable law or agreed to in writing, software
|
11
|
+
# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
|
12
|
+
# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
|
13
|
+
# License for the specific language governing permissions and limitations
|
14
|
+
# under the License.
|
15
|
+
#++
|
16
|
+
|
17
|
+
##
|
18
|
+
# Defines an exception to carry all errors returned by Splunk.
|
19
|
+
|
20
|
+
require_relative 'xml_shim'
|
21
|
+
|
22
|
+
module Splunk
|
23
|
+
##
|
24
|
+
# Exception to represent all errors returned from Splunkd.
|
25
|
+
#
|
26
|
+
# The important information about the error is available as a set of
|
27
|
+
# accessors:
|
28
|
+
#
|
29
|
+
# * +code+: The HTTP error code returned.
|
30
|
+
# * +reason+: The reason field of the HTTP response header.
|
31
|
+
# * +detail+: The detailed error message Splunk sent in the response body.
|
32
|
+
#
|
33
|
+
# You can also get the original response body from +body+ and any HTTP
|
34
|
+
# headers returns from +headers+.
|
35
|
+
#
|
36
|
+
class SplunkHTTPError < StandardError
|
37
|
+
attr_reader :reason, :code, :headers, :body, :detail
|
38
|
+
|
39
|
+
def initialize(response)
|
40
|
+
@body = response.body
|
41
|
+
@detail = Splunk::text_at_xpath("//msg", response.body)
|
42
|
+
@reason = response.message
|
43
|
+
@code = Integer(response.code)
|
44
|
+
@headers = response.each().to_a()
|
45
|
+
|
46
|
+
super("HTTP #{@code.to_s} #{@reason}: #{@detail || ""}")
|
47
|
+
end
|
48
|
+
end
|
49
|
+
end
|
@@ -0,0 +1,50 @@
|
|
1
|
+
# :stopdoc:
|
2
|
+
# Copyright 2011-2013 Splunk, Inc.
|
3
|
+
#
|
4
|
+
# Licensed under the Apache License, Version 2.0 (the "License"): you may
|
5
|
+
# not use this file except in compliance with the License. You may obtain
|
6
|
+
# a copy of the License at
|
7
|
+
#
|
8
|
+
# http://www.apache.org/licenses/LICENSE-2.0
|
9
|
+
#
|
10
|
+
# Unless required by applicable law or agreed to in writing, software
|
11
|
+
# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
|
12
|
+
# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
|
13
|
+
# License for the specific language governing permissions and limitations
|
14
|
+
# under the License.
|
15
|
+
|
16
|
+
##
|
17
|
+
# Easy creation of synonyms for methods.
|
18
|
+
#
|
19
|
+
# To make it easy to create Ruby's synonym sets (such as
|
20
|
+
# +has_key?+/+include?+/+member?+/etc. on +Hash+), we provide a mixin
|
21
|
+
# +Synonyms+ with one method, +synonym+. +synonym+ defines a new method
|
22
|
+
# named by its first parameter, with the same behavior as the method named
|
23
|
+
# by its second parameter.
|
24
|
+
#
|
25
|
+
# *Example:*
|
26
|
+
#
|
27
|
+
# require 'synonyms'
|
28
|
+
#
|
29
|
+
# class A
|
30
|
+
# extend Synonyms
|
31
|
+
# def f(...) ... end
|
32
|
+
# synonym "g" "f"
|
33
|
+
#
|
34
|
+
|
35
|
+
module Synonyms
|
36
|
+
# Make method _new_name_ a synonym for method _old_name_ on this class.
|
37
|
+
#
|
38
|
+
# Arguments:
|
39
|
+
# * _new_name_: (+String+ or +Symbol+) The name of the method to create.
|
40
|
+
# * _old_name_: (+String+ or +Symbol+) The name of the method to make the
|
41
|
+
# new method a synonym for.
|
42
|
+
#
|
43
|
+
private
|
44
|
+
def synonym(new_name, old_name)
|
45
|
+
define_method(new_name) do |*args, &block|
|
46
|
+
old_method = old_name.intern
|
47
|
+
send(old_method, *args, &block)
|
48
|
+
end
|
49
|
+
end
|
50
|
+
end
|
@@ -0,0 +1,27 @@
|
|
1
|
+
#--
|
2
|
+
# Copyright 2011-2013 Splunk, Inc.
|
3
|
+
#
|
4
|
+
# Licensed under the Apache License, Version 2.0 (the "License"): you may
|
5
|
+
# not use this file except in compliance with the License. You may obtain
|
6
|
+
# a copy of the License at
|
7
|
+
#
|
8
|
+
# http://www.apache.org/licenses/LICENSE-2.0
|
9
|
+
#
|
10
|
+
# Unless required by applicable law or agreed to in writing, software
|
11
|
+
# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
|
12
|
+
# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
|
13
|
+
# License for the specific language governing permissions and limitations
|
14
|
+
# under the License.
|
15
|
+
#++
|
16
|
+
|
17
|
+
# :stopdoc:
|
18
|
+
|
19
|
+
##
|
20
|
+
# The version of the Splunk SDK for Ruby.
|
21
|
+
#
|
22
|
+
# We put it here so we only have to change it in one place as we
|
23
|
+
# release new versions.
|
24
|
+
#
|
25
|
+
module Splunk
|
26
|
+
VERSION = '0.1.0'
|
27
|
+
end
|