toolhound-ruby 1.0.4
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/AUTHORS.md +7 -0
- data/CHANGELOG.md +16 -0
- data/Gemfile +10 -0
- data/LICENSE +20 -0
- data/Makefile +15 -0
- data/README.md +208 -0
- data/Rakefile +10 -0
- data/lib/toolhound-ruby.rb +50 -0
- data/lib/toolhound-ruby/authentication.rb +64 -0
- data/lib/toolhound-ruby/base.rb +94 -0
- data/lib/toolhound-ruby/client.rb +113 -0
- data/lib/toolhound-ruby/client/account.rb +14 -0
- data/lib/toolhound-ruby/client/attachments.rb +88 -0
- data/lib/toolhound-ruby/client/bookmarks.rb +39 -0
- data/lib/toolhound-ruby/client/categories.rb +72 -0
- data/lib/toolhound-ruby/client/comments.rb +0 -0
- data/lib/toolhound-ruby/client/companies.rb +76 -0
- data/lib/toolhound-ruby/client/incidents.rb +167 -0
- data/lib/toolhound-ruby/client/notifications.rb +31 -0
- data/lib/toolhound-ruby/client/projects.rb +40 -0
- data/lib/toolhound-ruby/client/users.rb +81 -0
- data/lib/toolhound-ruby/configurable.rb +47 -0
- data/lib/toolhound-ruby/core_ext/string.rb +16 -0
- data/lib/toolhound-ruby/default.rb +57 -0
- data/lib/toolhound-ruby/error.rb +186 -0
- data/lib/toolhound-ruby/incident.rb +75 -0
- data/lib/toolhound-ruby/inventory.rb +19 -0
- data/lib/toolhound-ruby/project.rb +17 -0
- data/lib/toolhound-ruby/version.rb +3 -0
- data/script/bootstrap +5 -0
- data/script/cibuild +5 -0
- data/script/console +15 -0
- data/script/package +7 -0
- data/script/release +16 -0
- data/script/test +0 -0
- data/toolhound-ruby.gemspec +33 -0
- metadata +110 -0
@@ -0,0 +1,113 @@
|
|
1
|
+
# require "set"
|
2
|
+
require "toolhound-ruby/authentication"
|
3
|
+
require "toolhound-ruby/configurable"
|
4
|
+
require "toolhound-ruby/client/projects"
|
5
|
+
# require "toolhound-ruby/incident"
|
6
|
+
|
7
|
+
|
8
|
+
module Toolhound
|
9
|
+
|
10
|
+
class Client
|
11
|
+
include Toolhound::Authentication
|
12
|
+
include Toolhound::Configurable
|
13
|
+
|
14
|
+
include Toolhound::Client::Projects
|
15
|
+
# include Toolhound::Client::Bookmarks
|
16
|
+
# include Toolhound::Client::Categories
|
17
|
+
# include Toolhound::Client::Incidents
|
18
|
+
# include Toolhound::Client::Notifications
|
19
|
+
# include Toolhound::Client::Projects
|
20
|
+
# include Toolhound::Client::RateLimit
|
21
|
+
# include Toolhound::Client::Users
|
22
|
+
# include Toolhound::Client::Companies
|
23
|
+
# include Toolhound::Client::Attachments
|
24
|
+
|
25
|
+
# include Toolhound::Client::Users
|
26
|
+
# include Toolhound::Client::ProjectLibrary
|
27
|
+
# include Toolhound::Client::Projects
|
28
|
+
# include Toolhound::Client::Templates
|
29
|
+
# include Toolhound::Client::Checklists
|
30
|
+
# include Toolhound::Client::Tasks
|
31
|
+
# include Toolhound::Client::Issues
|
32
|
+
# include Toolhound::Client::Utils
|
33
|
+
|
34
|
+
# def projects
|
35
|
+
#
|
36
|
+
# end
|
37
|
+
# attr_accessor :access_token, :client_id, :uid, :expiry, :me
|
38
|
+
attr_accessor :connection, :dataserver, :username, :password, :port
|
39
|
+
|
40
|
+
def initialize(options = {})
|
41
|
+
|
42
|
+
# Use options passed in, but fall back to module defaults
|
43
|
+
Toolhound::Configurable.keys.each do |key|
|
44
|
+
instance_variable_set(:"@#{key}", options[key] || Toolhound.instance_variable_get(:"@#{key}"))
|
45
|
+
end
|
46
|
+
|
47
|
+
sign_in if authenticatable?
|
48
|
+
end
|
49
|
+
|
50
|
+
# Compares client options to a Hash of requested options
|
51
|
+
#
|
52
|
+
# @param opts [Hash] Options to compare with current client options
|
53
|
+
# @return [Boolean]
|
54
|
+
def same_options?(opts)
|
55
|
+
opts.hash == options.hash
|
56
|
+
end
|
57
|
+
|
58
|
+
|
59
|
+
def inspect # :nodoc:
|
60
|
+
|
61
|
+
inspected = super
|
62
|
+
|
63
|
+
# mask password
|
64
|
+
inspected = inspected.gsub! @password, "*******" if @password
|
65
|
+
# Only show last 4 of token, secret
|
66
|
+
# if @access_token
|
67
|
+
# inspected = inspected.gsub! @access_token, "#{'*'*36}#{@access_token[36..-1]}"
|
68
|
+
# end
|
69
|
+
# if @client_secret
|
70
|
+
# inspected = inspected.gsub! @client_secret, "#{'*'*36}#{@client_secret[36..-1]}"
|
71
|
+
# end
|
72
|
+
|
73
|
+
inspected
|
74
|
+
end
|
75
|
+
|
76
|
+
|
77
|
+
# Set username for authentication
|
78
|
+
#
|
79
|
+
# @param value [String] Toolhound-field username
|
80
|
+
def username=(value)
|
81
|
+
reset_connection
|
82
|
+
@email = value
|
83
|
+
end
|
84
|
+
|
85
|
+
# Set password for authentication
|
86
|
+
#
|
87
|
+
# @param value [String] Toolhound-field password
|
88
|
+
def password=(value)
|
89
|
+
reset_connection
|
90
|
+
@password = value
|
91
|
+
end
|
92
|
+
|
93
|
+
def reset_connection
|
94
|
+
@connection = nil
|
95
|
+
end
|
96
|
+
|
97
|
+
|
98
|
+
# Wrapper around Kernel#warn to print warnings unless
|
99
|
+
# TOOLHOUND_SILENT is set to true.
|
100
|
+
#
|
101
|
+
# @return [nil]
|
102
|
+
def nearmiss_warn(*message)
|
103
|
+
unless ENV['TOOLHOUND_SILENT']
|
104
|
+
warn message
|
105
|
+
end
|
106
|
+
end
|
107
|
+
|
108
|
+
|
109
|
+
|
110
|
+
end
|
111
|
+
|
112
|
+
|
113
|
+
end
|
@@ -0,0 +1,88 @@
|
|
1
|
+
module Nearmiss
|
2
|
+
class Client
|
3
|
+
|
4
|
+
# Methods for the Attachments API
|
5
|
+
#
|
6
|
+
module Attachments
|
7
|
+
|
8
|
+
# List nearmiss attachments
|
9
|
+
#
|
10
|
+
# @return [Array<Sawyer::Resource>] List of attachments
|
11
|
+
#
|
12
|
+
def attachments(options = {})
|
13
|
+
since = options[:since] || options["since"]
|
14
|
+
|
15
|
+
options.merge!(since: iso8601(parse_date(since))) if since
|
16
|
+
|
17
|
+
paginate "attachments", options
|
18
|
+
end
|
19
|
+
alias :list_attachments :attachments
|
20
|
+
|
21
|
+
# Get a single attachment
|
22
|
+
#
|
23
|
+
# @param attachment [String] ID of attachment to fetch
|
24
|
+
# @return [Sawyer::Resource] Incident information
|
25
|
+
#
|
26
|
+
def attachment(attachment, options = {})
|
27
|
+
get "attachments/#{attachment}", options
|
28
|
+
end
|
29
|
+
|
30
|
+
# Project attachments
|
31
|
+
#
|
32
|
+
# @param project [String, Hash, Incident] Incident
|
33
|
+
# @return [Sawyer::Resource] Incident information
|
34
|
+
#
|
35
|
+
def incident_attachments(incident, options = {})
|
36
|
+
|
37
|
+
paginate "#{Incident.new(incident).path}/attachments", options
|
38
|
+
|
39
|
+
end
|
40
|
+
alias :nearmiss_attachments :incident_attachments
|
41
|
+
|
42
|
+
|
43
|
+
# Create an attachment
|
44
|
+
#
|
45
|
+
# @param options [Hash] Attachment information.
|
46
|
+
# @option options [String] :created_by_id Id of person who created this attachment
|
47
|
+
# @option options [String] :original_filename title of file
|
48
|
+
# @option options [String] :content_type e.g. `image/jpeg`
|
49
|
+
# @option options [String] :attachable_id associated ID of resource this attachment belongs to
|
50
|
+
# @option options [String] :attachable_type e.g. Incident
|
51
|
+
|
52
|
+
#
|
53
|
+
# @return [Sawyer::Resource] Newly created attachment info
|
54
|
+
def create_attachment(options = {})
|
55
|
+
post 'attachments', options
|
56
|
+
end
|
57
|
+
|
58
|
+
|
59
|
+
def update_attachment(attachment, options = {})
|
60
|
+
patch "attachments/#{attachment}", options
|
61
|
+
end
|
62
|
+
alias :edit_attachment :update_attachment
|
63
|
+
|
64
|
+
|
65
|
+
protected
|
66
|
+
|
67
|
+
def iso8601(date)
|
68
|
+
if date.respond_to?(:iso8601)
|
69
|
+
date.iso8601
|
70
|
+
else
|
71
|
+
date.strftime("%Y-%m-%dT%H:%M:%S%Z")
|
72
|
+
end
|
73
|
+
end
|
74
|
+
# Parses the given string representation of a date, throwing a meaningful exception
|
75
|
+
# (containing the date that failed to parse) in case of failure.
|
76
|
+
#
|
77
|
+
# @param date [String] String representation of a date
|
78
|
+
# @return [DateTime]
|
79
|
+
def parse_date(date)
|
80
|
+
date = DateTime.parse(date.to_s)
|
81
|
+
rescue ArgumentError
|
82
|
+
raise ArgumentError, "#{date} is not a valid date"
|
83
|
+
end
|
84
|
+
|
85
|
+
|
86
|
+
end
|
87
|
+
end
|
88
|
+
end
|
@@ -0,0 +1,39 @@
|
|
1
|
+
module Nearmiss
|
2
|
+
class Client
|
3
|
+
|
4
|
+
# Methods for the Bookmarks API
|
5
|
+
#
|
6
|
+
module Bookmarks
|
7
|
+
|
8
|
+
# List bookmarks
|
9
|
+
#
|
10
|
+
# @return [Array<Sawyer::Resource>] List of bookmarks
|
11
|
+
def bookmarks(options = {})
|
12
|
+
paginate "bookmarks", options
|
13
|
+
end
|
14
|
+
alias :list_bookmarks :bookmarks
|
15
|
+
|
16
|
+
# Get a single bookmark
|
17
|
+
#
|
18
|
+
# @param bookmark [String] ID of bookmark to fetch
|
19
|
+
# @return [Sawyer::Resource] Bookmark information
|
20
|
+
#
|
21
|
+
def bookmark(bookmark, options={})
|
22
|
+
get "bookmarks/#{bookmark}", options
|
23
|
+
end
|
24
|
+
|
25
|
+
# Delete a bookmark
|
26
|
+
#
|
27
|
+
# @param bookmark_id [String] Id of the bookmark.
|
28
|
+
# @return [Boolean] True if bookmark deleted, false otherwise.
|
29
|
+
# @example
|
30
|
+
# @client.delete_bookmark('208sdaz3')
|
31
|
+
#
|
32
|
+
def delete_bookmark(bookmark_id, options={})
|
33
|
+
boolean_from_response(:delete, "bookmarks/#{bookmark_id}", options)
|
34
|
+
|
35
|
+
end
|
36
|
+
|
37
|
+
end
|
38
|
+
end
|
39
|
+
end
|
@@ -0,0 +1,72 @@
|
|
1
|
+
module Nearmiss
|
2
|
+
class Client
|
3
|
+
|
4
|
+
# Methods for the Categories API
|
5
|
+
#
|
6
|
+
module Categories
|
7
|
+
|
8
|
+
# List categories
|
9
|
+
#
|
10
|
+
# @return [Array<Sawyer::Resource>] List of categories
|
11
|
+
def categories(options = {})
|
12
|
+
paginate "categories", options
|
13
|
+
end
|
14
|
+
alias :list_categories :categories
|
15
|
+
alias :list_cats :categories
|
16
|
+
alias :cats :categories
|
17
|
+
|
18
|
+
# Get a single category
|
19
|
+
#
|
20
|
+
# @param category [String] ID of category to fetch
|
21
|
+
# @return [Sawyer::Resource] Category information
|
22
|
+
#
|
23
|
+
def category(category, options={})
|
24
|
+
get "categories/#{category}", options
|
25
|
+
end
|
26
|
+
alias :cat :category
|
27
|
+
|
28
|
+
|
29
|
+
# Create a category
|
30
|
+
#
|
31
|
+
# @param options [Hash] Category information.
|
32
|
+
# @option options [String] :name e.g. Name of category
|
33
|
+
# @return [Sawyer::Resource] Newly created category info
|
34
|
+
def create_category(options = {})
|
35
|
+
post 'categories', options
|
36
|
+
end
|
37
|
+
alias :create_cat :create_category
|
38
|
+
|
39
|
+
# Edit a category
|
40
|
+
#
|
41
|
+
# @param options [Hash] Project information.
|
42
|
+
# @option options [String] :name e.g. Tools
|
43
|
+
#
|
44
|
+
# @return
|
45
|
+
# [Sawyer::Resource] Edited category info
|
46
|
+
# @example Update a category
|
47
|
+
# @client.edit_category('some_id', {
|
48
|
+
# name: "New name of category",
|
49
|
+
# })
|
50
|
+
|
51
|
+
def edit_category(category, options = {})
|
52
|
+
patch "categories/#{category}", options
|
53
|
+
end
|
54
|
+
alias :edit_cat :edit_category
|
55
|
+
|
56
|
+
|
57
|
+
# Delete a category
|
58
|
+
#
|
59
|
+
# @param category [String] Project ID
|
60
|
+
# @return [Boolean] Indicating success of deletion
|
61
|
+
#
|
62
|
+
def delete_category(category, options = {})
|
63
|
+
boolean_from_response :delete, "categories/#{category}", options
|
64
|
+
end
|
65
|
+
alias :delete_cat :delete_category
|
66
|
+
alias :remove_category :delete_category
|
67
|
+
alias :remove_cat :delete_category
|
68
|
+
|
69
|
+
|
70
|
+
end
|
71
|
+
end
|
72
|
+
end
|
File without changes
|
@@ -0,0 +1,76 @@
|
|
1
|
+
module Nearmiss
|
2
|
+
class Client
|
3
|
+
|
4
|
+
# Methods for the Companies API
|
5
|
+
#
|
6
|
+
module Companies
|
7
|
+
|
8
|
+
# List companies
|
9
|
+
#
|
10
|
+
# @note Shows a list of companies for the users organization aka account
|
11
|
+
#
|
12
|
+
# @return [Array<Sawyer::Resource>] List of companys
|
13
|
+
def companies(options = {})
|
14
|
+
paginate "companies", options
|
15
|
+
end
|
16
|
+
alias :list_companies :companies
|
17
|
+
|
18
|
+
# Get a single company
|
19
|
+
#
|
20
|
+
# @param company [String] UUID of company to fetch
|
21
|
+
# @return [Sawyer::Resource] Project information
|
22
|
+
#
|
23
|
+
def company(company, options = {})
|
24
|
+
get "#{company_path(company)}", options
|
25
|
+
end
|
26
|
+
|
27
|
+
# Create a company
|
28
|
+
#
|
29
|
+
# @param options [Hash] Project information.
|
30
|
+
# @option options [String] :name e.g. Berkeley Art Museum
|
31
|
+
# @option options [String] :company_id e.g. 10611.70
|
32
|
+
# @return [Sawyer::Resource] Newly created company info
|
33
|
+
def create_company(options = {})
|
34
|
+
post 'companies', options
|
35
|
+
end
|
36
|
+
|
37
|
+
# Edit a company
|
38
|
+
#
|
39
|
+
# @param options [Hash] Project information.
|
40
|
+
# @option options [String] :name e.g. Berkeley Art Museum
|
41
|
+
# @option options [String] :company_id e.g. 10611.70
|
42
|
+
#
|
43
|
+
# @return
|
44
|
+
# [Sawyer::Resource] Newly created company info
|
45
|
+
# @example Update a company
|
46
|
+
# @client.edit_company('some_id', {
|
47
|
+
# name: "New name of company",
|
48
|
+
# company_id: "1043.32"
|
49
|
+
# })
|
50
|
+
#
|
51
|
+
def edit_company(company, options = {})
|
52
|
+
patch "#{company_path(company)}", options
|
53
|
+
end
|
54
|
+
|
55
|
+
# Delete a company
|
56
|
+
#
|
57
|
+
# @param company [String] Project ID
|
58
|
+
# @return [Boolean] Indicating success of deletion
|
59
|
+
#
|
60
|
+
def delete_company(company, options = {})
|
61
|
+
boolean_from_response :delete, "companies/#{company}", options
|
62
|
+
end
|
63
|
+
alias :remove_company :delete_company
|
64
|
+
|
65
|
+
private
|
66
|
+
|
67
|
+
def company_path(id)
|
68
|
+
if uuid?(id)
|
69
|
+
"companies/#{id}"
|
70
|
+
else
|
71
|
+
"company/#{id}"
|
72
|
+
end
|
73
|
+
end
|
74
|
+
end
|
75
|
+
end
|
76
|
+
end
|
@@ -0,0 +1,167 @@
|
|
1
|
+
module Nearmiss
|
2
|
+
class Client
|
3
|
+
|
4
|
+
# Methods for the Incidents API
|
5
|
+
#
|
6
|
+
module Incidents
|
7
|
+
|
8
|
+
# List nearmiss incidents
|
9
|
+
#
|
10
|
+
# @return [Array<Sawyer::Resource>] List of incidents
|
11
|
+
#
|
12
|
+
def incidents(options = {})
|
13
|
+
since = options[:since] || options["since"]
|
14
|
+
|
15
|
+
options.merge!(since: iso8601(parse_date(since))) if since
|
16
|
+
|
17
|
+
paginate "incidents", options
|
18
|
+
end
|
19
|
+
alias :list_incidents :incidents
|
20
|
+
alias :list_nearmisses :incidents
|
21
|
+
alias :nearmisses :incidents
|
22
|
+
|
23
|
+
|
24
|
+
# Get a single incident
|
25
|
+
#
|
26
|
+
# @param incident [String] ID of incident to fetch
|
27
|
+
# @return [Sawyer::Resource] Incident information
|
28
|
+
#
|
29
|
+
def incident(incident, options = {})
|
30
|
+
get "incidents/#{incident}", options
|
31
|
+
end
|
32
|
+
alias :nearmiss :incident
|
33
|
+
|
34
|
+
# Project incidents
|
35
|
+
#
|
36
|
+
# @param project [String] ID of project
|
37
|
+
# @return [Sawyer::Resource] Incident information
|
38
|
+
#
|
39
|
+
def project_incidents(project, options = {})
|
40
|
+
|
41
|
+
paginate "#{Project.new(project).path}/incidents", options
|
42
|
+
|
43
|
+
end
|
44
|
+
|
45
|
+
|
46
|
+
# Create an incident
|
47
|
+
#
|
48
|
+
# @param options [Hash] Incident information.
|
49
|
+
# @option options [String] :title Name of incident
|
50
|
+
# @option options [String] :note Description of what happened
|
51
|
+
# @option options [String] :category_id ID of associated category
|
52
|
+
# @option options [String] :project_id ID of the project where the incident occured
|
53
|
+
# @option options [String] :company Which company did the incident
|
54
|
+
# @option options [String] :date When did the nearmiss occur
|
55
|
+
# @option options [String] :trade e.g. is actually the activity
|
56
|
+
# @option options [Boolean] :is_public Submit the nearmiss publically or private
|
57
|
+
#
|
58
|
+
# @option options [String] :bad_weather "rainy", "sunny", "cloudy", "windy"
|
59
|
+
# @option options [String] :injured Answers: "yes", "no"
|
60
|
+
# @option options [String] :jha Answers: "yes", "no"
|
61
|
+
# @option options [String] :messy Answers: "yes", "no"
|
62
|
+
#
|
63
|
+
# @option options [Array] :attachments
|
64
|
+
#
|
65
|
+
# @return [Sawyer::Resource] Newly created incident info
|
66
|
+
def create_incident(options = {})
|
67
|
+
post 'incidents', options
|
68
|
+
end
|
69
|
+
alias :create_nearmiss :create_incident
|
70
|
+
|
71
|
+
def update_incident(incident, options = {})
|
72
|
+
patch "incidents/#{incident}", options
|
73
|
+
end
|
74
|
+
alias :edit_incident :update_incident
|
75
|
+
alias :update_nearmiss :update_incident
|
76
|
+
alias :edit_nearmiss :update_incident
|
77
|
+
|
78
|
+
# List incident comments
|
79
|
+
#
|
80
|
+
# @param incident_id [String] Incident Id.
|
81
|
+
# @return [Array<Sawyer::Resource>] Array of hashes representing comments.
|
82
|
+
# @example
|
83
|
+
# Nearmiss.incident_comments('3528ae645')
|
84
|
+
def incident_comments(incident_id, options = {})
|
85
|
+
paginate "incidents/#{incident_id}/comments", options
|
86
|
+
end
|
87
|
+
alias :nearmiss_comments :incident_comments
|
88
|
+
|
89
|
+
# Get incident comment
|
90
|
+
#
|
91
|
+
# @param incident_id [String] Id of the incident.
|
92
|
+
# @param comment_id [Integer] Id of the incident comment.
|
93
|
+
# @return [Sawyer::Resource] Hash representing incident comment.
|
94
|
+
# @example
|
95
|
+
# Nearmiss.incident_comment('208sdaz3', 1451398)
|
96
|
+
def incident_comment(incident_id, comment_id, options = {})
|
97
|
+
get "incidents/#{incident_id}/comments/#{comment_id}", options
|
98
|
+
end
|
99
|
+
alias :nearmiss_comment :incident_comment
|
100
|
+
|
101
|
+
# Create incident comment
|
102
|
+
#
|
103
|
+
# @param incident_id [String] Id of the incident.
|
104
|
+
# @param comment [String] Comment contents.
|
105
|
+
# @return [Sawyer::Resource] Hash representing incident comment.
|
106
|
+
# @example
|
107
|
+
# Nearmiss.incident_comment('208sdaz3', "Some text")
|
108
|
+
def create_incident_comment(incident_id, comment, options = {})
|
109
|
+
options.merge!({text: comment})
|
110
|
+
post "incidents/#{incident_id}/comments", options
|
111
|
+
end
|
112
|
+
alias :create_nearmiss_comment :create_incident_comment
|
113
|
+
|
114
|
+
# Update incident comment
|
115
|
+
#
|
116
|
+
# @param incident_id [String] Id of the incident.
|
117
|
+
# @param comment_id [String] Id of the comment.
|
118
|
+
# @param comment [String] Comment contents.
|
119
|
+
# @return [Sawyer::Resource] Hash representing incident comment.
|
120
|
+
# @example
|
121
|
+
# Nearmiss.incident_comment('208sdaz3', "Some text")
|
122
|
+
def update_incident_comment(incident_id, comment_id, comment, options = {})
|
123
|
+
options.merge!({text: comment})
|
124
|
+
patch "incidents/#{incident_id}/comments/#{comment_id}", options
|
125
|
+
end
|
126
|
+
alias :edit_incident_comment :update_incident_comment
|
127
|
+
alias :update_nearmiss_comment :update_incident_comment
|
128
|
+
alias :edit_nearmiss_comment :update_incident_comment
|
129
|
+
|
130
|
+
# Delete incident comment
|
131
|
+
#
|
132
|
+
# Requires authenticated client.
|
133
|
+
#
|
134
|
+
# @param incident_id [String] Id of the incident.
|
135
|
+
# @param comment_id [Integer] Id of the comment to delete.
|
136
|
+
# @return [Boolean] True if comment deleted, false otherwise.
|
137
|
+
# @example
|
138
|
+
# @client.delete_incident_comment('208sdaz3', '586399')
|
139
|
+
def delete_incident_comment(incident_id, comment_id, options = {})
|
140
|
+
boolean_from_response(:delete, "incidents/#{incident_id}/comments/#{comment_id}", options)
|
141
|
+
end
|
142
|
+
alias :delete_nearmiss_comment :delete_incident_comment
|
143
|
+
|
144
|
+
protected
|
145
|
+
|
146
|
+
def iso8601(date)
|
147
|
+
if date.respond_to?(:iso8601)
|
148
|
+
date.iso8601
|
149
|
+
else
|
150
|
+
date.strftime("%Y-%m-%dT%H:%M:%S%Z")
|
151
|
+
end
|
152
|
+
end
|
153
|
+
# Parses the given string representation of a date, throwing a meaningful exception
|
154
|
+
# (containing the date that failed to parse) in case of failure.
|
155
|
+
#
|
156
|
+
# @param date [String] String representation of a date
|
157
|
+
# @return [DateTime]
|
158
|
+
def parse_date(date)
|
159
|
+
date = DateTime.parse(date.to_s)
|
160
|
+
rescue ArgumentError
|
161
|
+
raise ArgumentError, "#{date} is not a valid date"
|
162
|
+
end
|
163
|
+
|
164
|
+
|
165
|
+
end
|
166
|
+
end
|
167
|
+
end
|