adp-product-userinfo 0.1.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (44) hide show
  1. checksums.yaml +7 -0
  2. data/.gitignore +11 -0
  3. data/.rspec +2 -0
  4. data/.travis.yml +4 -0
  5. data/CODE_OF_CONDUCT.md +42 -0
  6. data/Gemfile +4 -0
  7. data/LICENSE +201 -0
  8. data/README.md +253 -0
  9. data/Rakefile +6 -0
  10. data/adp-product-userinfo.gemspec +41 -0
  11. data/bin/console +14 -0
  12. data/bin/setup +8 -0
  13. data/democlient/Gemfile +16 -0
  14. data/democlient/Gemfile.lock +47 -0
  15. data/democlient/LICENSE +201 -0
  16. data/democlient/README.md +2 -0
  17. data/democlient/Rakefile +9 -0
  18. data/democlient/adp_userinfo_ruby.rb +216 -0
  19. data/democlient/config.ru +24 -0
  20. data/democlient/config/authorizationcode_config.yml +15 -0
  21. data/democlient/config/certs/apiclient_iat.key +27 -0
  22. data/democlient/config/certs/apiclient_iat.pem +45 -0
  23. data/democlient/config/certs/apiclient_iat.pfx +0 -0
  24. data/democlient/config/clientcredential_config.yml +11 -0
  25. data/democlient/public/favicon.ico +0 -0
  26. data/democlient/public/images/.gitkeep +0 -0
  27. data/democlient/public/images/ADP_logo_tagline.png +0 -0
  28. data/democlient/public/images/busy.gif +0 -0
  29. data/democlient/public/images/hazel_icon.png +0 -0
  30. data/democlient/public/images/hazel_small.png +0 -0
  31. data/democlient/public/javascripts/.gitkeep +0 -0
  32. data/democlient/public/stylesheets/.gitkeep +0 -0
  33. data/democlient/public/stylesheets/main.css +225 -0
  34. data/democlient/spec/adp_connection_ruby_spec.rb +14 -0
  35. data/democlient/spec/spec_helper.rb +23 -0
  36. data/democlient/views/authorization_code.erb +128 -0
  37. data/democlient/views/client_credentials.erb +76 -0
  38. data/democlient/views/layout.erb +52 -0
  39. data/democlient/views/welcome.erb +33 -0
  40. data/lib/adp/product/dto/user_info.rb +30 -0
  41. data/lib/adp/product/userinfo.rb +11 -0
  42. data/lib/adp/product/userinfo/helper.rb +40 -0
  43. data/lib/adp/product/userinfo/version.rb +7 -0
  44. metadata +162 -0
@@ -0,0 +1,76 @@
1
+ <div class="menu">
2
+ <p>
3
+ <strong>Authorization </strong><br/>
4
+ <span href="client_credentials" >Client Credential</span> &nbsp; &nbsp;
5
+ <a href="/authorization_code" >Authentication Code</a>
6
+ </p>
7
+ </div>
8
+
9
+ <div class="content">
10
+ <ol>
11
+ <% if session["ClientCredential"].nil? %>
12
+ <li><b>1.</b>
13
+ <a href="/client_credentials/login">Login</a>
14
+ <code>
15
+ <pre>
16
+ clientcredential_config = ClientCredentialConfiguration.new(config);
17
+ connection = ADPApiConnectionFactory::createConnection(clientcredential_config)
18
+ connection.connect();
19
+ </pre>
20
+ </code>
21
+ </li>
22
+ <% end %>
23
+ <% if !session["ClientCredential"].nil? %>
24
+ <li><b>1.</b>
25
+ <a>Logged in</a>
26
+ <code>
27
+ <pre>
28
+ clientcredential_config = ClientCredentialConfiguration.new(config);
29
+ connection = ADPApiConnectionFactory::createConnection(clientcredential_config)
30
+ connection.connect();
31
+ </pre>
32
+ </code>
33
+ </li>
34
+ <br/>
35
+ <li><b>2.</b>
36
+ <a href="/client_credentials/logout">Logout</a>
37
+ <br/>
38
+ <code>
39
+
40
+ connection.logout()
41
+
42
+ </code>
43
+ </li>
44
+ <% end %>
45
+ <br/>
46
+ <!-- <li><b>2.</b> <a>Get Data</a></li> -->
47
+ <br/>
48
+ </ol>
49
+ </div>
50
+
51
+ <div class="sidebar">
52
+ <h3>Results...</h3>
53
+ <ul>
54
+ <!--
55
+ <li><b>Ruby:</b> <%= RUBY_VERSION %></li>
56
+ <li><b>Environment:</b> <%= ENV["RACK_ENV"] %></li>
57
+ <li><b>Server:</b> <%= @env["SERVER_SOFTWARE"] %></li>
58
+ <li><b>Port:</b> <%= @env["SERVER_PORT"] %></li>
59
+ -->
60
+
61
+ <% if session["ClientCredential"].nil? || session["ClientCredential"].access_token.nil? %>
62
+ <li><b>Access token:</b> not logged in</li>
63
+ <% else %>
64
+ <li><b>Access token:</b> <%= session["ClientCredential"].access_token.token %> </li>
65
+ <li><b>Token type:</b> <%= session["ClientCredential"].access_token.token_type %> </li>
66
+ <li><b>Expires in:</b> <%= session["ClientCredential"].access_token.expires_in %> </li>
67
+ <li><b>Scope:</b> <%= session["ClientCredential"].access_token.scope %> </li>
68
+ <li><b>Expires on:</b> <%= session["ClientCredential"].access_token.expires_on %> </li>
69
+ <% end %>
70
+ <li>&nbsp;</li>
71
+ </ul>
72
+
73
+ <div class="results_footer">
74
+ <a href="https://github.com/adplabs/adp-userinfo-ruby.git"><img class="sidebar_logo" src="/images/ADP_logo_tagline.png" alt="Marketplace/Ruby/Library" /></a>
75
+ </div>
76
+ </div>
@@ -0,0 +1,52 @@
1
+ <!DOCTYPE html>
2
+ <!--[if lt IE 7]> <html class="no-js ie6 oldie" lang="en"> <![endif]-->
3
+ <!--[if IE 7]> <html class="no-js ie7 oldie" lang="en"> <![endif]-->
4
+ <!--[if IE 8]> <html class="no-js ie8 oldie" lang="en"> <![endif]-->
5
+ <!--[if gt IE 8]><!--> <html class="no-js" lang="en"> <!--<![endif]-->
6
+ <head>
7
+ <meta charset="utf-8" />
8
+ <meta http-equiv="X-UA-Compatible" content="IE=edge, chrome=1" />
9
+
10
+ <title>Adp Connection API Library (Ruby)</title>
11
+
12
+ <meta name="viewport" content="width=device-width, initial-scale=1.0" />
13
+
14
+ <link rel="stylesheet" href="/stylesheets/main.css" />
15
+ </head>
16
+ <body>
17
+
18
+
19
+ <div class="wrapper">
20
+ <header class="branding">
21
+ <h1>Adp UserInfo Product API Library (Ruby)</h1>
22
+ </header>
23
+
24
+ <div class="main">
25
+ <%= yield %>
26
+ </div>
27
+
28
+ <footer class="branding">
29
+ <div class=""message error><%= view_bag[:message] %></div>
30
+ <hr/>
31
+ <small>&copy; <%= Time.now.year %></small>
32
+ <hr/>
33
+ </footer>
34
+ </div>
35
+
36
+ <script src="http://ajax.googleapis.com/ajax/libs/jquery/1/jquery.min.js"></script>
37
+ <!--[if lt IE 7]>
38
+ <script src="//ajax.googleapis.com/ajax/libs/chrome-frame/1.0.2/CFInstall.min.js"></script>
39
+ <script>window.attachEvent("onload",function(){CFInstall.check({mode:"overlay"})})</script>
40
+ <![endif]-->
41
+
42
+ <script>
43
+ $(document).ready(function(me) {
44
+ console.log("What is going on with ");
45
+ $("a").click(function(me ) {
46
+ console.log("Yeah you clicked me ", me);
47
+ $('<span class="busy_icon"><img src="data:image/gif;base64,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AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA=="></span>').insertAfter(me.target);
48
+ });
49
+ });
50
+ </script>
51
+ </body>
52
+
@@ -0,0 +1,33 @@
1
+ <div class="menu">
2
+ <p>
3
+ <strong>Authorization </strong><br/>
4
+ <a href="/client_credentials" >Client Credential</a> &nbsp; &nbsp;
5
+ <a href="/authorization_code" >Authentication Code</a>
6
+ </p>
7
+ </div>
8
+
9
+ <div class="content">
10
+ <ol>
11
+ </ol>
12
+ </div>
13
+
14
+ <div class="sidebar">
15
+ <h3>Results...</h3>
16
+ <ul>
17
+ <!--
18
+ <li><b>Ruby:</b> <%= RUBY_VERSION %></li>
19
+ <li><b>Environment:</b> <%= ENV["RACK_ENV"] %></li>
20
+ <li><b>Server:</b> <%= @env["SERVER_SOFTWARE"] %></li>
21
+ <li><b>Port:</b> <%= @env["SERVER_PORT"] %></li>
22
+ -->
23
+ <li></li>
24
+ <li></li>
25
+ <li></li>
26
+ <li></li>
27
+ <li></li>
28
+ <li></li>
29
+ </ul>
30
+ <div class="results_footer">
31
+ <a href="https://github.com/adplabs/adp-userinfo-ruby.git"><img class="sidebar_logo" src="/images/ADP_logo_tagline.png" alt="Marketplace/Ruby/Library" /></a>
32
+ </div>
33
+ </div>
@@ -0,0 +1,30 @@
1
+
2
+ module Adp
3
+ module Product
4
+ module DTO
5
+ class Userinfo
6
+ attr_accessor :sub
7
+ attr_accessor :organizationOID
8
+ attr_accessor :associateOID
9
+ attr_accessor :givenName
10
+ attr_accessor :familyName
11
+ attr_accessor :name
12
+ attr_accessor :email
13
+ attr_accessor :picture
14
+
15
+ # @param [Object] json_data
16
+ def initialize(json_data)
17
+
18
+ self.sub = json_data["sub"]
19
+ self.organizationOID = json_data["organizationOID"]
20
+ self.associateOID = json_data["associateOID"]
21
+ self.givenName = json_data["given_name"]
22
+ self.familyName = json_data["family_name"]
23
+ self.name = json_data["name"]
24
+ self.email = json_data["email"]
25
+ self.picture = json_data["picture"]
26
+ end
27
+ end
28
+ end
29
+ end
30
+ end
@@ -0,0 +1,11 @@
1
+ require 'adp/product/userinfo/version'
2
+ require 'adp/product/userinfo/helper'
3
+ require 'adp/product/dto/user_info'
4
+
5
+ module Adp
6
+ module Product
7
+ module Userinfo
8
+ # Your code goes here...
9
+ end
10
+ end
11
+ end
@@ -0,0 +1,40 @@
1
+ require 'adp/connection'
2
+
3
+ module Adp
4
+ module Product
5
+ module Userinfo
6
+ class Helper
7
+ attr_accessor :connection
8
+ attr_accessor :url_map
9
+
10
+ # @param [Object] conn
11
+ # @param [Object] urlmap
12
+ def initialize(conn, urlmap = [])
13
+
14
+ raise ConnectionException, "Connection error: invalid connection (null)" unless (!conn.nil?)
15
+
16
+ self.connection = conn
17
+ self.url_map = urlmap
18
+
19
+ @producturl = "https://iat-api.adp.com/core/v1/userinfo"
20
+ end
21
+
22
+
23
+ # @return [Object]
24
+ def get_user_info
25
+
26
+ #Checking if we have connection object
27
+ raise ConnectionException, "Connection error: not connected" unless !self.connection.nil?
28
+
29
+ #Checking if we are connected
30
+ raise ConnectionException, "Connection error: not connected" unless self.connection.is_connected_indicator?
31
+
32
+ #Now get the adp data using #{@producturl}
33
+ data = self.connection.get_adp_data(@producturl)
34
+
35
+ return data
36
+ end
37
+ end
38
+ end
39
+ end
40
+ end
@@ -0,0 +1,7 @@
1
+ module Adp
2
+ module Product
3
+ module Userinfo
4
+ VERSION = "0.1.0"
5
+ end
6
+ end
7
+ end
metadata ADDED
@@ -0,0 +1,162 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: adp-product-userinfo
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.1.0
5
+ platform: ruby
6
+ authors:
7
+ - Napier, Junior (CORP)
8
+ autorequire:
9
+ bindir: exe
10
+ cert_chain: []
11
+ date: 2016-03-10 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: json
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - "~>"
18
+ - !ruby/object:Gem::Version
19
+ version: '1.8'
20
+ type: :runtime
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - "~>"
25
+ - !ruby/object:Gem::Version
26
+ version: '1.8'
27
+ - !ruby/object:Gem::Dependency
28
+ name: adp-connection
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - ">="
32
+ - !ruby/object:Gem::Version
33
+ version: '0'
34
+ type: :runtime
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: bundler
43
+ requirement: !ruby/object:Gem::Requirement
44
+ requirements:
45
+ - - "~>"
46
+ - !ruby/object:Gem::Version
47
+ version: '1.11'
48
+ type: :development
49
+ prerelease: false
50
+ version_requirements: !ruby/object:Gem::Requirement
51
+ requirements:
52
+ - - "~>"
53
+ - !ruby/object:Gem::Version
54
+ version: '1.11'
55
+ - !ruby/object:Gem::Dependency
56
+ name: rake
57
+ requirement: !ruby/object:Gem::Requirement
58
+ requirements:
59
+ - - "~>"
60
+ - !ruby/object:Gem::Version
61
+ version: '10.0'
62
+ type: :development
63
+ prerelease: false
64
+ version_requirements: !ruby/object:Gem::Requirement
65
+ requirements:
66
+ - - "~>"
67
+ - !ruby/object:Gem::Version
68
+ version: '10.0'
69
+ - !ruby/object:Gem::Dependency
70
+ name: rspec
71
+ requirement: !ruby/object:Gem::Requirement
72
+ requirements:
73
+ - - "~>"
74
+ - !ruby/object:Gem::Version
75
+ version: '3.0'
76
+ type: :development
77
+ prerelease: false
78
+ version_requirements: !ruby/object:Gem::Requirement
79
+ requirements:
80
+ - - "~>"
81
+ - !ruby/object:Gem::Version
82
+ version: '3.0'
83
+ description: The ADP UserInfo Product Library can be used to obtain basic information
84
+ about the user that is logged-in to the ADP application. The Library includes a
85
+ sample application that can be run out-of-the-box to connect to the ADP Marketplace
86
+ API test gateway. This library has a dependancy on the adp-connection library. Installing
87
+ this library also installs the latest version of the adp-connection library, if
88
+ not previously installed.
89
+ email:
90
+ - Junior.Napier@gmail.com
91
+ executables: []
92
+ extensions: []
93
+ extra_rdoc_files: []
94
+ files:
95
+ - ".gitignore"
96
+ - ".rspec"
97
+ - ".travis.yml"
98
+ - CODE_OF_CONDUCT.md
99
+ - Gemfile
100
+ - LICENSE
101
+ - README.md
102
+ - Rakefile
103
+ - adp-product-userinfo.gemspec
104
+ - bin/console
105
+ - bin/setup
106
+ - democlient/Gemfile
107
+ - democlient/Gemfile.lock
108
+ - democlient/LICENSE
109
+ - democlient/README.md
110
+ - democlient/Rakefile
111
+ - democlient/adp_userinfo_ruby.rb
112
+ - democlient/config.ru
113
+ - democlient/config/authorizationcode_config.yml
114
+ - democlient/config/certs/apiclient_iat.key
115
+ - democlient/config/certs/apiclient_iat.pem
116
+ - democlient/config/certs/apiclient_iat.pfx
117
+ - democlient/config/clientcredential_config.yml
118
+ - democlient/public/favicon.ico
119
+ - democlient/public/images/.gitkeep
120
+ - democlient/public/images/ADP_logo_tagline.png
121
+ - democlient/public/images/busy.gif
122
+ - democlient/public/images/hazel_icon.png
123
+ - democlient/public/images/hazel_small.png
124
+ - democlient/public/javascripts/.gitkeep
125
+ - democlient/public/stylesheets/.gitkeep
126
+ - democlient/public/stylesheets/main.css
127
+ - democlient/spec/adp_connection_ruby_spec.rb
128
+ - democlient/spec/spec_helper.rb
129
+ - democlient/views/authorization_code.erb
130
+ - democlient/views/client_credentials.erb
131
+ - democlient/views/layout.erb
132
+ - democlient/views/welcome.erb
133
+ - lib/adp/product/dto/user_info.rb
134
+ - lib/adp/product/userinfo.rb
135
+ - lib/adp/product/userinfo/helper.rb
136
+ - lib/adp/product/userinfo/version.rb
137
+ homepage: https://github.com/adplabs/adp-userinfo-ruby
138
+ licenses:
139
+ - Apache-2.0
140
+ metadata:
141
+ allowed_push_host: https://rubygems.org
142
+ post_install_message:
143
+ rdoc_options: []
144
+ require_paths:
145
+ - lib
146
+ required_ruby_version: !ruby/object:Gem::Requirement
147
+ requirements:
148
+ - - ">="
149
+ - !ruby/object:Gem::Version
150
+ version: '0'
151
+ required_rubygems_version: !ruby/object:Gem::Requirement
152
+ requirements:
153
+ - - ">="
154
+ - !ruby/object:Gem::Version
155
+ version: '0'
156
+ requirements: []
157
+ rubyforge_project:
158
+ rubygems_version: 2.5.1
159
+ signing_key:
160
+ specification_version: 4
161
+ summary: ADP Ruby UserInfo product client library to get the logged-in user's info.
162
+ test_files: []