Module: Mediainfo::AttrReaders
- Included in:
- Mediainfo
- Defined in:
- lib/mediainfo/attr_readers.rb
Instance Method Summary collapse
- #mediainfo_attr_reader(method_name, mediainfo_key = nil) ⇒ Object
- #mediainfo_date_reader(*a) ⇒ Object
- #mediainfo_duration_reader(*a) ⇒ Object
- #mediainfo_int_reader(*a) ⇒ Object
Instance Method Details
#mediainfo_attr_reader(method_name, mediainfo_key = nil) ⇒ Object
6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 |
# File 'lib/mediainfo/attr_readers.rb', line 6 def mediainfo_attr_reader(method_name, mediainfo_key = nil) # NOTE explicit self necessary here until we rename local var 'name' stream_class_type = name[/::([^:]+)Stream$/, 1] before_type_cast_method_name = "#{method_name}_before_type_cast" mediainfo_key = mediainfo_key.gsub(/\W+/, "_").downcase if mediainfo_key if m = stream_class_type.match(/^#{Regexp.union *Mediainfo::NON_GENERAL_SECTIONS.map { |x| x.to_s.capitalize }}$/) k1 = stream_class_type.downcase.to_sym else k1 = :general end define_method before_type_cast_method_name do if v = instance_variable_get("@#{before_type_cast_method_name}") v else k2 = mediainfo_key ? mediainfo_key : method_name.to_s v = @parsed_response[k1][k2] instance_variable_set "@#{before_type_cast_method_name}", v instance_variable_get "@#{before_type_cast_method_name}" end end define_method method_name do if v = instance_variable_get("@#{method_name}") v else v = send(before_type_cast_method_name) v = yield v if v and block_given? instance_variable_set "@#{method_name}", v instance_variable_get "@#{method_name}" end end supported_attribute = method_name supported_attribute = "#{stream_class_type.downcase}_#{method_name}".to_sym unless k1 == :general Mediainfo.supported_attributes << supported_attribute end |
#mediainfo_date_reader(*a) ⇒ Object
67 68 69 |
# File 'lib/mediainfo/attr_readers.rb', line 67 def mediainfo_date_reader(*a) mediainfo_attr_reader(*a) { |v| Time.parse v } end |
#mediainfo_duration_reader(*a) ⇒ Object
48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 |
# File 'lib/mediainfo/attr_readers.rb', line 48 def mediainfo_duration_reader(*a) mediainfo_attr_reader *a do |v| t = 0 v.split(/\s+/).each do |tf| case tf # XXX haven't actually seen hot they represent hours yet # but hopefully this is ok.. :\ when /\d+h/ then t += tf.to_i * 60 * 60 * 1000 when /\d+mn/ then t += tf.to_i * 60 * 1000 when /\d+ms/ then t += tf.to_i when /\d+s/ then t += tf.to_i * 1000 else raise "unexpected time fragment! please report bug!" end end t end end |
#mediainfo_int_reader(*a) ⇒ Object
71 72 73 |
# File 'lib/mediainfo/attr_readers.rb', line 71 def mediainfo_int_reader(*a) mediainfo_attr_reader(*a) { |v| v.gsub(/\D+/, "").to_i } end |