Class: Mediainfo::Stream

Inherits:
Object
  • Object
show all
Defined in:
lib/mediainfo.rb

Direct Known Subclasses

AudioStream, GeneralStream, ImageStream, VideoStream

Defined Under Namespace

Classes: InvalidStreamType

Class Method Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(stream_type) ⇒ Stream

Returns a new instance of Stream.

Raises:

  • (ArgumentError)


152
153
154
155
156
157
158
159
160
161
# File 'lib/mediainfo.rb', line 152

def initialize(stream_type)
  raise ArgumentError, "need a stream_type, received #{stream_type.inspect}" if stream_type.nil?
  
  @stream_type = stream_type.downcase.to_sym
  
  # TODO @parsed_response is not the best name anymore, but I'm leaving it 
  # alone to focus on refactoring the interface to the streams 
  # before I refactor the attribute reader implementations.
  @parsed_response = { @stream_type => {} }
end

Class Method Details

.create(stream_type) ⇒ Object

Raises:

  • (ArgumentError)


140
141
142
143
144
145
146
147
148
149
150
# File 'lib/mediainfo.rb', line 140

def self.create(stream_type)
  raise ArgumentError, "need a stream_type, received #{stream_type.inspect}" if stream_type.nil?
  
  stream_class_name = "#{stream_type}Stream"
  
  if Mediainfo.const_defined?(stream_class_name)
    Mediainfo.const_get(stream_class_name).new(stream_type)
  else
    raise InvalidStreamType, "bad stream type: #{stream_type.inspect}"
  end
end

.inherited(stream_type) ⇒ Object



125
126
127
128
129
130
131
132
133
134
135
136
137
138
# File 'lib/mediainfo.rb', line 125

def self.inherited(stream_type)
  stream_type.extend(AttrReaders)
  
  def stream_type.method_added(method_name)
    if stream_type = name[/[^:]+$/][/^(#{SECTIONS.map { |x| x.to_s.capitalize } * '|'})/]
      stream_type.downcase! 
      stream_type = stream_type.to_sym
    else
      raise "could not determine stream type, please report bug!"
    end
    
    Mediainfo.delegate(method_name, stream_type)
  end
end

Instance Method Details

#[](k) ⇒ Object



163
# File 'lib/mediainfo.rb', line 163

def [](k); @parsed_response[@stream_type][k]; end

#[]=(k, v) ⇒ Object



164
# File 'lib/mediainfo.rb', line 164

def []=(k,v); @parsed_response[@stream_type][k] = v; end