linkedin2cv 0.0.1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (65) hide show
  1. checksums.yaml +7 -0
  2. data/.buildpacks +2 -0
  3. data/.bundle/config +1 -0
  4. data/.gitignore +7 -0
  5. data/.node +1 -0
  6. data/.travis.yml +21 -0
  7. data/Gemfile +5 -0
  8. data/Gemfile.lock +119 -0
  9. data/Procfile +3 -0
  10. data/README.md +32 -0
  11. data/Rakefile +6 -0
  12. data/Vagrantfile +16 -0
  13. data/app/routes/api.rb +101 -0
  14. data/app/routes/web.rb +132 -0
  15. data/app/views/hello.erb +36 -0
  16. data/app/views/home.erb +12 -0
  17. data/app/views/index.haml +11 -0
  18. data/app.rb +26 -0
  19. data/config.ru +6 -0
  20. data/config.yml +31 -0
  21. data/lib/linkedin2cv/cli/command.rb +46 -0
  22. data/lib/linkedin2cv/converter.rb +116 -0
  23. data/lib/linkedin2cv/logging.rb +35 -0
  24. data/lib/linkedin2cv/renderer/latex_renderer.rb +64 -0
  25. data/lib/linkedin2cv/version.rb +3 -0
  26. data/linkedin2cv.gemspec +49 -0
  27. data/public/.bowerrc +3 -0
  28. data/public/.editorconfig +21 -0
  29. data/public/.gitattributes +1 -0
  30. data/public/.gitignore +5 -0
  31. data/public/.jshintrc +24 -0
  32. data/public/.travis.yml +7 -0
  33. data/public/Gruntfile.js +487 -0
  34. data/public/app/.buildignore +1 -0
  35. data/public/app/.htaccess +543 -0
  36. data/public/app/404.html +157 -0
  37. data/public/app/favicon.ico +0 -0
  38. data/public/app/images/yeoman.png +0 -0
  39. data/public/app/index.html +73 -0
  40. data/public/app/robots.txt +3 -0
  41. data/public/app/scripts/app.js +20 -0
  42. data/public/app/scripts/controllers/main.js +21 -0
  43. data/public/app/scripts/services/linkedin2cv.js +93 -0
  44. data/public/app/styles/main.scss +95 -0
  45. data/public/app/views/main.html +23 -0
  46. data/public/bower.json +19 -0
  47. data/public/karma-e2e.conf.js +54 -0
  48. data/public/karma.conf.js +56 -0
  49. data/public/package.json +41 -0
  50. data/public/test/.jshintrc +36 -0
  51. data/public/test/runner.html +10 -0
  52. data/public/test/spec/controllers/main.js +22 -0
  53. data/public/test/spec/services/happyapi.js +18 -0
  54. data/public/test/spec/services/happyservice.js +18 -0
  55. data/spec/converter_spec.rb +83 -0
  56. data/spec/mocks/config.yml +31 -0
  57. data/spec/mocks/profile.json +866 -0
  58. data/spec/spec_helper.rb +13 -0
  59. data/templates/cv.erb +327 -0
  60. data/templates/foo.asciidoc +11 -0
  61. data/templates/foo.latex +230 -0
  62. data/test.rb +109 -0
  63. data/test.sh +6 -0
  64. data/teust.rb +75 -0
  65. metadata +434 -0
data/test.rb ADDED
@@ -0,0 +1,109 @@
1
+
2
+ API_KEY = '75t9gujk0rzk6l' #Your app's API key
3
+ API_SECRET = 'ww922LmfF9JhM8Wx' #Your app's API secret
4
+ REDIRECT_URI = 'http://localhost:3000/accept' #Redirect users after authentication to this path, ensure that you have set up your routes to handle the callbacks
5
+ STATE = SecureRandom.hex(15) #A unique long string that is not easy to guess
6
+
7
+ #Instantiate your OAuth2 client object
8
+ def client
9
+ OAuth2::Client.new(
10
+ API_KEY,
11
+ API_SECRET,
12
+ :authorize_url => "/uas/oauth2/authorization?response_type=code", #LinkedIn's authorization path
13
+ :token_url => "/uas/oauth2/accessToken", #LinkedIn's access token path
14
+ :site => "https://www.linkedin.com"
15
+ )
16
+ end
17
+
18
+ def index
19
+ authorize
20
+ end
21
+
22
+ def authorize
23
+ #Redirect your user in order to authenticate
24
+ redirect_to client.auth_code.authorize_url(:scope => 'r_fullprofile r_emailaddress r_network',
25
+ :state => STATE,
26
+ :redirect_uri => REDIRECT_URI)
27
+ end
28
+
29
+ # This method will handle the callback once the user authorizes your application
30
+ def accept
31
+ #Fetch the 'code' query parameter from the callback
32
+ code = params[:code]
33
+ state = params[:state]
34
+
35
+ if !state.eql?(STATE)
36
+ #Reject the request as it may be a result of CSRF
37
+ else
38
+ #Get token object, passing in the authorization code from the previous step
39
+ token = client.auth_code.get_token(code, :redirect_uri => REDIRECT_URI)
40
+
41
+ #Use token object to create access token for user
42
+ #(this is required so that you provide the correct param name for the access token)
43
+ access_token = OAuth2::AccessToken.new(client, token.token, {
44
+ :mode => :query,
45
+ :param_name => "oauth2_access_token",
46
+ })
47
+
48
+ #Use the access token to make an authenticated API call
49
+ response = access_token.get('https://api.linkedin.com/v1/people/~')
50
+
51
+ #Print body of response to command line window
52
+ puts response.body
53
+
54
+ # Handle HTTP responses
55
+ case response
56
+ when Net::HTTPUnauthorized
57
+ # Handle 401 Unauthorized response
58
+ when Net::HTTPForbidden
59
+ # Handle 403 Forbidden response
60
+ end
61
+ end
62
+ end
63
+ end
64
+
65
+
66
+ API_KEY = '75t9gujk0rzk6l' #Your app's API key
67
+ API_SECRET = 'ww922LmfF9JhM8Wx' #Your app's API secret
68
+
69
+
70
+ # Step 1: Get the auth code
71
+ https://www.linkedin.com/uas/oauth2/authorization?response_type=code&client_id=75t9gujk0rzk6l&scope=r_fullprofile&state=DCEEFWF45453sdffef424&redirect_uri=https://localhost:8080
72
+ # Step2: Get the access token
73
+ curl -X POST -H"Content-Type: application/x-www-form-urlencoded" -v "https://www.linkedin.com/uas/oauth2/accessToken?grant_type=authorization_code&client_id=75t9gujk0rzk6l&client_secret=ww922LmfF9JhM8Wx&redirect_uri=https://localhost:8080&code=AQQ1cLiTvF59ORYKTBOYlJjPAMolXfd4jVzSFu1nog4F3J_el6qfeTGLDQxbRdeO3pre-mHH1mVxF0mxD0BccjCVXMQ0qcWvns4pIIjDXdoW6Q70-DA&state=DCEEFWF45453sdffef424"
74
+
75
+ token: AQXgQQmtBtqC24TR9dsgb6jzby4sX7YSsWu3TQ8OEHRwyXTSlrTHEGSxVrNaIJhq-NPl-CH2KC-yxdvS7k_ELRFj_XaoPIaKMhF7-lNeAI_5Tu7nbJFBXTfoxha-WSQXLJSQdcGQzIqXInb18rTTx95XRp9AYaOKOAN3EC2bD2xE48efT1M
76
+
77
+
78
+ # Profile
79
+ curl -v "https://api.linkedin.com/v1/people/~?oauth2_access_token=AQWQ_pGDPgE0WnicHmI6K8TlI4kguauErfuW4t4g9wxcTt0STraOI5l9drba2yQhe9r53qjJvKMhivuFuATQZNVXY0sOmJK22--pTD3j57aonDPokBEqrfKELQtSURoHR0MKbeuRAYEAjqzXp7u2teRuOt4C3NweYuICOva_Wbdk2VKPw-8"
80
+
81
+ # Profile details
82
+ curl -v "https://api.linkedin.com/v1/people/~?oauth2_access_token=AQXgQQmtBtqC24TR9dsgb6jzby4sX7YSsWu3TQ8OEHRwyXTSlrTHEGSxVrNaIJhq-NPl-CH2KC-yxdvS7k_ELRFj_XaoPIaKMhF7-lNeAI_5Tu7nbJFBXTfoxha-WSQXLJSQdcGQzIqXInb18rTTx95XRp9AYaOKOAN3EC2bD2xE48efT1M"
83
+
84
+
85
+
86
+ curl -v "https://api.linkedin.com/v1/people/~:(position,company,publication,patent,language,skills,certification,education,course,volunteer,recommendations)?format=json&oauth2_access_token=AQWLZ-F5SSlZo0hKMiC4CQTcgoFwVUgJPgHPEMmE7JeKRgj6_3aAEYW9I4WtExHLHyXBEBoZva4ctKmDgNwtVG56FMG0P41toBLIzzqKGTsHKipdpVVB6Bx7cT7vNyL6v7Bz45226bbnJ6JJNsSzorpXI9zxAEQhUUMuR-5GjhiWeIJJcN4"
87
+ curl -v "https://api.linkedin.com/v1/people/~?format=json&oauth2_access_token=AQWLZ-F5SSlZo0hKMiC4CQTcgoFwVUgJPgHPEMmE7JeKRgj6_3aAEYW9I4WtExHLHyXBEBoZva4ctKmDgNwtVG56FMG0P41toBLIzzqKGTsHKipdpVVB6Bx7cT7vNyL6v7Bz45226bbnJ6JJNsSzorpXI9zxAEQhUUMuR-5GjhiWeIJJcN4"
88
+ curl -v "https://api.linkedin.com/v1/people/~:(people:(id,first-name,last-name,headline,picture-url,industry,positions:(id,title,summary,start-date,end-date,is-current,company:(id,name,type,size,industry,ticker)),educations:(id,school-name,field-of-study,start-date,end-date,degree,activities,notes)),num-results)?format=json&oauth2_access_token=AQWLZ-F5SSlZo0hKMiC4CQTcgoFwVUgJPgHPEMmE7JeKRgj6_3aAEYW9I4WtExHLHyXBEBoZva4ctKmDgNwtVG56FMG0P41toBLIzzqKGTsHKipdpVVB6Bx7cT7vNyL6v7Bz45226bbnJ6JJNsSzorpXI9zxAEQhUUMuR-5GjhiWeIJJcN4"
89
+
90
+
91
+
92
+ curl -v "https://api.linkedin.com/v1/people/~:(last-modified-timestamp,proposal-comments,associations,interests,publications:(id,title,publisher:(name),authors:(id,name,person),date,url,summary),patents,languages:(id,language:(name),proficiency:(level,name)),skills,certifications,educations,courses,volunteer,three-current-positions,three-past-positions,num-recommenders,recommendations-received,mfeed-rss-url,following,job-bookmarks,suggestions,date-of-birth,member-url-resources:(url,name),related-profile-views,honors-awards)?format=json&oauth2_access_token=AQWLZ-F5SSlZo0hKMiC4CQTcgoFwVUgJPgHPEMmE7JeKRgj6_3aAEYW9I4WtExHLHyXBEBoZva4ctKmDgNwtVG56FMG0P41toBLIzzqKGTsHKipdpVVB6Bx7cT7vNyL6v7Bz45226bbnJ6JJNsSzorpXI9zxAEQhUUMuR-5GjhiWeIJJcN4"
93
+
94
+
95
+
96
+ curl -v "https://api.linkedin.com/v1/people/~:(last-modified-timestamp,proposal-comments,associations,interests,publications:(id,title,publisher:(name),authors:(id,name,person),date,url,summary),patents,languages:(id,language:(name),proficiency:(level,name)),skills:(id,skill:(name)),certifications:(id,name,authority:(name),number,start-date,end-date),educations:(id,school-name,field-of-study,start-date,end-date,degree,activities,notes),courses:(id,name,number),volunteer:(id,role,organization:(name),cause:(name)),three-current-positions:(id,title,summary,start-date,end-date,is-current,company),three-past-positions:(id,title,summary,start-date,end-date,is-current,company),num-recommenders,recommendations-received,recommendations:(id,recommendation-type,recommendation-text,recommender),mfeed-rss-url,following,job-bookmarks,suggestions,date-of-birth,member-url-resources:(url,name),related-profile-views,honors-awards)?format=json&oauth2_access_token=AQWLZ-F5SSlZo0hKMiC4CQTcgoFwVUgJPgHPEMmE7JeKRgj6_3aAEYW9I4WtExHLHyXBEBoZva4ctKmDgNwtVG56FMG0P41toBLIzzqKGTsHKipdpVVB6Bx7cT7vNyL6v7Bz45226bbnJ6JJNsSzorpXI9zxAEQhUUMuR-5GjhiWeIJJcN4"
97
+
98
+
99
+
100
+ curl -v "https://api.linkedin.com/v1/people/~:(last-modified-timestamp,proposal-comments,associations,interests,publications:(id,title,publisher:(name),authors:(id,name,person),date,url,summary),patents,languages:(id,language:(name),proficiency:(level,name)),skills:(id,skill:(name)),certifications:(id,name,authority:(name),number,start-date,end-date),educations:(id,school-name,field-of-study,start-date,end-date,degree,activities,notes),courses:(id,name,number),volunteer:(id,role,organization:(name),cause:(name)),three-current-positions:(id,title,summary,start-date,end-date,is-current,company),three-past-positions:(id,title,summary,start-date,end-date,is-current,company),num-recommenders,recommendations-received:(id,recommendation-type,recommendation-text,recommender),mfeed-rss-url,following,job-bookmarks,suggestions,date-of-birth,member-url-resources:(url,name),related-profile-views,honors-awards)?format=json&oauth2_access_token=AQWLZ-F5SSlZo0hKMiC4CQTcgoFwVUgJPgHPEMmE7JeKRgj6_3aAEYW9I4WtExHLHyXBEBoZva4ctKmDgNwtVG56FMG0P41toBLIzzqKGTsHKipdpVVB6Bx7cT7vNyL6v7Bz45226bbnJ6JJNsSzorpXI9zxAEQhUUMuR-5GjhiWeIJJcN4"
101
+
102
+ # Works
103
+ curl -v "https://api.linkedin.com/v1/people/~:(last-modified-timestamp,proposal-comments,associations,interests,publications:(id,title,publisher:(name),authors:(id,name,person),date,url,summary),patents,languages:(id,language:(name),proficiency:(level,name)),skills:(id,skill:(name)),certifications:(id,name,authority:(name),number,start-date,end-date),educations:(id,school-name,field-of-study,start-date,end-date,degree,activities,notes),courses:(id,name,number),three-current-positions:(id,title,summary,start-date,end-date,is-current,company),three-past-positions:(id,title,summary,start-date,end-date,is-current,company),num-recommenders,recommendations-received:(id,recommendation-type,recommendation-text,recommender),mfeed-rss-url,following,job-bookmarks,suggestions,date-of-birth,member-url-resources:(url,name),related-profile-views,honors-awards)?format=json&oauth2_access_token=AQWLZ-F5SSlZo0hKMiC4CQTcgoFwVUgJPgHPEMmE7JeKRgj6_3aAEYW9I4WtExHLHyXBEBoZva4ctKmDgNwtVG56FMG0P41toBLIzzqKGTsHKipdpVVB6Bx7cT7vNyL6v7Bz45226bbnJ6JJNsSzorpXI9zxAEQhUUMuR-5GjhiWeIJJcN4"
104
+
105
+ curl -v "https://api.linkedin.com/v1/people/~:(last-modified-timestamp,proposal-comments,associations,interests,publications:(id,title,publisher:(name),authors:(id,name,person),date,url,summary),patents,languages:(id,language:(name),proficiency:(level,name)),skills:(id,skill:(name),certifications:(id,name,authority:(name),number,start-date,end-date),educations:(id,school-name,field-of-study,start-date,end-date,degree,activities,notes),courses:(id,name,number),three-current-positions:(id,title,summary,start-date,end-date,is-current,company),three-past-positions:(id,title,summary,start-date,end-date,is-current,company),num-recommenders,recommendations-received:(id,recommendation-type,recommendation-text,recommender),mfeed-rss-url,following,job-bookmarks,suggestions,date-of-birth,member-url-resources:(url,name),related-profile-views,honors-awards)?oauth2_access_token=AQWQ_pGDPgE0WnicHmI6K8TlI4kguauErfuW4t4g9wxcTt0STraOI5l9drba2yQhe9r53qjJvKMhivuFuATQZNVXY0sOmJK22--pTD3j57aonDPokBEqrfKELQtSURoHR0MKbeuRAYEAjqzXp7u2teRuOt4C3NweYuICOva_Wbdk2VKPw-8"
106
+ curl -v "https://api.linkedin.com/v1/people/~:(projects,main-address,phone-numbers,email-address,first-name,last-name,maiden-name,formatted-name,phonetic-first-name,phonetic-last-name,formatted-phonetic-name,headline,location:(name,country:(code)),industry,current-status,current-share,num-connections,num-connections-capped,summary,specialties,positions,picture-url,api-standard-profile-request:(url,headers),public-profile-url,last-modified-timestamp,proposal-comments,associations,interests,publications:(id,title,publisher:(name),authors:(id,name,person),date,url,summary),patents,languages:(id,language:(name),proficiency:(level,name)),skills:(id,skill:(name)),certifications:(id,name,authority:(name),number,start-date,end-date),educations:(id,school-name,field-of-study,start-date,end-date,degree,activities,notes),courses:(id,name,number),three-current-positions:(id,title,summary,start-date,end-date,is-current,company),three-past-positions:(id,title,summary,start-date,end-date,is-current,company),num-recommenders,recommendations-received:(id,recommendation-type,recommendation-text,recommender),mfeed-rss-url,following,job-bookmarks,suggestions,date-of-birth,member-url-resources:(url,name),related-profile-views,honors-awards)?format=json&oauth2_access_token=AQUAZ5-05E9BYyrXJOgnLsRSLgIKzvnPZ2Fu3ZbTWlYqxULuRJISbvan1sBCTqUSYGpI5jm1D-4IDOyJxRRTCB4Nkq4jY7oX-nhkYGqJ_IViMqZX3L-DNwYROgTnOBVZpb-QKObXFZZjMdSOnyhmpJ_E7YMAVsYHn8ph7fUhJJACw0AFq4A"
107
+
108
+
109
+ curl -v "https://api.linkedin.com/v1/people/~:(projects:(start-date,description,id,name,url,occupation),main-address,phone-numbers,email-address,first-name,last-name,maiden-name,formatted-name,phonetic-first-name,phonetic-last-name,formatted-phonetic-name,headline,location:(name,country:(code)),industry,current-status,current-share,num-connections,num-connections-capped,summary,specialties,positions,picture-url,api-standard-profile-request:(url,headers),public-profile-url,last-modified-timestamp,proposal-comments,associations,interests,publications:(id,title,publisher:(name),authors:(id,name,person),date,url,summary),patents,languages:(id,language:(name),proficiency:(level,name)),skills:(id,skill:(name)),certifications:(id,name,authority:(name),number,start-date,end-date),educations:(id,school-name,field-of-study,start-date,end-date,degree,activities,notes),courses:(id,name,number),three-current-positions:(id,title,summary,start-date,end-date,is-current,company),three-past-positions:(id,title,summary,start-date,end-date,is-current,company),num-recommenders,recommendations-received:(id,recommendation-type,recommendation-text,recommender),mfeed-rss-url,following,job-bookmarks,suggestions,date-of-birth,member-url-resources:(url,name),related-profile-views,honors-awards)?format=json&oauth2_access_token=AQUAZ5-05E9BYyrXJOgnLsRSLgIKzvnPZ2Fu3ZbTWlYqxULuRJISbvan1sBCTqUSYGpI5jm1D-4IDOyJxRRTCB4Nkq4jY7oX-nhkYGqJ_IViMqZX3L-DNwYROgTnOBVZpb-QKObXFZZjMdSOnyhmpJ_E7YMAVsYHn8ph7fUhJJACw0AFq4A"
data/test.sh ADDED
@@ -0,0 +1,6 @@
1
+ #!/bin/bash
2
+
3
+ find . -type f -iname '*linkedin2cv *' | grep -v '\.git' | xargs rename 's@linkedin2cv @linkedin2cv @gi' {}
4
+ find . -type d -iname '*linkedin2cv *' | grep -v '\.git' | xargs rename 's@linkedin2cv @linkedin2cv @gi' {}
5
+ find . -type f | grep -v '\.git' | xargs sed -i 's/linkedin2cv /linkedin2cv /g'
6
+ find . -type f | grep -v '\.git' | xargs sed -i 's/Linkedin2Resume/Linkedin2Resume/g'
data/teust.rb ADDED
@@ -0,0 +1,75 @@
1
+ require "rubygems"
2
+ require "haml"
3
+ require "sinatra"
4
+ require "linkedin"
5
+ require 'sinatra/reloader'
6
+ enable :sessions
7
+
8
+ helpers do
9
+ def login?
10
+ !session[:atoken].nil?
11
+ end
12
+
13
+ def profile
14
+ linkedin_client.profile unless session[:atoken].nil?
15
+ end
16
+
17
+ def connections
18
+ linkedin_client.connections unless session[:atoken].nil?
19
+ end
20
+
21
+ private
22
+ def linkedin_client
23
+ client = LinkedIn::Client.new(settings.api, settings.secret)
24
+ client.authorize_from_access(session[:atoken], session[:asecret])
25
+ client
26
+ end
27
+
28
+ end
29
+
30
+ configure do
31
+ # get your api keys at https://www.linkedin.com/secure/developer
32
+ set :api, ENV['LINKEDIN_API_KEY']
33
+ set :secret, ENV["LINKEDIN_API_SECRET"]
34
+ end
35
+
36
+ get "/" do
37
+ haml :index
38
+ end
39
+
40
+ get "/auth" do
41
+ client = LinkedIn::Client.new(settings.api, settings.secret)
42
+ request_token = client.request_token(:oauth_callback => "http://#{request.host}:#{request.port}/auth/callback")
43
+ session[:rtoken] = request_token.token
44
+ session[:rsecret] = request_token.secret
45
+
46
+ redirect client.request_token.authorize_url
47
+ end
48
+
49
+ get "/auth/logout" do
50
+ session[:atoken] = nil
51
+ redirect "/"
52
+ end
53
+
54
+ get "/auth/callback" do
55
+ client = LinkedIn::Client.new(settings.api, settings.secret)
56
+ if session[:atoken].nil?
57
+ pin = params[:oauth_verifier]
58
+ atoken, asecret = client.authorize_from_request(session[:rtoken], session[:rsecret], pin)
59
+ session[:atoken] = atoken
60
+ session[:asecret] = asecret
61
+ end
62
+ redirect "/"
63
+ end
64
+
65
+
66
+ __END__
67
+ @@index
68
+ -if login?
69
+ %a{:href => "/auth/logout"} Logout
70
+ %p= profile.headline
71
+ %br
72
+ %div= "Your token is #{session[:atoken]}"
73
+
74
+ -else
75
+ %a{:href => "/auth"} Login using LinkedIn
metadata ADDED
@@ -0,0 +1,434 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: linkedin2cv
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.0.1
5
+ platform: ruby
6
+ authors:
7
+ - mefellows
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2014-06-15 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: bundler
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - '>='
18
+ - !ruby/object:Gem::Version
19
+ version: '0'
20
+ type: :development
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - '>='
25
+ - !ruby/object:Gem::Version
26
+ version: '0'
27
+ - !ruby/object:Gem::Dependency
28
+ name: rake
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - '>='
32
+ - !ruby/object:Gem::Version
33
+ version: '0'
34
+ type: :development
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - '>='
39
+ - !ruby/object:Gem::Version
40
+ version: '0'
41
+ - !ruby/object:Gem::Dependency
42
+ name: rspec
43
+ requirement: !ruby/object:Gem::Requirement
44
+ requirements:
45
+ - - '>='
46
+ - !ruby/object:Gem::Version
47
+ version: '0'
48
+ type: :development
49
+ prerelease: false
50
+ version_requirements: !ruby/object:Gem::Requirement
51
+ requirements:
52
+ - - '>='
53
+ - !ruby/object:Gem::Version
54
+ version: '0'
55
+ - !ruby/object:Gem::Dependency
56
+ name: rspec
57
+ requirement: !ruby/object:Gem::Requirement
58
+ requirements:
59
+ - - '>='
60
+ - !ruby/object:Gem::Version
61
+ version: '0'
62
+ type: :runtime
63
+ prerelease: false
64
+ version_requirements: !ruby/object:Gem::Requirement
65
+ requirements:
66
+ - - '>='
67
+ - !ruby/object:Gem::Version
68
+ version: '0'
69
+ - !ruby/object:Gem::Dependency
70
+ name: rake
71
+ requirement: !ruby/object:Gem::Requirement
72
+ requirements:
73
+ - - '>='
74
+ - !ruby/object:Gem::Version
75
+ version: '0'
76
+ type: :runtime
77
+ prerelease: false
78
+ version_requirements: !ruby/object:Gem::Requirement
79
+ requirements:
80
+ - - '>='
81
+ - !ruby/object:Gem::Version
82
+ version: '0'
83
+ - !ruby/object:Gem::Dependency
84
+ name: clamp
85
+ requirement: !ruby/object:Gem::Requirement
86
+ requirements:
87
+ - - '>='
88
+ - !ruby/object:Gem::Version
89
+ version: '0'
90
+ type: :runtime
91
+ prerelease: false
92
+ version_requirements: !ruby/object:Gem::Requirement
93
+ requirements:
94
+ - - '>='
95
+ - !ruby/object:Gem::Version
96
+ version: '0'
97
+ - !ruby/object:Gem::Dependency
98
+ name: json
99
+ requirement: !ruby/object:Gem::Requirement
100
+ requirements:
101
+ - - '>='
102
+ - !ruby/object:Gem::Version
103
+ version: '0'
104
+ type: :runtime
105
+ prerelease: false
106
+ version_requirements: !ruby/object:Gem::Requirement
107
+ requirements:
108
+ - - '>='
109
+ - !ruby/object:Gem::Version
110
+ version: '0'
111
+ - !ruby/object:Gem::Dependency
112
+ name: log4r
113
+ requirement: !ruby/object:Gem::Requirement
114
+ requirements:
115
+ - - '>='
116
+ - !ruby/object:Gem::Version
117
+ version: '0'
118
+ type: :runtime
119
+ prerelease: false
120
+ version_requirements: !ruby/object:Gem::Requirement
121
+ requirements:
122
+ - - '>='
123
+ - !ruby/object:Gem::Version
124
+ version: '0'
125
+ - !ruby/object:Gem::Dependency
126
+ name: sinatra
127
+ requirement: !ruby/object:Gem::Requirement
128
+ requirements:
129
+ - - '>='
130
+ - !ruby/object:Gem::Version
131
+ version: '0'
132
+ type: :runtime
133
+ prerelease: false
134
+ version_requirements: !ruby/object:Gem::Requirement
135
+ requirements:
136
+ - - '>='
137
+ - !ruby/object:Gem::Version
138
+ version: '0'
139
+ - !ruby/object:Gem::Dependency
140
+ name: sinatra-contrib
141
+ requirement: !ruby/object:Gem::Requirement
142
+ requirements:
143
+ - - '>='
144
+ - !ruby/object:Gem::Version
145
+ version: '0'
146
+ type: :runtime
147
+ prerelease: false
148
+ version_requirements: !ruby/object:Gem::Requirement
149
+ requirements:
150
+ - - '>='
151
+ - !ruby/object:Gem::Version
152
+ version: '0'
153
+ - !ruby/object:Gem::Dependency
154
+ name: sinatra-param
155
+ requirement: !ruby/object:Gem::Requirement
156
+ requirements:
157
+ - - '>='
158
+ - !ruby/object:Gem::Version
159
+ version: '0'
160
+ type: :runtime
161
+ prerelease: false
162
+ version_requirements: !ruby/object:Gem::Requirement
163
+ requirements:
164
+ - - '>='
165
+ - !ruby/object:Gem::Version
166
+ version: '0'
167
+ - !ruby/object:Gem::Dependency
168
+ name: eventmachine
169
+ requirement: !ruby/object:Gem::Requirement
170
+ requirements:
171
+ - - '>='
172
+ - !ruby/object:Gem::Version
173
+ version: '0'
174
+ type: :runtime
175
+ prerelease: false
176
+ version_requirements: !ruby/object:Gem::Requirement
177
+ requirements:
178
+ - - '>='
179
+ - !ruby/object:Gem::Version
180
+ version: '0'
181
+ - !ruby/object:Gem::Dependency
182
+ name: em-websocket
183
+ requirement: !ruby/object:Gem::Requirement
184
+ requirements:
185
+ - - '='
186
+ - !ruby/object:Gem::Version
187
+ version: 0.3.6
188
+ type: :runtime
189
+ prerelease: false
190
+ version_requirements: !ruby/object:Gem::Requirement
191
+ requirements:
192
+ - - '='
193
+ - !ruby/object:Gem::Version
194
+ version: 0.3.6
195
+ - !ruby/object:Gem::Dependency
196
+ name: thin
197
+ requirement: !ruby/object:Gem::Requirement
198
+ requirements:
199
+ - - '>='
200
+ - !ruby/object:Gem::Version
201
+ version: '0'
202
+ type: :runtime
203
+ prerelease: false
204
+ version_requirements: !ruby/object:Gem::Requirement
205
+ requirements:
206
+ - - '>='
207
+ - !ruby/object:Gem::Version
208
+ version: '0'
209
+ - !ruby/object:Gem::Dependency
210
+ name: foreman
211
+ requirement: !ruby/object:Gem::Requirement
212
+ requirements:
213
+ - - '>='
214
+ - !ruby/object:Gem::Version
215
+ version: '0'
216
+ type: :runtime
217
+ prerelease: false
218
+ version_requirements: !ruby/object:Gem::Requirement
219
+ requirements:
220
+ - - '>='
221
+ - !ruby/object:Gem::Version
222
+ version: '0'
223
+ - !ruby/object:Gem::Dependency
224
+ name: dotenv
225
+ requirement: !ruby/object:Gem::Requirement
226
+ requirements:
227
+ - - '>='
228
+ - !ruby/object:Gem::Version
229
+ version: '0'
230
+ type: :runtime
231
+ prerelease: false
232
+ version_requirements: !ruby/object:Gem::Requirement
233
+ requirements:
234
+ - - '>='
235
+ - !ruby/object:Gem::Version
236
+ version: '0'
237
+ - !ruby/object:Gem::Dependency
238
+ name: sinatra-websocket
239
+ requirement: !ruby/object:Gem::Requirement
240
+ requirements:
241
+ - - '>='
242
+ - !ruby/object:Gem::Version
243
+ version: '0'
244
+ type: :runtime
245
+ prerelease: false
246
+ version_requirements: !ruby/object:Gem::Requirement
247
+ requirements:
248
+ - - '>='
249
+ - !ruby/object:Gem::Version
250
+ version: '0'
251
+ - !ruby/object:Gem::Dependency
252
+ name: linkedin-oauth2
253
+ requirement: !ruby/object:Gem::Requirement
254
+ requirements:
255
+ - - '>='
256
+ - !ruby/object:Gem::Version
257
+ version: '0'
258
+ type: :runtime
259
+ prerelease: false
260
+ version_requirements: !ruby/object:Gem::Requirement
261
+ requirements:
262
+ - - '>='
263
+ - !ruby/object:Gem::Version
264
+ version: '0'
265
+ - !ruby/object:Gem::Dependency
266
+ name: haml
267
+ requirement: !ruby/object:Gem::Requirement
268
+ requirements:
269
+ - - '>='
270
+ - !ruby/object:Gem::Version
271
+ version: '0'
272
+ type: :runtime
273
+ prerelease: false
274
+ version_requirements: !ruby/object:Gem::Requirement
275
+ requirements:
276
+ - - '>='
277
+ - !ruby/object:Gem::Version
278
+ version: '0'
279
+ - !ruby/object:Gem::Dependency
280
+ name: asciidoctor
281
+ requirement: !ruby/object:Gem::Requirement
282
+ requirements:
283
+ - - '>='
284
+ - !ruby/object:Gem::Version
285
+ version: '0'
286
+ type: :runtime
287
+ prerelease: false
288
+ version_requirements: !ruby/object:Gem::Requirement
289
+ requirements:
290
+ - - '>='
291
+ - !ruby/object:Gem::Version
292
+ version: '0'
293
+ - !ruby/object:Gem::Dependency
294
+ name: launchy
295
+ requirement: !ruby/object:Gem::Requirement
296
+ requirements:
297
+ - - '>='
298
+ - !ruby/object:Gem::Version
299
+ version: '0'
300
+ type: :runtime
301
+ prerelease: false
302
+ version_requirements: !ruby/object:Gem::Requirement
303
+ requirements:
304
+ - - '>='
305
+ - !ruby/object:Gem::Version
306
+ version: '0'
307
+ - !ruby/object:Gem::Dependency
308
+ name: tilt
309
+ requirement: !ruby/object:Gem::Requirement
310
+ requirements:
311
+ - - '>='
312
+ - !ruby/object:Gem::Version
313
+ version: '0'
314
+ type: :runtime
315
+ prerelease: false
316
+ version_requirements: !ruby/object:Gem::Requirement
317
+ requirements:
318
+ - - '>='
319
+ - !ruby/object:Gem::Version
320
+ version: '0'
321
+ - !ruby/object:Gem::Dependency
322
+ name: webmock
323
+ requirement: !ruby/object:Gem::Requirement
324
+ requirements:
325
+ - - '>='
326
+ - !ruby/object:Gem::Version
327
+ version: '0'
328
+ type: :development
329
+ prerelease: false
330
+ version_requirements: !ruby/object:Gem::Requirement
331
+ requirements:
332
+ - - '>='
333
+ - !ruby/object:Gem::Version
334
+ version: '0'
335
+ description: Turn your LinkedIn Profile into a professional resume in many formats
336
+ (PDF / HTML5 / LaTeX / Asciidoc)
337
+ email:
338
+ - matt.fellows@onegeek.com.au
339
+ executables: []
340
+ extensions: []
341
+ extra_rdoc_files: []
342
+ files:
343
+ - .buildpacks
344
+ - .bundle/config
345
+ - .gitignore
346
+ - .node
347
+ - .travis.yml
348
+ - Gemfile
349
+ - Gemfile.lock
350
+ - Procfile
351
+ - README.md
352
+ - Rakefile
353
+ - Vagrantfile
354
+ - app.rb
355
+ - app/routes/api.rb
356
+ - app/routes/web.rb
357
+ - app/views/hello.erb
358
+ - app/views/home.erb
359
+ - app/views/index.haml
360
+ - config.ru
361
+ - config.yml
362
+ - lib/linkedin2cv/cli/command.rb
363
+ - lib/linkedin2cv/converter.rb
364
+ - lib/linkedin2cv/logging.rb
365
+ - lib/linkedin2cv/renderer/latex_renderer.rb
366
+ - lib/linkedin2cv/version.rb
367
+ - linkedin2cv.gemspec
368
+ - public/.bowerrc
369
+ - public/.editorconfig
370
+ - public/.gitattributes
371
+ - public/.gitignore
372
+ - public/.jshintrc
373
+ - public/.travis.yml
374
+ - public/Gruntfile.js
375
+ - public/app/.buildignore
376
+ - public/app/.htaccess
377
+ - public/app/404.html
378
+ - public/app/favicon.ico
379
+ - public/app/images/yeoman.png
380
+ - public/app/index.html
381
+ - public/app/robots.txt
382
+ - public/app/scripts/app.js
383
+ - public/app/scripts/controllers/main.js
384
+ - public/app/scripts/services/linkedin2cv.js
385
+ - public/app/styles/main.scss
386
+ - public/app/views/main.html
387
+ - public/bower.json
388
+ - public/karma-e2e.conf.js
389
+ - public/karma.conf.js
390
+ - public/package.json
391
+ - public/test/.jshintrc
392
+ - public/test/runner.html
393
+ - public/test/spec/controllers/main.js
394
+ - public/test/spec/services/happyapi.js
395
+ - public/test/spec/services/happyservice.js
396
+ - spec/converter_spec.rb
397
+ - spec/mocks/config.yml
398
+ - spec/mocks/profile.json
399
+ - spec/spec_helper.rb
400
+ - templates/cv.erb
401
+ - templates/foo.asciidoc
402
+ - templates/foo.latex
403
+ - test.rb
404
+ - test.sh
405
+ - teust.rb
406
+ homepage: https://github.com/mefellows/linkedin2cv
407
+ licenses:
408
+ - MIT
409
+ metadata: {}
410
+ post_install_message:
411
+ rdoc_options: []
412
+ require_paths:
413
+ - lib
414
+ required_ruby_version: !ruby/object:Gem::Requirement
415
+ requirements:
416
+ - - '>='
417
+ - !ruby/object:Gem::Version
418
+ version: '0'
419
+ required_rubygems_version: !ruby/object:Gem::Requirement
420
+ requirements:
421
+ - - '>='
422
+ - !ruby/object:Gem::Version
423
+ version: '0'
424
+ requirements: []
425
+ rubyforge_project:
426
+ rubygems_version: 2.0.14
427
+ signing_key:
428
+ specification_version: 4
429
+ summary: Linkedin2CV
430
+ test_files:
431
+ - spec/converter_spec.rb
432
+ - spec/mocks/config.yml
433
+ - spec/mocks/profile.json
434
+ - spec/spec_helper.rb