ruby_powerpoint 1.1 → 1.2

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,15 @@
1
1
  ---
2
- SHA1:
3
- metadata.gz: bbe73641d400cad7d34d38df587d69d9e1b9b88a
4
- data.tar.gz: aecce478e9035955dfa28b1eb29ae2820ee3ab2f
2
+ !binary "U0hBMQ==":
3
+ metadata.gz: !binary |-
4
+ MDQwYjA2MjA0Yjg5N2EwZjA3YzY3ZTBkMjMwZjBjYjYyNGIyMzEzYw==
5
+ data.tar.gz: !binary |-
6
+ NjY3OTA1NDc2ZDc3NjY3ZDZkZjM3NzAzZmM2ZDk2NDU2MTQxMDM4Zg==
5
7
  SHA512:
6
- metadata.gz: 25226cceb297a612a2de56afbf1052496053a83e4be02a8e2c94aefc2fa9afc474c39b2dbce7764ef4f9c497d3bf5dc86fa636ac71bccacdc2b2b09911a5abfd
7
- data.tar.gz: 2fe1972c306d877792503a21c8385ed7f79da2bf50e669ba82ecd3c825d4dd38b3c04609d8ccf6cb4f28e23b492ac873720c5fbe62ac82afea999a4bd270c0ed
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}.each_with_index do |doc, i|
18
- if doc.name.include? 'ppt/slides/slide'
19
- slides.push RubyPowerpoint::Slide.new(self, doc.name, i)
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
- :path,
9
- :index
8
+ :slide_number,
9
+ :slide_number,
10
+ :slide_file_name
10
11
 
11
- def initialize presentation, path, index
12
+ def initialize presentation, slide_xml_path
12
13
  @presentation = presentation
13
- @path = path
14
- @index = index
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 content
18
- content = Array.new
19
- doc = @presentation.files.file.open @path
20
- xml = Nokogiri::XML::Document.parse doc
21
- xml.xpath('//a:t').each do |node|
22
- content.push node.text
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
- content
32
+ end
33
+
34
+ def content
35
+ content_elements @slide_xml
25
36
  end
26
37
 
27
38
  def title
28
- #extracts just the title from the slide. Useful information on how to find just the title shape using C# is found here: http://msdn.microsoft.com/en-us/library/office/cc850843.aspx but you'll obviously need to dig into the XML structure if you aren't using C#, so see http://msdn.microsoft.com/en-us/library/office/gg278332(v=office.15).aspx
29
- # should return nil if there is no title
30
- title_elements = Array.new
31
- doc = @presentation.files.file.open @path
32
- xml = Nokogiri::XML::Document.parse doc
33
- title_elements(xml).join(" ") if title_elements(xml).length > 0
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
- protected
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
@@ -1,3 +1,3 @@
1
1
  module RubyPowerpoint
2
- VERSION = "1.1"
2
+ VERSION = "1.2"
3
3
  end
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 header here", "Some content here."]
22
- @deck.slides.last.content.should eql ["WTF?", "What the hell s gong on?", "1234", "asdf", "34", "6"]
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.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-02 00:00:00.000000000 Z
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
- - ".gitignore"
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.rc.1
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;