captive 1.0.4 → 1.1.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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 59d644077d8ed9449fb1311c4464d2b4e9d58e6ab38a24096631afdf2c7f6485
4
- data.tar.gz: 85703935869c631ab93cb3be3986d6cdc771f79d9bd0d79c824ac2254b8bc4b4
3
+ metadata.gz: 79a71dcf3548d49781cc44f2d7141d53db3268b22e535ce6d3871a560b2ff416
4
+ data.tar.gz: b5e44c915d7c0d16e0cf24a62c053f0526f765c5f7a6aff061e2bbd2666fa848
5
5
  SHA512:
6
- metadata.gz: 640399ae1288cbe55f0e33fb15b922d70e43e69d699a93c024651a5226e1c59a844305cd2cee4a113e6f9e31a80c13e7e6a224ce0e94e9b631617fd82f246d7a
7
- data.tar.gz: 757b8f2ff8d7412cad21edc82b0b699a2ff33a398748b5164daad11eceabbdc0fd34f14d3eafc713451ea48d540258112fb38d0a474f48cbcf480247881207a2
6
+ metadata.gz: d407c301e9d7f617bd99fae21c3b45dfd0753a11afb1993a1be500e9f95fab1cdcc8606aef69c826c3cf7c5c981df600933773cb30c9f36f5de84dea0453d6c2
7
+ data.tar.gz: 36906e52e3acb139114be27ba7ffd35dd2a0f494580325b10c1fbec3f271b741da32f277ef607080e531449c9c02f6203c61df13e161f73fa0deccca99b8cb1a
@@ -12,34 +12,32 @@ module Captive
12
12
  # List of Text Properties
13
13
  TEXT_PROPERTIES = [ALIGNMENT, COLOR, POSITION].freeze
14
14
 
15
- attr_accessor :number, :text, :properties
15
+ attr_accessor :text, :properties
16
16
  attr_reader :start_time, :end_time
17
17
 
18
18
  # Creates a new Cue class denoting a subtitle.
19
- def initialize(text: nil, start_time: nil, end_time: nil, cue_number: nil, properties: {})
19
+ def initialize(text: nil, start_time: nil, end_time: nil, properties: {})
20
20
  self.text = text
21
21
  self.start_time = start_time
22
22
  self.end_time = end_time
23
- self.number = cue_number
24
23
  self.properties = properties || {}
25
24
  end
26
25
 
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
- }
26
+ def self.from_json(json:, mapping: {})
27
+ schema = {}
28
+ %i[text! start_time! end_time! properties].each do |field|
29
+ field_name = field.to_s.delete('!')
30
+ schema[field] = mapping[field_name] || mapping[field_name.to_sym] || field_name.to_sym
31
+ end
35
32
  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)
33
+ schema.each do |mask, mapper|
34
+ key = mask[-1] == '!' ? mask.to_s[0...-1].to_sym : mask
35
+ if key.to_s != mask.to_s && !(json.key?(mapper.to_s) || json.key?(mapper.to_sym))
36
+ raise InvalidJsonInput, "Cue missing field: #{mapper}"
37
+ end
39
38
 
40
- data[value] = json[key]
39
+ data[key] = json[mapper.to_s] || json[mapper.to_sym]
41
40
  end
42
-
43
41
  new(**data)
44
42
  end
45
43
 
@@ -87,11 +85,15 @@ module Captive
87
85
  end
88
86
 
89
87
  def as_json(**args)
90
- if respond_to?(:instance_values) && instance_values.respond_to?(:as_json)
91
- instance_values.as_json(**args)
92
- else
93
- instance_variables.each_with_object({}) { |key, hash| hash[key[1..-1]] = instance_variable_get(key) }
94
- end
88
+ options = args.delete(:options) || {}
89
+ format = options['format'] || {}
90
+ obj = {
91
+ 'start_time' => format[:time] == :timecode ? milliseconds_to_timecode(start_time) : start_time,
92
+ 'end_time' => format[:time] == :timecode ? milliseconds_to_timecode(end_time) : end_time,
93
+ 'text' => text,
94
+ 'properties' => properties,
95
+ }
96
+ obj.respond_to?(:as_json) ? obj.as_json(**args) : obj
95
97
  end
96
98
 
97
99
  private
@@ -19,13 +19,12 @@ module Captive
19
19
 
20
20
  raise InvalidSubtitle, "Invalid Cue Number at line #{count}" if /^\d+$/.match(line).nil?
21
21
 
22
- cue = Cue.new(cue_number: line.to_i)
23
22
  state = :time
24
23
  when :time
25
24
  raise InvalidSubtitle, "Invalid Time Format at line #{count}" unless timecode?(line)
26
25
 
27
26
  start_time, end_time = line.split('-->').map(&:strip)
28
- cue.set_times(
27
+ cue = Cue.new(
29
28
  start_time: format_time(start_time),
30
29
  end_time: format_time(end_time)
31
30
  )
@@ -51,8 +50,8 @@ module Captive
51
50
 
52
51
  def to_s
53
52
  string = String.new
54
- cues.each do |cue|
55
- string << cue.number.to_s
53
+ cues.each_with_index do |cue, index|
54
+ string << (index + 1).to_s
56
55
  string << "\n"
57
56
  string << milliseconds_to_timecode(cue.start_time).gsub!('.', ',')
58
57
  string << ' --> '
@@ -14,7 +14,6 @@ module Captive
14
14
  def self.parse(blob:)
15
15
  cue_list = []
16
16
  lines = blob.split("\n")
17
- cue_count = 1
18
17
  state = :new_cue
19
18
  cue = nil
20
19
  raise InvalidSubtitle, 'Invalid VTT Signature' unless validate_header(lines.shift)
@@ -42,8 +41,7 @@ module Captive
42
41
  elements = line.split
43
42
  start_time = elements[0]
44
43
  end_time = elements[2]
45
- cue = Cue.new(cue_number: cue_count, start_time: start_time, end_time: end_time)
46
- cue_count += 1
44
+ cue = Cue.new(start_time: start_time, end_time: end_time)
47
45
  state = :text
48
46
  when :text
49
47
  if line.empty?
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module Captive
4
- VERSION = '1.0.4'
4
+ VERSION = '1.1.0'
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.4
4
+ version: 1.1.0
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-18 00:00:00.000000000 Z
11
+ date: 2020-07-22 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler