ruby_powerpoint 1.1 → 1.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +13 -5
- data/lib/ruby_powerpoint/presentation.rb +3 -3
- data/lib/ruby_powerpoint/slide.rb +57 -23
- data/lib/ruby_powerpoint/version.rb +1 -1
- data/spec/fixtures/sample.pptx +0 -0
- data/spec/test_spec.rb +5 -3
- metadata +16 -18
- data/spec/fixtures/.~lock.sample.pptx# +0 -1
checksums.yaml
CHANGED
@@ -1,7 +1,15 @@
|
|
1
1
|
---
|
2
|
-
|
3
|
-
metadata.gz:
|
4
|
-
|
2
|
+
!binary "U0hBMQ==":
|
3
|
+
metadata.gz: !binary |-
|
4
|
+
MDQwYjA2MjA0Yjg5N2EwZjA3YzY3ZTBkMjMwZjBjYjYyNGIyMzEzYw==
|
5
|
+
data.tar.gz: !binary |-
|
6
|
+
NjY3OTA1NDc2ZDc3NjY3ZDZkZjM3NzAzZmM2ZDk2NDU2MTQxMDM4Zg==
|
5
7
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
|
8
|
+
metadata.gz: !binary |-
|
9
|
+
NGU5OWY5MTgzODE2ZGRlMDQ3NzE3MzE5NjM3MDI5NmE5YTZkNWQxZjEwY2Y0
|
10
|
+
M2M5MTBmMGEzOTMwNzY2Y2UyMWYwMTBlMDc5NTQ4MzU4NjM2ZWNjMWVhODMz
|
11
|
+
MjY3YzdhMzgwMDBkYzE1YTIwM2I5NDM0MTNhMWQwOTczYTcwOTI=
|
12
|
+
data.tar.gz: !binary |-
|
13
|
+
NTAxNWNlZGU3ODAyNDE3ZmIwMWZjYzgzYmYyNDAxMjYwMTM5NzFlNzFkYjc1
|
14
|
+
ZmY0ZGZiNmU5NjE5MDFjYjJkNTM5MzQ5MmE5N2Q4OWI1NWY3NDcxZmQzMDI1
|
15
|
+
NWZlYjg3NmVlZjc3ZmQ5MWZkYzc1NmRiZmY3MTc3NzlhYTA4Y2E=
|
@@ -14,9 +14,9 @@ module RubyPowerpoint
|
|
14
14
|
|
15
15
|
def slides
|
16
16
|
slides = Array.new
|
17
|
-
@files.sort{|a,b| a.name <=> b.name}.
|
18
|
-
if
|
19
|
-
slides.push RubyPowerpoint::Slide.new(self,
|
17
|
+
@files.sort{|a,b| a.name <=> b.name}.each do |f|
|
18
|
+
if f.name.include? 'ppt/slides/slide'
|
19
|
+
slides.push RubyPowerpoint::Slide.new(self, f.name)
|
20
20
|
end
|
21
21
|
end
|
22
22
|
slides
|
@@ -5,47 +5,81 @@ module RubyPowerpoint
|
|
5
5
|
class RubyPowerpoint::Slide
|
6
6
|
|
7
7
|
attr_reader :presentation,
|
8
|
-
:
|
9
|
-
:
|
8
|
+
:slide_number,
|
9
|
+
:slide_number,
|
10
|
+
:slide_file_name
|
10
11
|
|
11
|
-
def initialize presentation,
|
12
|
+
def initialize presentation, slide_xml_path
|
12
13
|
@presentation = presentation
|
13
|
-
@
|
14
|
-
@
|
14
|
+
@slide_xml_path = slide_xml_path
|
15
|
+
@slide_number = extract_slide_number_from_path slide_xml_path
|
16
|
+
@slide_file_name = extract_slide_file_name_from_path slide_xml_path
|
17
|
+
parse_slide
|
18
|
+
parse_relation
|
15
19
|
end
|
16
20
|
|
17
|
-
def
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
21
|
+
def parse_slide
|
22
|
+
slide_doc = @presentation.files.file.open @slide_xml_path
|
23
|
+
@slide_xml = Nokogiri::XML::Document.parse slide_doc
|
24
|
+
end
|
25
|
+
|
26
|
+
def parse_relation
|
27
|
+
@relation_xml_path = "ppt/slides/_rels/#{@slide_file_name}.rels"
|
28
|
+
if @presentation.files.file.exist? @relation_xml_path
|
29
|
+
relation_doc = @presentation.files.file.open @relation_xml_path
|
30
|
+
@relation_xml = Nokogiri::XML::Document.parse relation_doc
|
23
31
|
end
|
24
|
-
|
32
|
+
end
|
33
|
+
|
34
|
+
def content
|
35
|
+
content_elements @slide_xml
|
25
36
|
end
|
26
37
|
|
27
38
|
def title
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
|
39
|
+
title_elements = title_elements(@slide_xml)
|
40
|
+
title_elements.join(" ") if title_elements.length > 0
|
41
|
+
end
|
42
|
+
|
43
|
+
def images
|
44
|
+
image_elements(@relation_xml)
|
45
|
+
.map.each do |node|
|
46
|
+
@presentation.files.file.open(
|
47
|
+
node['Target'].gsub('..', 'ppt'))
|
48
|
+
end
|
34
49
|
end
|
35
50
|
|
36
|
-
|
37
|
-
|
51
|
+
private
|
52
|
+
|
53
|
+
def extract_slide_number_from_path path
|
54
|
+
path.gsub('ppt/slides/slide', '').gsub('.xml', '').to_i
|
55
|
+
end
|
56
|
+
|
57
|
+
def extract_slide_file_name_from_path path
|
58
|
+
path.gsub('ppt/slides/', '')
|
59
|
+
end
|
60
|
+
|
38
61
|
def title_elements(xml)
|
39
62
|
shape_elements(xml).select{|shape| element_is_title(shape)}
|
40
63
|
end
|
41
|
-
|
64
|
+
|
65
|
+
def content_elements(xml)
|
66
|
+
xml.xpath('//a:t').collect{ |node| node.text }
|
67
|
+
end
|
68
|
+
|
69
|
+
def image_elements(xml)
|
70
|
+
xml.css('Relationship').select{ |node| element_is_image(node)}
|
71
|
+
end
|
72
|
+
|
42
73
|
def shape_elements(xml)
|
43
74
|
xml.xpath('//p:sp')
|
44
|
-
end
|
75
|
+
end
|
45
76
|
|
46
77
|
def element_is_title(shape)
|
47
78
|
shape.xpath('.//p:nvSpPr/p:nvPr/p:ph').select{|prop| prop['type'] == 'title' || prop['type'] == 'ctrTitle'}.length > 0
|
48
79
|
end
|
49
|
-
|
80
|
+
|
81
|
+
def element_is_image(node)
|
82
|
+
node['Type'].include? 'image'
|
83
|
+
end
|
50
84
|
end
|
51
85
|
end
|
data/spec/fixtures/sample.pptx
CHANGED
Binary file
|
data/spec/test_spec.rb
CHANGED
@@ -18,13 +18,15 @@ describe 'RubyPowerpoint parsing a sample PPTX file' do
|
|
18
18
|
it 'open a PPTX file successfully.' do
|
19
19
|
@deck.should_not be_nil
|
20
20
|
@deck.slides.should_not eql []
|
21
|
-
@deck.slides.first.content.should eql ["Some
|
22
|
-
@deck.slides.
|
21
|
+
@deck.slides.first.content.should eql ["Some test ", "Powerpoint"]
|
22
|
+
@deck.slides.first.content.should eql ["Some test ", "Powerpoint"]
|
23
|
+
@deck.slides.first.images.first.should_not eql nil #"ppt/media/image1.jpeg"
|
24
|
+
@deck.slides.last.title.should eql "Some title here"
|
25
|
+
@deck.slides.last.content.should eql ["Some title here", "Some txt here", "Some ", "more text here."]
|
23
26
|
end
|
24
27
|
end
|
25
28
|
|
26
29
|
describe 'open rime.pptx file' do
|
27
|
-
# I couldn't get the sample.pptx file to open on either Powerpoint 2007 on Windows 7 or in Powerpoint 2008 on Mac OS X 10.9, so I created my own file to test
|
28
30
|
before(:all) do
|
29
31
|
@deck = RubyPowerpoint::Presentation.new 'spec/fixtures/rime.pptx'
|
30
32
|
end
|
metadata
CHANGED
@@ -1,83 +1,83 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: ruby_powerpoint
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: '1.
|
4
|
+
version: '1.2'
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- pythonicrubyist
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2014-03-
|
11
|
+
date: 2014-03-07 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bundler
|
15
15
|
requirement: !ruby/object:Gem::Requirement
|
16
16
|
requirements:
|
17
|
-
- -
|
17
|
+
- - ~>
|
18
18
|
- !ruby/object:Gem::Version
|
19
19
|
version: '1.3'
|
20
20
|
type: :development
|
21
21
|
prerelease: false
|
22
22
|
version_requirements: !ruby/object:Gem::Requirement
|
23
23
|
requirements:
|
24
|
-
- -
|
24
|
+
- - ~>
|
25
25
|
- !ruby/object:Gem::Version
|
26
26
|
version: '1.3'
|
27
27
|
- !ruby/object:Gem::Dependency
|
28
28
|
name: rake
|
29
29
|
requirement: !ruby/object:Gem::Requirement
|
30
30
|
requirements:
|
31
|
-
- -
|
31
|
+
- - ! '>='
|
32
32
|
- !ruby/object:Gem::Version
|
33
33
|
version: '0'
|
34
34
|
type: :development
|
35
35
|
prerelease: false
|
36
36
|
version_requirements: !ruby/object:Gem::Requirement
|
37
37
|
requirements:
|
38
|
-
- -
|
38
|
+
- - ! '>='
|
39
39
|
- !ruby/object:Gem::Version
|
40
40
|
version: '0'
|
41
41
|
- !ruby/object:Gem::Dependency
|
42
42
|
name: rspec
|
43
43
|
requirement: !ruby/object:Gem::Requirement
|
44
44
|
requirements:
|
45
|
-
- -
|
45
|
+
- - ~>
|
46
46
|
- !ruby/object:Gem::Version
|
47
47
|
version: 2.13.0
|
48
48
|
type: :development
|
49
49
|
prerelease: false
|
50
50
|
version_requirements: !ruby/object:Gem::Requirement
|
51
51
|
requirements:
|
52
|
-
- -
|
52
|
+
- - ~>
|
53
53
|
- !ruby/object:Gem::Version
|
54
54
|
version: 2.13.0
|
55
55
|
- !ruby/object:Gem::Dependency
|
56
56
|
name: nokogiri
|
57
57
|
requirement: !ruby/object:Gem::Requirement
|
58
58
|
requirements:
|
59
|
-
- -
|
59
|
+
- - ~>
|
60
60
|
- !ruby/object:Gem::Version
|
61
61
|
version: 1.6.0
|
62
62
|
type: :runtime
|
63
63
|
prerelease: false
|
64
64
|
version_requirements: !ruby/object:Gem::Requirement
|
65
65
|
requirements:
|
66
|
-
- -
|
66
|
+
- - ~>
|
67
67
|
- !ruby/object:Gem::Version
|
68
68
|
version: 1.6.0
|
69
69
|
- !ruby/object:Gem::Dependency
|
70
70
|
name: rubyzip
|
71
71
|
requirement: !ruby/object:Gem::Requirement
|
72
72
|
requirements:
|
73
|
-
- -
|
73
|
+
- - ~>
|
74
74
|
- !ruby/object:Gem::Version
|
75
75
|
version: 0.9.9
|
76
76
|
type: :runtime
|
77
77
|
prerelease: false
|
78
78
|
version_requirements: !ruby/object:Gem::Requirement
|
79
79
|
requirements:
|
80
|
-
- -
|
80
|
+
- - ~>
|
81
81
|
- !ruby/object:Gem::Version
|
82
82
|
version: 0.9.9
|
83
83
|
description: A Ruby gem that can extract text from PowerPoint(pptx) files.
|
@@ -87,7 +87,7 @@ executables: []
|
|
87
87
|
extensions: []
|
88
88
|
extra_rdoc_files: []
|
89
89
|
files:
|
90
|
-
-
|
90
|
+
- .gitignore
|
91
91
|
- Gemfile
|
92
92
|
- LICENSE.txt
|
93
93
|
- README.rdoc
|
@@ -97,7 +97,6 @@ files:
|
|
97
97
|
- lib/ruby_powerpoint/slide.rb
|
98
98
|
- lib/ruby_powerpoint/version.rb
|
99
99
|
- ruby_powerpoint.gemspec
|
100
|
-
- spec/fixtures/.~lock.sample.pptx#
|
101
100
|
- spec/fixtures/invalid.xls
|
102
101
|
- spec/fixtures/rime.pptx
|
103
102
|
- spec/fixtures/sample.pptx
|
@@ -112,22 +111,21 @@ require_paths:
|
|
112
111
|
- lib
|
113
112
|
required_ruby_version: !ruby/object:Gem::Requirement
|
114
113
|
requirements:
|
115
|
-
- -
|
114
|
+
- - ! '>='
|
116
115
|
- !ruby/object:Gem::Version
|
117
116
|
version: 1.9.2
|
118
117
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
119
118
|
requirements:
|
120
|
-
- -
|
119
|
+
- - ! '>='
|
121
120
|
- !ruby/object:Gem::Version
|
122
121
|
version: '0'
|
123
122
|
requirements: []
|
124
123
|
rubyforge_project:
|
125
|
-
rubygems_version: 2.2.0
|
124
|
+
rubygems_version: 2.2.0
|
126
125
|
signing_key:
|
127
126
|
specification_version: 4
|
128
127
|
summary: A Ruby gem for Parsng text from PowerPoint(pptx) files.
|
129
128
|
test_files:
|
130
|
-
- spec/fixtures/.~lock.sample.pptx#
|
131
129
|
- spec/fixtures/invalid.xls
|
132
130
|
- spec/fixtures/rime.pptx
|
133
131
|
- spec/fixtures/sample.pptx
|
@@ -1 +0,0 @@
|
|
1
|
-
,ramtin,ramtin-VirtualBox,26.06.2013 14:02,file:///home/ramtin/.config/libreoffice/3;
|