esp_sdk 2.5.0 → 2.6.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (59) hide show
  1. checksums.yaml +4 -4
  2. data/.gitignore +2 -0
  3. data/.yardopts +1 -0
  4. data/CHANGELOG.md +8 -0
  5. data/Gemfile.lock +5 -3
  6. data/Guardfile +3 -1
  7. data/esp_sdk.gemspec +2 -1
  8. data/lib/esp/aws_clients.rb +2 -1
  9. data/lib/esp/commands/commands_tasks.rb +2 -1
  10. data/lib/esp/commands/console.rb +4 -0
  11. data/lib/esp/exceptions.rb +1 -0
  12. data/lib/esp/extensions/active_resource/dirty.rb +51 -0
  13. data/lib/esp/extensions/active_resource/formats/json_api_format.rb +5 -3
  14. data/lib/esp/extensions/active_resource/paginated_collection.rb +71 -38
  15. data/lib/esp/extensions/active_resource/validations.rb +4 -2
  16. data/lib/esp/external_account_creator.rb +4 -1
  17. data/lib/esp/resources/alert.rb +53 -42
  18. data/lib/esp/resources/cloud_trail_event.rb +18 -12
  19. data/lib/esp/resources/concerns/stat_totals.rb +70 -67
  20. data/lib/esp/resources/contact_request.rb +17 -14
  21. data/lib/esp/resources/custom_signature/definition.rb +46 -51
  22. data/lib/esp/resources/custom_signature/result/alert.rb +13 -5
  23. data/lib/esp/resources/custom_signature/result.rb +49 -53
  24. data/lib/esp/resources/custom_signature.rb +52 -61
  25. data/lib/esp/resources/dashboard.rb +11 -5
  26. data/lib/esp/resources/external_account.rb +59 -58
  27. data/lib/esp/resources/metadata.rb +21 -11
  28. data/lib/esp/resources/organization.rb +49 -39
  29. data/lib/esp/resources/region.rb +25 -28
  30. data/lib/esp/resources/report.rb +46 -44
  31. data/lib/esp/resources/reports/export/integration.rb +22 -13
  32. data/lib/esp/resources/resource.rb +4 -3
  33. data/lib/esp/resources/scan_interval.rb +19 -13
  34. data/lib/esp/resources/service.rb +17 -11
  35. data/lib/esp/resources/signature.rb +43 -53
  36. data/lib/esp/resources/stat.rb +72 -55
  37. data/lib/esp/resources/stat_custom_signature.rb +73 -65
  38. data/lib/esp/resources/stat_region.rb +76 -65
  39. data/lib/esp/resources/stat_service.rb +76 -65
  40. data/lib/esp/resources/stat_signature.rb +76 -65
  41. data/lib/esp/resources/sub_organization.rb +51 -60
  42. data/lib/esp/resources/suppression/region.rb +35 -30
  43. data/lib/esp/resources/suppression/signature.rb +35 -29
  44. data/lib/esp/resources/suppression/unique_identifier.rb +27 -22
  45. data/lib/esp/resources/suppression.rb +45 -34
  46. data/lib/esp/resources/tag.rb +20 -11
  47. data/lib/esp/resources/team.rb +56 -58
  48. data/lib/esp/resources/user.rb +35 -32
  49. data/lib/esp/version.rb +1 -1
  50. data/lib/esp.rb +39 -16
  51. data/lib/esp_sdk.rb +1 -0
  52. data/test/esp/extensions/active_resource/dirty_test.rb +81 -0
  53. data/test/esp/extensions/active_resource/formats/json_api_format_test.rb +8 -0
  54. data/test/esp/extensions/active_resource/paginated_collection_test.rb +7 -0
  55. data/test/esp/integration/json_api_format_integration_test.rb +5 -2
  56. data/test/esp/integration/organization_integration_test.rb +1 -1
  57. data/test/esp/resources/custom_signature_test.rb +15 -0
  58. data/test/factories/custom_signatures.rb +0 -10
  59. metadata +21 -3
@@ -1,85 +1,95 @@
1
1
  module ESP
2
2
  class Organization < ESP::Resource
3
- ##
4
3
  # The collection of teams that belong to the organization.
4
+ #
5
+ # @return [ActiveResource::PaginatedCollection<ESP::Team>]
5
6
  has_many :teams, class_name: 'ESP::Team'
6
7
 
7
- ##
8
8
  # The collection of sub_organizations that belong to the organization.
9
+ #
10
+ # @return [ActiveResource::PaginatedCollection<ESP::SubOrganization>]
9
11
  has_many :sub_organizations, class_name: 'ESP::SubOrganization'
10
12
 
11
- ##
12
13
  # The collection of users that belong to the organization.
14
+ #
15
+ # @return [ActiveResource::PaginatedCollection<ESP::User>]
13
16
  has_many :users, class_name: 'ESP::User'
14
17
 
15
- ##
16
18
  # The collection of reports that belong to the organization.
19
+ #
20
+ # @return [ActiveResource::PaginatedCollection<ESP::Report>]
17
21
  has_many :reports, class_name: 'ESP::Report'
18
22
 
19
- ##
20
23
  # The collection of external_accounts that belong to the organization.
24
+ #
25
+ # @return [ActiveResource::PaginatedCollection<ESP::ExternalAccount>]
21
26
  has_many :external_accounts, class_name: 'ESP::ExternalAccount'
22
27
 
23
- ##
24
28
  # The collection of organizations that belong to the organization.
29
+ #
30
+ # @return [ActiveResource::PaginatedCollection<ESP::CustomSignature>]
25
31
  has_many :custom_signatures, class_name: 'ESP::CustomSignature'
26
32
 
27
33
  # Not Implemented. You cannot create an Organization.
28
- def create # :nodoc:
34
+ #
35
+ # @private
36
+ def create
29
37
  fail ESP::NotImplementedError
30
38
  end
31
39
 
32
40
  # Not Implemented. You cannot destroy an Organization.
41
+ #
42
+ # @return [void]
33
43
  def destroy
34
44
  fail ESP::NotImplementedError
35
45
  end
36
46
 
37
- # :singleton-method: where
38
- # Return a paginated Organization list filtered by search parameters
47
+ # @!method self.where(clauses = {})
48
+ # Return a paginated list filtered by search parameters.
39
49
  #
40
- # ==== Parameters
50
+ # *call-seq* -> +super.where(clauses = {})+
41
51
  #
42
- # +clauses+ | Hash of attributes with appended predicates to search, sort and include.
52
+ # @param clauses [Hash] A hash of attributes with appended predicates to search, sort and include.
53
+ # ===== Valid Clauses
43
54
  #
44
- # ===== Valid Clauses
45
- #
46
- # See {API documentation}[http://api-docs.evident.io?ruby#organization-attributes] for valid arguments
47
- #
48
- # :call-seq:
49
- # where(clauses = {})
55
+ # See {API documentation}[http://api-docs.evident.io?ruby#organization-attributes] for valid arguments
56
+ # @return [ActiveResource::PaginatedCollection<ESP::Organization>]
50
57
 
51
- ##
52
- # :singleton-method: find
53
- # Find a Organization by id
54
- #
55
- # ==== Parameter
56
- #
57
- # +id+ | Required | The ID of the organization to retrieve
58
+ # @!method self.find(id)
59
+ # Find an Organization by id
58
60
  #
59
- # +options+ | Optional | A hash of options
61
+ # *call-seq* -> +super.find(id, options = {})+
60
62
  #
61
- # ===== Valid Options
63
+ # @overload find(id)
64
+ # @overload find(id, options = {})
65
+ # @param options [Hash] Optional hash of options.
66
+ # ===== Valid Options
62
67
  #
63
- # +include+ | The list of associated objects to return on the initial request.
68
+ # +include+ | The list of associated objects to return on the initial request.
64
69
  #
65
- # ===== Valid Includable Associations
70
+ # ===== Valid Includable Associations
66
71
  #
67
- # See {API documentation}[http://api-docs.evident.io?ruby#organization-attributes] for valid arguments
68
- #
69
- # :call-seq:
70
- # find(id, options = {})
72
+ # See {API documentation}[http://api-docs.evident.io?ruby#organization-attributes] for valid arguments
73
+ # @param id [Integer, Numeric, #to_i] Required ID of the organization to retrieve.
74
+ # @return [ESP::Organization]
71
75
 
72
- # :singleton-method: all
73
- # Return a paginated Organization list
76
+ # @!method self.all
77
+ # Return a paginated list.
78
+ #
79
+ # @return [ActiveResource::PaginatedCollection<ESP::Organization>]
74
80
 
75
- # :singleton-method: create
81
+ # @!method self.create
76
82
  # Not Implemented. You cannot create an Organization.
83
+ #
84
+ # @return [void]
77
85
 
78
- # :method: save
79
- # Update an Organization.
86
+ # @!method save
87
+ # Update an Organization.
88
+ #
89
+ # ===== Valid Attributes
80
90
  #
81
- # ===== Valid Attributes
91
+ # See {API documentation}[http://api-docs.evident.io?ruby#organization-update] for valid arguments
82
92
  #
83
- # See {API documentation}[http://api-docs.evident.io?ruby#organization-update] for valid arguments
93
+ # @return [Boolean]
84
94
  end
85
95
  end
@@ -1,58 +1,55 @@
1
1
  module ESP
2
2
  class Region < ESP::Resource
3
3
  # Not Implemented. You cannot create or update a CloudTrailEvent.
4
+ #
5
+ # @return [void]
4
6
  def save
5
7
  fail ESP::NotImplementedError
6
8
  end
7
9
 
8
10
  # Not Implemented. You cannot destroy a an CloudTrailEvent.
11
+ #
12
+ # @return [void]
9
13
  def destroy
10
14
  fail ESP::NotImplementedError
11
15
  end
12
16
 
13
17
  # Create a suppression for this region.
14
18
  #
15
- # ==== Parameter
16
- #
17
- # +arguments+ | Required | A hash of region suppression attributes
18
- #
19
- # ===== Valid Arguments
20
- #
21
- # See {API documentation}[http://api-docs.evident.io?ruby#suppression-create] for valid arguments
19
+ # @param arguments [Hash] Required hash of region suppression attributes.
20
+ # ===== Valid Arguments
22
21
  #
23
- # ==== Example
22
+ # See {API documentation}[http://api-docs.evident.io?ruby#suppression-create] for valid arguments
23
+ # @return [ESP::Suppression::Region]
24
+ # @example
24
25
  # suppress(external_account_ids: [5], reason: 'My very good reason for creating this suppression')
25
26
  def suppress(arguments = {})
26
27
  arguments = arguments.with_indifferent_access
27
28
  ESP::Suppression::Region.create(regions: [code], external_account_ids: Array(arguments[:external_account_ids]), reason: arguments[:reason])
28
29
  end
29
30
 
30
- # :singleton-method: where
31
- # Return a paginated Region list filtered by search parameters
31
+ # @!method self.where(clauses = {})
32
+ # Return a paginated Region list filtered by search parameters
32
33
  #
33
- # ==== Parameters
34
+ # *call-seq* -> +super.where(clauses = {})+
34
35
  #
35
- # +clauses+ | Hash of attributes with appended predicates to search and sort by.
36
+ # @param clauses [Hash] A hash of attributes with appended predicates to search and sort by.
37
+ # ===== Valid Clauses
36
38
  #
37
- # ===== Valid Clauses
38
- #
39
- # See {API documentation}[http://api-docs.evident.io?ruby#region-attributes] for valid arguments
40
- #
41
- # :call-seq:
42
- # where(clauses = {})
39
+ # See {API documentation}[http://api-docs.evident.io?ruby#region-attributes] for valid arguments
40
+ # @return [ActiveResource::PaginatedCollection<ESP::Region>]
43
41
 
44
- ##
45
- # :singleton-method: find
46
- # Find a Region by id
42
+ # @!method self.find(id)
43
+ # Find a Region by id
47
44
  #
48
- # ==== Parameter
45
+ # *call-seq* -> +super.find(id)+
49
46
  #
50
- # +id+ | Required | The ID of the region to retrieve
51
- #
52
- # :call-seq:
53
- # find(id)
47
+ # @param id [Integer, Numeric, #to_i] Required ID of the region to retrieve.
48
+ # @return [ESP::Region]
54
49
 
55
- # :singleton-method: all
56
- # Return a paginated Region list
50
+ # @!method self.all
51
+ # Return a paginated list.
52
+ #
53
+ # @return [ActiveResource::PaginatedCollection<ESP::Region>]
57
54
  end
58
55
  end
@@ -4,43 +4,52 @@ module ESP
4
4
  autoload :Integration, File.expand_path(File.dirname(__FILE__) + '/reports/export/integration')
5
5
  end
6
6
 
7
- ##
8
7
  # The organization the report belongs to.
8
+ #
9
+ # @return [ESP::Organization]
9
10
  belongs_to :organization, class_name: 'ESP::Organization'
10
11
 
11
- ##
12
12
  # The sub_organization the report belongs to.
13
+ #
14
+ # @return [ESP::SubOrganization]
13
15
  belongs_to :sub_organization, class_name: 'ESP::SubOrganization'
14
16
 
15
- ##
16
17
  # The team the report belongs to.
18
+ #
19
+ # @return [ESP::Team]
17
20
  belongs_to :team, class_name: 'ESP::Team'
18
21
 
19
- ##
20
22
  # The external_account the report belongs to.
23
+ #
24
+ # @return [ESP::ExternalAccount]
21
25
  belongs_to :external_account, class_name: 'ESP::ExternalAccount'
22
26
 
23
27
  # Not Implemented. You cannot update a Report.
28
+ #
29
+ # @return [void]
24
30
  def update
25
31
  fail ESP::NotImplementedError
26
32
  end
27
33
 
28
34
  # Not Implemented. You cannot destroy a Report.
35
+ #
36
+ # @return [void]
29
37
  def destroy
30
38
  fail ESP::NotImplementedError
31
39
  end
32
40
 
33
41
  # Enqueue a report to be run for the given team.
34
42
  # Returns a Report object with a status of 'queued' and an id
35
- # ==== Attribute
36
- #
37
- # See {API documentation}[http://api-docs.evident.io?ruby#report-create] for valid arguments
38
43
  #
39
44
  # Periodically check the API
40
45
  # ESP::Report.find(<id>)
41
46
  # until status is 'complete'.
42
47
  #
43
48
  # If not successful, returns a Report object with the errors object populated.
49
+ #
50
+ # @param arguments [Hash] See {API documentation}[http://api-docs.evident.io?ruby#report-create] for valid arguments
51
+ # @return [ESP::Report]
52
+ # @raise [ArgumentError] if +team_id: Integer+ is not supplied.
44
53
  def self.create(arguments = {})
45
54
  fail ArgumentError, "You must supply a team id." unless arguments.with_indifferent_access[:team_id].present?
46
55
  super
@@ -50,16 +59,12 @@ module ESP
50
59
 
51
60
  # Returns a paginated collection of alerts for the report
52
61
  #
53
- # ==== Parameters
54
- #
55
- # +arguments+ | Not Required | An optional hash of search criteria to filter the returned collection
56
- #
57
- # ===== Valid Arguments
58
- #
59
- # See {API documentation}[http://api-docs.evident.io?ruby#alert-attributes] for valid arguments
60
- #
61
- # ==== Example
62
- #
62
+ # @overload alerts()
63
+ # @overload alerts(arguments = {})
64
+ # @param arguments [Hash] An optional hash of search criteria to filter the returned collection.
65
+ # See {API documentation}[http://api-docs.evident.io?ruby#alert-attributes] for valid arguments.
66
+ # @return [ActiveResource::PaginatedCollection<ESP::Alert>]
67
+ # @example
63
68
  # report = ESP::Report.find(345)
64
69
  # alerts = report.alerts(status_eq: 'fail', signature_risk_level_in: ['High'])
65
70
  def alerts(arguments = {})
@@ -67,46 +72,43 @@ module ESP
67
72
  end
68
73
 
69
74
  # Returns the stats for this report
75
+ #
76
+ # @return [ActiveResource::PaginatedCollection<ESP::Stat>]
70
77
  def stat
71
78
  ESP::Stat.for_report(id)
72
79
  end
73
80
 
74
- # :singleton-method: where
75
- # Return a paginated Report list filtered by search parameters
76
- #
77
- # ==== Parameters
81
+ # @!method self.where(clauses = {})
82
+ # Return a paginated Report list filtered by search parameters
78
83
  #
79
- # +clauses+ | Hash of attributes with appended predicates to search, sort and include.
84
+ # *call-seq* -> +super.where(clauses = {})+
80
85
  #
81
- # ===== Valid Clauses
82
- #
83
- # See {API documentation}[http://api-docs.evident.io?ruby#report-attributes] for valid arguments
84
- #
85
- # :call-seq:
86
- # where(clauses = {})
86
+ # @param clauses [Hash] Hash of attributes with appended predicates to search, sort and include.
87
+ # See {API documentation}[http://api-docs.evident.io?ruby#report-attributes] for valid arguments
88
+ # @return [ActiveResource::PaginatedCollection<ESP::Report>]
87
89
 
88
- ##
89
- # :singleton-method: find
90
- # Find a Report by id
91
- #
92
- # ==== Parameter
90
+ # @!method self.find(id)
91
+ # Find a Report by id
93
92
  #
94
- # +id+ | Required | The ID of the report to retrieve
93
+ # *call-seq* -> +super.find(id, options = {})+
95
94
  #
96
- # +options+ | Optional | A hash of options
95
+ # @overload find(id)
96
+ # @overload find(id, options = {})
97
+ # @param options [Hash] Optional hash of options.
98
+ # ===== Valid Options
97
99
  #
98
- # ===== Valid Options
100
+ # +include+ | The list of associated objects to return on the initial request.
99
101
  #
100
- # +include+ | The list of associated objects to return on the initial request.
102
+ # ===== Valid Includable Associations
101
103
  #
102
- # ===== Valid Includable Associations
104
+ # See {API documentation}[http://api-docs.evident.io?ruby#report-attributes] for valid arguments
103
105
  #
104
- # See {API documentation}[http://api-docs.evident.io?ruby#report-attributes] for valid arguments
105
- #
106
- # :call-seq:
107
- # find(id, options = {})
106
+ # @param id [Integer, Numeric, #to_i] Required ID of the report to retrieve.
107
+ # @return [ESP::Report]
108
108
 
109
- # :singleton-method: all
110
- # Return a paginated Report list
109
+ # @!method self.all
110
+ # Return a paginated Report list
111
+ #
112
+ # @return [ActiveResource::PaginatedCollection<ESP::Report>]
111
113
  end
112
114
  end
@@ -3,35 +3,44 @@ module ESP
3
3
  module Export
4
4
  class Integration < ESP::Resource
5
5
  self.prefix += "reports/export/"
6
- # Not Implemented. You cannot search for Reports::Export::Integration.
6
+
7
+ # @!method self.create(attributes = {})
8
+ # Enqueue reports to be exported to the given integration
9
+ # Returns a Report::Export::Integration object if successful
10
+ #
11
+ # If not successful, returns a Report::Export::Integration object with the errors object populated.
12
+ #
13
+ # @param attributes [Hash] See {API documentation}[http://api-docs.evident.io?ruby#report-export] for valid arguments
14
+ # @return [ESP::Report::Export::Integration]
15
+
16
+ # Not Implemented. You cannot search for Report::Export::Integration.
17
+ #
18
+ # @return [void]
7
19
  def self.where(*)
8
20
  fail ESP::NotImplementedError
9
21
  end
10
22
 
11
- # Not Implemented. You cannot search for Reports::Export::Integration.
23
+ # Not Implemented. You cannot search for Report::Export::Integration.
24
+ #
25
+ # @return [void]
12
26
  def self.find(*)
13
27
  fail ESP::NotImplementedError
14
28
  end
15
29
 
16
- # Not Implemented. You cannot update a Reports::Export::Integration.
30
+ # Not Implemented. You cannot update a Report::Export::Integration.
31
+ #
32
+ # @return [void]
17
33
  def update
18
34
  fail ESP::NotImplementedError
19
35
  end
20
36
 
21
- # Not Implemented. You cannot destroy a Reports::Export::Integration.
37
+ # Not Implemented. You cannot destroy a Report::Export::Integration.
38
+ #
39
+ # @return [void]
22
40
  def destroy
23
41
  fail ESP::NotImplementedError
24
42
  end
25
43
 
26
- # :singleton-method: create
27
- # Enqueue reports to be exported to the given integration
28
- # Returns a Report::Export::Integration object if successful
29
- # ==== Attribute
30
- #
31
- # See {API documentation}[http://api-docs.evident.io?ruby#report-export] for valid arguments
32
- #
33
- # If not successful, returns a Report::Export::Integration object with the errors object populated.
34
-
35
44
  protected
36
45
 
37
46
  # A success message gets returned, so just return the response instead of parsing for attributes
@@ -1,5 +1,6 @@
1
1
  module ESP
2
- class Resource < ActiveResource::Base # :nodoc:
2
+ # @private
3
+ class Resource < ActiveResource::Base
3
4
  self.site = ESP.site
4
5
  self.proxy = ESP.http_proxy
5
6
  self.format = ActiveResource::Formats::JsonAPIFormat
@@ -16,7 +17,7 @@ module ESP
16
17
  def serializable_hash(*)
17
18
  h = attributes.extract!('included')
18
19
  h['data'] = { 'type' => self.class.to_s.underscore.sub('esp/', '').pluralize,
19
- 'attributes' => attributes.except('id', 'type', 'created_at', 'updated_at', 'relationships') }
20
+ 'attributes' => changed_attributes.except('id', 'type', 'created_at', 'updated_at', 'relationships') }
20
21
  h['data']['id'] = id if id.present?
21
22
  h
22
23
  end
@@ -63,7 +64,7 @@ module ESP
63
64
  # Need to set from so paginated collection can use it for page calls.
64
65
  object.tap do |collection|
65
66
  collection.from = options['from']
66
- collection.original_params = options['params']
67
+ collection.original_params = options.fetch('params', {})
67
68
  end
68
69
  end
69
70
 
@@ -1,21 +1,28 @@
1
1
  module ESP
2
2
  class ScanInterval < ESP::Resource
3
- ##
4
3
  # The external account the scan interval belongs to
4
+ #
5
+ # @return [ESP::ExternalAccount]
5
6
  belongs_to :external_account, class_name: 'ESP::ExternalAccount'
6
7
 
7
- ##
8
8
  # The service the scan interval belongs to
9
+ #
10
+ # @return [ESP::Service]
9
11
  belongs_to :service, class_name: 'ESP::Service'
10
12
 
11
13
  # Find a Scan Interval by id
12
14
  #
13
- # ==== Parameter
14
- #
15
- # +id+ | Required | The ID of the scan interval to retrieve
15
+ # *call-seq* -> +super.find(id)+
16
16
  #
17
- # :call-seq:
18
- # find(id)
17
+ # @overload find(id)
18
+ # @param id [Integer, Numeric, #to_i] Required ID of the scan interval to retrieve.
19
+ # @overload find(scope, options)
20
+ # *call-seq* -> +super.all(options)+
21
+ # @api private
22
+ # @param scope [Object] *Example:* +:all+
23
+ # @param options [Hash] +params: { external_account_id: Interger }+
24
+ # @raise [ArgumentError] if no +external_account_id+ is supplied.
25
+ # @return [ESP::ScanInterval]
19
26
  def self.find(*arguments)
20
27
  scope = arguments.slice!(0)
21
28
  options = (arguments.slice!(0) || {}).with_indifferent_access
@@ -29,13 +36,12 @@ module ESP
29
36
  end
30
37
 
31
38
  # Returns a collection of scan_intervals for the given external_account_id
32
- # Convenience method to use instead of ::find since a external_account_id is required to return alerts.
33
- #
34
- # ==== Parameters
35
- #
36
- # +external_account_id+ | Required | The ID of the external account to retrieve scan intervals for
39
+ # Convenience method to use instead of {.find} since an external_account_id is required to return alerts.
37
40
  #
38
- # ==== Example
41
+ # @param external_account_id [Integer, Numeric] Required ID of the external account to retrieve scan intervals for.
42
+ # @return [ActiveResource::PaginatedCollection<ESP::ScanInterval>]
43
+ # @raise [ArgumentError] if no +external_account_id+ is supplied.
44
+ # @example
39
45
  # alerts = ESP::ScanInterval.for_external_account(54)
40
46
  def self.for_external_account(external_account_id = nil)
41
47
  fail ArgumentError, "You must supply an external account id." unless external_account_id.present?
@@ -1,36 +1,42 @@
1
1
  module ESP
2
2
  class Service < ESP::Resource
3
- ##
4
3
  # The collection of signatures associated with this service.
4
+ #
5
+ # @return [ActiveResource::PaginatedCollection<ESP::Signature>]
5
6
  has_many :signatures, class_name: 'ESP::Signature'
6
7
 
7
8
  # Not Implemented. You cannot search for a Tag.
9
+ #
10
+ # @return [void]
8
11
  def self.where(*)
9
12
  fail ESP::NotImplementedError
10
13
  end
11
14
 
12
15
  # Not Implemented. You cannot create or update a Service.
16
+ #
17
+ # @return [void]
13
18
  def save
14
19
  fail ESP::NotImplementedError
15
20
  end
16
21
 
17
22
  # Not Implemented. You cannot destroy a Service.
23
+ #
24
+ # @return [void]
18
25
  def destroy
19
26
  fail ESP::NotImplementedError
20
27
  end
21
28
 
22
- ##
23
- # :singleton-method: find
24
- # Find a Service by id
25
- #
26
- # ==== Parameter
29
+ # @!method self.find(id)
30
+ # Find a Service by id
27
31
  #
28
- # +id+ | Required | The ID of the service to retrieve
32
+ # *call-seq* -> +super.find(id)+
29
33
  #
30
- # :call-seq:
31
- # find(id)
34
+ # @param id [Integer, Numeric, #to_i] Required ID of the service to retrieve.
35
+ # @return [ESP::Service]
32
36
 
33
- # :singleton-method: all
34
- # Return a paginated Service list
37
+ # @!method self.all
38
+ # Return a paginated Service list
39
+ #
40
+ # @return [ActiveResource::PaginatedCollection<ESP::Service>]
35
41
  end
36
42
  end