opsgenie-schedule 0.0.1 → 0.1.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: ab20a3a32e3fe97d6a9ef971031383bf525878e4209d8f7d389eb53ebd952527
4
- data.tar.gz: db61f6926403357695079a624a12114c93dfbb25be8a7d1d09975fc787eb4b83
3
+ metadata.gz: fc6e0e949d909c453328c4ad695aebb4b4c05d6aefe60c71926112ed1376f18b
4
+ data.tar.gz: 7f5732c274402cea99e7be2c595c39bb0008894856aea5678609c471503c0ac8
5
5
  SHA512:
6
- metadata.gz: db13001f5c1bcfb03158b33cb5e564b788cf83dc1475c5dce3651c7d81f73f5f5140599fe1597d58defa596e8cddd4e1989b9f4a50ed0b7c40f4611aa2a1a6e1
7
- data.tar.gz: d68bc79a497d2b9835eb4efe7c4c5ffc8acfcd1f61dc42d3110bc710fbce2eab96a09177a1458195259c671a1a0fe3a24d98997cc89f533cb27843e6b8dbc25d
6
+ metadata.gz: e48d76aa2f7e2cbb6f1b27f33f9626c315ebfe5695acac88dedb39cb290ec96592039332999b41505e505ed2884e407b0993636d62a178d70b46e374684933f5
7
+ data.tar.gz: 672a690dd7a6f9713a1922df8f7f0227052137b29a1cbe7052dda7c2a3db047745bde455634905ab10642cc5516da41dc58e4f946f70e1a7e03bee1db58d1110
data/.rspec CHANGED
@@ -1 +1,2 @@
1
1
  --require spec_helper
2
+ --format documentation
data/Gemfile.lock CHANGED
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- opsgenie-schedule (0.0.1)
4
+ opsgenie-schedule (0.1.0)
5
5
  httparty (~> 0.17)
6
6
 
7
7
  GEM
@@ -23,7 +23,7 @@ GEM
23
23
  method_source (0.9.2)
24
24
  mime-types (3.3)
25
25
  mime-types-data (~> 3.2015)
26
- mime-types-data (3.2019.0904)
26
+ mime-types-data (3.2019.1009)
27
27
  multi_xml (0.6.0)
28
28
  parallel (1.17.0)
29
29
  parser (2.6.4.1)
@@ -61,9 +61,7 @@ GEM
61
61
  standard (0.1.4)
62
62
  rubocop (~> 0.72.0)
63
63
  rubocop-performance (~> 1.4.0)
64
- timecop (0.9.1)
65
64
  unicode-display_width (1.6.0)
66
- vcr (5.0.0)
67
65
  webmock (3.7.6)
68
66
  addressable (>= 2.3.6)
69
67
  crack (>= 0.3.2)
@@ -80,9 +78,7 @@ DEPENDENCIES
80
78
  rake (~> 10.0)
81
79
  rspec (~> 3.0)
82
80
  standard (~> 0.1)
83
- timecop (~> 0.9)
84
- vcr (~> 5.0)
85
81
  webmock (~> 3.5)
86
82
 
87
83
  BUNDLED WITH
88
- 2.0.1
84
+ 2.0.2
data/README.md CHANGED
@@ -29,9 +29,9 @@ $ gem install opsgenie-schedule
29
29
  Require and initialize the gem like so:
30
30
 
31
31
  ```ruby
32
- require 'opsgenie-schedule'
32
+ require 'opsgenie'
33
33
 
34
- Opsgenie::Configure(api_key: "YOUR_OPSGENIE_API_KEY")
34
+ Opsgenie.configure(api_key: "YOUR_OPSGENIE_API_KEY")
35
35
  ```
36
36
 
37
37
  And fetch a schedule by its name:
@@ -53,10 +53,10 @@ schedule.on_calls
53
53
  #=> ["someone@example.com", "someone-else@example.com"]
54
54
  ```
55
55
 
56
- Or a given date like so:
56
+ Or a given date time like so:
57
57
 
58
58
  ```ruby
59
- date = Date.parse("2019-01-01")
59
+ date = DateTime.parse("2019-01-01T10:00:00")
60
60
  schedule.on_calls(date)
61
61
  #=> ["someone@example.com", "someone-else@example.com"]
62
62
  ```
data/lib/opsgenie.rb CHANGED
@@ -2,6 +2,7 @@ require "httparty"
2
2
 
3
3
  require "opsgenie/client"
4
4
  require "opsgenie/schedule"
5
+ require "opsgenie/rotation"
5
6
  require "opsgenie/config"
6
7
 
7
8
  module Opsgenie
@@ -0,0 +1,47 @@
1
+ module Opsgenie
2
+ class Rotation
3
+ attr_reader :schedule,
4
+ :id,
5
+ :name,
6
+ :time_restriction,
7
+ :start_date,
8
+ :type,
9
+ :participants
10
+
11
+ def initialize(schedule, attrs)
12
+ @schedule = schedule
13
+ @id = attrs["id"]
14
+ @name = attrs["name"]
15
+ @time_restriction = attrs["timeRestriction"]
16
+ @start_date = DateTime.parse(attrs["startDate"])
17
+ @type = attrs["type"]
18
+ @participants = attrs["participants"]
19
+ end
20
+
21
+ def on_call_for_date(date)
22
+ day_of_the_week = date.strftime("%A").downcase
23
+ restriction = time_restriction["restrictions"].find { |r|
24
+ r["startDay"] == day_of_the_week
25
+ }
26
+
27
+ return unless restriction
28
+
29
+ time = Time.new(
30
+ date.year,
31
+ date.month,
32
+ date.day,
33
+ restriction["startHour"],
34
+ restriction["startMin"]
35
+ )
36
+
37
+ on_calls = schedule.on_calls((time + 60).to_datetime)
38
+ on_calls.select { |name| participant_usernames.include?(name) }
39
+ end
40
+
41
+ private
42
+
43
+ def participant_usernames
44
+ participants.map { |p| p["username"] }
45
+ end
46
+ end
47
+ end
@@ -2,11 +2,11 @@ require "date"
2
2
 
3
3
  module Opsgenie
4
4
  class Schedule
5
- attr_reader :id, :name
5
+ attr_reader :id, :name, :rotations
6
6
 
7
7
  class << self
8
8
  def all
9
- body = Opsgenie::Client.get("schedules")
9
+ body = Opsgenie::Client.get("schedules?expand=rotation")
10
10
  body["data"].map { |s| new(s) }
11
11
  end
12
12
 
@@ -20,18 +20,19 @@ module Opsgenie
20
20
 
21
21
  def find(id_or_name, type = "id")
22
22
  body = Opsgenie::Client.get("schedules/#{id_or_name}?identifierType=#{type}")
23
- new(body["data"])
23
+ new(body["data"]) unless body["data"].nil?
24
24
  end
25
25
  end
26
26
 
27
27
  def initialize(attrs)
28
28
  @id = attrs["id"]
29
29
  @name = attrs["name"]
30
+ @rotations = attrs["rotations"].map { |r| Rotation.new(self, r) }
30
31
  end
31
32
 
32
- def on_calls(date = Date.today)
33
- datetime = "#{date}T10:00:00%2B00:00"
34
- endpoint = "schedules/#{id}/on-calls?date=#{datetime}"
33
+ def on_calls(datetime = nil)
34
+ endpoint = "schedules/#{id}/on-calls"
35
+ endpoint += "?date=#{CGI.escape datetime.to_s}" unless datetime.nil?
35
36
  body = Opsgenie::Client.get(endpoint)
36
37
  get_participants(body).map { |u| u["name"] }
37
38
  end
@@ -3,7 +3,7 @@ $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
3
3
 
4
4
  Gem::Specification.new do |spec|
5
5
  spec.name = "opsgenie-schedule"
6
- spec.version = "0.0.1"
6
+ spec.version = "0.1.0"
7
7
  spec.authors = ["Stuart Harrison"]
8
8
  spec.email = ["stuart@dxw.com"]
9
9
 
@@ -25,8 +25,6 @@ Gem::Specification.new do |spec|
25
25
  spec.add_development_dependency "rake", "~> 10.0"
26
26
  spec.add_development_dependency "rspec", "~> 3.0"
27
27
  spec.add_development_dependency "standard", "~> 0.1"
28
- spec.add_development_dependency "timecop", "~> 0.9"
29
- spec.add_development_dependency "vcr", "~> 5.0"
30
28
  spec.add_development_dependency "webmock", "~> 3.5"
31
29
  spec.add_development_dependency "dotenv", "~> 2.7"
32
30
 
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: opsgenie-schedule
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.1
4
+ version: 0.1.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Stuart Harrison
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2019-09-30 00:00:00.000000000 Z
11
+ date: 2020-02-24 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler
@@ -80,34 +80,6 @@ dependencies:
80
80
  - - "~>"
81
81
  - !ruby/object:Gem::Version
82
82
  version: '0.1'
83
- - !ruby/object:Gem::Dependency
84
- name: timecop
85
- requirement: !ruby/object:Gem::Requirement
86
- requirements:
87
- - - "~>"
88
- - !ruby/object:Gem::Version
89
- version: '0.9'
90
- type: :development
91
- prerelease: false
92
- version_requirements: !ruby/object:Gem::Requirement
93
- requirements:
94
- - - "~>"
95
- - !ruby/object:Gem::Version
96
- version: '0.9'
97
- - !ruby/object:Gem::Dependency
98
- name: vcr
99
- requirement: !ruby/object:Gem::Requirement
100
- requirements:
101
- - - "~>"
102
- - !ruby/object:Gem::Version
103
- version: '5.0'
104
- type: :development
105
- prerelease: false
106
- version_requirements: !ruby/object:Gem::Requirement
107
- requirements:
108
- - - "~>"
109
- - !ruby/object:Gem::Version
110
- version: '5.0'
111
83
  - !ruby/object:Gem::Dependency
112
84
  name: webmock
113
85
  requirement: !ruby/object:Gem::Requirement
@@ -171,6 +143,7 @@ files:
171
143
  - lib/opsgenie.rb
172
144
  - lib/opsgenie/client.rb
173
145
  - lib/opsgenie/config.rb
146
+ - lib/opsgenie/rotation.rb
174
147
  - lib/opsgenie/schedule.rb
175
148
  - opsgenie-schedule.gemspec
176
149
  homepage: https://github.com/dxw/opsgenie-schedule