Module: OpenDMM::Utils

Defined in:
lib/opendmm/utils.rb

Class Method Summary collapse

Class Method Details

.finalize_details_hash(details) ⇒ Object



78
79
80
81
82
83
84
85
86
87
88
89
90
91
# File 'lib/opendmm/utils.rb', line 78

def self.finalize_details_hash(details)
  details = details.squish_hard
  details[:actresses] = details[:actresses].map do |actress|
    actress.remove(/[\s\.]/)
  end.sort if details[:actresses]
  details[:cover_image] = join_url_if_relative(details[:page], details[:cover_image])
  details[:thumbnail_image] = join_url_if_relative(details[:page], details[:thumbnail_image])
  details[:sample_images] = details[:sample_images].map do |uri|
    join_url_if_relative(details[:page], uri)
  end if details[:sample_images]
  details[:movie_length] = ChronicDuration.parse(details[:movie_length]) if details[:movie_length]
  details[:release_date] = Date.parse(details[:release_date]) if details[:release_date].instance_of? String
  details.sort.to_h
end

.hash_by_split(array, delimiter = /[::]/) ⇒ Object



64
65
66
67
68
69
70
# File 'lib/opendmm/utils.rb', line 64

def self.hash_by_split(array, delimiter = /[::]/)
  array.map do |str|
    slices = str.split(delimiter, 2).map(&:squish)
  end.select do |pair|
    pair.size == 2
  end.to_h
end

.hash_from_dl(dl) ⇒ Object



48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
# File 'lib/opendmm/utils.rb', line 48

def self.hash_from_dl(dl)
  dts = dl.css('dt').map(&:text).map(&:squish)
  dds = dl.children.select do |node|
    node.name == 'dt' || node.name == 'dd'
  end.split do |node|
    node.name == 'dt'
  end[1..-1].map do |nodes|
    node_set = Nokogiri::XML::NodeSet.new(dl.document)
    nodes.each do |node|
      node_set << node
    end
    node_set
  end
  Hash[dts.zip(dds)]
end

.html_in_utf8(content) ⇒ Object



72
73
74
75
76
# File 'lib/opendmm/utils.rb', line 72

def self.html_in_utf8(content)
  encoding = Nokogiri.HTML(content).encoding
  content = content.encode('UTF-8', encoding, invalid: :replace, undef: :replace, replace: '')
  Nokogiri.HTML content
end

.join_url_if_relative(page_url, image_url) ⇒ Object



93
94
95
96
# File 'lib/opendmm/utils.rb', line 93

def self.join_url_if_relative(page_url, image_url)
  return nil unless image_url
  image_url.start_with?('http') ? image_url : URI.join(page_url, image_url).to_s
end