bigbluebutton-api-ruby 1.7.0 → 1.8.0
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 +5 -5
- data/.gitignore +2 -1
- data/.ruby-version +1 -1
- data/CHANGELOG.md +34 -8
- data/Dockerfile +13 -0
- data/Gemfile +1 -1
- data/Gemfile.lock +24 -13
- data/bigbluebutton-api-ruby.gemspec +8 -2
- data/docker-compose.yml +10 -0
- data/features/config.yml.example +1 -1
- data/features/step_definitions/common_steps.rb +1 -1
- data/lib/bigbluebutton_api.rb +32 -16
- data/lib/bigbluebutton_config_layout.rb +3 -1
- data/lib/bigbluebutton_config_xml.rb +3 -1
- data/lib/bigbluebutton_exception.rb +1 -1
- data/lib/bigbluebutton_formatter.rb +3 -1
- data/lib/bigbluebutton_hash_to_xml.rb +3 -1
- data/spec/bigbluebutton_api_0.81_spec.rb +1 -2
- data/spec/bigbluebutton_api_0.9_spec.rb +1 -2
- data/spec/bigbluebutton_api_spec.rb +20 -17
- data/spec/bigbluebutton_formatter_spec.rb +36 -7
- metadata +89 -4
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
|
-
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
2
|
+
SHA256:
|
|
3
|
+
metadata.gz: 25726eaedf0a5b63156a7786a793f27a419e349a177419fdaecb0e0aac0295d6
|
|
4
|
+
data.tar.gz: 6e8ec707b2f53e06ba21163d2f5d34766436e49f852991434d3aa787a4108deb
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: 810382ae7b2f54be6ac766e10db46a61f76a4120c84bb1a99600012266db562da53149d7ee0bde1c7a2b3939542398556a7faa85dd24153c669f04875ac90213
|
|
7
|
+
data.tar.gz: 229132ef71db18f0a972daefb0b5b0ad49c53c63655877923323a163f99d15b383d4f0ac7344ebba61a6b5961f3a08abc2dc50a9ef217d4eccf0fcbfc2fdc527
|
data/.gitignore
CHANGED
data/.ruby-version
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
2.
|
|
1
|
+
2.6.5
|
data/CHANGELOG.md
CHANGED
|
@@ -1,13 +1,26 @@
|
|
|
1
1
|
# Change Log
|
|
2
2
|
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
3
|
+
## [1.8.0] - 2021-12-06
|
|
4
|
+
* [#43] Add keys to every `BigBlueButtonException`, to better identify them.
|
|
5
|
+
* [#42] Change `BigBlueButtonException` to inherit from `StandardError` instead of `Exception`.
|
|
6
|
+
* [#50] [BREAKING-CHANGE] Replace `debug` flag with a optional Logger. The application using the
|
|
7
|
+
gem can pass its own logger as argument for the `BigBlueButtonApi` initialization.
|
|
8
|
+
If none is passed, the gem will use its own default logger on `STDOUT` with `INFO` level.
|
|
9
|
+
* [#40] Fix issue preventing documents from being preuploaded using the create call.
|
|
10
|
+
* Fix parse of recordings with invalid times. It would break at `getRecordings` if one
|
|
11
|
+
of them had an empty `startTime` or `endTime`.
|
|
12
|
+
* Add a Dockerfile and compose to help run tests.
|
|
13
|
+
* Fix deprecated `TimeoutError` constant.
|
|
14
|
+
* [#35] Make `get_recordings` accept multiple `state` params.
|
|
15
|
+
* [#34] Update `rubyzip` gem to the newest version with no vulnerability, from 1.2.2 to 1.3.0
|
|
16
|
+
* [#33] Upgrade dependencies:
|
|
17
|
+
- `childprocess` from 0.3.2 to 1.0.1
|
|
18
|
+
- `ffi` from 1.0.11 to 1.9.24
|
|
19
|
+
- `json` from 1.8.3 to 1.8.6
|
|
20
|
+
- `nokogiri` from 1.6.6.2 to 1.10.4
|
|
21
|
+
- `rack` from 1.4.1 to 1.6.11
|
|
22
|
+
- `rdoc` from 3.12 to 3.12.1
|
|
23
|
+
- `rubyzip` from 0.9.8 to 1.2.2
|
|
11
24
|
|
|
12
25
|
## [1.7.0] - 2018-08-17
|
|
13
26
|
|
|
@@ -153,6 +166,19 @@ were different in cases when they were not.
|
|
|
153
166
|
(instead of browser URL). This call currently does not work as
|
|
154
167
|
documented.
|
|
155
168
|
|
|
169
|
+
<!-- PRs -->
|
|
170
|
+
[#50]: https://github.com/mconf/bigbluebutton-api-ruby/pull/50
|
|
171
|
+
[#43]: https://github.com/mconf/bigbluebutton-api-ruby/pull/43
|
|
172
|
+
[#42]: https://github.com/mconf/bigbluebutton-api-ruby/pull/42
|
|
173
|
+
[#40]: https://github.com/mconf/bigbluebutton-api-ruby/pull/40
|
|
174
|
+
[#35]: https://github.com/mconf/bigbluebutton-api-ruby/pull/35
|
|
175
|
+
[#34]: https://github.com/mconf/bigbluebutton-api-ruby/pull/34
|
|
176
|
+
[#33]: https://github.com/mconf/bigbluebutton-api-ruby/pull/33
|
|
177
|
+
[#31]: https://github.com/mconf/bigbluebutton-api-ruby/pull/31
|
|
178
|
+
[#29]: https://github.com/mconf/bigbluebutton-api-ruby/pull/29
|
|
179
|
+
|
|
180
|
+
<!-- Versions -->
|
|
181
|
+
[1.8.0]: https://github.com/mconf/bigbluebutton-api-ruby/compare/v1.7.0...v1.8.0
|
|
156
182
|
[1.7.0]: https://github.com/mconf/bigbluebutton-api-ruby/compare/v1.6.0...v1.7.0
|
|
157
183
|
[1.6.0]: https://github.com/mconf/bigbluebutton-api-ruby/compare/v1.5.0...v1.6.0
|
|
158
184
|
[1.5.0]: https://github.com/mconf/bigbluebutton-api-ruby/compare/v1.4.0...v1.5.0
|
data/Dockerfile
ADDED
data/Gemfile
CHANGED
data/Gemfile.lock
CHANGED
|
@@ -7,7 +7,13 @@ GIT
|
|
|
7
7
|
PATH
|
|
8
8
|
remote: .
|
|
9
9
|
specs:
|
|
10
|
-
bigbluebutton-api-ruby (1.
|
|
10
|
+
bigbluebutton-api-ruby (1.8.0)
|
|
11
|
+
childprocess (>= 1.0.1)
|
|
12
|
+
ffi (>= 1.9.24)
|
|
13
|
+
json (>= 1.8.6)
|
|
14
|
+
nokogiri (>= 1.10.4)
|
|
15
|
+
rack (>= 1.6.11)
|
|
16
|
+
rubyzip (>= 1.3.0)
|
|
11
17
|
xml-simple (~> 1.1)
|
|
12
18
|
|
|
13
19
|
GEM
|
|
@@ -22,8 +28,8 @@ GEM
|
|
|
22
28
|
rack-test (>= 0.5.4)
|
|
23
29
|
selenium-webdriver (~> 2.0)
|
|
24
30
|
xpath (~> 0.1.4)
|
|
25
|
-
childprocess (0.
|
|
26
|
-
|
|
31
|
+
childprocess (1.0.1)
|
|
32
|
+
rake (< 13.0)
|
|
27
33
|
cucumber (1.1.9)
|
|
28
34
|
builder (>= 2.1.2)
|
|
29
35
|
diff-lcs (>= 1.1.2)
|
|
@@ -35,24 +41,25 @@ GEM
|
|
|
35
41
|
cucumber (>= 1.1.8)
|
|
36
42
|
nokogiri (>= 1.5.0)
|
|
37
43
|
diff-lcs (1.1.3)
|
|
38
|
-
ffi (1.
|
|
44
|
+
ffi (1.9.24)
|
|
39
45
|
forgery (0.5.0)
|
|
40
46
|
gherkin (2.9.3)
|
|
41
47
|
json (>= 1.4.6)
|
|
42
|
-
json (1.8.
|
|
48
|
+
json (1.8.6)
|
|
43
49
|
libwebsocket (0.1.3)
|
|
44
50
|
addressable
|
|
45
51
|
mime-types (1.18)
|
|
46
|
-
|
|
52
|
+
mini_portile2 (2.4.0)
|
|
47
53
|
multi_json (1.3.4)
|
|
48
|
-
nokogiri (1.
|
|
49
|
-
|
|
50
|
-
rack (1.
|
|
54
|
+
nokogiri (1.10.4)
|
|
55
|
+
mini_portile2 (~> 2.4.0)
|
|
56
|
+
rack (1.6.11)
|
|
51
57
|
rack-test (0.6.1)
|
|
52
58
|
rack (>= 1.0)
|
|
53
59
|
rake (0.9.2.2)
|
|
54
|
-
rdoc (3.12)
|
|
60
|
+
rdoc (3.12.1)
|
|
55
61
|
json (~> 1.4)
|
|
62
|
+
rexml (3.2.5)
|
|
56
63
|
rspec (2.10.0)
|
|
57
64
|
rspec-core (~> 2.10.0)
|
|
58
65
|
rspec-expectations (~> 2.10.0)
|
|
@@ -61,7 +68,7 @@ GEM
|
|
|
61
68
|
rspec-expectations (2.10.0)
|
|
62
69
|
diff-lcs (~> 1.1.3)
|
|
63
70
|
rspec-mocks (2.10.0)
|
|
64
|
-
rubyzip (
|
|
71
|
+
rubyzip (1.3.0)
|
|
65
72
|
selenium-webdriver (2.21.2)
|
|
66
73
|
childprocess (>= 0.2.5)
|
|
67
74
|
ffi (~> 1.0)
|
|
@@ -69,7 +76,8 @@ GEM
|
|
|
69
76
|
multi_json (~> 1.0)
|
|
70
77
|
rubyzip
|
|
71
78
|
term-ansicolor (1.0.7)
|
|
72
|
-
xml-simple (1.1.
|
|
79
|
+
xml-simple (1.1.9)
|
|
80
|
+
rexml
|
|
73
81
|
xpath (0.1.4)
|
|
74
82
|
nokogiri (~> 1.3)
|
|
75
83
|
|
|
@@ -82,5 +90,8 @@ DEPENDENCIES
|
|
|
82
90
|
cucumber-rails
|
|
83
91
|
forgery
|
|
84
92
|
rake (>= 0.9)
|
|
85
|
-
rdoc
|
|
93
|
+
rdoc (= 3.12.1)
|
|
86
94
|
rspec (~> 2.10)
|
|
95
|
+
|
|
96
|
+
BUNDLED WITH
|
|
97
|
+
1.17.3
|
|
@@ -2,7 +2,7 @@ $:.push File.expand_path("../lib", __FILE__)
|
|
|
2
2
|
|
|
3
3
|
Gem::Specification.new do |s|
|
|
4
4
|
s.name = "bigbluebutton-api-ruby"
|
|
5
|
-
s.version = "1.
|
|
5
|
+
s.version = "1.8.0"
|
|
6
6
|
s.licenses = ["MIT"]
|
|
7
7
|
s.extra_rdoc_files = ["README.md", "LICENSE", "LICENSE_003", "CHANGELOG.md"]
|
|
8
8
|
s.summary = "BigBlueButton integration for ruby"
|
|
@@ -14,5 +14,11 @@ Gem::Specification.new do |s|
|
|
|
14
14
|
s.files = `git ls-files`.split("\n")
|
|
15
15
|
s.require_paths = ["lib"]
|
|
16
16
|
|
|
17
|
-
s.add_runtime_dependency(
|
|
17
|
+
s.add_runtime_dependency('childprocess', '>= 1.0.1')
|
|
18
|
+
s.add_runtime_dependency('ffi', '>= 1.9.24')
|
|
19
|
+
s.add_runtime_dependency('json', '>= 1.8.6')
|
|
20
|
+
s.add_runtime_dependency('nokogiri', '>= 1.10.4')
|
|
21
|
+
s.add_runtime_dependency('rack', '>= 1.6.11')
|
|
22
|
+
s.add_runtime_dependency('rubyzip', '>= 1.3.0')
|
|
23
|
+
s.add_runtime_dependency('xml-simple', '~> 1.1')
|
|
18
24
|
end
|
data/docker-compose.yml
ADDED
data/features/config.yml.example
CHANGED
data/lib/bigbluebutton_api.rb
CHANGED
|
@@ -9,6 +9,7 @@ require 'bigbluebutton_formatter'
|
|
|
9
9
|
require 'bigbluebutton_modules'
|
|
10
10
|
require 'bigbluebutton_config_xml'
|
|
11
11
|
require 'bigbluebutton_config_layout'
|
|
12
|
+
require 'logger'
|
|
12
13
|
|
|
13
14
|
module BigBlueButton
|
|
14
15
|
|
|
@@ -50,8 +51,8 @@ module BigBlueButton
|
|
|
50
51
|
# API version e.g. 0.81
|
|
51
52
|
attr_accessor :version
|
|
52
53
|
|
|
53
|
-
#
|
|
54
|
-
attr_accessor :
|
|
54
|
+
# logger to log reponses and infos
|
|
55
|
+
attr_accessor :logger
|
|
55
56
|
|
|
56
57
|
# Maximum wait time for HTTP requests (secs)
|
|
57
58
|
attr_accessor :timeout
|
|
@@ -67,21 +68,25 @@ module BigBlueButton
|
|
|
67
68
|
# url:: URL to a BigBlueButton server (e.g. http://demo.bigbluebutton.org/bigbluebutton/api)
|
|
68
69
|
# secret:: Shared secret for this server
|
|
69
70
|
# version:: API version e.g. 0.81
|
|
70
|
-
def initialize(url, secret, version=nil,
|
|
71
|
+
def initialize(url, secret, version=nil, logger=nil)
|
|
71
72
|
@supported_versions = ['0.8', '0.81', '0.9', '1.0']
|
|
72
73
|
@url = url
|
|
73
74
|
@secret = secret
|
|
74
|
-
@debug = debug
|
|
75
75
|
@timeout = 10 # default timeout for api requests
|
|
76
76
|
@request_headers = {} # http headers sent in all requests
|
|
77
|
-
|
|
77
|
+
@logger = logger
|
|
78
|
+
if logger.nil?
|
|
79
|
+
@logger = Logger.new(STDOUT)
|
|
80
|
+
@logger.level = Logger::INFO
|
|
81
|
+
end
|
|
82
|
+
|
|
78
83
|
version = nil if version && version.strip.empty?
|
|
79
84
|
@version = nearest_version(version || get_api_version)
|
|
80
85
|
unless @supported_versions.include?(@version)
|
|
81
|
-
|
|
86
|
+
@logger.warn("BigBlueButtonAPI: detected unsupported version, using the closest one that is supported (#{@version})")
|
|
82
87
|
end
|
|
83
88
|
|
|
84
|
-
|
|
89
|
+
@logger.debug("BigBlueButtonAPI: Using version #{@version}")
|
|
85
90
|
end
|
|
86
91
|
|
|
87
92
|
# Creates a new meeting. Returns the hash with the response or throws BigBlueButtonException
|
|
@@ -461,6 +466,10 @@ module BigBlueButton
|
|
|
461
466
|
options[:meetingID] = options[:meetingID].join(",") if options[:meetingID].instance_of?(Array)
|
|
462
467
|
end
|
|
463
468
|
|
|
469
|
+
if options.has_key?(:state)
|
|
470
|
+
options[:state] = options[:state].join(",") if options[:state].instance_of?(Array)
|
|
471
|
+
end
|
|
472
|
+
|
|
464
473
|
response = send_api_request(:getRecordings, options)
|
|
465
474
|
|
|
466
475
|
formatter = BigBlueButtonFormatter.new(response)
|
|
@@ -632,7 +641,7 @@ module BigBlueButton
|
|
|
632
641
|
# API's are equal if all the following attributes are equal.
|
|
633
642
|
def ==(other)
|
|
634
643
|
r = true
|
|
635
|
-
[:url, :supported_versions, :secret, :version, :
|
|
644
|
+
[:url, :supported_versions, :secret, :version, :logger].each do |param|
|
|
636
645
|
r = r && self.send(param) == other.send(param)
|
|
637
646
|
end
|
|
638
647
|
r
|
|
@@ -739,7 +748,7 @@ module BigBlueButton
|
|
|
739
748
|
# Otherwise uses GET
|
|
740
749
|
def send_request(url, data=nil)
|
|
741
750
|
begin
|
|
742
|
-
|
|
751
|
+
@logger.debug("BigBlueButtonAPI: URL request = #{url}")
|
|
743
752
|
url_parsed = URI.parse(url)
|
|
744
753
|
http = Net::HTTP.new(url_parsed.host, url_parsed.port)
|
|
745
754
|
http.open_timeout = @timeout
|
|
@@ -749,17 +758,22 @@ module BigBlueButton
|
|
|
749
758
|
if data.nil?
|
|
750
759
|
response = http.get(url_parsed.request_uri, @request_headers)
|
|
751
760
|
else
|
|
752
|
-
|
|
753
|
-
opts = { 'Content-Type' => 'application/
|
|
761
|
+
@logger.debug("BigBlueButtonAPI: Sending as a POST request with data.size = #{data.size}")
|
|
762
|
+
opts = { 'Content-Type' => 'application/xml' }.merge @request_headers
|
|
754
763
|
response = http.post(url_parsed.request_uri, data, opts)
|
|
755
764
|
end
|
|
756
|
-
|
|
765
|
+
@logger.info("BigBlueButtonAPI: request=#{url} response_status=#{response.class.name} response_code=#{response.code} message_key=#{response.message}")
|
|
766
|
+
@logger.debug("BigBlueButtonAPI: URL response = #{response.body}")
|
|
757
767
|
|
|
758
|
-
rescue
|
|
759
|
-
|
|
768
|
+
rescue Timeout::Error => error
|
|
769
|
+
exception = BigBlueButtonException.new("Timeout error. Your server is probably down: \"#{@url}\". Error: #{error}")
|
|
770
|
+
exception.key = 'TimeoutError'
|
|
771
|
+
raise exception
|
|
760
772
|
|
|
761
773
|
rescue Exception => error
|
|
762
|
-
|
|
774
|
+
exception = BigBlueButtonException.new("Connection error. Your URL is probably incorrect: \"#{@url}\". Error: #{error}")
|
|
775
|
+
exception.key = 'IncorrectUrlError'
|
|
776
|
+
raise exception
|
|
763
777
|
end
|
|
764
778
|
|
|
765
779
|
response
|
|
@@ -775,7 +789,9 @@ module BigBlueButton
|
|
|
775
789
|
|
|
776
790
|
# we don't allow older versions than the one supported, use an old version of the gem for that
|
|
777
791
|
if Gem::Version.new(version) < Gem::Version.new(@supported_versions[0])
|
|
778
|
-
|
|
792
|
+
exception = BigBlueButtonException.new("BigBlueButton error: Invalid API version #{version}. Supported versions: #{@supported_versions.join(', ')}")
|
|
793
|
+
exception.key = 'APIVersionError'
|
|
794
|
+
raise exception
|
|
779
795
|
|
|
780
796
|
# allow newer versions by using the newest one we support
|
|
781
797
|
elsif Gem::Version.new(version) > Gem::Version.new(@supported_versions.last)
|
|
@@ -29,7 +29,9 @@ module BigBlueButton
|
|
|
29
29
|
begin
|
|
30
30
|
@xml = XmlSimple.xml_in(xml, opts)
|
|
31
31
|
rescue Exception => e
|
|
32
|
-
|
|
32
|
+
exception = BigBlueButton::BigBlueButtonException.new("Error parsing the layouts XML. Error: #{e.message}")
|
|
33
|
+
exception.key = 'XMLParsingError'
|
|
34
|
+
raise exception
|
|
33
35
|
end
|
|
34
36
|
end
|
|
35
37
|
|
|
@@ -33,7 +33,9 @@ module BigBlueButton
|
|
|
33
33
|
@xml = XmlSimple.xml_in(xml, opts)
|
|
34
34
|
@original_string = self.as_string.clone
|
|
35
35
|
rescue Exception => e
|
|
36
|
-
|
|
36
|
+
exception = BigBlueButton::BigBlueButtonException.new("Error parsing the config XML. Error: #{e.message}")
|
|
37
|
+
exception.key = 'XMLParsingError'
|
|
38
|
+
raise exception
|
|
37
39
|
end
|
|
38
40
|
end
|
|
39
41
|
end
|
|
@@ -49,7 +49,9 @@ module BigBlueButton
|
|
|
49
49
|
if value.is_a?(Numeric)
|
|
50
50
|
result = value == 0 ? nil : DateTime.parse(Time.at(value/1000.0).to_s)
|
|
51
51
|
else
|
|
52
|
-
if value.
|
|
52
|
+
if (value.is_a?(Hash) || value.is_a?(Array)) && value.empty?
|
|
53
|
+
result = nil
|
|
54
|
+
elsif value.is_a?(String) && (value.empty? || value.downcase == 'null')
|
|
53
55
|
result = nil
|
|
54
56
|
else
|
|
55
57
|
# note: just in case the value comes as a string in the format: "Thu Sep 01 17:51:42 UTC 2011"
|
|
@@ -10,7 +10,9 @@ module BigBlueButton
|
|
|
10
10
|
hash = XmlSimple.xml_in(xml_io, opts)
|
|
11
11
|
return symbolize_keys(hash)
|
|
12
12
|
rescue Exception => e
|
|
13
|
-
|
|
13
|
+
exception = BigBlueButtonException.new("Impossible to convert XML to hash. Error: #{e.message}")
|
|
14
|
+
exception.key = 'XMLConversionError'
|
|
15
|
+
raise exception
|
|
14
16
|
end
|
|
15
17
|
end
|
|
16
18
|
|
|
@@ -7,8 +7,7 @@ describe BigBlueButton::BigBlueButtonApi do
|
|
|
7
7
|
let(:url) { "http://server.com" }
|
|
8
8
|
let(:secret) { "1234567890abcdefghijkl" }
|
|
9
9
|
let(:version) { "0.81" }
|
|
10
|
-
let(:
|
|
11
|
-
let(:api) { BigBlueButton::BigBlueButtonApi.new(url, secret, version, debug) }
|
|
10
|
+
let(:api) { BigBlueButton::BigBlueButtonApi.new(url, secret, version) }
|
|
12
11
|
|
|
13
12
|
describe "#get_default_config_xml" do
|
|
14
13
|
let(:response) { "<response><returncode>1</returncode></response>" }
|
|
@@ -7,8 +7,7 @@ describe BigBlueButton::BigBlueButtonApi do
|
|
|
7
7
|
let(:url) { "http://server.com" }
|
|
8
8
|
let(:secret) { "1234567890abcdefghijkl" }
|
|
9
9
|
let(:version) { "0.9" }
|
|
10
|
-
let(:
|
|
11
|
-
let(:api) { BigBlueButton::BigBlueButtonApi.new(url, secret, version, debug) }
|
|
10
|
+
let(:api) { BigBlueButton::BigBlueButtonApi.new(url, secret, version) }
|
|
12
11
|
|
|
13
12
|
describe "#create_meeting" do
|
|
14
13
|
context "accepts the new parameters" do
|
|
@@ -9,16 +9,17 @@ describe BigBlueButton::BigBlueButtonApi do
|
|
|
9
9
|
# default variables and API object for all tests
|
|
10
10
|
let(:url) { "http://server.com" }
|
|
11
11
|
let(:secret) { "1234567890abcdefghijkl" }
|
|
12
|
-
let(:
|
|
13
|
-
let(:api) { BigBlueButton::BigBlueButtonApi.new(url, secret, version,
|
|
12
|
+
let(:logger) { Logger.new(STDOUT) }
|
|
13
|
+
let(:api) { BigBlueButton::BigBlueButtonApi.new(url, secret, version, logger) }
|
|
14
|
+
before { logger.level = Logger::INFO }
|
|
14
15
|
|
|
15
16
|
describe "#initialize" do
|
|
16
17
|
context "standard initialization" do
|
|
17
|
-
subject { BigBlueButton::BigBlueButtonApi.new(url, secret, version,
|
|
18
|
+
subject { BigBlueButton::BigBlueButtonApi.new(url, secret, version, logger) }
|
|
18
19
|
it { subject.url.should == url }
|
|
19
20
|
it { subject.secret.should == secret }
|
|
20
21
|
it { subject.version.should == version }
|
|
21
|
-
it { subject.
|
|
22
|
+
it { subject.logger.should == logger }
|
|
22
23
|
it { subject.timeout.should == 10 }
|
|
23
24
|
it { subject.supported_versions.should include("0.8") }
|
|
24
25
|
it { subject.supported_versions.should include("0.81") }
|
|
@@ -350,14 +351,14 @@ describe BigBlueButton::BigBlueButtonApi do
|
|
|
350
351
|
end
|
|
351
352
|
|
|
352
353
|
describe "#==" do
|
|
353
|
-
let(:api2) { BigBlueButton::BigBlueButtonApi.new(url, secret, version,
|
|
354
|
+
let(:api2) { BigBlueButton::BigBlueButtonApi.new(url, secret, version, logger) }
|
|
354
355
|
|
|
355
356
|
context "compares attributes" do
|
|
356
357
|
it { api.should == api2 }
|
|
357
358
|
end
|
|
358
359
|
|
|
359
|
-
context "differs #
|
|
360
|
-
before { api2.
|
|
360
|
+
context "differs #logger" do
|
|
361
|
+
before { api2.logger = !api.logger }
|
|
361
362
|
it { api.should_not == api2 }
|
|
362
363
|
end
|
|
363
364
|
|
|
@@ -559,17 +560,19 @@ describe BigBlueButton::BigBlueButtonApi do
|
|
|
559
560
|
describe "#send_request" do
|
|
560
561
|
let(:url) { "http://test-server:8080/res?param1=value1&checksum=12345" }
|
|
561
562
|
let(:url_parsed) { URI.parse(url) }
|
|
563
|
+
let(:res) { Net::HTTPResponse.new(1.0, '200', 'OK') }
|
|
562
564
|
|
|
563
565
|
before do
|
|
564
566
|
@http_mock = mock(Net::HTTP)
|
|
565
567
|
@http_mock.should_receive(:"open_timeout=").with(api.timeout)
|
|
566
568
|
@http_mock.should_receive(:"read_timeout=").with(api.timeout)
|
|
567
569
|
Net::HTTP.should_receive(:new).with("test-server", 8080).and_return(@http_mock)
|
|
570
|
+
res.stub(:body) { "ok" }
|
|
568
571
|
end
|
|
569
572
|
|
|
570
573
|
context "standard case" do
|
|
571
|
-
before { @http_mock.should_receive(:get).with("/res?param1=value1&checksum=12345", {}).and_return(
|
|
572
|
-
it { api.send(:send_request, url).should ==
|
|
574
|
+
before { @http_mock.should_receive(:get).with("/res?param1=value1&checksum=12345", {}).and_return(res) }
|
|
575
|
+
it { api.send(:send_request, url).should == res }
|
|
573
576
|
end
|
|
574
577
|
|
|
575
578
|
context "handles a TimeoutError" do
|
|
@@ -586,20 +589,20 @@ describe BigBlueButton::BigBlueButtonApi do
|
|
|
586
589
|
let(:data) { "any data" }
|
|
587
590
|
before {
|
|
588
591
|
path = "/res?param1=value1&checksum=12345"
|
|
589
|
-
opts = { 'Content-Type' => 'application/
|
|
590
|
-
@http_mock.should_receive(:post).with(path, data, opts).and_return(
|
|
592
|
+
opts = { 'Content-Type' => 'application/xml' }
|
|
593
|
+
@http_mock.should_receive(:post).with(path, data, opts).and_return(res)
|
|
591
594
|
}
|
|
592
595
|
it {
|
|
593
|
-
api.send(:send_request, url, data).should ==
|
|
596
|
+
api.send(:send_request, url, data).should == res
|
|
594
597
|
}
|
|
595
598
|
end
|
|
596
599
|
|
|
597
600
|
context "get with headers" do
|
|
598
601
|
let(:headers_hash) { { :anything => "anything" } }
|
|
599
|
-
before { @http_mock.should_receive(:get).with("/res?param1=value1&checksum=12345", headers_hash).and_return(
|
|
602
|
+
before { @http_mock.should_receive(:get).with("/res?param1=value1&checksum=12345", headers_hash).and_return(res) }
|
|
600
603
|
it {
|
|
601
604
|
api.request_headers = headers_hash
|
|
602
|
-
api.send(:send_request, url).should ==
|
|
605
|
+
api.send(:send_request, url).should == res
|
|
603
606
|
}
|
|
604
607
|
end
|
|
605
608
|
|
|
@@ -608,12 +611,12 @@ describe BigBlueButton::BigBlueButtonApi do
|
|
|
608
611
|
let(:data) { "any data" }
|
|
609
612
|
before {
|
|
610
613
|
path = "/res?param1=value1&checksum=12345"
|
|
611
|
-
opts = { 'Content-Type' => 'application/
|
|
612
|
-
@http_mock.should_receive(:post).with(path, data, opts).and_return(
|
|
614
|
+
opts = { 'Content-Type' => 'application/xml', :anything => "anything" }
|
|
615
|
+
@http_mock.should_receive(:post).with(path, data, opts).and_return(res)
|
|
613
616
|
}
|
|
614
617
|
it {
|
|
615
618
|
api.request_headers = headers_hash
|
|
616
|
-
api.send(:send_request, url, data).should ==
|
|
619
|
+
api.send(:send_request, url, data).should == res
|
|
617
620
|
}
|
|
618
621
|
end
|
|
619
622
|
end
|
|
@@ -100,14 +100,43 @@ describe BigBlueButton::BigBlueButtonFormatter do
|
|
|
100
100
|
it { hash[:param7].should == nil }
|
|
101
101
|
it { hash[:param8].should == nil }
|
|
102
102
|
|
|
103
|
-
context "returns nil if
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
103
|
+
context "returns nil if" do
|
|
104
|
+
context "the param doesn't exists" do
|
|
105
|
+
subject { BigBlueButton::BigBlueButtonFormatter.new({ :param => 1}) }
|
|
106
|
+
it { subject.to_datetime(:inexistent).should == nil }
|
|
107
|
+
end
|
|
107
108
|
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
109
|
+
context "the hash is nil" do
|
|
110
|
+
subject { BigBlueButton::BigBlueButtonFormatter.new(nil) }
|
|
111
|
+
it { subject.to_datetime(:inexistent).should == nil }
|
|
112
|
+
end
|
|
113
|
+
|
|
114
|
+
context "the value is an empty string" do
|
|
115
|
+
subject { BigBlueButton::BigBlueButtonFormatter.new({ param1: '' }) }
|
|
116
|
+
it { subject.to_datetime(:param1).should == nil }
|
|
117
|
+
end
|
|
118
|
+
|
|
119
|
+
context "the value is nil" do
|
|
120
|
+
subject { BigBlueButton::BigBlueButtonFormatter.new({ param1: nil }) }
|
|
121
|
+
it { subject.to_datetime(:param1).should == nil }
|
|
122
|
+
end
|
|
123
|
+
|
|
124
|
+
context "the value is an empty hash" do
|
|
125
|
+
subject { BigBlueButton::BigBlueButtonFormatter.new({ param1: {} }) }
|
|
126
|
+
it { subject.to_datetime(:param1).should == nil }
|
|
127
|
+
end
|
|
128
|
+
|
|
129
|
+
context "the value is an empty array" do
|
|
130
|
+
subject { BigBlueButton::BigBlueButtonFormatter.new({ param1: [] }) }
|
|
131
|
+
it { subject.to_datetime(:param1).should == nil }
|
|
132
|
+
end
|
|
133
|
+
|
|
134
|
+
['null', 'NULL'].each do |v|
|
|
135
|
+
context "the value is '#{v}'" do
|
|
136
|
+
subject { BigBlueButton::BigBlueButtonFormatter.new({ param1: v }) }
|
|
137
|
+
it { subject.to_datetime(:param1).should == nil }
|
|
138
|
+
end
|
|
139
|
+
end
|
|
111
140
|
end
|
|
112
141
|
end
|
|
113
142
|
|
metadata
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
|
2
2
|
name: bigbluebutton-api-ruby
|
|
3
3
|
version: !ruby/object:Gem::Version
|
|
4
|
-
version: 1.
|
|
4
|
+
version: 1.8.0
|
|
5
5
|
platform: ruby
|
|
6
6
|
authors:
|
|
7
7
|
- Mconf
|
|
@@ -9,8 +9,92 @@ authors:
|
|
|
9
9
|
autorequire:
|
|
10
10
|
bindir: bin
|
|
11
11
|
cert_chain: []
|
|
12
|
-
date:
|
|
12
|
+
date: 2021-12-06 00:00:00.000000000 Z
|
|
13
13
|
dependencies:
|
|
14
|
+
- !ruby/object:Gem::Dependency
|
|
15
|
+
name: childprocess
|
|
16
|
+
requirement: !ruby/object:Gem::Requirement
|
|
17
|
+
requirements:
|
|
18
|
+
- - ">="
|
|
19
|
+
- !ruby/object:Gem::Version
|
|
20
|
+
version: 1.0.1
|
|
21
|
+
type: :runtime
|
|
22
|
+
prerelease: false
|
|
23
|
+
version_requirements: !ruby/object:Gem::Requirement
|
|
24
|
+
requirements:
|
|
25
|
+
- - ">="
|
|
26
|
+
- !ruby/object:Gem::Version
|
|
27
|
+
version: 1.0.1
|
|
28
|
+
- !ruby/object:Gem::Dependency
|
|
29
|
+
name: ffi
|
|
30
|
+
requirement: !ruby/object:Gem::Requirement
|
|
31
|
+
requirements:
|
|
32
|
+
- - ">="
|
|
33
|
+
- !ruby/object:Gem::Version
|
|
34
|
+
version: 1.9.24
|
|
35
|
+
type: :runtime
|
|
36
|
+
prerelease: false
|
|
37
|
+
version_requirements: !ruby/object:Gem::Requirement
|
|
38
|
+
requirements:
|
|
39
|
+
- - ">="
|
|
40
|
+
- !ruby/object:Gem::Version
|
|
41
|
+
version: 1.9.24
|
|
42
|
+
- !ruby/object:Gem::Dependency
|
|
43
|
+
name: json
|
|
44
|
+
requirement: !ruby/object:Gem::Requirement
|
|
45
|
+
requirements:
|
|
46
|
+
- - ">="
|
|
47
|
+
- !ruby/object:Gem::Version
|
|
48
|
+
version: 1.8.6
|
|
49
|
+
type: :runtime
|
|
50
|
+
prerelease: false
|
|
51
|
+
version_requirements: !ruby/object:Gem::Requirement
|
|
52
|
+
requirements:
|
|
53
|
+
- - ">="
|
|
54
|
+
- !ruby/object:Gem::Version
|
|
55
|
+
version: 1.8.6
|
|
56
|
+
- !ruby/object:Gem::Dependency
|
|
57
|
+
name: nokogiri
|
|
58
|
+
requirement: !ruby/object:Gem::Requirement
|
|
59
|
+
requirements:
|
|
60
|
+
- - ">="
|
|
61
|
+
- !ruby/object:Gem::Version
|
|
62
|
+
version: 1.10.4
|
|
63
|
+
type: :runtime
|
|
64
|
+
prerelease: false
|
|
65
|
+
version_requirements: !ruby/object:Gem::Requirement
|
|
66
|
+
requirements:
|
|
67
|
+
- - ">="
|
|
68
|
+
- !ruby/object:Gem::Version
|
|
69
|
+
version: 1.10.4
|
|
70
|
+
- !ruby/object:Gem::Dependency
|
|
71
|
+
name: rack
|
|
72
|
+
requirement: !ruby/object:Gem::Requirement
|
|
73
|
+
requirements:
|
|
74
|
+
- - ">="
|
|
75
|
+
- !ruby/object:Gem::Version
|
|
76
|
+
version: 1.6.11
|
|
77
|
+
type: :runtime
|
|
78
|
+
prerelease: false
|
|
79
|
+
version_requirements: !ruby/object:Gem::Requirement
|
|
80
|
+
requirements:
|
|
81
|
+
- - ">="
|
|
82
|
+
- !ruby/object:Gem::Version
|
|
83
|
+
version: 1.6.11
|
|
84
|
+
- !ruby/object:Gem::Dependency
|
|
85
|
+
name: rubyzip
|
|
86
|
+
requirement: !ruby/object:Gem::Requirement
|
|
87
|
+
requirements:
|
|
88
|
+
- - ">="
|
|
89
|
+
- !ruby/object:Gem::Version
|
|
90
|
+
version: 1.3.0
|
|
91
|
+
type: :runtime
|
|
92
|
+
prerelease: false
|
|
93
|
+
version_requirements: !ruby/object:Gem::Requirement
|
|
94
|
+
requirements:
|
|
95
|
+
- - ">="
|
|
96
|
+
- !ruby/object:Gem::Version
|
|
97
|
+
version: 1.3.0
|
|
14
98
|
- !ruby/object:Gem::Dependency
|
|
15
99
|
name: xml-simple
|
|
16
100
|
requirement: !ruby/object:Gem::Requirement
|
|
@@ -43,6 +127,7 @@ files:
|
|
|
43
127
|
- ".ruby-version"
|
|
44
128
|
- ".travis.yml"
|
|
45
129
|
- CHANGELOG.md
|
|
130
|
+
- Dockerfile
|
|
46
131
|
- Gemfile
|
|
47
132
|
- Gemfile.lock
|
|
48
133
|
- LICENSE
|
|
@@ -50,6 +135,7 @@ files:
|
|
|
50
135
|
- README.md
|
|
51
136
|
- Rakefile
|
|
52
137
|
- bigbluebutton-api-ruby.gemspec
|
|
138
|
+
- docker-compose.yml
|
|
53
139
|
- examples/config_xml.rb
|
|
54
140
|
- examples/create.rb
|
|
55
141
|
- examples/get_version_example.rb
|
|
@@ -113,8 +199,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
|
113
199
|
- !ruby/object:Gem::Version
|
|
114
200
|
version: '0'
|
|
115
201
|
requirements: []
|
|
116
|
-
|
|
117
|
-
rubygems_version: 2.4.5
|
|
202
|
+
rubygems_version: 3.0.3
|
|
118
203
|
signing_key:
|
|
119
204
|
specification_version: 4
|
|
120
205
|
summary: BigBlueButton integration for ruby
|