Skip to content

Commit

Permalink
fix add_item new broken interface. including fix #109
Browse files Browse the repository at this point in the history
  • Loading branch information
skoji committed Feb 22, 2020
1 parent e4558b4 commit 5841a9a
Show file tree
Hide file tree
Showing 4 changed files with 98 additions and 8 deletions.
8 changes: 5 additions & 3 deletions lib/gepub/book.rb
Original file line number Diff line number Diff line change
Expand Up @@ -467,10 +467,12 @@ def add_item_internal(href, content: nil, item_attributes: , attributes: {}, ord
item_attributes.each do |attr, val|
next if val.nil?
method_name = if attr == :toc_text
attr.to_s
""
elsif attr == :property
"add_"
else
"add_" + attr.to_s
end
"set_"
end + attr.to_s
item.send(method_name, val)
end
item
Expand Down
8 changes: 4 additions & 4 deletions lib/gepub/book_add_item.rb
Original file line number Diff line number Diff line change
Expand Up @@ -3,18 +3,18 @@ class Book
# add an item(i.e. html, images, audios, etc) to Book.
# the added item will be referenced by the first argument in the EPUB container.
def add_item(href, deprecated_content = nil, deprecated_id = nil, deprecated_attributes = nil, content: nil,
id: nil,media_type: nil,fallback: nil,properties: nil,media_overlay: nil,toc_text: nil,
id: nil,media_type: nil,fallback: nil,properties: nil,media_overlay: nil,toc_text: nil,property: nil,
attributes: {})
content, id, attributes = handle_deprecated_add_item_arguments(deprecated_content, deprecated_id, deprecated_attributes, content, id, attributes)
add_item_internal(href, content: content, item_attributes: { id: id,media_type: media_type,fallback: fallback,properties: properties,media_overlay: media_overlay,toc_text: toc_text }, attributes: attributes, ordered: false)
add_item_internal(href, content: content, item_attributes: { id: id,media_type: media_type,fallback: fallback,properties: properties,media_overlay: media_overlay,toc_text: toc_text,property: property }, attributes: attributes, ordered: false)
end

# same as add_item, but the item will be added to spine of the EPUB.
def add_ordered_item(href, deprecated_content = nil, deprecated_id = nil, deprecated_attributes = nil, content:nil,
id: nil,media_type: nil,fallback: nil,properties: nil,media_overlay: nil,toc_text: nil,
id: nil,media_type: nil,fallback: nil,properties: nil,media_overlay: nil,toc_text: nil,property: nil,
attributes: {})
content, id, attributes = handle_deprecated_add_item_arguments(deprecated_content, deprecated_id, deprecated_attributes, content, id, attributes)
add_item_internal(href, content: content, item_attributes: { id: id,media_type: media_type,fallback: fallback,properties: properties,media_overlay: media_overlay,toc_text: toc_text }, attributes: attributes, ordered: true)
add_item_internal(href, content: content, item_attributes: { id: id,media_type: media_type,fallback: fallback,properties: properties,media_overlay: media_overlay,toc_text: toc_text,property: property }, attributes: attributes, ordered: true)
end
end
end
87 changes: 87 additions & 0 deletions spec/book_spec.rb
Original file line number Diff line number Diff line change
Expand Up @@ -272,8 +272,95 @@
end
end
describe 'add_item' do
it 'adds item with media type' do
book = GEPUB::Book.new
book.add_item 'chap3.xml', content: nil, media_type: 'application/docbook+xml'
expect(book.items.size).to eq 1
end

it 'adds item with fallback' do
book = GEPUB::Book.new
xhtml_item = book.add_item 'chap3.xhtml'
docbook_item = book.add_item 'chap3.xml', content: nil, media_type: 'application/docbook+xml', fallback: xhtml_item.id
expect(docbook_item.fallback).to eq xhtml_item.id
expect(book.items.size).to eq 2
end

it 'add item with toc text' do
book = GEPUB::Book.new
book.add_item 'chap3.xhtml', toc_text: 'chapter 3'
expect(book.instance_eval { @toc[0][:text] } ).to eq 'chapter 3'
expect(book.items.size).to eq 1
end

it 'add item with properties' do
book = GEPUB::Book.new
item = book.add_item 'chap3.xhtml', properties: ['page-spread-right']
expect(item.properties.size).to eq 1
expect(item.properties[0]).to eq 'page-spread-right'
expect(book.items.size).to eq 1
end

it 'add item with property' do
book = GEPUB::Book.new
item = book.add_item 'chap3.xhtml', property: 'page-spread-right'
expect(item.properties.size).to eq 1
expect(item.properties[0]).to eq 'page-spread-right'
expect(book.items.size).to eq 1
end

it 'add item with media_overlay' do
book = GEPUB::Book.new
item = book.add_item 'chap3.xhtml', media_overlay: 'id-for-media-overlay'
expect(item.media_overlay).to eq 'id-for-media-overlay'
expect(book.items.size).to eq 1
end
end
describe 'add_ordered_item' do
it 'adds ordered item with media type' do
book = GEPUB::Book.new
book.add_ordered_item 'chap3.xml', content: nil, media_type: 'application/docbook+xml'
expect(book.items.size).to eq 1
end

it 'adds ordered_item with fallback' do
book = GEPUB::Book.new
xhtml_item = book.add_item 'chap3.xhtml'
docbook_item = book.add_ordered_item 'chap3.xml', content: nil, media_type: 'application/docbook+xml', fallback: xhtml_item.id
expect(docbook_item.fallback).to eq xhtml_item.id
expect(book.items.size).to eq 2
end

it 'add ordered item with toc text' do
book = GEPUB::Book.new
book.add_ordered_item 'chap3.xhtml', toc_text: 'chapter 3'
expect(book.instance_eval { @toc[0][:text] } ).to eq 'chapter 3'
expect(book.items.size).to eq 1
end

it 'add ordered item with properties' do
book = GEPUB::Book.new
item = book.add_ordered_item 'chap3.xhtml', properties: ['page-spread-right']
expect(item.properties.size).to eq 1
expect(item.properties[0]).to eq 'page-spread-right'
expect(book.items.size).to eq 1
end

it 'add item with property' do
book = GEPUB::Book.new
item = book.add_ordered_item 'chap3.xhtml', property: 'page-spread-right'
expect(item.properties.size).to eq 1
expect(item.properties[0]).to eq 'page-spread-right'
expect(book.items.size).to eq 1
end


it 'add ordered_item with media_overlay' do
book = GEPUB::Book.new
item = book.add_ordered_item 'chap3.xhtml', media_overlay: 'id-for-media-overlay'
expect(item.media_overlay).to eq 'id-for-media-overlay'
expect(book.items.size).to eq 1
end
end
describe 'ordered' do
end
Expand Down
3 changes: 2 additions & 1 deletion tools/generate_function.rb
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,8 @@
end.map do |attr|
attr.sub('-', '_')
end
attrs << "toc_text"
attrs << "toc_text"
attrs << "property"
attrs_arguments_string = attrs.map { |attr| "#{attr}: nil" }.join(',')
attrs_internal_string = "{ " + attrs.map { |attr| "#{attr}: #{attr}"}.join(',') + " }"
File.write(File.join(File.dirname(__FILE__), "../lib/gepub/book_add_item.rb"), <<EOF)
Expand Down

0 comments on commit 5841a9a

Please sign in to comment.