roqua-core-api 0.0.9 → 0.0.10

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.
Files changed (41) hide show
  1. checksums.yaml +5 -13
  2. data/.gitignore +2 -1
  3. data/ChangeLog.md +7 -1
  4. data/Gemfile +2 -1
  5. data/Guardfile +1 -1
  6. data/core_api.gemspec +2 -3
  7. data/lib/roqua/core_api/create_dossier.rb +17 -0
  8. data/lib/roqua/core_api/create_dossier_group.rb +15 -0
  9. data/lib/roqua/core_api/me.rb +12 -0
  10. data/lib/roqua/core_api/models.rb +1 -0
  11. data/lib/roqua/core_api/send_email_to.rb +23 -0
  12. data/lib/roqua/core_api/send_invite_email.rb +12 -0
  13. data/lib/roqua/core_api/sessions/auth_session.rb +57 -0
  14. data/lib/roqua/core_api/sessions/basic_auth_session.rb +22 -0
  15. data/lib/roqua/core_api/sessions/oauth_session.rb +4 -31
  16. data/lib/roqua/core_api/sessions.rb +8 -5
  17. data/lib/roqua/core_api/version.rb +1 -1
  18. data/lib/roqua/core_api.rb +7 -1
  19. data/lib/roqua/omniauth/strategies/doorkeeper.rb +1 -4
  20. data/spec/fabricators/auth_session_fabricator.rb +3 -0
  21. data/spec/fabricators/basic_auth_session_fabricator.rb +7 -0
  22. data/spec/fabricators/oauth_session_fabricator.rb +5 -0
  23. data/spec/lib/roqua/core_api/create_dossier_group_spec.rb +23 -0
  24. data/spec/lib/roqua/core_api/create_dossier_spec.rb +26 -0
  25. data/spec/lib/roqua/core_api/me_spec.rb +15 -0
  26. data/spec/lib/roqua/core_api/send_email_to_spec.rb +26 -0
  27. data/spec/lib/roqua/core_api/send_invite_email_spec.rb +10 -0
  28. data/spec/lib/roqua/core_api/sessions/auth_session_spec.rb +45 -0
  29. data/spec/lib/roqua/core_api/sessions/basic_auth_session_spec.rb +51 -0
  30. data/spec/lib/roqua/core_api/sessions/oauth_session_spec.rb +43 -0
  31. data/spec/spec_helper.rb +2 -9
  32. metadata +63 -63
  33. data/lib/roqua/core_api/sessions/dossier_group_session.rb +0 -31
  34. data/lib/roqua/core_api/sessions/dossier_session.rb +0 -25
  35. data/lib/roqua/core_api/sessions/organization_session.rb +0 -69
  36. data/spec/fabricators/dossier_fabricator.rb +0 -3
  37. data/spec/fabricators/dossier_group_fabricator.rb +0 -3
  38. data/spec/fabricators/dossier_group_session_fabricator.rb +0 -5
  39. data/spec/fabricators/organization_session_fabricator.rb +0 -3
  40. data/spec/lib/roqua/core_api/sessions/dossier_group_session_spec.rb +0 -21
  41. data/spec/lib/roqua/core_api/sessions/organization_session_spec.rb +0 -20
checksums.yaml CHANGED
@@ -1,15 +1,7 @@
1
1
  ---
2
- !binary "U0hBMQ==":
3
- metadata.gz: !binary |-
4
- MTQ0MmE2MjcyZmVmYWYyNWNmOTk5MmQ1NzY2YWY0MGMyMzYyYzk2Nw==
5
- data.tar.gz: !binary |-
6
- OTE1MTMzMWRjY2UyOTYxMThlMTgyMzRjNDhkYmM0MDI3ZTA3OGRlZA==
2
+ SHA1:
3
+ metadata.gz: 16242225e679868d3490798412d8585f0e22b666
4
+ data.tar.gz: b618a7499c9be7d03b55e470ee8780c23776054d
7
5
  SHA512:
8
- metadata.gz: !binary |-
9
- NTQ4MGRlZWJhNDIyYzY1NGI5MjVkNjZjM2U3ZDA2NTc3OGNlNzMzNzkyYzJk
10
- YzFlZTBlYzIzMWM5Y2Y3OGM0ZTVhMTBlYzU5NjE5NzE1OGQ3NDYwYzA1NTE0
11
- MDg1OGQ1Y2RlMTMzNDE0ZDUzMWEzNGE0NDQzMGFjYjI3ZjgxODM=
12
- data.tar.gz: !binary |-
13
- NTMzOGZjMjI4MjA0OTI3OTgyNDljMjI5ZWZjMzFkYjQ0N2RkMTdiZTQ5ODE5
14
- MzliZDM0ZWYyZTdhZTg3NjMyMDA3OWE2ZDU5OGZmNzI2MTViZjc0NDc1YTMy
15
- YjY5Njg3MDE5MTk4YTIzOTc4MDU0MjA4MzQwMzI3YTA5NTdiYjk=
6
+ metadata.gz: 3ecd95b03e4473ddf07458b71b91b36b09ac3ff61699a4caaaa80470d6cac3f5f063764628659cea451997612b43897bf34bcf578cdcde9e3d3dde472be7f118
7
+ data.tar.gz: d5dc85d752535893e40fd4881a7e10c40d311273c5bc6bc7ba5c837193feda0affeac51868fe090ac11760f83319fc01fc89ce244bef789ce327abc730ec2c43
data/.gitignore CHANGED
@@ -2,4 +2,5 @@ Gemfile.lock
2
2
  doc/
3
3
  pkg/
4
4
  vendor/cache/*.gem
5
- .yardoc
5
+ .yardoc
6
+ .bundle/*
data/ChangeLog.md CHANGED
@@ -1,3 +1,9 @@
1
+ ### 0.0.10 / 2014-03-07
2
+
3
+ * Remove organization session, dossier_group session and dossier session
4
+ * Implement all apis as ActiveInteraction use cases
5
+ * Authenticate through oauth and basic auth sessions
6
+
1
7
  ### 0.0.9 / 2014-02-27
2
8
 
3
9
  * Add core-api omniauth rails config
@@ -6,7 +12,7 @@
6
12
 
7
13
  * Added logout_url method
8
14
 
9
- ###
15
+ ### 0.0.6
10
16
 
11
17
  * Removed start api
12
18
 
data/Gemfile CHANGED
@@ -7,5 +7,6 @@ group :development do
7
7
  end
8
8
 
9
9
  group :test do
10
- gem 'guard-rspec'
10
+ gem 'guard-rspec', '~> 4.2.6'
11
+ gem 'fuubar', '~> 1.3.2'
11
12
  end
data/Guardfile CHANGED
@@ -1,4 +1,4 @@
1
- guard :rspec, failed_mode: 'none', all_after_pass: false, all_on_start: false do
1
+ guard :rspec, failed_mode: 'none', all_after_pass: false, all_on_start: false, cmd: 'bundle exec rspec --format Fuubar --colour' do
2
2
  watch(%r{^spec/.+_spec\.rb$})
3
3
  watch(%r{^lib/(.+)\.rb$}) { |m| "spec/lib/#{m[1]}_spec.rb" }
4
4
  end
data/core_api.gemspec CHANGED
@@ -17,13 +17,12 @@ Gem::Specification.new do |gem|
17
17
  gem.test_files = gem.files.grep(%r{^(test|spec|features)/})
18
18
  gem.require_paths = ['lib']
19
19
 
20
- gem.add_dependency 'httparty', '~> 0.12.0'
20
+ gem.add_dependency 'httparty', '~> 0.12.0'
21
+ gem.add_dependency 'active_interaction', '~> 1.0.4'
21
22
 
22
23
  gem.add_development_dependency 'bundler', '~> 1.0'
23
24
  gem.add_development_dependency 'rake', '~> 10.0'
24
25
  gem.add_development_dependency 'yard', '~> 0.8'
25
26
  gem.add_development_dependency 'rspec', '~> 3.0.0.beta1'
26
- gem.add_development_dependency 'vcr', '~> 2.8.0'
27
- gem.add_development_dependency 'webmock', '~> 1.17.1'
28
27
  gem.add_development_dependency 'fabrication', '~> 2.9.6'
29
28
  end
@@ -0,0 +1,17 @@
1
+ module Roqua
2
+ module CoreApi
3
+ # @api private
4
+ class CreateDossier < ActiveInteraction::Base
5
+ model :session, class: Sessions::OAuthSession
6
+ string :dossier_group_id
7
+ hash :attributes, strip: false
8
+
9
+ def execute
10
+ response = session.post "/dossiers", person: attributes.delete(:person),
11
+ dossier: attributes,
12
+ dossier_group_id: dossier_group_id
13
+ Models::Dossier.new(response)
14
+ end
15
+ end
16
+ end
17
+ end
@@ -0,0 +1,15 @@
1
+ module Roqua
2
+ module CoreApi
3
+ # @api private
4
+ class CreateDossierGroup < ActiveInteraction::Base
5
+ model :session, class: Sessions::OAuthSession
6
+ string :organization_id
7
+ hash :attributes, strip: false
8
+
9
+ def execute
10
+ response = session.post "/dossier_groups", dossier_group: attributes, organization_id: organization_id
11
+ Models::DossierGroup.new(response)
12
+ end
13
+ end
14
+ end
15
+ end
@@ -0,0 +1,12 @@
1
+ module Roqua
2
+ module CoreApi
3
+ # @api private
4
+ class Me < ActiveInteraction::Base
5
+ model :session, class: Sessions::OAuthSession
6
+
7
+ def execute
8
+ session.get('/me')['me']
9
+ end
10
+ end
11
+ end
12
+ end
@@ -1,2 +1,3 @@
1
1
  require 'roqua/core_api/models/dossier_group'
2
2
  require 'roqua/core_api/models/dossier'
3
+ require 'roqua/core_api/models/person'
@@ -0,0 +1,23 @@
1
+ module Roqua
2
+ module CoreApi
3
+ # @api private
4
+ class SendEmailTo < ActiveInteraction::Base
5
+ string :person_id
6
+ hash :attributes do
7
+ string :subject
8
+ string :body
9
+ string :bcc, default: nil
10
+ string :content_type, default: 'text/html'
11
+ string :mail_type, default: nil
12
+ end
13
+
14
+ # Possible variables in the body are:
15
+ # %firstname%,
16
+ # %lastname%,
17
+ # %initials%
18
+ def execute
19
+ CoreApi.basic_auth_session.post "/emails", email: attributes, person_id: person_id
20
+ end
21
+ end
22
+ end
23
+ end
@@ -0,0 +1,12 @@
1
+ module Roqua
2
+ module CoreApi
3
+ # @api private
4
+ class SendInviteEmail < ActiveInteraction::Base
5
+ model :session, class: Sessions::OAuthSession
6
+
7
+ def execute
8
+ session.post '/send_invite_email'
9
+ end
10
+ end
11
+ end
12
+ end
@@ -0,0 +1,57 @@
1
+ module Roqua
2
+ module CoreApi
3
+ module Sessions
4
+ class AuthSession
5
+ attr_reader :core_host
6
+
7
+ def initialize(core_host: ENV['ROQUA_CORE_HOST'])
8
+ @core_host = core_host
9
+ end
10
+
11
+ def get(path, params = {})
12
+ perform_request_or_fail do
13
+ HTTParty.get(full_url_for(path), headers: headers, query: params, basic_auth: basic_auth)
14
+ end
15
+ end
16
+
17
+ def post(path, params = {})
18
+ perform_request_or_fail do
19
+ HTTParty.post(full_url_for(path), headers: headers, body: params, basic_auth: basic_auth)
20
+ end
21
+ end
22
+
23
+ def patch(path, params = {})
24
+ perform_request_or_fail do
25
+ HTTParty.patch(full_url_for(path), headers: headers, body: params, basic_auth: basic_auth)
26
+ end
27
+ end
28
+
29
+ def delete(path, params = {})
30
+ HTTParty.delete(full_url_for(path), headers: headers, query: params, basic_auth: basic_auth)
31
+ end
32
+
33
+ private
34
+
35
+ def perform_request_or_fail(&block)
36
+ response = yield
37
+ fail response.parsed_response unless (200..299).include? response.code
38
+ response
39
+ end
40
+
41
+ def full_url_for(path)
42
+ core_host + api_base + path + '.json'
43
+ end
44
+
45
+ def api_base
46
+ '/api/v1'
47
+ end
48
+
49
+ def headers
50
+ end
51
+
52
+ def basic_auth
53
+ end
54
+ end
55
+ end
56
+ end
57
+ end
@@ -0,0 +1,22 @@
1
+ module Roqua
2
+ module CoreApi
3
+ module Sessions
4
+ class BasicAuthSession < AuthSession
5
+ attr_reader :username
6
+ attr_reader :password
7
+
8
+ def initialize(username: ENV['ROQUA_CORE_KEY'], password: ENV['ROQUA_CORE_SECRET'], **additional_arguments)
9
+ @username = username
10
+ @password = password
11
+ super additional_arguments
12
+ end
13
+
14
+ private
15
+
16
+ def basic_auth
17
+ {username: username, password: password}
18
+ end
19
+ end
20
+ end
21
+ end
22
+ end
@@ -1,47 +1,20 @@
1
1
  module Roqua
2
2
  module CoreApi
3
3
  module Sessions
4
- class OAuthSession
4
+ class OAuthSession < AuthSession
5
5
  attr_reader :access_token
6
- attr_reader :server_url
7
6
 
8
- def initialize(access_token, server_url = ENV["CORE_URL"])
7
+ def initialize(access_token:, **additional_arguments)
9
8
  @access_token = access_token
10
- @server_url = server_url
11
- end
12
-
13
- def me
14
- response = get('/me')
15
- fail response.inspect unless response.code == 200
16
- response["me"]
17
- end
18
-
19
- def get(url, params = {})
20
- HTTParty.get(full_url_for(url), headers: headers, query: params)
21
- end
22
-
23
- def post(url, params = {})
24
- HTTParty.post(full_url_for(url), headers: headers, body: params)
25
- end
26
-
27
- def put(url, params = {})
28
- HTTParty.put(full_url_for(url), headers: headers, body: params)
9
+ super additional_arguments
29
10
  end
30
11
 
31
12
  def logout_url(redirect_to:)
32
- "#{server_url}/session/destroy?token=#{access_token}&redirect_to=#{CGI.escape redirect_to}"
13
+ "#{core_host}/session/destroy?token=#{access_token}&redirect_to=#{CGI.escape redirect_to}"
33
14
  end
34
15
 
35
16
  private
36
17
 
37
- def full_url_for(url)
38
- server_url + base_url + url + ".json"
39
- end
40
-
41
- def base_url
42
- "/api/v1"
43
- end
44
-
45
18
  def headers
46
19
  {"Authorization" => "Bearer #{access_token}"}
47
20
  end
@@ -1,13 +1,16 @@
1
1
  require 'httparty'
2
+ require 'roqua/core_api/sessions/auth_session'
2
3
  require 'roqua/core_api/sessions/oauth_session'
3
- require 'roqua/core_api/sessions/organization_session'
4
- require 'roqua/core_api/sessions/dossier_group_session'
5
- require 'roqua/core_api/sessions/dossier_session'
4
+ require 'roqua/core_api/sessions/basic_auth_session'
6
5
 
7
6
  module Roqua
8
7
  module CoreApi
9
- def self.oauth_session(access_token)
10
- Sessions::OAuthSession.new(access_token)
8
+ def self.oauth_session(*arguments, &block)
9
+ Sessions::OAuthSession.new(*arguments, &block)
10
+ end
11
+
12
+ def self.basic_auth_session(*arguments, &block)
13
+ Sessions::BasicAuthSession.new(*arguments, &block)
11
14
  end
12
15
  end
13
16
  end
@@ -1,5 +1,5 @@
1
1
  module Roqua
2
2
  module CoreApi
3
- VERSION = "0.0.9"
3
+ VERSION = "0.0.10"
4
4
  end
5
5
  end
@@ -1,3 +1,9 @@
1
+ require 'active_interaction'
1
2
  require 'roqua/core_api/version'
2
- require 'roqua/core_api/models'
3
3
  require 'roqua/core_api/sessions'
4
+ require 'roqua/core_api/models'
5
+ require 'roqua/core_api/me'
6
+ require 'roqua/core_api/create_dossier'
7
+ require 'roqua/core_api/create_dossier_group'
8
+ require 'roqua/core_api/send_email_to'
9
+ require 'roqua/core_api/send_invite_email'
@@ -11,10 +11,7 @@ module OmniAuth
11
11
 
12
12
  info do
13
13
  {dossier_id: raw_info['dossier_id'],
14
- dossier_group_id: raw_info['dossier_group_id'],
15
- organization_id: raw_info['organization_id'],
16
- username: raw_info['username'],
17
- email: raw_info['email']}
14
+ username: raw_info['username']}
18
15
  end
19
16
 
20
17
  def raw_info
@@ -0,0 +1,3 @@
1
+ Fabricator(:auth_session, from: Roqua::CoreApi::Sessions::AuthSession) do
2
+ initialize_with { Roqua::CoreApi::Sessions::AuthSession.new core_host: 'http://core.dev' }
3
+ end
@@ -0,0 +1,7 @@
1
+ Fabricator(:basic_auth_session, from: Roqua::CoreApi::Sessions::BasicAuthSession) do
2
+ initialize_with do
3
+ Roqua::CoreApi::Sessions::BasicAuthSession.new username: 'some_username',
4
+ password: 'some_password',
5
+ core_host: 'http://core.dev'
6
+ end
7
+ end
@@ -0,0 +1,5 @@
1
+ Fabricator(:oauth_session, from: Roqua::CoreApi::Sessions::OAuthSession) do
2
+ initialize_with do
3
+ Roqua::CoreApi::Sessions::OAuthSession.new access_token: 'some_access_token', core_host: 'http://core.dev'
4
+ end
5
+ end
@@ -0,0 +1,23 @@
1
+ require 'spec_helper'
2
+
3
+ describe CreateDossierGroup do
4
+ let(:session) { Fabricate :oauth_session }
5
+
6
+ it 'performs a post on the /dossier_groups api path' do
7
+ expect(session).to receive(:post).with '/dossier_groups', dossier_group: {some: 'attributes'},
8
+ organization_id: 'some_organization_id'
9
+ CreateDossierGroup.run!(session: session, attributes: {some: 'attributes'}, organization_id: 'some_organization_id')
10
+ end
11
+
12
+ it 'returns a Dossier model' do
13
+ allow(session).to receive(:post).with('/dossier_groups', dossier_group: {some: 'attributes'},
14
+ organization_id: 'some_organization_id')
15
+ .and_return 'id' => 'some_id', 'name' => 'some_name'
16
+ dossier_group = CreateDossierGroup.run!(session: session,
17
+ attributes: {some: 'attributes'},
18
+ organization_id: 'some_organization_id')
19
+ expect(dossier_group).to be_a(DossierGroup)
20
+ expect(dossier_group.id).to eq('some_id')
21
+ expect(dossier_group.name).to eq('some_name')
22
+ end
23
+ end
@@ -0,0 +1,26 @@
1
+ require 'spec_helper'
2
+
3
+ describe CreateDossier do
4
+ let(:session) { Fabricate :oauth_session }
5
+
6
+ it 'performs a post on the /dossiers api path' do
7
+ expect(session).to receive(:post).with '/dossiers', person: 'person',
8
+ dossier: {other: 'attributes'},
9
+ dossier_group_id: 'some_dossier_group_id'
10
+ CreateDossier.run!(session: session,
11
+ attributes: {person: 'person', other: 'attributes'},
12
+ dossier_group_id: 'some_dossier_group_id')
13
+ end
14
+
15
+ it 'returns a Dossier model' do
16
+ allow(session).to receive(:post).with('/dossiers', person: 'person',
17
+ dossier: {other: 'attributes'},
18
+ dossier_group_id: 'some_dossier_group_id')
19
+ .and_return 'id' => 'some_id'
20
+ dossier = CreateDossier.run!(session: session,
21
+ attributes: {person: 'person', other: 'attributes'},
22
+ dossier_group_id: 'some_dossier_group_id')
23
+ expect(dossier).to be_a(Dossier)
24
+ expect(dossier.id).to eq('some_id')
25
+ end
26
+ end
@@ -0,0 +1,15 @@
1
+ require 'spec_helper'
2
+
3
+ describe Me do
4
+ let(:session) { Fabricate :oauth_session }
5
+
6
+ it 'performs a get on the /me api path' do
7
+ expect(session).to receive(:get).with('/me').and_return({})
8
+ Me.run!(session: session)
9
+ end
10
+
11
+ it 'returns the me entry from the response' do
12
+ allow(session).to receive(:get).with('/me').and_return 'me' => 'some_info'
13
+ expect(Me.run!(session: session)).to eq('some_info')
14
+ end
15
+ end
@@ -0,0 +1,26 @@
1
+ require 'spec_helper'
2
+
3
+ describe SendEmailTo do
4
+ let(:session) { Sessions::BasicAuthSession.new }
5
+ before { allow(Sessions::BasicAuthSession).to receive(:new).and_return session }
6
+
7
+ it 'performs a post on the emails api path providing the person_id and the email attributes' do
8
+ email_attributes = {subject: 'some_subject',
9
+ body: 'some_body',
10
+ bcc: 'some@bcc',
11
+ content_type: 'some/content/type',
12
+ mail_type: 'some_mail_type'}
13
+ expect(session).to receive(:post).with '/emails', person_id: 'some_person_id', email: email_attributes
14
+ SendEmailTo.run!(person_id: 'some_person_id', attributes: email_attributes)
15
+ end
16
+
17
+ it 'defaults the content_type to text/html' do
18
+ email_attributes = {subject: 'some_subject',
19
+ body: 'some_body',
20
+ bcc: 'some@bcc',
21
+ mail_type: 'some_mail_type'}
22
+ expect(session).to receive(:post).with '/emails', person_id: 'some_person_id',
23
+ email: email_attributes.merge(content_type: 'text/html')
24
+ SendEmailTo.run!(person_id: 'some_person_id', attributes: email_attributes)
25
+ end
26
+ end
@@ -0,0 +1,10 @@
1
+ require 'spec_helper'
2
+
3
+ describe SendInviteEmail do
4
+ let(:session) { Fabricate :oauth_session }
5
+
6
+ it 'performs a post on the send_invite_email api path' do
7
+ expect(session).to receive(:post).with '/send_invite_email'
8
+ SendInviteEmail.run!(session: session)
9
+ end
10
+ end
@@ -0,0 +1,45 @@
1
+ require 'spec_helper'
2
+
3
+ describe AuthSession do
4
+ let(:session) { Fabricate :auth_session }
5
+ let(:response) { double('response', code: 201, parsed_response: 'some_response') }
6
+
7
+ describe '#initialize' do
8
+ it 'sets the core_host instance attribute' do
9
+ session = AuthSession.new core_host: 'some_core_host'
10
+ expect(session.core_host).to eq('some_core_host')
11
+ end
12
+
13
+ it 'defaults the core_host to the ROQUA_CORE_HOST env variable' do
14
+ orginal_env_core_host = ENV['ROQUA_CORE_HOST']
15
+ ENV['ROQUA_CORE_HOST'] = 'some_env_core_host'
16
+ session = AuthSession.new
17
+ ENV['ROQUA_CORE_HOST'] = orginal_env_core_host
18
+ expect(session.core_host).to eq('some_env_core_host')
19
+ end
20
+ end
21
+
22
+ describe '#get' do
23
+ it 'performs a get request' do
24
+ allow(session).to receive(:basic_auth).and_return(username: 'some_username', password: 'some_password')
25
+ allow(session).to receive(:headers).and_return(some: 'header')
26
+ expect(HTTParty).to receive(:get).with('http://core.dev/api/v1/some_path.json',
27
+ query: {some: 'param'},
28
+ headers: {some: 'header'},
29
+ basic_auth: {username: 'some_username', password: 'some_password'})
30
+ .and_return(response)
31
+ session.get '/some_path', some: 'param'
32
+ end
33
+
34
+ it 'throws an error if the reponse is not within the 200 range' do
35
+ allow(response).to receive(:code).and_return(500)
36
+ allow(HTTParty).to receive(:get).and_return(response)
37
+ expect { session.get '/some_path' }.to raise_error(RuntimeError, 'some_response')
38
+ end
39
+
40
+ it 'returns the response' do
41
+ allow(HTTParty).to receive(:get).and_return(response)
42
+ expect(session.get '/some_path').to eq(response)
43
+ end
44
+ end
45
+ end
@@ -0,0 +1,51 @@
1
+ require 'spec_helper'
2
+
3
+ describe BasicAuthSession do
4
+ describe '#initialize' do
5
+ it 'sets the username instance variable' do
6
+ session = Roqua::CoreApi.basic_auth_session username: 'some_username'
7
+ expect(session.username).to eq('some_username')
8
+ end
9
+
10
+ it 'defaults the username to the ROQUA_CORE_KEY env variable' do
11
+ orginal_env_core_key = ENV['ROQUA_CORE_KEY']
12
+ ENV['ROQUA_CORE_KEY'] = 'some_env_core_key'
13
+ session = Roqua::CoreApi.basic_auth_session
14
+ ENV['ROQUA_CORE_KEY'] = orginal_env_core_key
15
+ expect(session.username).to eq('some_env_core_key')
16
+ end
17
+
18
+ it 'sets the password instance variable' do
19
+ session = Roqua::CoreApi.basic_auth_session password: 'some_password'
20
+ expect(session.password).to eq('some_password')
21
+ end
22
+
23
+ it 'defaults the password to the ROQUA_CORE_SECRET env variable' do
24
+ orginal_env_core_secret = ENV['ROQUA_CORE_SECRET']
25
+ ENV['ROQUA_CORE_SECRET'] = 'some_env_core_secret'
26
+ session = Roqua::CoreApi.basic_auth_session
27
+ ENV['ROQUA_CORE_SECRET'] = orginal_env_core_secret
28
+ expect(session.password).to eq('some_env_core_secret')
29
+ end
30
+
31
+ it 'allows to override the core_host variable' do
32
+ session = Roqua::CoreApi.basic_auth_session core_host: 'some_core_host'
33
+ expect(session.core_host).to eq('some_core_host')
34
+ end
35
+
36
+ it 'defaults the AuthSession core_host ROQUA_CORE_HOST env variable default value' do
37
+ orginal_env_core_host = ENV['ROQUA_CORE_HOST']
38
+ ENV['ROQUA_CORE_HOST'] = 'some_env_core_host'
39
+ session = Roqua::CoreApi.basic_auth_session
40
+ ENV['ROQUA_CORE_HOST'] = orginal_env_core_host
41
+ expect(session.core_host).to eq('some_env_core_host')
42
+ end
43
+ end
44
+
45
+ describe '#basic_auth' do
46
+ it 'returns the username and password variables' do
47
+ session = Roqua::CoreApi.basic_auth_session username: 'some_username', password: 'some_password'
48
+ expect(session.send :basic_auth).to eq(username: 'some_username', password: 'some_password')
49
+ end
50
+ end
51
+ end
@@ -0,0 +1,43 @@
1
+ require 'spec_helper'
2
+
3
+ describe OAuthSession do
4
+ let(:session) { Fabricate :oauth_session }
5
+ let(:response) { double('response', code: 201, parsed_response: 'some_response') }
6
+
7
+ describe '#initialize' do
8
+ it 'sets the access_token instance variable' do
9
+ session = Roqua::CoreApi.oauth_session access_token: 'some_access_token'
10
+ expect(session.access_token).to eq('some_access_token')
11
+ end
12
+
13
+ it 'allows to override the core_host variable' do
14
+ session = Roqua::CoreApi.oauth_session access_token: 'some_access_token', core_host: 'some_core_host'
15
+ expect(session.core_host).to eq('some_core_host')
16
+ end
17
+
18
+ it 'defaults the AuthSession core_host ROQUA_CORE_HOST env variable default value' do
19
+ orginal_env_core_host = ENV['ROQUA_CORE_HOST']
20
+ ENV['ROQUA_CORE_HOST'] = 'some_env_core_host'
21
+ session = Roqua::CoreApi.oauth_session access_token: 'some_access_token'
22
+ ENV['ROQUA_CORE_HOST'] = orginal_env_core_host
23
+ expect(session.core_host).to eq('some_env_core_host')
24
+ end
25
+ end
26
+
27
+ describe '#logout_url' do
28
+ it 'returns the oauth session destroy url with an escaped redirect_to parameter' do
29
+ expect(session.logout_url redirect_to: 'some redirect to')
30
+ .to eq('http://core.dev/session/destroy?token=some_access_token&redirect_to=some+redirect+to')
31
+ end
32
+ end
33
+
34
+ describe 'headers' do
35
+ it 'sets the Authorization header' do
36
+ expect(HTTParty).to receive(:get).with(an_instance_of(String),
37
+ headers: {"Authorization" => "Bearer some_access_token"},
38
+ query: {},
39
+ basic_auth: nil).and_return(response)
40
+ session.get 'some_path'
41
+ end
42
+ end
43
+ end
data/spec/spec_helper.rb CHANGED
@@ -1,13 +1,6 @@
1
1
  require 'rspec'
2
2
  require 'fabrication'
3
-
4
- require 'vcr'
5
- VCR.configure do |c|
6
- c.cassette_library_dir = 'spec/fixtures'
7
- c.allow_http_connections_when_no_cassette = false
8
- c.hook_into :webmock
9
- c.configure_rspec_metadata!
10
- end
11
-
12
3
  require 'roqua-core-api'
13
4
  include Roqua::CoreApi
5
+ include Roqua::CoreApi::Sessions
6
+ include Roqua::CoreApi::Models
metadata CHANGED
@@ -1,125 +1,111 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: roqua-core-api
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.9
4
+ version: 0.0.10
5
5
  platform: ruby
6
6
  authors:
7
7
  - Marten Veldthuis
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2014-02-27 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: httparty
15
15
  requirement: !ruby/object:Gem::Requirement
16
16
  requirements:
17
- - - ~>
17
+ - - "~>"
18
18
  - !ruby/object:Gem::Version
19
19
  version: 0.12.0
20
20
  type: :runtime
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: 0.12.0
27
+ - !ruby/object:Gem::Dependency
28
+ name: active_interaction
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - "~>"
32
+ - !ruby/object:Gem::Version
33
+ version: 1.0.4
34
+ type: :runtime
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - "~>"
39
+ - !ruby/object:Gem::Version
40
+ version: 1.0.4
27
41
  - !ruby/object:Gem::Dependency
28
42
  name: bundler
29
43
  requirement: !ruby/object:Gem::Requirement
30
44
  requirements:
31
- - - ~>
45
+ - - "~>"
32
46
  - !ruby/object:Gem::Version
33
47
  version: '1.0'
34
48
  type: :development
35
49
  prerelease: false
36
50
  version_requirements: !ruby/object:Gem::Requirement
37
51
  requirements:
38
- - - ~>
52
+ - - "~>"
39
53
  - !ruby/object:Gem::Version
40
54
  version: '1.0'
41
55
  - !ruby/object:Gem::Dependency
42
56
  name: rake
43
57
  requirement: !ruby/object:Gem::Requirement
44
58
  requirements:
45
- - - ~>
59
+ - - "~>"
46
60
  - !ruby/object:Gem::Version
47
61
  version: '10.0'
48
62
  type: :development
49
63
  prerelease: false
50
64
  version_requirements: !ruby/object:Gem::Requirement
51
65
  requirements:
52
- - - ~>
66
+ - - "~>"
53
67
  - !ruby/object:Gem::Version
54
68
  version: '10.0'
55
69
  - !ruby/object:Gem::Dependency
56
70
  name: yard
57
71
  requirement: !ruby/object:Gem::Requirement
58
72
  requirements:
59
- - - ~>
73
+ - - "~>"
60
74
  - !ruby/object:Gem::Version
61
75
  version: '0.8'
62
76
  type: :development
63
77
  prerelease: false
64
78
  version_requirements: !ruby/object:Gem::Requirement
65
79
  requirements:
66
- - - ~>
80
+ - - "~>"
67
81
  - !ruby/object:Gem::Version
68
82
  version: '0.8'
69
83
  - !ruby/object:Gem::Dependency
70
84
  name: rspec
71
85
  requirement: !ruby/object:Gem::Requirement
72
86
  requirements:
73
- - - ~>
87
+ - - "~>"
74
88
  - !ruby/object:Gem::Version
75
89
  version: 3.0.0.beta1
76
90
  type: :development
77
91
  prerelease: false
78
92
  version_requirements: !ruby/object:Gem::Requirement
79
93
  requirements:
80
- - - ~>
94
+ - - "~>"
81
95
  - !ruby/object:Gem::Version
82
96
  version: 3.0.0.beta1
83
- - !ruby/object:Gem::Dependency
84
- name: vcr
85
- requirement: !ruby/object:Gem::Requirement
86
- requirements:
87
- - - ~>
88
- - !ruby/object:Gem::Version
89
- version: 2.8.0
90
- type: :development
91
- prerelease: false
92
- version_requirements: !ruby/object:Gem::Requirement
93
- requirements:
94
- - - ~>
95
- - !ruby/object:Gem::Version
96
- version: 2.8.0
97
- - !ruby/object:Gem::Dependency
98
- name: webmock
99
- requirement: !ruby/object:Gem::Requirement
100
- requirements:
101
- - - ~>
102
- - !ruby/object:Gem::Version
103
- version: 1.17.1
104
- type: :development
105
- prerelease: false
106
- version_requirements: !ruby/object:Gem::Requirement
107
- requirements:
108
- - - ~>
109
- - !ruby/object:Gem::Version
110
- version: 1.17.1
111
97
  - !ruby/object:Gem::Dependency
112
98
  name: fabrication
113
99
  requirement: !ruby/object:Gem::Requirement
114
100
  requirements:
115
- - - ~>
101
+ - - "~>"
116
102
  - !ruby/object:Gem::Version
117
103
  version: 2.9.6
118
104
  type: :development
119
105
  prerelease: false
120
106
  version_requirements: !ruby/object:Gem::Requirement
121
107
  requirements:
122
- - - ~>
108
+ - - "~>"
123
109
  - !ruby/object:Gem::Version
124
110
  version: 2.9.6
125
111
  description: Provides authenticated access to Core
@@ -128,10 +114,10 @@ executables: []
128
114
  extensions: []
129
115
  extra_rdoc_files: []
130
116
  files:
131
- - .document
132
- - .gitignore
133
- - .rspec
134
- - .yardopts
117
+ - ".document"
118
+ - ".gitignore"
119
+ - ".rspec"
120
+ - ".yardopts"
135
121
  - ChangeLog.md
136
122
  - Gemfile
137
123
  - Guardfile
@@ -141,25 +127,34 @@ files:
141
127
  - core_api.gemspec
142
128
  - lib/roqua-core-api.rb
143
129
  - lib/roqua/core_api.rb
130
+ - lib/roqua/core_api/create_dossier.rb
131
+ - lib/roqua/core_api/create_dossier_group.rb
132
+ - lib/roqua/core_api/me.rb
144
133
  - lib/roqua/core_api/models.rb
145
134
  - lib/roqua/core_api/models/dossier.rb
146
135
  - lib/roqua/core_api/models/dossier_group.rb
147
136
  - lib/roqua/core_api/models/person.rb
137
+ - lib/roqua/core_api/send_email_to.rb
138
+ - lib/roqua/core_api/send_invite_email.rb
148
139
  - lib/roqua/core_api/sessions.rb
149
- - lib/roqua/core_api/sessions/dossier_group_session.rb
150
- - lib/roqua/core_api/sessions/dossier_session.rb
140
+ - lib/roqua/core_api/sessions/auth_session.rb
141
+ - lib/roqua/core_api/sessions/basic_auth_session.rb
151
142
  - lib/roqua/core_api/sessions/oauth_session.rb
152
- - lib/roqua/core_api/sessions/organization_session.rb
153
143
  - lib/roqua/core_api/version.rb
154
144
  - lib/roqua/omniauth/rails_initializer.rb
155
145
  - lib/roqua/omniauth/strategies/doorkeeper.rb
156
146
  - spec/core_api_spec.rb
157
- - spec/fabricators/dossier_fabricator.rb
158
- - spec/fabricators/dossier_group_fabricator.rb
159
- - spec/fabricators/dossier_group_session_fabricator.rb
160
- - spec/fabricators/organization_session_fabricator.rb
161
- - spec/lib/roqua/core_api/sessions/dossier_group_session_spec.rb
162
- - spec/lib/roqua/core_api/sessions/organization_session_spec.rb
147
+ - spec/fabricators/auth_session_fabricator.rb
148
+ - spec/fabricators/basic_auth_session_fabricator.rb
149
+ - spec/fabricators/oauth_session_fabricator.rb
150
+ - spec/lib/roqua/core_api/create_dossier_group_spec.rb
151
+ - spec/lib/roqua/core_api/create_dossier_spec.rb
152
+ - spec/lib/roqua/core_api/me_spec.rb
153
+ - spec/lib/roqua/core_api/send_email_to_spec.rb
154
+ - spec/lib/roqua/core_api/send_invite_email_spec.rb
155
+ - spec/lib/roqua/core_api/sessions/auth_session_spec.rb
156
+ - spec/lib/roqua/core_api/sessions/basic_auth_session_spec.rb
157
+ - spec/lib/roqua/core_api/sessions/oauth_session_spec.rb
163
158
  - spec/spec_helper.rb
164
159
  homepage: https://github.com/roqua/core/blob/master/core_api/README.markdown
165
160
  licenses:
@@ -171,12 +166,12 @@ require_paths:
171
166
  - lib
172
167
  required_ruby_version: !ruby/object:Gem::Requirement
173
168
  requirements:
174
- - - ! '>='
169
+ - - ">="
175
170
  - !ruby/object:Gem::Version
176
171
  version: '0'
177
172
  required_rubygems_version: !ruby/object:Gem::Requirement
178
173
  requirements:
179
- - - ! '>='
174
+ - - ">="
180
175
  - !ruby/object:Gem::Version
181
176
  version: '0'
182
177
  requirements: []
@@ -187,11 +182,16 @@ specification_version: 4
187
182
  summary: API wrapper gem around Core's API
188
183
  test_files:
189
184
  - spec/core_api_spec.rb
190
- - spec/fabricators/dossier_fabricator.rb
191
- - spec/fabricators/dossier_group_fabricator.rb
192
- - spec/fabricators/dossier_group_session_fabricator.rb
193
- - spec/fabricators/organization_session_fabricator.rb
194
- - spec/lib/roqua/core_api/sessions/dossier_group_session_spec.rb
195
- - spec/lib/roqua/core_api/sessions/organization_session_spec.rb
185
+ - spec/fabricators/auth_session_fabricator.rb
186
+ - spec/fabricators/basic_auth_session_fabricator.rb
187
+ - spec/fabricators/oauth_session_fabricator.rb
188
+ - spec/lib/roqua/core_api/create_dossier_group_spec.rb
189
+ - spec/lib/roqua/core_api/create_dossier_spec.rb
190
+ - spec/lib/roqua/core_api/me_spec.rb
191
+ - spec/lib/roqua/core_api/send_email_to_spec.rb
192
+ - spec/lib/roqua/core_api/send_invite_email_spec.rb
193
+ - spec/lib/roqua/core_api/sessions/auth_session_spec.rb
194
+ - spec/lib/roqua/core_api/sessions/basic_auth_session_spec.rb
195
+ - spec/lib/roqua/core_api/sessions/oauth_session_spec.rb
196
196
  - spec/spec_helper.rb
197
197
  has_rdoc:
@@ -1,31 +0,0 @@
1
- module Roqua
2
- module CoreApi
3
- module Sessions
4
- class DossierGroupSession < OrganizationSession
5
- attr_reader :dossier_group_id
6
-
7
- def initialize(dossier_group_id, organization_id, server_url = ENV["CORE_URL"], auth: nil)
8
- @dossier_group_id = dossier_group_id
9
- super(organization_id, server_url, auth: auth)
10
- end
11
-
12
- # create_dossier(.. , person: { email: 'user@domain.com' })
13
- def create_dossier(attributes)
14
- response = post "/dossiers", person: attributes.delete(:person), dossier: attributes
15
- fail response.inspect unless response.code == 201
16
- Models::Dossier.new(response)
17
- end
18
-
19
- def dossier_session(dossier_id)
20
- DossierSession.new dossier_id, dossier_group_id, organization_id, server_url
21
- end
22
-
23
- private
24
-
25
- def base_url
26
- super + "/dossier_groups/#{dossier_group_id}"
27
- end
28
- end
29
- end
30
- end
31
- end
@@ -1,25 +0,0 @@
1
- module Roqua
2
- module CoreApi
3
- module Sessions
4
- class DossierSession < DossierGroupSession
5
- attr_reader :dossier_id
6
-
7
- def initialize(dossier_id, dossier_group_id, organization_id, server_url = ENV["CORE_URL"])
8
- @dossier_id = dossier_id
9
- super(dossier_group_id, organization_id, server_url)
10
- end
11
-
12
- def send_invite_email
13
- response = post '/send_invite_email'
14
- fail response.inspect unless response.code == 201
15
- end
16
-
17
- private
18
-
19
- def base_url
20
- super + "/dossiers/#{dossier_id}"
21
- end
22
- end
23
- end
24
- end
25
- end
@@ -1,69 +0,0 @@
1
- module Roqua
2
- module CoreApi
3
- module Sessions
4
- # OrganizationSession represents a session which is scoped to a specific organization
5
- # in the Core database. It deals with managing dossier groups and dossiers,
6
- # but only on a anonymous base. It is not allowed to know who these dossiers
7
- # represent.
8
- class OrganizationSession
9
- attr_reader :server_url
10
- attr_reader :organization_id
11
-
12
- # auth = { username: '..', password: '..' }
13
- def initialize(organization_id, server_url = ENV["CORE_URL"], auth:nil)
14
- @server_url = server_url
15
- @organization_id = organization_id
16
- @basic_auth = auth
17
- end
18
-
19
- def create_dossier_group(attributes)
20
- response = post "/dossier_groups", dossier_group: attributes
21
- fail response.inspect unless response.code == 201
22
- Models::DossierGroup.new(response)
23
- end
24
-
25
- def dossier_group_session(dossier_group_id)
26
- DossierGroupSession.new dossier_group_id, organization_id, server_url
27
- end
28
-
29
- # send_email_to(dossier_group.id, dossier.id, person.id,
30
- # subject: '..',
31
- # body: 'Hello %firstname%, ..',
32
- # bcc: 'bcc@test.com',
33
- # content_type: 'text/html',
34
- # mail_type: 'daily_recap')
35
- # Possible variables in the body are:
36
- # %firstname%,
37
- # %lastname%,
38
- # %initials%
39
- def send_email_to(dossier_group_id, dossier_id, person_id, attributes)
40
- response = post "/dossier_groups/#{dossier_group_id}/dossiers/#{dossier_id}/people/#{person_id}/emails",
41
- email: attributes
42
- fail response.inspect unless response.code == 201
43
- response
44
- end
45
-
46
- private
47
-
48
- def get(url, params = {})
49
- # TODO: Handle authentication here
50
- HTTParty.get(server_url + base_url + url + ".json", query: params, basic_auth: @basic_auth)
51
- end
52
-
53
- def post(url, params = {})
54
- # TODO: Handle authentication here
55
- HTTParty.post(server_url + base_url + url + ".json", body: params, basic_auth: @basic_auth)
56
- end
57
-
58
- def put(url, params = {})
59
- # TODO: Handle authentication here
60
- HTTParty.put(server_url + base_url + url + ".json", body: params, basic_auth: @basic_auth)
61
- end
62
-
63
- def base_url
64
- "/api/v1/organizations/#{organization_id}"
65
- end
66
- end
67
- end
68
- end
69
- end
@@ -1,3 +0,0 @@
1
- Fabricator(:dossier, class_name: Roqua::CoreApi::Models::Dossier) do
2
- initialize_with { Roqua::CoreApi::Models::Dossier.new 'id' => 1 }
3
- end
@@ -1,3 +0,0 @@
1
- Fabricator(:dossier_group, class_name: Roqua::CoreApi::Models::DossierGroup) do
2
- initialize_with { Roqua::CoreApi::Models::DossierGroup.new 'id' => 'some_id', 'name' => 'some_name' }
3
- end
@@ -1,5 +0,0 @@
1
- Fabricator(:dossier_group_session, class_name: Roqua::CoreApi::Sessions::DossierGroupSession) do
2
- initialize_with do
3
- Roqua::CoreApi::Sessions::DossierGroupSession.new Fabricate(:dossier_group), 'some_key', 'some_server'
4
- end
5
- end
@@ -1,3 +0,0 @@
1
- Fabricator(:organization_session, class_name: Roqua::CoreApi::Sessions::OrganizationSession) do
2
- initialize_with { Roqua::CoreApi::Sessions::OrganizationSession.new 'some_key', 'some_server' }
3
- end
@@ -1,21 +0,0 @@
1
- require 'spec_helper'
2
-
3
- module Roqua
4
- module CoreApi
5
- module Sessions
6
- describe DossierGroupSession do
7
- let(:session) { Fabricate :dossier_group_session }
8
-
9
- describe '#dossier_session' do
10
- it 'initializes a dossier session with a given dossier_group' do
11
- dossier_id = 'some_dossier_id'
12
- expect(DossierSession).to receive(:new)
13
- .with(dossier_id, session.dossier_group_id,
14
- session.organization_id, session.server_url)
15
- session.dossier_session dossier_id
16
- end
17
- end
18
- end
19
- end
20
- end
21
- end
@@ -1,20 +0,0 @@
1
- require 'spec_helper'
2
-
3
- module Roqua
4
- module CoreApi
5
- module Sessions
6
- describe OrganizationSession do
7
- let(:session) { Fabricate :organization_session }
8
-
9
- describe '#dossier_group_session' do
10
- it 'initializes an dossier_group session with a given dossier_group_id' do
11
- dossier_group_id = 'some_dossier_group_id'
12
- expect(DossierGroupSession).to receive(:new).with(dossier_group_id, session.organization_id,
13
- session.server_url)
14
- session.dossier_group_session dossier_group_id
15
- end
16
- end
17
- end
18
- end
19
- end
20
- end