portfolio_manager 0.2.0 → 0.3.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 9e73d6df7977436db99c3ba6c5d24328d71277f4
4
- data.tar.gz: 8851befec3c8da7cd756bc70a1db701f7c36957d
3
+ metadata.gz: d1af332f66597bbac4ea7ef5e86f9e8218ad5347
4
+ data.tar.gz: '00294142f3d3f47e8c275357c8392ac8e79e6b9d'
5
5
  SHA512:
6
- metadata.gz: 98f0605bd91c41974d843379c0ae1816c479b68c48a42a6a7084fb500309b532b96df464e8578379446d8755933b116f30ed6ca26f3e24d56d5aab7aadf19a0b
7
- data.tar.gz: 2f3b7d75360623a9f7baee86f621b032ea615e9ca8e49c6f08c8d9520775830af570b302efceb512e32c47e5d7f51b31f583fd7707a4cc7542123cd07b8a3b07
6
+ metadata.gz: c2054b5c323b280f07a373827b152f747f0de31e74f6e8c5e7523c46eee8a8d39c10dbfd031392db7b3f0b282f10e2025c4a7e8e15325931cd37f2718f90814a
7
+ data.tar.gz: 9a963132c4eed65d85ab5de8790253165c48f907d9cb9b6a4630a2adee4a185c1f0c936f70b48b091ec69a6b036788258e1e11d64f7102d2663de048710d01b7
@@ -4,6 +4,8 @@ require 'portfolio_manager/rest/data_exchange_settings'
4
4
  require 'portfolio_manager/rest/meter'
5
5
  require 'portfolio_manager/rest/property'
6
6
  require 'portfolio_manager/rest/customer'
7
+ require 'portfolio_manager/rest/connection'
8
+ require 'portfolio_manager/rest/share'
7
9
 
8
10
  module PortfolioManager
9
11
  module REST
@@ -17,6 +19,8 @@ module PortfolioManager
17
19
  include PortfolioManager::REST::Meter
18
20
  include PortfolioManager::REST::Property
19
21
  include PortfolioManager::REST::Customer
22
+ include PortfolioManager::REST::Connection
23
+ include PortfolioManager::REST::Share
20
24
  end
21
25
  end
22
26
  end
@@ -0,0 +1,44 @@
1
+ require 'portfolio_manager/rest/utils'
2
+
3
+ module PortfolioManager
4
+ module REST
5
+ ##
6
+ # Connection services
7
+ # @see https://portfoliomanager.energystar.gov/webservices/home/api/connection
8
+ module Connection
9
+ include PortfolioManager::REST::Utils
10
+ REJECT_NOTE = 'Unfortunately we cannot provide services for you at this time.'.freeze
11
+ ACCEPT_NOTE = 'Your connection request has been verified and accepted.'.freeze
12
+
13
+ ##
14
+ # This web service returns a list of pending customer connection requests.
15
+ # A connection to the customer must be established first before any properties and meters can be shared with you.
16
+ # The list of pending customer connection requests is returned in sets of 20.
17
+ #
18
+ # @see https://portfoliomanager.energystar.gov/webservices/home/api/connection/pendingAccountList/get
19
+ def pending_connections(link = nil)
20
+ link ||= '/connect/account/pending/list'
21
+ perform_get_request(link)
22
+ end
23
+
24
+ ##
25
+ # Accepts/rejects a pending connection request from a specific customer.
26
+ #
27
+ # @see https://portfoliomanager.energystar.gov/webservices/home/api/connection/connect/post
28
+ def connection_request(customer_id, accept = true)
29
+ perform_post_request(
30
+ "/connect/account/#{customer_id}",
31
+ body: connection_response_body(accept)
32
+ )
33
+ end
34
+
35
+ private
36
+
37
+ def connection_response_body(accept)
38
+ action = accept ? 'Accept' : 'Reject'
39
+ note = accept ? ACCEPT_NOTE : REJECT_NOTE
40
+ request_response_xml(action, note)
41
+ end
42
+ end
43
+ end
44
+ end
@@ -21,7 +21,7 @@ module PortfolioManager
21
21
  #
22
22
  # https://portfoliomanager.energystar.gov/webservices/home/api/account/customer/get
23
23
  def customer(customer_id)
24
- perform_get_request("/cutomer/#{customer_id}")
24
+ perform_get_request("/customer/#{customer_id}")
25
25
  end
26
26
  end
27
27
  end
@@ -9,6 +9,7 @@ module PortfolioManager
9
9
  BASE_URL = 'https://portfoliomanager.energystar.gov'
10
10
  LIVE_PATH = '/ws'
11
11
  TEST_PATH = '/wstest'
12
+ CONTENT_TYPE = 'application/xml'
12
13
 
13
14
  attr_reader :client, :path, :request_method, :parser
14
15
  attr_accessor :options
@@ -19,7 +20,7 @@ module PortfolioManager
19
20
  # @param [Hash] options used for creating query params and headers
20
21
  def initialize(client, request_method, path, options)
21
22
  @client = client
22
- @path = path
23
+ @path = api_environment + path
23
24
  @options = options
24
25
  @request_method = request_method
25
26
  @conn = Hurley::Client.new(BASE_URL)
@@ -38,7 +39,14 @@ module PortfolioManager
38
39
  ##
39
40
  # @return [String]
40
41
  def response_body
41
- @conn.public_send(request_method, api_environment + path).body
42
+ case request_method
43
+ when :get
44
+ @conn.get(path).body
45
+ when :post
46
+ @conn.post(path, options[:body], CONTENT_TYPE).body
47
+ else
48
+ raise ArgumentError, '#{request_method} is not yet implemented'
49
+ end
42
50
  end
43
51
 
44
52
  def setup_client
@@ -0,0 +1,62 @@
1
+ require 'portfolio_manager/rest/utils'
2
+
3
+ module PortfolioManager
4
+ module REST
5
+ ##
6
+ # Share services
7
+ # @see https://portfoliomanager.energystar.gov/webservices/home/api/connection
8
+ module Share
9
+ include PortfolioManager::REST::Utils
10
+
11
+ ##
12
+ # Returns a list of property or meter share requests that are pending.
13
+ # These property share requests belong to customers that you are already connected to.
14
+ # The list of pending property share requests is returned in sets of 20.
15
+ #
16
+ # @see https://portfoliomanager.energystar.gov/webservices/home/api/connection/pendingPropertyList/get
17
+ # @see https://portfoliomanager.energystar.gov/webservices/home/api/connection/pendingMeterList/get
18
+ def pending_meter_shares(link = nil)
19
+ pending_shares(:meter, link)
20
+ end
21
+
22
+ def pending_property_shares(link = nil)
23
+ pending_shares(:property, link)
24
+ end
25
+
26
+ ##
27
+ # Accepts/rejects a pending share request for a specific property or meter.
28
+ #
29
+ # @see https://portfoliomanager.energystar.gov/webservices/home/api/connection/shareProperty/post
30
+ # @see https://portfoliomanager.energystar.gov/webservices/home/api/connection/shareMeter/post
31
+ def meter_share_request(meter_id, accept = true)
32
+ share_request(meter_id, :meter, accept)
33
+ end
34
+
35
+ def property_share_request(property_id, accept = true)
36
+ share_request(property_id, :property, accept)
37
+ end
38
+
39
+ private
40
+
41
+ def pending_shares(resource_name, link)
42
+ link ||= "/share/#{resource_name}/pending/list"
43
+ perform_get_request(link)
44
+ end
45
+
46
+ def share_request(resource_id, resource_name, accept = true)
47
+ perform_post_request(
48
+ "/share/#{resource_name}/#{resource_id}",
49
+ body: share_response_body(accept, resource_name)
50
+ )
51
+ end
52
+
53
+ def share_response_body(accept, resource_name)
54
+ accept_note = "Your #{resource_name} sharing request has been verified and accepted."
55
+ reject_note = "Your #{resource_name} sharing request has been rejected."
56
+ action = accept ? 'Accept' : 'Reject'
57
+ note = accept ? accept_note : reject_note
58
+ request_response_xml(action, note)
59
+ end
60
+ end
61
+ end
62
+ end
@@ -14,6 +14,13 @@ module PortfolioManager
14
14
  perform_request(:get, path, options)
15
15
  end
16
16
 
17
+ ##
18
+ # @param [String] path
19
+ # @param [Hash] options
20
+ def perform_post_request(path, options = {})
21
+ perform_request(:post, path, options)
22
+ end
23
+
17
24
  ##
18
25
  # @param [Symbol, String] request_method
19
26
  # @param [String] path
@@ -26,6 +33,15 @@ module PortfolioManager
26
33
  options
27
34
  ).perform
28
35
  end
36
+
37
+ def request_response_xml(action, note)
38
+ builder = Nokogiri::XML::Builder.new do |xml|
39
+ xml.sharingResponse {
40
+ xml.action action
41
+ xml.note note
42
+ }
43
+ end.to_xml
44
+ end
29
45
  end
30
46
  end
31
47
  end
@@ -1,3 +1,3 @@
1
1
  module PortfolioManager
2
- VERSION = '0.2.0'
2
+ VERSION = '0.3.0'
3
3
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: portfolio_manager
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.2.0
4
+ version: 0.3.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Jack Reed
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2017-05-30 00:00:00.000000000 Z
11
+ date: 2017-08-17 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: hurley
@@ -115,11 +115,13 @@ files:
115
115
  - lib/portfolio_manager/rest/api.rb
116
116
  - lib/portfolio_manager/rest/building.rb
117
117
  - lib/portfolio_manager/rest/client.rb
118
+ - lib/portfolio_manager/rest/connection.rb
118
119
  - lib/portfolio_manager/rest/customer.rb
119
120
  - lib/portfolio_manager/rest/data_exchange_settings.rb
120
121
  - lib/portfolio_manager/rest/meter.rb
121
122
  - lib/portfolio_manager/rest/property.rb
122
123
  - lib/portfolio_manager/rest/request.rb
124
+ - lib/portfolio_manager/rest/share.rb
123
125
  - lib/portfolio_manager/rest/utils.rb
124
126
  - lib/portfolio_manager/version.rb
125
127
  - portfolio_manager.gemspec