Class: BbEPUB::Transform::Creator

Inherits:
Bookbinder::Transform
  • Object
show all
Defined in:
lib/bb-epub/transform/creator.rb

Direct Known Subclasses

Contributor

Instance Method Summary collapse

Instance Method Details

#dependenciesObject



3
4
5
# File 'lib/bb-epub/transform/creator.rb', line 3

def dependencies
  [BbEPUB::Transform::Metadata]
end

#from_map(package) ⇒ Object



35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
# File 'lib/bb-epub/transform/creator.rb', line 35

def from_map(package)
  return  unless actors = package.map[actor_type]
  opf_doc = package.file(:opf).document
   = opf_doc.find('opf|metadata')
  actors.each_with_index { |actor, seq|
    actor_tag = opf_doc.new_node('dc:'+actor_type, :append => )
    actor_tag.content = actor['name']
    if actors.length > 1
      seq += 1
      actor_id = "dc-#{actor_type}-metadata-#{seq}"
      actor_tag['id'] = actor_id
      opf_doc.new_node('meta', :append => ) { |role_meta_tag|
        role_meta_tag.content = actor['role']
        role_meta_tag['property'] = 'role'
        role_meta_tag['refines'] = '#'+actor_id
      }
      opf_doc.new_node('meta', :append => ) { |seq_meta_tag|
        seq_meta_tag.content = seq
        seq_meta_tag['property'] = 'display-seq'
        seq_meta_tag['refines'] = '#'+actor_id
      }
    end
  }
end

#to_map(package) ⇒ Object



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
# File 'lib/bb-epub/transform/creator.rb', line 8

def to_map(package)
  return  unless package.map['metadata']
  return  unless  = package.map['metadata'][actor_type]
  actors = []
  actor_data = .sort { |a, b|
    if a['display-seq'] && b['display-seq']
      a['display-seq']['@'].to_i <=> b['display-seq']['@'].to_i
    else
      0
    end
  }
  actor_data.each { |cdata|
    actor = {
      'name' => cdata['@'],
      'role' => cdata['role'] ? cdata['role']['@'] : 'aut',
    }
    actor['file-as'] = cdata['file-as']['@']  if cdata['file-as']
    # Eh, 'alternate-script' is too messy for now.

    .delete(cdata)
    actors.push(actor)
  }
  package.map['metadata'].delete(actor_type)  if .empty?
  package.map[actor_type] = actors
end