dashboard-api 1.0.0 → 1.0.1

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.
Files changed (49) hide show
  1. checksums.yaml +4 -4
  2. data/.codeclimate.yml +34 -0
  3. data/.gitignore +5 -4
  4. data/.travis.yml +20 -0
  5. data/Gemfile +9 -5
  6. data/Gemfile.lock +63 -31
  7. data/README.md +134 -138
  8. data/Rakefile +9 -7
  9. data/dashboard-api.gemspec +28 -28
  10. data/doc/Admins.html +603 -603
  11. data/doc/Clients.html +276 -276
  12. data/doc/DashboardAPI.html +603 -603
  13. data/doc/DashboardAPIVersion.html +159 -159
  14. data/doc/Devices.html +879 -879
  15. data/doc/Networks.html +1382 -1382
  16. data/doc/Organizations.html +1477 -1477
  17. data/doc/Phones.html +641 -641
  18. data/doc/SAML.html +758 -758
  19. data/doc/SSIDs.html +523 -523
  20. data/doc/Switchports.html +526 -526
  21. data/doc/Templates.html +378 -378
  22. data/doc/VLANs.html +762 -762
  23. data/doc/_index.html +235 -235
  24. data/doc/class_list.html +51 -51
  25. data/doc/css/full_list.css +58 -58
  26. data/doc/css/style.css +481 -481
  27. data/doc/file.README.html +248 -248
  28. data/doc/file_list.html +56 -56
  29. data/doc/frames.html +17 -17
  30. data/doc/index.html +248 -248
  31. data/doc/js/app.js +243 -243
  32. data/doc/js/full_list.js +216 -216
  33. data/doc/js/jquery.js +3 -3
  34. data/doc/method_list.html +523 -523
  35. data/doc/top-level-namespace.html +113 -113
  36. data/lib/admins.rb +37 -37
  37. data/lib/clients.rb +12 -12
  38. data/lib/dashboard-api.rb +82 -83
  39. data/lib/dashboard-api/version.rb +6 -6
  40. data/lib/devices.rb +57 -57
  41. data/lib/networks.rb +108 -108
  42. data/lib/organizations.rb +110 -115
  43. data/lib/phones.rb +40 -40
  44. data/lib/saml.rb +47 -47
  45. data/lib/ssids.rb +33 -33
  46. data/lib/switchports.rb +33 -33
  47. data/lib/templates.rb +18 -18
  48. data/lib/vlans.rb +49 -49
  49. metadata +7 -5
@@ -1,114 +1,114 @@
1
- <!DOCTYPE html>
2
- <html>
3
- <head>
4
- <meta charset="utf-8">
5
- <meta name="viewport" content="width=device-width, initial-scale=1.0">
6
- <title>
7
- Top Level Namespace
8
-
9
- &mdash; Documentation by YARD 0.9.5
10
-
11
- </title>
12
-
13
- <link rel="stylesheet" href="css/style.css" type="text/css" charset="utf-8" />
14
-
15
- <link rel="stylesheet" href="css/common.css" type="text/css" charset="utf-8" />
16
-
17
- <script type="text/javascript" charset="utf-8">
18
- pathId = "";
19
- relpath = '';
20
- </script>
21
-
22
-
23
- <script type="text/javascript" charset="utf-8" src="js/jquery.js"></script>
24
-
25
- <script type="text/javascript" charset="utf-8" src="js/app.js"></script>
26
-
27
-
28
- </head>
29
- <body>
30
- <div class="nav_wrap">
31
- <iframe id="nav" src="class_list.html"></iframe>
32
- <div id="resizer"></div>
33
- </div>
34
-
35
- <div id="main" tabindex="-1">
36
- <div id="header">
37
- <div id="menu">
38
-
39
- <a href="_index.html">Index</a> &raquo;
40
-
41
-
42
- <span class="title">Top Level Namespace</span>
43
-
44
- </div>
45
-
46
- <div id="search">
47
-
48
- <a class="full_list_link" id="class_list_link"
49
- href="class_list.html">
50
-
51
- <svg width="24" height="24">
52
- <rect x="0" y="4" width="24" height="4" rx="1" ry="1"></rect>
53
- <rect x="0" y="12" width="24" height="4" rx="1" ry="1"></rect>
54
- <rect x="0" y="20" width="24" height="4" rx="1" ry="1"></rect>
55
- </svg>
56
- </a>
57
-
58
- </div>
59
- <div class="clear"></div>
60
- </div>
61
-
62
- <iframe id="search_frame" src="class_list.html"></iframe>
63
-
64
- <div id="content"><h1>Top Level Namespace
65
-
66
-
67
-
68
- </h1>
69
- <div class="box_info">
70
-
71
-
72
-
73
-
74
-
75
-
76
-
77
-
78
-
79
-
80
-
81
- </div>
82
-
83
- <h2>Defined Under Namespace</h2>
84
- <p class="children">
85
-
86
-
87
- <strong class="modules">Modules:</strong> <span class='object_link'><a href="Admins.html" title="Admins (module)">Admins</a></span>, <span class='object_link'><a href="Clients.html" title="Clients (module)">Clients</a></span>, <span class='object_link'><a href="DashboardAPIVersion.html" title="DashboardAPIVersion (module)">DashboardAPIVersion</a></span>, <span class='object_link'><a href="Devices.html" title="Devices (module)">Devices</a></span>, <span class='object_link'><a href="Networks.html" title="Networks (module)">Networks</a></span>, <span class='object_link'><a href="Organizations.html" title="Organizations (module)">Organizations</a></span>, <span class='object_link'><a href="Phones.html" title="Phones (module)">Phones</a></span>, <span class='object_link'><a href="SAML.html" title="SAML (module)">SAML</a></span>, <span class='object_link'><a href="SSIDs.html" title="SSIDs (module)">SSIDs</a></span>, <span class='object_link'><a href="Switchports.html" title="Switchports (module)">Switchports</a></span>, <span class='object_link'><a href="Templates.html" title="Templates (module)">Templates</a></span>, <span class='object_link'><a href="VLANs.html" title="VLANs (module)">VLANs</a></span>
88
-
89
-
90
-
91
- <strong class="classes">Classes:</strong> <span class='object_link'><a href="DashboardAPI.html" title="DashboardAPI (class)">DashboardAPI</a></span>
92
-
93
-
94
- </p>
95
-
96
-
97
-
98
-
99
-
100
-
101
-
102
-
103
-
104
- </div>
105
-
106
- <div id="footer">
107
- Generated on Thu Nov 17 22:15:38 2016 by
108
- <a href="http://yardoc.org" title="Yay! A Ruby Documentation Tool" target="_parent">yard</a>
109
- 0.9.5 (ruby-2.3.0).
110
- </div>
111
-
112
- </div>
113
- </body>
1
+ <!DOCTYPE html>
2
+ <html>
3
+ <head>
4
+ <meta charset="utf-8">
5
+ <meta name="viewport" content="width=device-width, initial-scale=1.0">
6
+ <title>
7
+ Top Level Namespace
8
+
9
+ &mdash; Documentation by YARD 0.9.5
10
+
11
+ </title>
12
+
13
+ <link rel="stylesheet" href="css/style.css" type="text/css" charset="utf-8" />
14
+
15
+ <link rel="stylesheet" href="css/common.css" type="text/css" charset="utf-8" />
16
+
17
+ <script type="text/javascript" charset="utf-8">
18
+ pathId = "";
19
+ relpath = '';
20
+ </script>
21
+
22
+
23
+ <script type="text/javascript" charset="utf-8" src="js/jquery.js"></script>
24
+
25
+ <script type="text/javascript" charset="utf-8" src="js/app.js"></script>
26
+
27
+
28
+ </head>
29
+ <body>
30
+ <div class="nav_wrap">
31
+ <iframe id="nav" src="class_list.html"></iframe>
32
+ <div id="resizer"></div>
33
+ </div>
34
+
35
+ <div id="main" tabindex="-1">
36
+ <div id="header">
37
+ <div id="menu">
38
+
39
+ <a href="_index.html">Index</a> &raquo;
40
+
41
+
42
+ <span class="title">Top Level Namespace</span>
43
+
44
+ </div>
45
+
46
+ <div id="search">
47
+
48
+ <a class="full_list_link" id="class_list_link"
49
+ href="class_list.html">
50
+
51
+ <svg width="24" height="24">
52
+ <rect x="0" y="4" width="24" height="4" rx="1" ry="1"></rect>
53
+ <rect x="0" y="12" width="24" height="4" rx="1" ry="1"></rect>
54
+ <rect x="0" y="20" width="24" height="4" rx="1" ry="1"></rect>
55
+ </svg>
56
+ </a>
57
+
58
+ </div>
59
+ <div class="clear"></div>
60
+ </div>
61
+
62
+ <iframe id="search_frame" src="class_list.html"></iframe>
63
+
64
+ <div id="content"><h1>Top Level Namespace
65
+
66
+
67
+
68
+ </h1>
69
+ <div class="box_info">
70
+
71
+
72
+
73
+
74
+
75
+
76
+
77
+
78
+
79
+
80
+
81
+ </div>
82
+
83
+ <h2>Defined Under Namespace</h2>
84
+ <p class="children">
85
+
86
+
87
+ <strong class="modules">Modules:</strong> <span class='object_link'><a href="Admins.html" title="Admins (module)">Admins</a></span>, <span class='object_link'><a href="Clients.html" title="Clients (module)">Clients</a></span>, <span class='object_link'><a href="DashboardAPIVersion.html" title="DashboardAPIVersion (module)">DashboardAPIVersion</a></span>, <span class='object_link'><a href="Devices.html" title="Devices (module)">Devices</a></span>, <span class='object_link'><a href="Networks.html" title="Networks (module)">Networks</a></span>, <span class='object_link'><a href="Organizations.html" title="Organizations (module)">Organizations</a></span>, <span class='object_link'><a href="Phones.html" title="Phones (module)">Phones</a></span>, <span class='object_link'><a href="SAML.html" title="SAML (module)">SAML</a></span>, <span class='object_link'><a href="SSIDs.html" title="SSIDs (module)">SSIDs</a></span>, <span class='object_link'><a href="Switchports.html" title="Switchports (module)">Switchports</a></span>, <span class='object_link'><a href="Templates.html" title="Templates (module)">Templates</a></span>, <span class='object_link'><a href="VLANs.html" title="VLANs (module)">VLANs</a></span>
88
+
89
+
90
+
91
+ <strong class="classes">Classes:</strong> <span class='object_link'><a href="DashboardAPI.html" title="DashboardAPI (class)">DashboardAPI</a></span>
92
+
93
+
94
+ </p>
95
+
96
+
97
+
98
+
99
+
100
+
101
+
102
+
103
+
104
+ </div>
105
+
106
+ <div id="footer">
107
+ Generated on Thu Nov 17 22:15:38 2016 by
108
+ <a href="http://yardoc.org" title="Yay! A Ruby Documentation Tool" target="_parent">yard</a>
109
+ 0.9.5 (ruby-2.3.0).
110
+ </div>
111
+
112
+ </div>
113
+ </body>
114
114
  </html>
@@ -1,37 +1,37 @@
1
- # Admins section of the Meraki Dashboard API
2
- # @author Joe Letizia
3
- module Admins
4
- # List all of the administrators for a given org
5
- # @param [String] org_id organization ID you want the list of administrators for
6
- # @return [Array] an array of hashes containing each admin and their attributes
7
- def list_admins(org_id)
8
- self.make_api_call("/organizations/#{org_id}/admins", 'GET')
9
- end
10
-
11
- # Add an admin to a specific org
12
- # @param [String] org_id organization ID you want to add an administrator to
13
- # @param [Hash] options option hash containing attributes for the new admin. Can contain:
14
- # email, name, orgAccess, tags and networks. See the Meraki API Documentation for more details.
15
- def add_admin(org_id, options)
16
- options = {:body => options}
17
- self.make_api_call("/organizations/#{org_id}/admins", 'POST', options)
18
- end
19
-
20
- # Update an administrator for a specific org
21
- # @param [String] org_id organization ID you want to update an administrator on
22
- # @param [String] admin_id ID of the admin you want to update
23
- # @param [Hash] options hash containing the attributes and values you want to update. Can contain:
24
- # email, name, orgAccess, tags and networks. See the Meraki API Documentation for more details.
25
- def update_admin(org_id, admin_id, options)
26
- options = {:body => options}
27
- self.make_api_call("/organizations/#{org_id}/admins/#{admin_id}", 'PUT', options)
28
- end
29
-
30
- # Revoke an administrator for a specific org
31
- # @param [String] org_id organization ID you want to revoke access on
32
- # @param [String] admin_id ID of the administrator you want to revoke
33
- # @return [Integer] HTTP Code
34
- def revoke_admin(org_id, admin_id)
35
- self.make_api_call("/organizations/#{org_id}/admins/#{admin_id}", 'DELETE')
36
- end
37
- end
1
+ # Admins section of the Meraki Dashboard API
2
+ # @author Joe Letizia
3
+ module Admins
4
+ # List all of the administrators for a given org
5
+ # @param [String] org_id organization ID you want the list of administrators for
6
+ # @return [Array] an array of hashes containing each admin and their attributes
7
+ def list_admins(org_id)
8
+ self.make_api_call("/organizations/#{org_id}/admins", 'GET')
9
+ end
10
+
11
+ # Add an admin to a specific org
12
+ # @param [String] org_id organization ID you want to add an administrator to
13
+ # @param [Hash] options option hash containing attributes for the new admin. Can contain:
14
+ # email, name, orgAccess, tags and networks. See the Meraki API Documentation for more details.
15
+ def add_admin(org_id, options)
16
+ #
17
+ self.make_api_call("/organizations/#{org_id}/admins", 'POST', options)
18
+ end
19
+
20
+ # Update an administrator for a specific org
21
+ # @param [String] org_id organization ID you want to update an administrator on
22
+ # @param [String] admin_id ID of the admin you want to update
23
+ # @param [Hash] options hash containing the attributes and values you want to update. Can contain:
24
+ # email, name, orgAccess, tags and networks. See the Meraki API Documentation for more details.
25
+ def update_admin(org_id, admin_id, options)
26
+ #
27
+ self.make_api_call("/organizations/#{org_id}/admins/#{admin_id}", 'PUT', options)
28
+ end
29
+
30
+ # Revoke an administrator for a specific org
31
+ # @param [String] org_id organization ID you want to revoke access on
32
+ # @param [String] admin_id ID of the administrator you want to revoke
33
+ # @return [Integer] HTTP Code
34
+ def revoke_admin(org_id, admin_id)
35
+ self.make_api_call("/organizations/#{org_id}/admins/#{admin_id}", 'DELETE')
36
+ end
37
+ end
@@ -1,12 +1,12 @@
1
- # Clients section of the Meraki Dashboard API
2
- # @author Joe Letizia
3
- module Clients
4
- # Return client usage for a specific device
5
- # @param [String] serial meraki serial number of the device
6
- # @param [Integer] timespan timespan up to 1 month in seconds to get client usage for
7
- # @return [Array] an array of hashes for each client's usage
8
- def get_client_info_for_device(serial, timespan)
9
- raise 'Timespan can not be larger than 2592000 seconds' if timespan.to_i > 2592000
10
- self.make_api_call("/devices/#{serial}/clients?timespan=#{timespan}", 'GET')
11
- end
12
- end
1
+ # Clients section of the Meraki Dashboard API
2
+ # @author Joe Letizia
3
+ module Clients
4
+ # Return client usage for a specific device
5
+ # @param [String] serial meraki serial number of the device
6
+ # @param [Integer] timespan timespan up to 1 month in seconds to get client usage for
7
+ # @return [Array] an array of hashes for each client's usage
8
+ def get_client_info_for_device(serial, timespan)
9
+ raise 'Timespan can not be larger than 2592000 seconds' if timespan.to_i > 2592000
10
+ self.make_api_call("/devices/#{serial}/clients?timespan=#{timespan}", 'GET')
11
+ end
12
+ end
@@ -1,83 +1,82 @@
1
- require 'httparty'
2
- require 'json'
3
- require_relative "dashboard-api/version"
4
- require 'organizations'
5
- require 'networks'
6
- require 'admins'
7
- require 'devices'
8
- require 'templates'
9
- require 'clients'
10
- require 'phones'
11
- require 'ssids'
12
- require 'vlans'
13
- require 'switchports'
14
- require 'saml'
15
-
16
- # Ruby Implementation of the Meraki Dashboard api
17
- # @author Joe Letizia
18
- class DashboardAPI
19
- include HTTParty
20
- include Organizations
21
- include DashboardAPIVersion
22
- include Networks
23
- include Clients
24
- include Devices
25
- include SSIDs
26
- include Admins
27
- include Switchports
28
- include VLANs
29
- include Phones
30
- include Templates
31
- include SAML
32
- base_uri "https://dashboard.meraki.com/api/v0"
33
-
34
- attr_reader :key
35
-
36
- def initialize(key)
37
- @key = key
38
- end
39
-
40
- # @private
41
- # Inner function, not to be called directly
42
- # @todo Eventually this will need to support POST, PUT and DELETE. It also
43
- # needs to be a bit more resillient, instead of relying on HTTParty for exception
44
- # handling
45
- def make_api_call(endpoint_url, http_method, options_hash={})
46
- headers = {"X-Cisco-Meraki-API-Key" => @key, 'Content-Type' => 'application/json'}
47
- headers.merge!(options_hash[:headers]) if options_hash[:headers]
48
-
49
- options = {:headers => headers, :body => options_hash[:body].to_json}
50
- case http_method
51
- when 'GET'
52
- res = HTTParty.get("#{self.class.base_uri}/#{endpoint_url}", options)
53
- raise "404 returned. Are you sure you are using the proper IDs?" if res.code == 404
54
- raise "Bad request due to the following error(s): #{JSON.parse(res.body)['errors']}" if res.body.include?('errors')
55
- return JSON.parse(res.body)
56
- when 'POST'
57
- res = HTTParty.post("#{self.class.base_uri}/#{endpoint_url}", options)
58
- raise "Bad Request due to the following error(s): #{res['errors']}" if res['errors']
59
- raise "404 returned. Are you sure you are using the proper IDs?" if res.code == 404
60
- begin
61
- return JSON.parse(res.body)
62
- rescue JSON::ParserError => e
63
- return res.code
64
- rescue TypeError => e
65
- return res.code
66
- end
67
- when 'PUT'
68
- res = HTTParty.put("#{self.class.base_uri}/#{endpoint_url}", options)
69
- # needs to check for is an array, because when you update a 3rd party VPN peer, it returns as an array
70
- # if you screw something up, it returns as a Hash, and will hit the normal if res['errors'
71
- raise "Bad Request due to the following error(s): #{res['errors']}" if res['errors'] unless JSON.parse(res.body).is_a? Array
72
- raise "404 returned. Are you sure you are using the proper IDs?" if res.code == 404
73
- return JSON.parse(res.body)
74
- when 'DELETE'
75
- res = HTTParty.delete("#{self.class.base_uri}/#{endpoint_url}", options)
76
- raise "Bad Request due to the following error(s): #{res['errors']}" if res['errors']
77
- raise "404 returned. Are you sure you are using the proper IDs?" if res.code == 404
78
- return res
79
- else
80
- raise 'Invalid HTTP Method. Only GET, POST, PUT and DELETE are supported.'
81
- end
82
- end
83
- end
1
+ require 'httparty'
2
+ require 'json'
3
+ require_relative "dashboard-api/version"
4
+ require 'organizations'
5
+ require 'networks'
6
+ require 'admins'
7
+ require 'devices'
8
+ require 'templates'
9
+ require 'clients'
10
+ require 'phones'
11
+ require 'ssids'
12
+ require 'vlans'
13
+ require 'switchports'
14
+ require 'saml'
15
+
16
+ # Ruby Implementation of the Meraki Dashboard api
17
+ # @author Joe Letizia
18
+ class DashboardAPI
19
+ include HTTParty
20
+ include Organizations
21
+ include DashboardAPIVersion
22
+ include Networks
23
+ include Clients
24
+ include Devices
25
+ include SSIDs
26
+ include Admins
27
+ include Switchports
28
+ include VLANs
29
+ include Phones
30
+ include Templates
31
+ include SAML
32
+ base_uri "https://dashboard.meraki.com/api/v0"
33
+
34
+ attr_reader :key
35
+
36
+ def initialize(key)
37
+ @key = key
38
+ end
39
+
40
+ # @private
41
+ # Inner function, not to be called directly
42
+ # @todo Eventually this will need to support POST, PUT and DELETE. It also
43
+ # needs to be a bit more resillient, instead of relying on HTTParty for exception
44
+ # handling
45
+ def make_api_call(endpoint_url, http_method, options_hash={})
46
+ headers = {"X-Cisco-Meraki-API-Key" => @key, 'Content-Type' => 'application/json'}
47
+
48
+ options = {:headers => headers, :body => options_hash.to_json}
49
+ case http_method
50
+ when 'GET'
51
+ res = HTTParty.get("#{self.class.base_uri}/#{endpoint_url}", options)
52
+ raise "404 returned. Are you sure you are using the proper IDs?" if res.code == 404
53
+ raise "Bad request due to the following error(s): #{JSON.parse(res.body)['errors']}" if res.body.include?('errors')
54
+ return JSON.parse(res.body)
55
+ when 'POST'
56
+ res = HTTParty.post("#{self.class.base_uri}/#{endpoint_url}", options)
57
+ raise "Bad Request due to the following error(s): #{res['errors']}" if res['errors']
58
+ raise "404 returned. Are you sure you are using the proper IDs?" if res.code == 404
59
+ begin
60
+ return JSON.parse(res.body)
61
+ rescue JSON::ParserError => e
62
+ return res.code
63
+ rescue TypeError => e
64
+ return res.code
65
+ end
66
+ when 'PUT'
67
+ res = HTTParty.put("#{self.class.base_uri}/#{endpoint_url}", options)
68
+ # needs to check for is an array, because when you update a 3rd party VPN peer, it returns as an array
69
+ # if you screw something up, it returns as a Hash, and will hit the normal if res['errors'
70
+ (raise "Bad Request due to the following error(s): #{res['errors']}" if res['errors']) unless JSON.parse(res.body).is_a? Array
71
+ raise "404 returned. Are you sure you are using the proper IDs?" if res.code == 404
72
+ return JSON.parse(res.body)
73
+ when 'DELETE'
74
+ res = HTTParty.delete("#{self.class.base_uri}/#{endpoint_url}", options)
75
+ raise "Bad Request due to the following error(s): #{res['errors']}" if res['errors']
76
+ raise "404 returned. Are you sure you are using the proper IDs?" if res.code == 404
77
+ return res
78
+ else
79
+ raise 'Invalid HTTP Method. Only GET, POST, PUT and DELETE are supported.'
80
+ end
81
+ end
82
+ end