captive 1.0.3 → 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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: a61ff5fe032e4d9f9156fd45c625320d7434e6ec7adb43e60995a4e1fda59a35
4
- data.tar.gz: d3406fa0e28b7fecc1f697d642673b4b90c78061d9a6dfbb1ab5b29501069210
3
+ metadata.gz: 59d644077d8ed9449fb1311c4464d2b4e9d58e6ab38a24096631afdf2c7f6485
4
+ data.tar.gz: 85703935869c631ab93cb3be3986d6cdc771f79d9bd0d79c824ac2254b8bc4b4
5
5
  SHA512:
6
- metadata.gz: b33a91a5041a56796ea020e37123519354ddc372da113a4abd8bc22f9bde4a6d70b7bb2235785893415c4e60ba2d2b679a0aa35fc4b809731c35fd83d72df179
7
- data.tar.gz: 88ba730af80b36292739548ac4bff35b1f19c27f0cba66749c53affe6b63c2b3f8cbe78c06f6fdc16c0949551e75462e9e9d90d1de44af2342815a4e89934e44
6
+ metadata.gz: 640399ae1288cbe55f0e33fb15b922d70e43e69d699a93c024651a5226e1c59a844305cd2cee4a113e6f9e31a80c13e7e6a224ce0e94e9b631617fd82f246d7a
7
+ data.tar.gz: 757b8f2ff8d7412cad21edc82b0b699a2ff33a398748b5164daad11eceabbdc0fd34f14d3eafc713451ea48d540258112fb38d0a474f48cbcf480247881207a2
@@ -14,6 +14,14 @@ module Captive
14
14
  def from_blob(blob:)
15
15
  new(cue_list: parse(blob: blob))
16
16
  end
17
+
18
+ def from_json(json:)
19
+ json = JSON.parse(json) if json.is_a?(String)
20
+ raise InvalidJsonInput unless json.key?('cues') && json['cues'].is_a?(Array)
21
+
22
+ cues = json['cues'].map { |cue_json| Cue.from_json(json: cue_json) }
23
+ new(cue_list: cues)
24
+ end
17
25
  end
18
26
 
19
27
  def self.included(base)
@@ -24,6 +24,25 @@ module Captive
24
24
  self.properties = properties || {}
25
25
  end
26
26
 
27
+ def self.from_json(json:)
28
+ schema = {
29
+ text!: :text,
30
+ start_time!: :start_time,
31
+ end_time!: :end_time,
32
+ number!: :cue_number,
33
+ properties: :properties,
34
+ }
35
+ data = {}
36
+ schema.each do |mask, value|
37
+ key = mask[-1] == '!' ? mask.to_s[0...-1] : mask.to_s
38
+ raise InvalidJsonInput, "Cue missing field: #{key}" if key.to_s != mask.to_s && !json.key?(key)
39
+
40
+ data[value] = json[key]
41
+ end
42
+
43
+ new(**data)
44
+ end
45
+
27
46
  def start_time=(time)
28
47
  set_time(:start_time, time)
29
48
  end
@@ -16,4 +16,7 @@ module Captive
16
16
  # Error denoting incorrect input to a method.
17
17
  class InvalidInput < CaptiveError
18
18
  end
19
+
20
+ class InvalidJsonInput < CaptiveError
21
+ end
19
22
  end
@@ -86,7 +86,8 @@ module Captive
86
86
 
87
87
  # VTT Header tag matcher
88
88
  def self.validate_header(line)
89
- !!line.strip.match(/^#{VTT_HEADER}/)
89
+ # Make sure BOM does not interfere with header detection
90
+ !!line.force_encoding('UTF-8').delete("\xEF\xBB\xBF").strip.match(/^#{VTT_HEADER}/)
90
91
  end
91
92
 
92
93
  # VTT Metadata tag matcher
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module Captive
4
- VERSION = '1.0.3'
4
+ VERSION = '1.0.4'
5
5
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: captive
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.0.3
4
+ version: 1.0.4
5
5
  platform: ruby
6
6
  authors:
7
7
  - mserran2
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2020-07-14 00:00:00.000000000 Z
11
+ date: 2020-07-18 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler
@@ -109,7 +109,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
109
109
  requirements:
110
110
  - - ">="
111
111
  - !ruby/object:Gem::Version
112
- version: '0'
112
+ version: 1.9.2
113
113
  required_rubygems_version: !ruby/object:Gem::Requirement
114
114
  requirements:
115
115
  - - ">="