slideshare_api 0.0.1 → 0.0.2

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 3dfc38449a88509d40a09ba46e053bd1b257c743
4
- data.tar.gz: 3e104b627fdc62fd994d7f4fd03695b15462918a
3
+ metadata.gz: ee401e264b32416a6e53fa0895bcffb4971f13d5
4
+ data.tar.gz: d1a1b14f379f4f067d3f2460598cbfad593b6c63
5
5
  SHA512:
6
- metadata.gz: ef3f6868c4ecf3b9361688f1159ec0b562637cafbfee98605b1f0801e917b0c341f75550dc8918302072b6f6dd06f9f6dbdc88765bb24de48c9eb96d0a7d070e
7
- data.tar.gz: 443fe4c6cc43de6ae5c720dbea4812a939751f727d34d779756a945914edc59846266e8a1391d886f19662bdd130497fa2111fdfcc295981c1554a0b901d1367
6
+ metadata.gz: c1e576034d37c5948921c1146da3fe840227e87af7e26b4074dbbaa120aafdefb245a4e6f22e5a6372530e07a61bdf39e8e43435803322b8b00b1fbb14d82b43
7
+ data.tar.gz: 6e8280de36391a0fbb387d9601dbb7f89d9f6f273e0ff6d0dc5fbfc91d2c8026331d15b58b855e79814355600b3d95ccf40a424c2db44bd7c995048d0a4f2d12
data/README.md CHANGED
@@ -1,5 +1,6 @@
1
1
  # SlideshareApi
2
2
  [![Build](https://travis-ci.org/jvenezia/slideshare_api.svg?branch=master)](https://travis-ci.org/jvenezia/slideshare_api)
3
+ [![Gem Version](https://badge.fury.io/rb/slideshare_api.svg)](http://badge.fury.io/rb/slideshare_api)
3
4
 
4
5
  Slideshare ruby wrapper for the Slideshare API.
5
6
 
@@ -30,15 +31,16 @@ client = SlideshareApi::Client.new api_key, shared_secret
30
31
 
31
32
  Get a slideshow:
32
33
  ```ruby
34
+ # from url...
33
35
  slideshow_url = 'http://fr.slideshare.net/awesome_slideshow'
34
- slideshow = client.slideshow(slideshow_url) #=> returns a SlideshareApi::Model::Slideshow
35
- slideshow.id
36
- slideshow.title
37
- slideshow.description
38
- slideshow.username
39
- slideshow.url
40
- slideshow.embed
41
- slideshow.language
36
+ slideshow = client.slideshow(slideshow_url: slideshow_url) #=> returns a SlideshareApi::Model::Slideshow
37
+
38
+ # from id...
39
+ slideshow_id = '1234'
40
+ slideshow = client.slideshow(slideshow_id: slideshow_id) #=> returns a SlideshareApi::Model::Slideshow
41
+
42
+ # with optional informations...
43
+ slideshow = client.slideshow(slideshow_id: slideshow_id, detailed: true) #=> returns a SlideshareApi::Model::Slideshow
42
44
  ```
43
45
 
44
46
  ## Contributing
@@ -15,8 +15,12 @@ module SlideshareApi
15
15
  build_connection
16
16
  end
17
17
 
18
- def slideshow(slideshow_url)
19
- SlideshareApi::Model::Slideshow.new Nokogiri::XML(@connection.get('get_slideshow', api_validation_params.merge({slideshow_url: slideshow_url})).body)
18
+ def slideshow(options = {})
19
+ params = {}
20
+ params.merge!({slideshow_url: options[:slideshow_url]}) if options[:slideshow_url]
21
+ params.merge!({slideshow_id: options[:slideshow_id]}) if options[:slideshow_id]
22
+ params.merge!({detailed: 1}) if options[:detailed]
23
+ SlideshareApi::Model::Slideshow.new Nokogiri::XML(@connection.get('get_slideshow', api_validation_params.merge(params)).body)
20
24
  end
21
25
 
22
26
  private
@@ -1,16 +1,70 @@
1
1
  module SlideshareApi
2
2
  module Model
3
3
  class Slideshow
4
- attr_accessor :id, :title, :description, :username, :url, :embed, :language
4
+ attr_accessor :original_slideshow_xml,
5
+ :id, :title, :stripped_title, :description, :status,
6
+ :created_at, :updated_at,
7
+ :username, :user_id,
8
+ :url, :thumbnail_url, :thumbnail_size, :thumbnail_small_url, :embed,
9
+ :language, :format, :slideshow_type,
10
+ :is_downloadable, :is_in_contest,
11
+ :ppt_location,
12
+ :tags,
13
+ :download_count, :view_count, :comment_count, :favorite_count,
14
+ :slide_count,
15
+ :related_slideshow_ids,
16
+ :privacy_level, :is_flagged, :url_is_secret, :is_embaddable, :is_visible, :is_visible_by_contacts
5
17
 
6
18
  def initialize(slideshow_xml)
7
- @id = slideshow_xml.search('ID').text
8
- @title = slideshow_xml.search('Title').text
9
- @description = slideshow_xml.search('Description').text
10
- @username = slideshow_xml.search('Username').text
11
- @url = slideshow_xml.search('URL').text
12
- @embed = slideshow_xml.search('Embed').text
13
- @language = slideshow_xml.search('Language').text
19
+ @original_slideshow_xml = slideshow_xml
20
+
21
+ @id = text_from_xml('ID')
22
+ @title = text_from_xml('Title')
23
+ @description = text_from_xml('Description')
24
+ @status = text_from_xml('Status')
25
+ @username = text_from_xml('Username')
26
+ @url = text_from_xml('URL')
27
+ @thumbnail_url = text_from_xml('ThumbnailURL')
28
+ @thumbnail_size = text_from_xml('ThumbnailSize')
29
+ @thumbnail_small_url = text_from_xml('ThumbnailSmallURL')
30
+ @embed = text_from_xml('Embed')
31
+ @created_at = Time.parse text_from_xml('Created')
32
+ @updated_at = Time.parse text_from_xml('Updated')
33
+ @language = text_from_xml('Language')
34
+ @format = text_from_xml('Format')
35
+ @is_downloadable = boolean_from_xml('Download')
36
+ @slideshow_type = text_from_xml('SlideshowType')
37
+ @is_in_contest = boolean_from_xml('InContest')
38
+ @user_id = text_from_xml('UserID')
39
+ @ppt_location = text_from_xml('PPTLocation')
40
+ @stripped_title = text_from_xml('StrippedTitle')
41
+ @tags = text_list_from_xml('Tag')
42
+ @download_count = text_from_xml('NumDownloads')
43
+ @view_count = text_from_xml('NumViews')
44
+ @comment_count = text_from_xml('NumComments')
45
+ @favorite_count = text_from_xml('NumFavorites')
46
+ @slide_count = text_from_xml('NumSlides')
47
+ @related_slideshow_ids = text_list_from_xml('RelatedSlideshowID')
48
+ @privacy_level = text_from_xml('PrivacyLevel')
49
+ @is_flagged = boolean_from_xml('FlagVisible')
50
+ @is_visible = boolean_from_xml('ShowOnSS')
51
+ @url_is_secret = boolean_from_xml('SecretURL')
52
+ @is_embaddable = boolean_from_xml('AllowEmbed')
53
+ @is_visible_by_contacts = boolean_from_xml('ShareWithContacts')
54
+ end
55
+
56
+ private
57
+
58
+ def boolean_from_xml(attribute_name)
59
+ @original_slideshow_xml.search(attribute_name).first.content == '1'
60
+ end
61
+
62
+ def text_from_xml(attribute_name)
63
+ @original_slideshow_xml.search(attribute_name).text
64
+ end
65
+
66
+ def text_list_from_xml(attribute_name)
67
+ @original_slideshow_xml.search(attribute_name).map(&:text)
14
68
  end
15
69
  end
16
70
  end
@@ -1,3 +1,3 @@
1
1
  module SlideshareApi
2
- VERSION = "0.0.1"
2
+ VERSION = '0.0.2'
3
3
  end
Binary file
data/spec/client_spec.rb CHANGED
@@ -19,13 +19,27 @@ describe SlideshareApi::Client do
19
19
 
20
20
  describe '.slideshow' do
21
21
  let(:slideshow_raw_xml) { open('spec/fixtures/slideshow.xml').read }
22
- let(:slideshow_url) { 'http://fr.slideshare.net/jeremyvenezia/prerequis-pour-appliquer-le-lean-startup-en-entreprise' }
23
22
 
24
- before { expect(connection).to receive(:get).with('get_slideshow', api_validation_params.merge({slideshow_url: slideshow_url})).and_return(connection) }
25
23
  before { expect(connection).to receive(:body).and_return(slideshow_raw_xml) }
26
24
 
27
- subject { slideshare_client.slideshow slideshow_url }
25
+ context 'get from slideshow url' do
26
+ let(:slideshow_url) { 'http://fr.slideshare.net/jeremyvenezia/prerequis-pour-appliquer-le-lean-startup-en-entreprise' }
28
27
 
29
- it { should eql? SlideshareApi::Model::Slideshow.new(Nokogiri::XML(slideshow_raw_xml)) }
28
+ before { expect(connection).to receive(:get).with('get_slideshow', api_validation_params.merge({slideshow_url: slideshow_url})).and_return(connection) }
29
+
30
+ subject { slideshare_client.slideshow slideshow_url: slideshow_url }
31
+
32
+ it { should eql? SlideshareApi::Model::Slideshow.new(Nokogiri::XML(slideshow_raw_xml)) }
33
+ end
34
+
35
+ context 'get from slideshow id' do
36
+ let(:slideshow_id) { '1234' }
37
+
38
+ before { expect(connection).to receive(:get).with('get_slideshow', api_validation_params.merge({slideshow_id: slideshow_id})).and_return(connection) }
39
+
40
+ subject { slideshare_client.slideshow slideshow_id: slideshow_id }
41
+
42
+ it { should eql? SlideshareApi::Model::Slideshow.new(Nokogiri::XML(slideshow_raw_xml)) }
43
+ end
30
44
  end
31
45
  end
@@ -29,4 +29,39 @@
29
29
  <Download>0</Download>
30
30
  <SlideshowType>0</SlideshowType>
31
31
  <InContest>0</InContest>
32
+ <UserID>62691692</UserID>
33
+ <PPTLocation>
34
+ prerequispourappliquerleleanstartupdanslentreprise-140430023146-phpapp02-140501195007-phpapp01
35
+ </PPTLocation>
36
+ <StrippedTitle>prerequis-pour-appliquer-le-lean-startup-en-entreprise</StrippedTitle>
37
+ <Tags>
38
+ <Tag Count="1" Owner="1">leanstartup</Tag>
39
+ <Tag Count="1" Owner="1">entrepreneur</Tag>
40
+ <Tag Count="1" Owner="1">startup</Tag>
41
+ <Tag Count="1" Owner="1">entrepreneurship</Tag>
42
+ <Tag Count="1" Owner="1">business</Tag>
43
+ </Tags>
44
+ <NumDownloads>0</NumDownloads>
45
+ <NumViews>223</NumViews>
46
+ <NumComments>0</NumComments>
47
+ <NumFavorites>0</NumFavorites>
48
+ <NumSlides>28</NumSlides>
49
+ <RelatedSlideshows>
50
+ <RelatedSlideshowID rank="1">34115565</RelatedSlideshowID>
51
+ <RelatedSlideshowID rank="2">34120112</RelatedSlideshowID>
52
+ <RelatedSlideshowID rank="3">33133758</RelatedSlideshowID>
53
+ <RelatedSlideshowID rank="4">27569567</RelatedSlideshowID>
54
+ <RelatedSlideshowID rank="5">28375042</RelatedSlideshowID>
55
+ <RelatedSlideshowID rank="6">30302539</RelatedSlideshowID>
56
+ <RelatedSlideshowID rank="7">28193782</RelatedSlideshowID>
57
+ <RelatedSlideshowID rank="8">22861393</RelatedSlideshowID>
58
+ <RelatedSlideshowID rank="9">16138475</RelatedSlideshowID>
59
+ <RelatedSlideshowID rank="10">19583592</RelatedSlideshowID>
60
+ </RelatedSlideshows>
61
+ <PrivacyLevel>0</PrivacyLevel>
62
+ <FlagVisible>1</FlagVisible>
63
+ <ShowOnSS>0</ShowOnSS>
64
+ <SecretURL>0</SecretURL>
65
+ <AllowEmbed>0</AllowEmbed>
66
+ <ShareWithContacts>0</ShareWithContacts>
32
67
  </Slideshow>
@@ -6,12 +6,104 @@ describe SlideshareApi::Model::Slideshow do
6
6
 
7
7
  subject { SlideshareApi::Model::Slideshow.new slideshow_xml }
8
8
 
9
+ it { expect(subject.original_slideshow_xml).to eq slideshow_xml }
9
10
  it { expect(subject.id).to eq slideshow_xml.search('ID').text }
10
11
  it { expect(subject.title).to eq slideshow_xml.search('Title').text }
11
12
  it { expect(subject.description).to eq slideshow_xml.search('Description').text }
13
+ it { expect(subject.status).to eq slideshow_xml.search('Status').text }
12
14
  it { expect(subject.username).to eq slideshow_xml.search('Username').text }
13
15
  it { expect(subject.url).to eq slideshow_xml.search('URL').text }
16
+ it { expect(subject.thumbnail_url).to eq slideshow_xml.search('ThumbnailURL').text }
17
+ it { expect(subject.thumbnail_size).to eq slideshow_xml.search('ThumbnailSize').text }
18
+ it { expect(subject.thumbnail_small_url).to eq slideshow_xml.search('ThumbnailSmallURL').text }
14
19
  it { expect(subject.embed).to eq slideshow_xml.search('Embed').text }
20
+ it { expect(subject.created_at).to eq Time.parse slideshow_xml.search('Created').text }
21
+ it { expect(subject.updated_at).to eq Time.parse slideshow_xml.search('Updated').text }
15
22
  it { expect(subject.language).to eq slideshow_xml.search('Language').text }
23
+ it { expect(subject.format).to eq slideshow_xml.search('Format').text }
24
+
25
+ context 'it is downloadable' do
26
+ before { slideshow_xml.search('Download').first.content = 1 }
27
+ it { expect(subject.is_downloadable).to eq true }
28
+ end
29
+
30
+ context 'it is not downloadable' do
31
+ before { slideshow_xml.search('Download').first.content = 0 }
32
+ it { expect(subject.is_downloadable).to eq false }
33
+ end
34
+
35
+ it { expect(subject.slideshow_type).to eq slideshow_xml.search('SlideshowType').text }
36
+
37
+ context 'it is in contest' do
38
+ before { slideshow_xml.search('InContest').first.content = 1 }
39
+ it { expect(subject.is_in_contest).to eq true }
40
+ end
41
+
42
+ context 'it is not in contest' do
43
+ before { slideshow_xml.search('InContest').first.content = 0 }
44
+ it { expect(subject.is_in_contest).to eq false }
45
+ end
46
+
47
+ it { expect(subject.user_id).to eq slideshow_xml.search('UserID').text }
48
+ it { expect(subject.ppt_location).to eq slideshow_xml.search('PPTLocation').text }
49
+ it { expect(subject.stripped_title).to eq slideshow_xml.search('StrippedTitle').text }
50
+ it { expect(subject.tags).to eq slideshow_xml.search('Tag').map(&:text) }
51
+ it { expect(subject.download_count).to eq slideshow_xml.search('NumDownloads').text }
52
+ it { expect(subject.view_count).to eq slideshow_xml.search('NumViews').text }
53
+ it { expect(subject.comment_count).to eq slideshow_xml.search('NumComments').text }
54
+ it { expect(subject.favorite_count).to eq slideshow_xml.search('NumFavorites').text }
55
+ it { expect(subject.slide_count).to eq slideshow_xml.search('NumSlides').text }
56
+ it { expect(subject.related_slideshow_ids).to eq slideshow_xml.search('RelatedSlideshowID').map(&:text) }
57
+ it { expect(subject.privacy_level).to eq slideshow_xml.search('PrivacyLevel').text }
58
+
59
+ context 'it is flagged' do
60
+ before { slideshow_xml.search('FlagVisible').first.content = 1 }
61
+ it { expect(subject.is_flagged).to eq true }
62
+ end
63
+
64
+ context 'it is not flagged' do
65
+ before { slideshow_xml.search('FlagVisible').first.content = 0 }
66
+ it { expect(subject.is_flagged).to eq false }
67
+ end
68
+
69
+ context 'it is visible' do
70
+ before { slideshow_xml.search('ShowOnSS').first.content = 1 }
71
+ it { expect(subject.is_visible).to eq true }
72
+ end
73
+
74
+ context 'it is not visible' do
75
+ before { slideshow_xml.search('ShowOnSS').first.content = 0 }
76
+ it { expect(subject.is_visible).to eq false }
77
+ end
78
+
79
+ context 'url is secret' do
80
+ before { slideshow_xml.search('SecretURL').first.content = 1 }
81
+ it { expect(subject.url_is_secret).to eq true }
82
+ end
83
+
84
+ context 'url is not secret' do
85
+ before { slideshow_xml.search('SecretURL').first.content = 0 }
86
+ it { expect(subject.url_is_secret).to eq false }
87
+ end
88
+
89
+ context 'it is embaddable' do
90
+ before { slideshow_xml.search('AllowEmbed').first.content = 1 }
91
+ it { expect(subject.is_embaddable).to eq true }
92
+ end
93
+
94
+ context 'url is not embaddable' do
95
+ before { slideshow_xml.search('AllowEmbed').first.content = 0 }
96
+ it { expect(subject.is_embaddable).to eq false }
97
+ end
98
+
99
+ context 'it is visible by contacts' do
100
+ before { slideshow_xml.search('ShareWithContacts').first.content = 1 }
101
+ it { expect(subject.is_visible_by_contacts).to eq true }
102
+ end
103
+
104
+ context 'url is not visible by contacts' do
105
+ before { slideshow_xml.search('ShareWithContacts').first.content = 0 }
106
+ it { expect(subject.is_visible_by_contacts).to eq false }
107
+ end
16
108
  end
17
109
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: slideshare_api
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.1
4
+ version: 0.0.2
5
5
  platform: ruby
6
6
  authors:
7
7
  - Jeremy Venezia
@@ -102,8 +102,6 @@ extensions: []
102
102
  extra_rdoc_files: []
103
103
  files:
104
104
  - ".gitignore"
105
- - ".idea/inspectionProfiles/Project_Default.xml"
106
- - ".idea/inspectionProfiles/profiles_settings.xml"
107
105
  - ".travis.yml"
108
106
  - Gemfile
109
107
  - LICENSE.txt
@@ -113,6 +111,7 @@ files:
113
111
  - lib/slideshare_api/client.rb
114
112
  - lib/slideshare_api/model/slideshow.rb
115
113
  - lib/slideshare_api/version.rb
114
+ - slideshare_api-0.0.1.gem
116
115
  - slideshare_api.gemspec
117
116
  - spec/client_spec.rb
118
117
  - spec/fixtures/slideshow.xml
@@ -1,33 +0,0 @@
1
- <component name="InspectionProjectProfileManager">
2
- <profile version="1.0" is_locked="false">
3
- <option name="myName" value="Project Default" />
4
- <option name="myLocal" value="false" />
5
- <inspection_tool class="RubyClassMethodNamingConvention" enabled="true" level="WARNING" enabled_by_default="true">
6
- <option name="m_maxLength" value="90" />
7
- </inspection_tool>
8
- <inspection_tool class="RubyClassModuleNamingConvention" enabled="true" level="WARNING" enabled_by_default="true">
9
- <option name="m_maxLength" value="90" />
10
- </inspection_tool>
11
- <inspection_tool class="RubyClassVariableNamingConvention" enabled="true" level="WARNING" enabled_by_default="true">
12
- <option name="m_maxLength" value="90" />
13
- </inspection_tool>
14
- <inspection_tool class="RubyConstantNamingConvention" enabled="true" level="WARNING" enabled_by_default="true">
15
- <option name="m_maxLength" value="90" />
16
- </inspection_tool>
17
- <inspection_tool class="RubyGlobalVariableNamingConvention" enabled="true" level="WARNING" enabled_by_default="true">
18
- <option name="m_maxLength" value="90" />
19
- </inspection_tool>
20
- <inspection_tool class="RubyInstanceMethodNamingConvention" enabled="true" level="WARNING" enabled_by_default="true">
21
- <option name="m_maxLength" value="90" />
22
- </inspection_tool>
23
- <inspection_tool class="RubyInstanceVariableNamingConvention" enabled="true" level="WARNING" enabled_by_default="true">
24
- <option name="m_maxLength" value="90" />
25
- </inspection_tool>
26
- <inspection_tool class="RubyLocalVariableNamingConvention" enabled="true" level="WARNING" enabled_by_default="true">
27
- <option name="m_maxLength" value="90" />
28
- </inspection_tool>
29
- <inspection_tool class="RubyParameterNamingConvention" enabled="true" level="WARNING" enabled_by_default="true">
30
- <option name="m_maxLength" value="90" />
31
- </inspection_tool>
32
- </profile>
33
- </component>
@@ -1,7 +0,0 @@
1
- <component name="InspectionProjectProfileManager">
2
- <settings>
3
- <option name="PROJECT_PROFILE" value="Project Default" />
4
- <option name="USE_PROJECT_PROFILE" value="true" />
5
- <version value="1.0" />
6
- </settings>
7
- </component>