chook 1.0.1.b2 → 1.1.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (38) hide show
  1. checksums.yaml +5 -5
  2. data/CHANGES.md +21 -0
  3. data/README.md +243 -36
  4. data/bin/chook-server +29 -1
  5. data/data/chook.conf.example +104 -0
  6. data/data/sample_handlers/RestAPIOperation.rb +12 -8
  7. data/data/sample_handlers/SmartGroupComputerMembershipChange.rb +3 -6
  8. data/data/sample_jsons/SmartGroupComputerMembershipChange.json +3 -1
  9. data/data/sample_jsons/SmartGroupMobileDeviceMembershipChange.json +3 -1
  10. data/lib/chook/configuration.rb +20 -8
  11. data/lib/chook/event/handled_event.rb +15 -12
  12. data/lib/chook/event/handled_event/handlers.rb +136 -83
  13. data/lib/chook/event/handled_event_logger.rb +86 -0
  14. data/lib/chook/event_handling.rb +1 -0
  15. data/lib/chook/foundation.rb +2 -0
  16. data/lib/chook/procs.rb +17 -1
  17. data/lib/chook/server.rb +71 -74
  18. data/lib/chook/server/log.rb +215 -0
  19. data/lib/chook/server/public/css/chook.css +125 -0
  20. data/lib/chook/server/public/imgs/ChookLogoAlMcWhiggin.png +0 -0
  21. data/lib/chook/server/public/js/chook.js +127 -0
  22. data/lib/chook/server/public/js/logstream.js +101 -0
  23. data/lib/chook/server/routes.rb +45 -0
  24. data/lib/chook/server/routes/handle_webhook_event.rb +22 -3
  25. data/lib/chook/server/routes/handlers.rb +52 -0
  26. data/lib/chook/server/routes/home.rb +34 -1
  27. data/lib/chook/server/routes/log.rb +106 -0
  28. data/lib/chook/server/views/admin.haml +11 -0
  29. data/lib/chook/server/views/bak.haml +48 -0
  30. data/lib/chook/server/views/config.haml +15 -0
  31. data/lib/chook/server/views/handlers.haml +48 -0
  32. data/lib/chook/server/views/layout.haml +39 -0
  33. data/lib/chook/server/views/logstream.haml +32 -0
  34. data/lib/chook/server/views/sketch_admin +44 -0
  35. data/lib/chook/subject.rb +1 -2
  36. data/lib/chook/subject/smart_group.rb +6 -0
  37. data/lib/chook/version.rb +1 -1
  38. metadata +73 -18
@@ -29,7 +29,40 @@ module Chook
29
29
  class Server < Sinatra::Base
30
30
 
31
31
  get '/' do
32
- body "Hello, this is Chook, a Jamf Pro WebHook handling service from Pixar Animation Studios!\n"
32
+ protected!
33
+
34
+ # a list of current handlers for the admin page
35
+ @handlers_for_admin_page = []
36
+
37
+ Chook::HandledEvent::Handlers.handlers.keys.sort.each do |eventname|
38
+ Chook::HandledEvent::Handlers.handlers[eventname].each do |handler|
39
+ if handler.is_a? Pathname
40
+ file = handler
41
+ type = :external
42
+ else
43
+ file = Pathname.new(Chook.config.handler_dir) + handler.handler_file
44
+ type = :internal
45
+ end # if else
46
+ @handlers_for_admin_page << { event: eventname, file: file, type: type }
47
+ end # handlers each
48
+ end # Handlers.handlers.each
49
+
50
+ # the current config, for the admin page
51
+ @config_text =
52
+ if Chook::Configuration::DEFAULT_CONF_FILE.file?
53
+ @config_src = Chook::Configuration::DEFAULT_CONF_FILE.to_s
54
+ Chook::Configuration::DEFAULT_CONF_FILE.read
55
+
56
+ elsif Chook::Configuration::SAMPLE_CONF_FILE.file?
57
+ @config_src = "Using default values, showing sample config file at #{Chook::Configuration::SAMPLE_CONF_FILE}"
58
+ Chook::Configuration::SAMPLE_CONF_FILE.read
59
+
60
+ else
61
+ @config_src = "No #{Chook::Configuration::DEFAULT_CONF_FILE} or sample config file found."
62
+ @config_src
63
+ end
64
+
65
+ haml :admin
33
66
  end # get /
34
67
 
35
68
  end # class
@@ -0,0 +1,106 @@
1
+ ### Copyright 2017 Pixar
2
+
3
+ ###
4
+ ### Licensed under the Apache License, Version 2.0 (the "Apache License")
5
+ ### with the following modification; you may not use this file except in
6
+ ### compliance with the Apache License and the following modification to it:
7
+ ### Section 6. Trademarks. is deleted and replaced with:
8
+ ###
9
+ ### 6. Trademarks. This License does not grant permission to use the trade
10
+ ### names, trademarks, service marks, or product names of the Licensor
11
+ ### and its affiliates, except as required to comply with Section 4(c) of
12
+ ### the License and to reproduce the content of the NOTICE file.
13
+ ###
14
+ ### You may obtain a copy of the Apache License at
15
+ ###
16
+ ### http://www.apache.org/licenses/LICENSE-2.0
17
+ ###
18
+ ### Unless required by applicable law or agreed to in writing, software
19
+ ### distributed under the Apache License with the above modification is
20
+ ### distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
21
+ ### KIND, either express or implied. See the Apache License for the specific
22
+ ### language governing permissions and limitations under the Apache License.
23
+ ###
24
+ ###
25
+
26
+ module Chook
27
+
28
+ # see server.rb
29
+ class Server < Sinatra::Base
30
+
31
+ # External Handlers can use this route to make log entries.
32
+ #
33
+ # The request body must be a JSON object (Hash) wth 2 keys 'level' and 'message'
34
+ # where both values are strings
35
+ #
36
+ # Here's an example with curl, split to multi-line for clarity:
37
+ #
38
+ # curl -H "Content-Type: application/json" \
39
+ # -X POST \
40
+ # --data '{"level":"debug", "message":"It Worked"}' \
41
+ # https://user:passwd@chookserver.myorg.org:443/log
42
+ #
43
+ post '/log' do
44
+ protected!
45
+ request.body.rewind # in case someone already read it
46
+ raw = request.body.read
47
+
48
+ begin
49
+ logentry = JSON.parse raw, symbolize_names: true
50
+ raise if logentry[:level].to_s.empty? || logentry[:message].to_s.empty?
51
+ rescue
52
+ Chook::Server::Log.logger.error "Malformed log entry JSON from #{request.ip}: #{raw}"
53
+ halt 409, "Malformed log entry JSON: #{raw}"
54
+ end
55
+
56
+ level = logentry[:level].to_sym
57
+ level = :unknown unless Chook::Server::Log::LOG_LEVELS.key? level
58
+ Chook::Server::Log.logger.send level, "ExternalEntry: #{logentry[:message]}"
59
+
60
+ { result: 'logged', level: level }.to_json
61
+ end # post /
62
+
63
+ # AJAXy access to a log stream
64
+ # When an admin displays the log on the chook admin/home page,
65
+ # the page's javascript starts the stream as an EventSource
66
+ # from this url.
67
+ #
68
+ # The innards are taken almost verbatim from the Sinatra README
69
+ # docs.
70
+ #
71
+ # See also logstream.js and views/admin.haml
72
+ #
73
+ #
74
+ get '/subscribe_to_log_stream', provides: 'text/event-stream' do
75
+ protected!
76
+ content_type 'text/event-stream'
77
+ cache_control 'no-cache'
78
+
79
+ # register a client's interest in server events
80
+ stream(:keep_open) do |outbound_stream|
81
+ # add this connection to the array of streams
82
+ Chook::Server::Log.log_streams[outbound_stream] = request.ip
83
+ logger.debug "Added log stream for #{request.ip}"
84
+ # purge dead connections
85
+ Chook::Server::Log.clean_log_streams
86
+ end # stream
87
+ end
88
+
89
+ # set the log level via the admin page.
90
+ put '/set_log_level/:level' do
91
+ level = params[:level].to_sym
92
+ level = :unknown unless Chook::Server::Log::LOG_LEVELS.key? level
93
+ Chook.logger.level = level
94
+ Chook.logger.unknown "Log level changed, now: #{level}"
95
+ { result: 'level changed', level: level }.to_json
96
+ end
97
+
98
+ # get the log level via the admin page.
99
+ get '/current_log_level' do
100
+ protected!
101
+ Chook::Server::Log::LOG_LEVELS.invert[Chook.logger.level].to_s
102
+ end
103
+
104
+ end # class
105
+
106
+ end # module
@@ -0,0 +1,11 @@
1
+ %hr/
2
+ %hr/
3
+ = haml :logstream
4
+
5
+ %hr/
6
+ %hr/
7
+ = haml :handlers
8
+
9
+ %hr/
10
+ %hr/
11
+ = haml :config
@@ -0,0 +1,48 @@
1
+ %hr/
2
+ .section_label#log_label
3
+ The Live Chook Log
4
+ &nbsp;&nbsp;&nbsp;&nbsp;
5
+ %button#view_log_btn{ type: 'button', onClick: 'view_log();', title: 'view the live Chook log' }
6
+ View
7
+ %button#hide_log_btn{ type: 'button', onClick: 'hide_log();', title: 'hide the live Chook log' }
8
+ Hide
9
+ &nbsp;&nbsp;&nbsp;&nbsp; Log Level:
10
+ %select#log_level_select{ onchange: 'change_log_level();' }
11
+ %option{ value: 'fatal', selected: Chook.logger.level == Logger::FATAL } fatal
12
+ %option{ value: 'error', selected: Chook.logger.level == Logger::ERROR } error
13
+ %option{ value: 'warn', selected: Chook.logger.level == Logger::WARN } warn
14
+ %option{ value: 'info', selected: Chook.logger.level == Logger::INFO } info
15
+ %option{ value: 'debug', selected: Chook.logger.level == Logger::DEBUG } debug
16
+
17
+ #logbox_div
18
+ #logbox_btns
19
+ %input#pause_log{ type: 'checkbox', checked: false, onclick: 'update_logbox();' }
20
+ Pause
21
+ &nbsp;&nbsp;&nbsp;&nbsp;
22
+ %button#clear_log_btn{ type: 'button', onClick: 'clear_log();', title: 'clear the live Chook log' }
23
+ Clear
24
+
25
+ // Log Level: [popup list] (set)
26
+ %textarea.monospaced#logbox{ readonly: true, rows: 20, cols: 150 }
27
+
28
+ %hr/
29
+ .section_label#handlers_label
30
+ Current Webhook Handlers (#{@handlers_for_admin_page.size})
31
+ &nbsp;&nbsp;&nbsp;&nbsp;
32
+
33
+ %button#view_handlers_btn{ type: 'button', onClick: 'view_handlers();', title: 'view the handler list' }
34
+ View
35
+ %button#hide_handlers_btn{ type: 'button', onClick: 'hide_handlers();', title: 'hide the handler list' }
36
+ Hide
37
+ &nbsp;&nbsp;&nbsp;&nbsp;
38
+
39
+ Handler Directory:
40
+ %span.monospaced
41
+ = Chook.config.handler_dir.to_s
42
+
43
+ #handlers_div
44
+ %table#handlers_table
45
+ %tr
46
+ %th Event
47
+ %th Handler Type
48
+ %th File Name
@@ -0,0 +1,15 @@
1
+ .section_label#config_label
2
+ %button#view_config_btn{ type: 'button', onClick: 'view_config();', title: 'view the config file' }
3
+ View
4
+ %button#hide_config_btn{ type: 'button', onClick: 'hide_config();', title: 'hide the config file' }
5
+ Hide
6
+ &nbsp;&nbsp;&nbsp;&nbsp;
7
+
8
+ Configuration
9
+
10
+ #config_div
11
+ Config file:
12
+ %span.monospaced= @config_src
13
+
14
+ #config_viewer_div
15
+ %textarea.monospaced#config_box{ readonly: true, rows: 20, cols: 150 }= @config_text
@@ -0,0 +1,48 @@
1
+ .section_label#handlers_label
2
+ %button#view_handlers_btn{ type: 'button', onClick: 'view_handlers();', title: 'view the handler list' }
3
+ View
4
+ %button#hide_handlers_btn{ type: 'button', onClick: 'hide_handlers();', title: 'hide the handler list' }
5
+ Hide
6
+ &nbsp;&nbsp;&nbsp;&nbsp;
7
+
8
+ Current Webhook Handlers (#{@handlers_for_admin_page.size})
9
+
10
+ #handlers_div
11
+
12
+ Handler Directory:
13
+ %span.monospaced= Chook.config.handler_dir.to_s
14
+ &nbsp;&nbsp;&nbsp;&nbsp;
15
+
16
+ %button#reload_all_handlers_btn{ type: 'button', onClick: 'reload_handlers();', title: 'reload all handlers' }
17
+ Reload
18
+ &nbsp;&nbsp;
19
+ %span#reloaded_notification
20
+
21
+ %table#handlers_table
22
+ %tr#handlers_table_header_row
23
+ %th.handlers_table_cell Event
24
+ %th.handlers_table_cell{ width: '10%' } Handler Type
25
+ %th.handlers_table_cell File Name
26
+ %th.handlers_table_cell Actions
27
+
28
+ - @handlers_for_admin_page.each do |hndlr_info|
29
+ %tr
30
+ %td.handlers_table_cell= hndlr_info[:event]
31
+ %td.handlers_table_cell= hndlr_info[:type].to_s
32
+ %td.handlers_table_cell= hndlr_info[:file].basename.to_s
33
+ %td.handlers_table_cell
34
+ %button.edit_handler_btn{ type: 'button', onClick: "edit_handler('#{hndlr_info[:file].basename}', '#{hndlr_info[:type]}');", title: 'View this handler' }
35
+ View
36
+
37
+ #handler_viewer_div
38
+ %input#currently_viewing_handler_file{ name: 'currently_viewing_handler_file', type: :hidden }
39
+ %input#currently_editing_handler_type{ name: 'currently_editing_handler_type', type: :hidden }
40
+ #currently_viewing_handler_label
41
+ %button#hide_handler_viewer_btn{ type: 'button', onClick: 'hide_handler_viewer();', title: 'hide the handler editor' }
42
+ Hide
43
+ &nbsp;&nbsp;&nbsp;&nbsp;
44
+ Viewing handler: &nbsp;&nbsp;
45
+ %span.monospaced#currently_viewing_filename -nothing-
46
+
47
+
48
+ %textarea.monospaced#handler_viewer{ rows: 35 , readonly: true }
@@ -0,0 +1,39 @@
1
+ !!!
2
+ %html{ lang: 'en' }
3
+
4
+ %head
5
+
6
+ %meta{ charset: 'UTF-8' }
7
+ %title
8
+ Chook
9
+
10
+ / CSS
11
+ %link{ href: '/css/chook.css', rel: 'stylesheet' }
12
+
13
+ / JavaScript
14
+ %script{ type: 'text/javascript', language: 'javascript', src: '/js/chook.js' }
15
+ %script{ type: 'text/javascript', language: 'javascript', src: '/js/logstream.js' }
16
+
17
+ %body
18
+ / Top
19
+ #pageheader
20
+ %table{ width: '100%' }
21
+ %tr
22
+ %td{ valign: 'bottom', width: '120' }
23
+ #header_logo
24
+ %img{ alt: '', height: '120', src: '/imgs/ChookLogoAlMcWhiggin.png', width: '120' }
25
+ #header_version
26
+ v#{Chook::VERSION}
27
+ %td
28
+ #definition
29
+ %span.chook_title Chook
30
+ %br/
31
+ %span.def_pronunciation /tʃʊk/ (also chookie /ˈtʃʊki/ )
32
+ %br/
33
+ %span.def_part_of_speech noun
34
+ %span.def_dialect Australian/NZ informal
35
+ %br/
36
+ %span.def_definition a chicken or fowl
37
+
38
+
39
+ = yield
@@ -0,0 +1,32 @@
1
+ .section_label#log_label
2
+ %button#view_log_btn{ type: 'button', onClick: 'view_log();', title: 'view the live Chook log' }
3
+ View
4
+ %button#hide_log_btn{ type: 'button', onClick: 'hide_log();', title: 'hide the live Chook log' }
5
+ Hide
6
+ &nbsp;&nbsp;&nbsp;&nbsp;
7
+
8
+ The Live Chook Log
9
+
10
+
11
+ #logbox_div
12
+ #logbox_btns
13
+ %input#pause_log{ type: 'checkbox', checked: false, onclick: 'update_logbox();' }
14
+ Pause
15
+ &nbsp;&nbsp;&nbsp;&nbsp;
16
+
17
+ %button#clear_log_btn{ type: 'button', onClick: 'clear_log();', title: 'clear the live Chook log' }
18
+ Clear
19
+
20
+ &nbsp;&nbsp;&nbsp;&nbsp;
21
+
22
+ Server Log Level:
23
+ %select#log_level_select{ onchange: 'change_log_level();',
24
+ title: 'changes here affect logging the server, not just your view' }
25
+
26
+ %option{ value: 'fatal', selected: Chook.logger.level == Logger::FATAL } fatal
27
+ %option{ value: 'error', selected: Chook.logger.level == Logger::ERROR } error
28
+ %option{ value: 'warn', selected: Chook.logger.level == Logger::WARN } warn
29
+ %option{ value: 'info', selected: Chook.logger.level == Logger::INFO } info
30
+ %option{ value: 'debug', selected: Chook.logger.level == Logger::DEBUG } debug
31
+
32
+ %textarea.monospaced#logbox{ readonly: true, rows: 20 }
@@ -0,0 +1,44 @@
1
+ [image] Chook v.XXX
2
+
3
+
4
+ Log (view/hide) Log Level: [popup list] (set)
5
+ --------- hidable text area with streaming log -----------
6
+
7
+
8
+ Current Handlers
9
+ filename/type (view/edit) (remove)
10
+ ...
11
+ ...
12
+ (Add new handler)
13
+ --------- text area with editable handler -----------
14
+ (save)
15
+
16
+
17
+ Configuration (save)
18
+ --------- text area with editable (?) config file -----------
19
+
20
+
21
+
22
+
23
+
24
+
25
+
26
+
27
+
28
+
29
+
30
+
31
+
32
+
33
+
34
+
35
+
36
+
37
+
38
+
39
+
40
+
41
+
42
+
43
+
44
+ (c) Pixar.... [links]
@@ -122,9 +122,8 @@ module Chook
122
122
  # Proc: Pass an API object to the PROC to get a value
123
123
  #
124
124
  def self.classes
125
- @classes
125
+ @classes ||= {}
126
126
  end
127
- @classes = {}
128
127
 
129
128
  end # class Subject
130
129
 
@@ -41,6 +41,12 @@ Chook::Subject.classes[Chook::Subject::SMART_GROUP] = {
41
41
  # sampler: :smart_group_jssid,
42
42
  api_object_attribute: :id
43
43
  },
44
+ groupAddedDevicesIds: {
45
+ validation: Array
46
+ },
47
+ groupRemovedDevicesIds: {
48
+ validation: Array
49
+ },
44
50
  computer: { # SmartGroupComputerMembershipChange == true, SmartGroupMobileDeviceMembershipChange == false
45
51
  validation: :boolean,
46
52
  randomizer: :bool,
@@ -27,6 +27,6 @@
27
27
  module Chook
28
28
 
29
29
  ### The version of the Chook framework
30
- VERSION = '1.0.1.b2'.freeze
30
+ VERSION = '1.1.0'.freeze
31
31
 
32
32
  end # module
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: chook
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.0.1.b2
4
+ version: 1.1.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Chris Lasell
@@ -9,27 +9,69 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2017-10-25 00:00:00.000000000 Z
12
+ date: 2018-10-13 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: sinatra
16
16
  requirement: !ruby/object:Gem::Requirement
17
17
  requirements:
18
- - - '='
18
+ - - "~>"
19
19
  - !ruby/object:Gem::Version
20
- version: 1.4.8
20
+ version: '2.0'
21
21
  type: :runtime
22
22
  prerelease: false
23
23
  version_requirements: !ruby/object:Gem::Requirement
24
24
  requirements:
25
- - - '='
25
+ - - "~>"
26
26
  - !ruby/object:Gem::Version
27
- version: 1.4.8
27
+ version: '2.0'
28
+ - !ruby/object:Gem::Dependency
29
+ name: sinatra-contrib
30
+ requirement: !ruby/object:Gem::Requirement
31
+ requirements:
32
+ - - "~>"
33
+ - !ruby/object:Gem::Version
34
+ version: '2.0'
35
+ type: :runtime
36
+ prerelease: false
37
+ version_requirements: !ruby/object:Gem::Requirement
38
+ requirements:
39
+ - - "~>"
40
+ - !ruby/object:Gem::Version
41
+ version: '2.0'
42
+ - !ruby/object:Gem::Dependency
43
+ name: thin
44
+ requirement: !ruby/object:Gem::Requirement
45
+ requirements:
46
+ - - "~>"
47
+ - !ruby/object:Gem::Version
48
+ version: '1.7'
49
+ type: :runtime
50
+ prerelease: false
51
+ version_requirements: !ruby/object:Gem::Requirement
52
+ requirements:
53
+ - - "~>"
54
+ - !ruby/object:Gem::Version
55
+ version: '1.7'
56
+ - !ruby/object:Gem::Dependency
57
+ name: haml
58
+ requirement: !ruby/object:Gem::Requirement
59
+ requirements:
60
+ - - "~>"
61
+ - !ruby/object:Gem::Version
62
+ version: '5.0'
63
+ type: :runtime
64
+ prerelease: false
65
+ version_requirements: !ruby/object:Gem::Requirement
66
+ requirements:
67
+ - - "~>"
68
+ - !ruby/object:Gem::Version
69
+ version: '5.0'
28
70
  description: |2
29
71
  Chook is a Ruby module which implements a framework for working with webhook events
30
72
  sent by the JSS, the core of Jamf Pro, a management tool for Apple devices.
31
73
 
32
- Chook also provides a simple, sinatra-based HTTP server, for handling those Events,
74
+ Chook also provides a simple, sinatra-based HTTP(S) server, for handling those Events,
33
75
  and classes for sending simulated TestEvents to a webhook handling server.
34
76
  email: chook@pixar.com
35
77
  executables:
@@ -38,10 +80,13 @@ extensions: []
38
80
  extra_rdoc_files:
39
81
  - README.md
40
82
  - LICENSE.txt
83
+ - CHANGES.md
41
84
  files:
85
+ - CHANGES.md
42
86
  - LICENSE.txt
43
87
  - README.md
44
88
  - bin/chook-server
89
+ - data/chook.conf.example
45
90
  - data/sample_handlers/RestAPIOperation-executable
46
91
  - data/sample_handlers/RestAPIOperation.rb
47
92
  - data/sample_handlers/SmartGroupComputerMembershipChange-executable
@@ -70,6 +115,7 @@ files:
70
115
  - lib/chook/event.rb
71
116
  - lib/chook/event/handled_event.rb
72
117
  - lib/chook/event/handled_event/handlers.rb
118
+ - lib/chook/event/handled_event_logger.rb
73
119
  - lib/chook/event/test_event.rb
74
120
  - lib/chook/event_handling.rb
75
121
  - lib/chook/event_testing.rb
@@ -78,9 +124,23 @@ files:
78
124
  - lib/chook/handled_subjects.rb
79
125
  - lib/chook/procs.rb
80
126
  - lib/chook/server.rb
127
+ - lib/chook/server/log.rb
128
+ - lib/chook/server/public/css/chook.css
129
+ - lib/chook/server/public/imgs/ChookLogoAlMcWhiggin.png
130
+ - lib/chook/server/public/js/chook.js
131
+ - lib/chook/server/public/js/logstream.js
81
132
  - lib/chook/server/routes.rb
82
133
  - lib/chook/server/routes/handle_webhook_event.rb
134
+ - lib/chook/server/routes/handlers.rb
83
135
  - lib/chook/server/routes/home.rb
136
+ - lib/chook/server/routes/log.rb
137
+ - lib/chook/server/views/admin.haml
138
+ - lib/chook/server/views/bak.haml
139
+ - lib/chook/server/views/config.haml
140
+ - lib/chook/server/views/handlers.haml
141
+ - lib/chook/server/views/layout.haml
142
+ - lib/chook/server/views/logstream.haml
143
+ - lib/chook/server/views/sketch_admin
84
144
  - lib/chook/subject.rb
85
145
  - lib/chook/subject/computer.rb
86
146
  - lib/chook/subject/handled_subject.rb
@@ -103,28 +163,23 @@ licenses:
103
163
  - Nonstandard
104
164
  metadata: {}
105
165
  post_install_message:
106
- rdoc_options:
107
- - --title
108
- - Chook
109
- - --line-numbers
110
- - --main
111
- - README.md
166
+ rdoc_options: []
112
167
  require_paths:
113
168
  - lib
114
169
  required_ruby_version: !ruby/object:Gem::Requirement
115
170
  requirements:
116
- - - '>='
171
+ - - ">="
117
172
  - !ruby/object:Gem::Version
118
173
  version: '0'
119
174
  required_rubygems_version: !ruby/object:Gem::Requirement
120
175
  requirements:
121
- - - '>'
176
+ - - ">="
122
177
  - !ruby/object:Gem::Version
123
- version: 1.3.1
178
+ version: '0'
124
179
  requirements: []
125
180
  rubyforge_project:
126
- rubygems_version: 2.6.8
181
+ rubygems_version: 2.7.7
127
182
  signing_key:
128
183
  specification_version: 4
129
- summary: A Ruby framework for simulating and processing Jamf Pro Webhooks
184
+ summary: A Ruby framework for simulating and processing Jamf Pro Webhook Events
130
185
  test_files: []