social_media_parser 0.1.2 → 0.1.3

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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 81e1743fef080d76703d8f0ac2bbc1bc8a89d7da
4
- data.tar.gz: 18e4525c15ccb56b71b6a72392d6588756e070ce
3
+ metadata.gz: 687546e59538c94db3004a13e5387bb4cbc8e1d1
4
+ data.tar.gz: 5473d30a7cd613c66724bab5a1121135a1479484
5
5
  SHA512:
6
- metadata.gz: 568853ad7b2cb1998b5662ee302065e41b5fe2bdd70ce55e2d34d6388a7e158cb566a462ff96f6063651b0467e85dc4ee2547bd5f3802d78d4102781a66766aa
7
- data.tar.gz: b61fc4e3a7090d05ecc9b2008b39c6b5ee0a240136272710e8901747a37d0a7f33ca455d055a1c84d81d5c8e9f97192b521811e46cb9a7c7862dfaa3416470e6
6
+ metadata.gz: c500399a21c4c3db56b4d219f5661bd7104eae77176c70ef7d3bd6e8a08405c8e18c9d1a6057efc51be085d39134807b573d8ddc8c03f157d4748a7526736427
7
+ data.tar.gz: 0d482a6656c9bf1caf46b68f23c4e4aaec937654fb2040af8da70dccaebff88b9b3b4886f99ce3905df520bce5753b16fcf6aac8ef2281dabf18f41ce141d9a0
data/README.md CHANGED
@@ -2,9 +2,10 @@
2
2
 
3
3
  Parse social media attributes from url or construct url from attributes.
4
4
 
5
- [![Build Status](https://semaphoreapp.com/api/v1/projects/488b1479-a701-4807-956c-a0a513308163/237493/badge.png)](https://semaphoreapp.com/mynewsdesk/social_media_parser)
5
+ [![Gem Version](https://badge.fury.io/rb/social_media_parser.svg)](http://badge.fury.io/rb/social_media_parser)
6
6
  [![Code Climate](https://codeclimate.com/github/mynewsdesk/social_media_parser/badges/gpa.svg)](https://codeclimate.com/github/mynewsdesk/social_media_parser)
7
7
  [![Test Coverage](https://codeclimate.com/github/mynewsdesk/social_media_parser/badges/coverage.svg)](https://codeclimate.com/github/mynewsdesk/social_media_parser)
8
+ [![Build Status](https://semaphoreapp.com/api/v1/projects/488b1479-a701-4807-956c-a0a513308163/237493/badge.png)](https://semaphoreapp.com/mynewsdesk/social_media_parser)
8
9
 
9
10
  ## Installation
10
11
 
@@ -4,13 +4,10 @@ require 'uri'
4
4
  module SocialMediaParser
5
5
  module Provider
6
6
  class Base < ::SocialMediaParser::Link
7
- PROVIDERS = ['facebook', 'github', 'google', 'instagram', 'pinterest', 'twitter', 'youtube']
8
-
9
7
  def self.parse(attributes)
10
- PROVIDERS.map do |provider|
11
- Object.const_get("SocialMediaParser").const_get("Provider").const_get(provider.capitalize).new(attributes)
12
- end.select(&:valid?).first or
13
- ::SocialMediaParser::Link.new(attributes)
8
+ providers.map do |provider|
9
+ eval("SocialMediaParser::Provider::#{provider.capitalize}").new(attributes)
10
+ end.find(&:valid?) or ::SocialMediaParser::Link.new(attributes)
14
11
  end
15
12
 
16
13
  def username
@@ -36,14 +33,20 @@ module SocialMediaParser
36
33
 
37
34
  private
38
35
 
39
- # Common social media url format, like https://www.twitter.com/teamcoco
40
- # Overwrite this in subclasses when social media url formatting
41
- # doesn't look like this
36
+ # Common social media url format, like http(s)://(www.)[provider].com/[username]
37
+ # Overwrite this in subclasses when url formatting is different
42
38
  def parse_username_from_url
43
39
  URI.parse(url_from_attributes).path.split("/")[1]
44
40
  rescue URI::BadURIError, URI::InvalidURIError
45
41
  nil
46
42
  end
43
+
44
+ # Does a file name lookup in the providers/ folder and outputs all file
45
+ # names, except for this base file
46
+ def self.providers
47
+ @providers ||= Dir.entries("lib/social_media_parser/provider/")
48
+ .reject{|f| File.directory? f }.map{|s| s.gsub(".rb", "")} - ["base"]
49
+ end
47
50
  end
48
51
  end
49
52
  end
@@ -0,0 +1,23 @@
1
+ require 'social_media_parser/provider/base'
2
+
3
+ module SocialMediaParser
4
+ module Provider
5
+ class Linkedin < Base
6
+ URL_REGEX = /(?:(?:http|https):\/\/)?(?:www.|[a-z]{2}.)?linkedin.com\/in\/([\w]*)/i
7
+
8
+ def provider
9
+ "linkedin"
10
+ end
11
+
12
+ def url
13
+ "https://www.linkedin.com/in/#{username}"
14
+ end
15
+
16
+ private
17
+
18
+ def parse_username_from_url
19
+ URL_REGEX.match(url_from_attributes).to_a[1]
20
+ end
21
+ end
22
+ end
23
+ end
@@ -1,3 +1,3 @@
1
1
  module SocialMediaParser
2
- VERSION = "0.1.2"
2
+ VERSION = "0.1.3"
3
3
  end
@@ -0,0 +1,82 @@
1
+ require 'spec_helper'
2
+
3
+ describe SocialMediaParser do
4
+ let(:parser){ described_class.parse profile_attributes }
5
+
6
+ context "correct class" do
7
+ let(:profile_attributes) { {url: "https://www.linkedin.com/in/conanobrien"} }
8
+
9
+ it "returns a Linkedin object" do
10
+ expect(parser).to be_a SocialMediaParser::Provider::Linkedin
11
+ end
12
+ end
13
+
14
+ context "with linkedin as provider and username as url_or_username" do
15
+ let(:profile_attributes){ {url_or_username: "conanobrien", provider: "linkedin"} }
16
+
17
+ it "returns the parsed attributes" do
18
+ expect(parser.url).to eq "https://www.linkedin.com/in/conanobrien"
19
+ expect(parser.provider).to eq "linkedin"
20
+ expect(parser.username).to eq "conanobrien"
21
+ end
22
+ end
23
+
24
+ context "with linkedin as provider and username as url_or_username" do
25
+ let(:profile_attributes){ {url_or_username: "www.linkedin.com/in/williamhgates", provider: "linkedin"} }
26
+
27
+ it "returns the parsed attributes" do
28
+ expect(parser.url).to eq "https://www.linkedin.com/in/williamhgates"
29
+ expect(parser.provider).to eq "linkedin"
30
+ expect(parser.username).to eq "williamhgates"
31
+ end
32
+ end
33
+
34
+ context "with linkedin url and provider" do
35
+ let(:profile_attributes){ {url: "http://linkedin.com/in/barackobama", provider: "linkedin"} }
36
+
37
+ it "returns the parsed attributes" do
38
+ expect(parser.url).to eq "https://www.linkedin.com/in/barackobama"
39
+ expect(parser.provider).to eq "linkedin"
40
+ expect(parser.username).to eq "barackobama"
41
+ end
42
+ end
43
+
44
+ context "url variations" do
45
+ it "parses username from url without trailing slash" do
46
+ parser = described_class.parse "http://linkedin.com/in/barackobama"
47
+ expect(parser.username).to eq "barackobama"
48
+ end
49
+
50
+ it "parses username from url with www" do
51
+ parser = described_class.parse "http://linkedin.com/in/conanobrien/"
52
+ expect(parser.username).to eq "conanobrien"
53
+ end
54
+
55
+ it "parses username from url without http" do
56
+ parser = described_class.parse "linkedin.com/in/williamhgates/"
57
+ expect(parser.username).to eq "williamhgates"
58
+ end
59
+
60
+ it "parses username from country subdomain urls without http" do
61
+ parser = described_class.parse "se.linkedin.com/in/markusnordin"
62
+ expect(parser.username).to eq "markusnordin"
63
+ end
64
+
65
+ it "parses username from country subdomain urls with http" do
66
+ parser = described_class.parse "http://se.linkedin.com/in/markusnordin"
67
+ expect(parser.username).to eq "markusnordin"
68
+ end
69
+
70
+ it "doesn't parse old public profile urls" do
71
+ parser = described_class.parse "www.linkedin.com/pub/cameron-diaz/6b/328/111"
72
+ expect(parser.username).to eq nil
73
+ expect(parser).to be_a SocialMediaParser::Link
74
+ end
75
+
76
+ it "doesn't parse old public profile urls with country subdomain" do
77
+ parser = described_class.parse "ua.linkedin.com/pub/mila-kunis/55/4a2/3b5/en"
78
+ expect(parser.username).to eq nil
79
+ expect(parser).to be_a SocialMediaParser::Link
80
+ end
81
+ end
82
+ end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: social_media_parser
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.2
4
+ version: 0.1.3
5
5
  platform: ruby
6
6
  authors:
7
7
  - Markus Nordin
@@ -10,7 +10,7 @@ authors:
10
10
  autorequire:
11
11
  bindir: bin
12
12
  cert_chain: []
13
- date: 2014-10-01 00:00:00.000000000 Z
13
+ date: 2015-02-03 00:00:00.000000000 Z
14
14
  dependencies:
15
15
  - !ruby/object:Gem::Dependency
16
16
  name: public_suffix
@@ -73,6 +73,7 @@ files:
73
73
  - lib/social_media_parser/provider/github.rb
74
74
  - lib/social_media_parser/provider/google.rb
75
75
  - lib/social_media_parser/provider/instagram.rb
76
+ - lib/social_media_parser/provider/linkedin.rb
76
77
  - lib/social_media_parser/provider/pinterest.rb
77
78
  - lib/social_media_parser/provider/twitter.rb
78
79
  - lib/social_media_parser/provider/youtube.rb
@@ -83,6 +84,7 @@ files:
83
84
  - spec/social_media_parser/provider/github_spec.rb
84
85
  - spec/social_media_parser/provider/google_spec.rb
85
86
  - spec/social_media_parser/provider/instagram_spec.rb
87
+ - spec/social_media_parser/provider/linkedin_spec.rb
86
88
  - spec/social_media_parser/provider/pinterest_spec.rb
87
89
  - spec/social_media_parser/provider/twitter_spec.rb
88
90
  - spec/social_media_parser/provider/youtube_spec.rb
@@ -108,7 +110,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
108
110
  version: '0'
109
111
  requirements: []
110
112
  rubyforge_project:
111
- rubygems_version: 2.4.1
113
+ rubygems_version: 2.4.5
112
114
  signing_key:
113
115
  specification_version: 4
114
116
  summary: Parse social media attributes from url or construct url from attributes
@@ -118,6 +120,7 @@ test_files:
118
120
  - spec/social_media_parser/provider/github_spec.rb
119
121
  - spec/social_media_parser/provider/google_spec.rb
120
122
  - spec/social_media_parser/provider/instagram_spec.rb
123
+ - spec/social_media_parser/provider/linkedin_spec.rb
121
124
  - spec/social_media_parser/provider/pinterest_spec.rb
122
125
  - spec/social_media_parser/provider/twitter_spec.rb
123
126
  - spec/social_media_parser/provider/youtube_spec.rb