aemo 0.1.27 → 0.1.28

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: b1fd45c318e16565e909a6d11a72da6269d66378
4
- data.tar.gz: 6fd484904e983d654a81a3432fe2c98b2f9f4b4e
3
+ metadata.gz: a7cfd209892c3e31b002bd98258c0f45c86a703d
4
+ data.tar.gz: 89da4a8819f3e2f23bb0df135012b021d9e7104e
5
5
  SHA512:
6
- metadata.gz: 2574715d16d64abc06e9cf641685f8fd72f7b70bf4e38ff405d2611bf12fb3daa8d7cff57fdd9d504ea04e181115e4ef8ecfa02ffadc0fb1415267180aceeff6
7
- data.tar.gz: e355c2c6a20ceb7f310f230c4dd8304aa54d7fd993b2e2095bd896c9fceaa0f012ea17f38be41cf29e62dc2705811bf43c3cb1cf7eb1ff85f4ea4bb4990ae9fe
6
+ metadata.gz: ae9be88e2ce60f53d7742b4f6b93b154b043c5ccc0e43808e597fa9d6ddc2e1d44dac951662ba1d0c87f207d982b6443c68ce19e2f873517ae97b3e08b2b697c
7
+ data.tar.gz: c8723d45670118e9fc7b6e94de0c43cef8b66a3d5795de6a9bb29cbf164f4d9fe3d2261ae6c9557ba8b9b7f53c898c404b49d05a6efb51d6589a90a0c679a5dc
@@ -1,7 +1,7 @@
1
1
  module AEMO
2
2
  class Region
3
- DISPATCH_TYPE = ['Generator','Load Norm Off','Network Service Provider']
4
- CATEGORY = ['Market','Non-Market']
5
- CLASSIFICATION = ['Scheduled','Semi-Scheduled','Non-Scheduled']
3
+ DISPATCH_TYPE = ['Generator', 'Load Norm Off', 'Network Service Provider'].freeze
4
+ CATEGORY = ['Market', 'Non-Market'].freeze
5
+ CLASSIFICATION = ['Scheduled', 'Semi-Scheduled', 'Non-Scheduled'].freeze
6
6
  end
7
- end
7
+ end
data/lib/aemo/market.rb CHANGED
@@ -1,42 +1,45 @@
1
1
  module AEMO
2
+ # AEMO::Market
3
+ #
4
+ # @author Joel Courtney
5
+ # @abstract
6
+ # @since 0.1.0
2
7
  module Market
3
8
  include HTTParty
4
9
  base_uri 'www.nemweb.com.au'
5
10
 
6
- def self.current_dispatch(region)
7
- response = AEMO::Market.get "/mms.GRAPHS/GRAPHS/GRAPH_5#{region}1.csv"
8
- values = AEMO::Market.parse_response(response)
9
- values
10
- end
11
+ # Class Methods
12
+ class << self
13
+ def current_dispatch(region)
14
+ response = get "/mms.GRAPHS/GRAPHS/GRAPH_5#{region}1.csv"
15
+ values = parse_response(response)
16
+ values
17
+ end
11
18
 
12
- def self.current_trading(region)
13
- response = AEMO::Market.get "/mms.GRAPHS/GRAPHS/GRAPH_30#{region}1.csv"
14
- values = AEMO::Market.parse_response(response)
15
- values
16
- end
19
+ def current_trading(region)
20
+ response = get "/mms.GRAPHS/GRAPHS/GRAPH_30#{region}1.csv"
21
+ values = parse_response(response)
22
+ values
23
+ end
17
24
 
18
- # ######### #
19
25
  protected
20
- # ######### #
21
26
 
22
- def self.parse_response(response)
23
- values = []
24
- if response.response.code == '200'
25
- CSV.parse(response.body, :headers => true, :converters => :numeric) do |row|
26
- puts "row(#{row.class})(respond_to?:#{row.respond_to?(:to_hash)}): #{row.inspect}"
27
- if row.respond_to?(:to_h)
28
- row = row.to_h
29
- elsif row.respond_to?(:to_hash)
30
- row = row.to_hash
31
- else
32
- raise NoMethodError, "cannot convert #{row.class} to Hash"
27
+ def parse_response(response)
28
+ values = []
29
+ if response.response.code == '200'
30
+ CSV.parse(response.body, headers: true, converters: :numeric) do |row|
31
+ if row.respond_to?(:to_h)
32
+ row = row.to_h
33
+ elsif row.respond_to?(:to_hash)
34
+ row = row.to_hash
35
+ else
36
+ raise NoMethodError, "cannot convert #{row.class} to Hash"
37
+ end
38
+ values.push ::AEMO::Market::Interval.new(row['SETTLEMENTDATE'], row)
33
39
  end
34
- values.push AEMO::Market::Interval.new(row['SETTLEMENTDATE'],row)
35
40
  end
41
+ values
36
42
  end
37
- values
38
43
  end
39
-
40
44
  end
41
-
42
45
  end
@@ -1,26 +1,31 @@
1
1
  module AEMO
2
2
  module Market
3
+ # AEMO::Market::Interval
4
+ #
5
+ # @author Joel Courtney
6
+ # @abstract
7
+ # @since 0.1.0
3
8
  class Interval
4
9
  INTERVALS = {
5
- :trading => 'Trading',
6
- :dispatch => 'Dispatch'
7
- }
8
-
10
+ trading: 'Trading',
11
+ dispatch: 'Dispatch'
12
+ }.freeze
13
+
9
14
  attr_accessor :datetime, :region, :total_demand, :rrp, :period_type
10
-
11
- # @param datetime [Time]
15
+
16
+ # @param datetime [Time]
12
17
  # @param options [Hash] Hash of optional data values
13
18
  # @return [AEMO::Market::Interval]
14
- def initialize(datetime,options={})
19
+ def initialize(datetime, options = {})
15
20
  @datetime = Time.parse("#{datetime} +1000")
16
21
  @region = options['REGION']
17
22
  @total_demand = options['TOTALDEMAND']
18
23
  @rrp = options['RRP']
19
24
  @period_type = options['PERIODTYPE']
20
25
  end
21
-
26
+
22
27
  # Instance Variable Getters
23
-
28
+
24
29
  # All AEMO Data operates in Australian Eastern Standard Time
25
30
  # All AEMO Data aggregates to the trailing edge of the period (this makes it difficult to do daily aggregations :( )
26
31
  # @param trailing_edge [Boolean] selection of either the trailing edge of the period or the rising edge of the period for the date time
@@ -30,35 +35,35 @@ module AEMO
30
35
  # If the datetime requested is the trailing edge, offset as per interval requirement
31
36
  unless trailing_edge
32
37
  # This is for dispatch intervals of five minutes
33
- if self.is_dispatch?
38
+ if dispatch?
34
39
  t -= 5 * 60
35
- elsif self.is_trading?
40
+ elsif trading?
36
41
  t -= 30 * 60
37
42
  end
38
43
  end
39
44
  t
40
45
  end
41
-
42
- # @return [Time] the time of the
46
+
47
+ # @return [Time] the time of the
43
48
  def interval_length
44
49
  Time.at(300)
45
50
  end
46
-
51
+
47
52
  # @return [Symbol] :dispatch or :trading
48
53
  def interval_type
49
- self.is_dispatch? ? :dispatch : :trading
54
+ dispatch? ? :dispatch : :trading
50
55
  end
51
-
56
+
52
57
  # @return [Boolean] returns true if the interval type is dispatch
53
- def is_dispatch?
58
+ def dispatch?
54
59
  @period_type.nil? || @period_type.empty?
55
60
  end
56
-
61
+
57
62
  # @return [Boolean] returns true if the interval type is trading
58
- def is_trading?
59
- !(self.is_dispatch?)
63
+ def trading?
64
+ !dispatch?
60
65
  end
61
-
66
+
62
67
  # @return [Float] the value of the interval in Australian Dollars
63
68
  def value
64
69
  @value ||= Float::NAN
@@ -67,7 +72,6 @@ module AEMO
67
72
  end
68
73
  @value
69
74
  end
70
-
71
75
  end
72
76
  end
73
- end
77
+ end
data/lib/aemo/msats.rb CHANGED
@@ -5,14 +5,18 @@ require 'nokogiri'
5
5
  require 'digest/sha1'
6
6
 
7
7
  module AEMO
8
-
8
+ # AEMO::MSATS
9
+ #
10
+ # @author Joel Courtney
11
+ # @abstract
12
+ # @since 0.1.0
9
13
  class MSATS
10
14
  # Globally set request headers
11
15
  HEADERS = {
12
- 'User-Agent' => "Ruby.AEMO.MSATS.Api",
16
+ 'User-Agent' => 'Ruby.AEMO.MSATS.Api',
13
17
  'Accept' => 'text/xml',
14
18
  'Content-Type' => 'text/xml'
15
- }
19
+ }.freeze
16
20
 
17
21
  # We like to party
18
22
  include HTTParty
@@ -25,233 +29,237 @@ module AEMO
25
29
  # Where we like to party
26
30
  base_uri 'https://msats.prod.nemnet.net.au/msats/ws/'
27
31
 
28
- def initialize(options = {})
29
- @@auth = {username: nil, password: nil}
30
-
31
- @@auth[:username] = options[:username] if options[:username].is_a?(String)
32
- @@auth[:password] = options[:password] if options[:password].is_a?(String)
33
- @@participant_id = options[:participant_id] if options[:participant_id].is_a?(String)
34
- end
35
-
36
- # Single NMI Master (C4) Report
37
- # /C4/PARTICIPANT_IDENTIFIER?transactionId=XXX&nmi=XXX&checksum=X&type=XXX&reason=XXX
38
- #
39
- # @param [String,AEMO::NMI] nmi the NMI to run the master report against
40
- # @param [Date,String] from_date the from date for the master report
41
- # @param [Date,String] to_date the from date for the master report
42
- # @return [Hash] A hashed view of the NMI Standing Data for a given NMI
43
- def self.c4(nmi, from_date,to_date,as_at_date, options = {})
44
-
45
- nmi = AEMO::NMI.new(nmi) if nmi.is_a?(String)
46
- from_date = Date.parse(from_date) if from_date.is_a?(String)
47
- to_date = Date.parse(to_date) if to_date.is_a?(String)
48
- as_at_date = Date.parse(as_at_date) if as_at_date.is_a?(String)
49
-
50
- options[:participantId] ||= nil
51
- options[:roleId] ||= nil
52
- options[:inittransId] ||= nil
53
-
54
- query = {
55
- transactionId: transaction_id,
56
- NMI: nmi.nmi, # Note: AEMO has case sensitivity but no consistency across requests.
57
- fromDate: from_date,
58
- toDate: to_date,
59
- asatDate: as_at_date,
60
- participantId: @@participant_id,
61
- roleId: options[:role_id],
62
- inittransId: options[:init_trans_id],
63
- }
64
-
65
- response = self.get( "/C4/#{@@participant_id}", basic_auth: @@auth, headers: { 'Accept' => 'text/xml', 'Content-Type' => 'text/xml'}, query: query, verify: (options[:verify_ssl] != false) )
66
- if response.response.code != '200'
67
- response
68
- else
69
- response.parsed_response['aseXML']['Transactions']['Transaction']['ReportResponse']['ReportResults']
32
+ # Class Methods
33
+ class << self
34
+ attr_accessor :auth
35
+ attr_accessor :participant_id
36
+
37
+ # Single NMI Master (C4) Report
38
+ # /C4/PARTICIPANT_IDENTIFIER?transactionId=XXX&nmi=XXX&checksum=X&type=XXX&reason=XXX
39
+ #
40
+ # @param [String, AEMO::NMI] nmi the NMI to run the master report against
41
+ # @param [Date, String] from_date the from date for the master report
42
+ # @param [Date, String] to_date the from date for the master report
43
+ # @return [Hash] A hashed view of the NMI Standing Data for a given NMI
44
+ def c4(nmi, from_date, to_date, as_at_date, options = {})
45
+ nmi = AEMO::NMI.new(nmi) if nmi.is_a?(String)
46
+ from_date = Date.parse(from_date) if from_date.is_a?(String)
47
+ to_date = Date.parse(to_date) if to_date.is_a?(String)
48
+ as_at_date = Date.parse(as_at_date) if as_at_date.is_a?(String)
49
+
50
+ options[:participantId] ||= nil
51
+ options[:roleId] ||= nil
52
+ options[:inittransId] ||= nil
53
+
54
+ query = {
55
+ transactionId: transaction_id,
56
+ # Note: AEMO has case sensitivity but no consistency across requests.
57
+ NMI: nmi.nmi,
58
+ fromDate: from_date,
59
+ toDate: to_date,
60
+ asatDate: as_at_date,
61
+ participantId: @participant_id,
62
+ roleId: options[:role_id],
63
+ inittransId: options[:init_trans_id]
64
+ }
65
+
66
+ response = get("/C4/#{@participant_id}", basic_auth: @auth, headers: HEADERS, query: query, verify: (options[:verify_ssl] != false))
67
+ if response.response.code != '200'
68
+ response
69
+ else
70
+ response.parsed_response['aseXML']['Transactions']['Transaction']['ReportResponse']['ReportResults']
71
+ end
70
72
  end
71
- end
72
73
 
73
- # MSATS Limits
74
- # /MSATSLimits/PARTICIPANT_IDENTIFIER?transactionId=XXX
75
- #
76
- # @return [Hash] The report results from the MSATS Limits web service query
77
- def self.msats_limits(options={})
78
- query = {
79
- transactionId: transaction_id,
80
- }
81
- response = self.get( "/MSATSLimits/#{@@participant_id}", basic_auth: @@auth, headers: { 'Accept' => 'text/xml', 'Content-Type' => 'text/xml'}, query: query, verify: (options[:verify_ssl] != false) )
82
- if response.response.code != '200'
83
- response
84
- else
85
- response.parsed_response['aseXML']['Transactions']['Transaction']['ReportResponse']['ReportResults']
74
+ # MSATS Limits
75
+ # /MSATSLimits/PARTICIPANT_IDENTIFIER?transactionId=XXX
76
+ #
77
+ # @return [Hash] The report results from the MSATS Limits web service query
78
+ def msats_limits(options = {})
79
+ query = {
80
+ transactionId: transaction_id
81
+ }
82
+ response = get("/MSATSLimits/#{@participant_id}", basic_auth: @auth, headers: HEADERS, query: query, verify: (options[:verify_ssl] != false))
83
+ if response.response.code != '200'
84
+ response
85
+ else
86
+ response.parsed_response['aseXML']['Transactions']['Transaction']['ReportResponse']['ReportResults']
87
+ end
86
88
  end
87
- end
88
-
89
- # NMI Discovery - By Delivery Point Identifier
90
- #
91
- # @param [String] jurisdiction_code The Jurisdiction Code
92
- # @param [Integer] delivery_point_identifier Delivery Point Identifier
93
- # @return [Hash] The response
94
- def self.nmi_discovery_by_delivery_point_identifier(jurisdiction_code,delivery_point_identifier,options={})
95
- raise ArgumentError, 'jurisdiction_code is not valid' unless %w(ACT NEM NSW QLD SA VIC TAS).include?(jurisdiction_code)
96
- raise ArgumentError, 'delivery_point_identifier is not valid' unless delivery_point_identifier.respond_to?("to_i")
97
- raise ArgumentError, 'delivery_point_identifier is not valid' if( delivery_point_identifier.to_i < 10000000 || delivery_point_identifier.to_i > 99999999)
98
89
 
99
- query = {
100
- transactionId: transaction_id,
101
- jurisdictionCode: jurisdiction_code,
102
- deliveryPointIdentifier: delivery_point_identifier.to_i
103
- }
104
-
105
- response = self.get( "/NMIDiscovery/#{@@participant_id}", basic_auth: @@auth, headers: { 'Accept' => 'text/xml', 'Content-Type' => 'text/xml'}, query: query, verify: (options[:verify_ssl] != false) )
106
- if response.response.code != '200'
107
- response
108
- else
109
- response.parsed_response['aseXML']['Transactions']['Transaction']['NMIDiscoveryResponse']['NMIStandingData']
90
+ # NMI Discovery - By Delivery Point Identifier
91
+ #
92
+ # @param [String] jurisdiction_code The Jurisdiction Code
93
+ # @param [Integer] delivery_point_identifier Delivery Point Identifier
94
+ # @return [Hash] The response
95
+ def nmi_discovery_by_delivery_point_identifier(jurisdiction_code, delivery_point_identifier, options = {})
96
+ raise ArgumentError, 'jurisdiction_code is not valid' unless %w(ACT NEM NSW QLD SA VIC TAS).include?(jurisdiction_code)
97
+ raise ArgumentError, 'delivery_point_identifier is not valid' unless delivery_point_identifier.respond_to?('to_i')
98
+ raise ArgumentError, 'delivery_point_identifier is not valid' if delivery_point_identifier.to_i < 10_000_000 || delivery_point_identifier.to_i > 99_999_999
99
+
100
+ query = {
101
+ transactionId: transaction_id,
102
+ jurisdictionCode: jurisdiction_code,
103
+ deliveryPointIdentifier: delivery_point_identifier.to_i
104
+ }
105
+
106
+ response = get("/NMIDiscovery/#{@participant_id}", basic_auth: @auth, headers: HEADERS, query: query, verify: (options[:verify_ssl] != false))
107
+ if response.response.code != '200'
108
+ response
109
+ else
110
+ response.parsed_response['aseXML']['Transactions']['Transaction']['NMIDiscoveryResponse']['NMIStandingData']
111
+ end
110
112
  end
111
- end
112
-
113
- # NMI Discovery - By Meter Serial Numner
114
- #
115
- # @param [String] jurisdiction_code The Jurisdiction Code
116
- # @param [Integer] meter_serial_number The meter's serial number
117
- # @return [Hash] The response
118
- def self.nmi_discovery_by_meter_serial_number(jurisdiction_code,meter_serial_number,options={})
119
- raise ArgumentError, 'jurisdiction_code is not valid' unless %w(ACT NEM NSW QLD SA VIC TAS).include?(jurisdiction_code)
120
113
 
121
- query = {
122
- transactionId: transaction_id,
123
- jurisdictionCode: jurisdiction_code,
124
- meterSerialNumber: meter_serial_number.to_i
125
- }
126
-
127
- response = self.get( "/NMIDiscovery/#{@@participant_id}", basic_auth: @@auth, headers: { 'Accept' => 'text/xml', 'Content-Type' => 'text/xml'}, query: query, verify: (options[:verify_ssl] != false) )
128
- if response.response.code != '200'
129
- response
130
- else
131
- response.parsed_response['aseXML']['Transactions']['Transaction']['NMIDiscoveryResponse']['NMIStandingData']
114
+ # NMI Discovery - By Meter Serial Numner
115
+ #
116
+ # @param [String] jurisdiction_code The Jurisdiction Code
117
+ # @param [Integer] meter_serial_number The meter's serial number
118
+ # @return [Hash] The response
119
+ def nmi_discovery_by_meter_serial_number(jurisdiction_code, meter_serial_number, options = {})
120
+ raise ArgumentError, 'jurisdiction_code is not valid' unless %w(ACT NEM NSW QLD SA VIC TAS).include?(jurisdiction_code)
121
+
122
+ query = {
123
+ transactionId: transaction_id,
124
+ jurisdictionCode: jurisdiction_code,
125
+ meterSerialNumber: meter_serial_number.to_i
126
+ }
127
+
128
+ response = get("/NMIDiscovery/#{@participant_id}", basic_auth: @auth, headers: HEADERS, query: query, verify: (options[:verify_ssl] != false))
129
+ if response.response.code != '200'
130
+ response
131
+ else
132
+ response.parsed_response['aseXML']['Transactions']['Transaction']['NMIDiscoveryResponse']['NMIStandingData']
133
+ end
132
134
  end
133
- end
134
-
135
- # NMI Discovery - By Address
136
- #
137
- # @param [String] jurisdiction_code The Jurisdiction Code
138
- # @param [Integer] meter_serial_number The meter's serial number
139
- # @return [Hash] The response
140
- def self.nmi_discovery_by_address(jurisdiction_code,options = {})
141
- raise ArgumentError, 'jurisdiction_code is not valid' unless %w(ACT NEM NSW QLD SA VIC TAS).include?(jurisdiction_code)
142
-
143
- options[:building_or_property_name] ||= nil
144
- options[:location_descriptor] ||= nil
145
- options[:lot_number] ||= nil
146
- options[:flat_or_unit_number] ||= nil
147
- options[:flat_or_unit_type] ||= nil
148
- options[:floor_or_level_number] ||= nil
149
- options[:floor_or_level_type] ||= nil
150
- options[:house_number] ||= nil
151
- options[:house_number_suffix] ||= nil
152
- options[:street_name] ||= nil
153
- options[:street_suffix] ||= nil
154
- options[:street_type] ||= nil
155
- options[:suburb_or_place_or_locality] ||= nil
156
- options[:postcode] ||= nil
157
- options[:state_or_territory] ||= jurisdiction_code
158
135
 
159
- query = {
160
- transactionId: transaction_id,
161
- jurisdictionCode: jurisdiction_code,
162
- buildingOrPropertyName: options[:building_or_property_name],
163
- locationDescriptor: options[:location_descriptor],
164
- lotNumber: options[:lot_number],
165
- flatOrUnitNumber: options[:flat_or_unit_number],
166
- flatOrUnitType: options[:flat_or_unit_type],
167
- floorOrLevelNumber: options[:floor_or_level_number],
168
- floorOrLevelType: options[:floor_or_level_type],
169
- houseNumber: options[:house_number],
170
- houseNumberSuffix: options[:house_number_suffix],
171
- streetName: options[:street_name],
172
- streetSuffix: options[:street_suffix],
173
- streetType: options[:street_type],
174
- suburbOrPlaceOrLocality: options[:suburb_or_place_or_locality],
175
- postcode: options[:postcode],
176
- stateOrTerritory: options[:state_or_territory]
177
- }
178
-
179
- response = self.get( "/NMIDiscovery/#{@@participant_id}", basic_auth: @@auth, headers: { 'Accept' => 'text/xml', 'Content-Type' => 'text/xml'}, query: query, verify: (options[:verify_ssl] != false) )
180
- if response.response.code != '200'
181
- response
182
- else
183
- myresponse = response.parsed_response['aseXML']['Transactions']['Transaction']['NMIDiscoveryResponse']['NMIStandingData']
184
- myresponse.is_a?(Hash)? [ myresponse ] : myresponse
136
+ # NMI Discovery - By Address
137
+ #
138
+ # @param [String] jurisdiction_code The Jurisdiction Code
139
+ # @param [Integer] meter_serial_number The meter's serial number
140
+ # @return [Hash] The response
141
+ def nmi_discovery_by_address(jurisdiction_code, options = {})
142
+ raise ArgumentError, 'jurisdiction_code is not valid' unless %w(ACT NEM NSW QLD SA VIC TAS).include?(jurisdiction_code)
143
+
144
+ options[:building_or_property_name] ||= nil
145
+ options[:location_descriptor] ||= nil
146
+ options[:lot_number] ||= nil
147
+ options[:flat_or_unit_number] ||= nil
148
+ options[:flat_or_unit_type] ||= nil
149
+ options[:floor_or_level_number] ||= nil
150
+ options[:floor_or_level_type] ||= nil
151
+ options[:house_number] ||= nil
152
+ options[:house_number_suffix] ||= nil
153
+ options[:street_name] ||= nil
154
+ options[:street_suffix] ||= nil
155
+ options[:street_type] ||= nil
156
+ options[:suburb_or_place_or_locality] ||= nil
157
+ options[:postcode] ||= nil
158
+ options[:state_or_territory] ||= jurisdiction_code
159
+
160
+ query = {
161
+ transactionId: transaction_id,
162
+ jurisdictionCode: jurisdiction_code,
163
+ buildingOrPropertyName: options[:building_or_property_name],
164
+ locationDescriptor: options[:location_descriptor],
165
+ lotNumber: options[:lot_number],
166
+ flatOrUnitNumber: options[:flat_or_unit_number],
167
+ flatOrUnitType: options[:flat_or_unit_type],
168
+ floorOrLevelNumber: options[:floor_or_level_number],
169
+ floorOrLevelType: options[:floor_or_level_type],
170
+ houseNumber: options[:house_number],
171
+ houseNumberSuffix: options[:house_number_suffix],
172
+ streetName: options[:street_name],
173
+ streetSuffix: options[:street_suffix],
174
+ streetType: options[:street_type],
175
+ suburbOrPlaceOrLocality: options[:suburb_or_place_or_locality],
176
+ postcode: options[:postcode],
177
+ stateOrTerritory: options[:state_or_territory]
178
+ }
179
+
180
+ response = get("/NMIDiscovery/#{@participant_id}", basic_auth: @auth, headers: HEADERS, query: query, verify: (options[:verify_ssl] != false))
181
+ if response.response.code != '200'
182
+ response
183
+ else
184
+ myresponse = response.parsed_response['aseXML']['Transactions']['Transaction']['NMIDiscoveryResponse']['NMIStandingData']
185
+ myresponse.is_a?(Hash) ? [myresponse] : myresponse
186
+ end
185
187
  end
186
- end
187
188
 
188
- # NMI Detail
189
- # /NMIDetail/PARTICIPANT_IDENTIFIER?transactionId=XXX&nmi=XXX&checksum=X&type=XXX&reason=XXX
190
- #
191
- # @return [Hash] A hashed view of the NMI Standing Data for a given NMI
192
- def self.nmi_detail(nmi, options = {})
193
- if nmi.is_a?(String)
194
- nmi = AEMO::NMI.new(nmi)
189
+ # NMI Detail
190
+ # /NMIDetail/PARTICIPANT_IDENTIFIER?transactionId=XXX&nmi=XXX&checksum=X&type=XXX&reason=XXX
191
+ #
192
+ # @return [Hash] A hashed view of the NMI Standing Data for a given NMI
193
+ def nmi_detail(nmi, options = {})
194
+ nmi = AEMO::NMI.new(nmi) if nmi.is_a?(String)
195
+
196
+ options[:type] ||= nil
197
+ options[:reason] ||= nil
198
+
199
+ query = {
200
+ transactionId: transaction_id,
201
+ nmi: nmi.nmi,
202
+ checksum: nmi.checksum,
203
+ type: options[:type],
204
+ reason: options[:reason]
205
+ }
206
+
207
+ response = get("/NMIDetail/#{@participant_id}", basic_auth: @auth, headers: HEADERS, query: query, verify: (options[:verify_ssl] != false))
208
+ if response.response.code != '200'
209
+ response
210
+ else
211
+ response.parsed_response['aseXML']['Transactions']['Transaction']['NMIStandingDataResponse']['NMIStandingData']
212
+ end
195
213
  end
196
- options[:type] ||= nil
197
- options[:reason] ||= nil
198
-
199
- query = {
200
- transactionId: transaction_id,
201
- nmi: nmi.nmi,
202
- checksum: nmi.checksum,
203
- type: options[:type],
204
- reason: options[:reason]
205
- }
206
214
 
207
- response = self.get( "/NMIDetail/#{@@participant_id}", basic_auth: @@auth, headers: { 'Accept' => 'text/xml', 'Content-Type' => 'text/xml'}, query: query, verify: (options[:verify_ssl] != false) )
208
- if response.response.code != '200'
209
- response
210
- else
211
- response.parsed_response['aseXML']['Transactions']['Transaction']['NMIStandingDataResponse']['NMIStandingData']
215
+ # Participant System Status
216
+ # /ParticipantSystemStatus/PARTICIPANT_IDENTIFIER?transactionId=XXX
217
+ #
218
+ # @return [Hash] The report results from the Participant System Status web service query
219
+ def system_status(options = {})
220
+ query = {
221
+ transactionId: transaction_id
222
+ }
223
+ response = get("/ParticipantSystemStatus/#{@participant_id}", basic_auth: @auth, headers: HEADERS, query: query, verify: (options[:verify_ssl] != false))
224
+ if response.response.code != '200'
225
+ response
226
+ else
227
+ response.parsed_response['aseXML']['Transactions']['Transaction']['ReportResponse']['ReportResults']
228
+ end
212
229
  end
213
- end
214
230
 
215
- # Participant System Status
216
- # /ParticipantSystemStatus/PARTICIPANT_IDENTIFIER?transactionId=XXX
217
- #
218
- # @return [Hash] The report results from the Participant System Status web service query
219
- def self.system_status(options={})
220
- query = {
221
- transactionId: transaction_id,
222
- }
223
- response = self.get( "/ParticipantSystemStatus/#{@@participant_id}", basic_auth: @@auth, headers: { 'Accept' => 'text/xml', 'Content-Type' => 'text/xml'}, query: query, verify: (options[:verify_ssl] != false) )
224
- if response.response.code != '200'
225
- response
226
- else
227
- response.parsed_response['aseXML']['Transactions']['Transaction']['ReportResponse']['ReportResults']
231
+ # Sets the authentication credentials in a class variable.
232
+ #
233
+ # @param [String] email cl.ly email
234
+ # @param [String] password cl.ly password
235
+ # @return [Hash] authentication credentials
236
+ def authorize(participant_id, username, password)
237
+ @participant_id = participant_id
238
+ @auth = { username: username, password: password }
228
239
  end
229
- end
230
240
 
241
+ # Check if credentials are available to use
242
+ #
243
+ # @return [Boolean] true/false if credentials are available
244
+ def can_authenticate?
245
+ !(@participant_id.nil? || @auth[:username].nil? || @auth[:password].nil?)
246
+ end
231
247
 
232
- # Sets the authentication credentials in a class variable.
233
- #
234
- # @param [String] email cl.ly email
235
- # @param [String] password cl.ly password
236
- # @return [Hash] authentication credentials
237
- def self.authorize(participant_id,username,password)
238
- @@participant_id = participant_id
239
- @@auth = {username: username, password: password}
248
+ # Method for creating a unique transaction id
249
+ #
250
+ # @return [String] the transaction id
251
+ def transaction_id
252
+ Digest::SHA1.hexdigest(Time.now.to_s)[0..35]
253
+ end
240
254
  end
241
255
 
242
- # Check if credentials are available to use
243
- #
244
- # @return [Boolean] true/false if credentials are available
245
- def self.can_authenticate?
246
- !(@@participant_id.nil? || @@auth[:username].nil? || @@auth[:password].nil?)
247
- end
256
+ # Instance Methods
257
+ def initialize(options = {})
258
+ @auth = { username: nil, password: nil }
248
259
 
249
- # Method for creating a unique transaction id
250
- #
251
- # @return [String] the transaction id
252
- def self.transaction_id
253
- Digest::SHA1.hexdigest(Time.now.to_s)[0..35]
260
+ @auth[:username] = options[:username] if options[:username].is_a?(String)
261
+ @auth[:password] = options[:password] if options[:password].is_a?(String)
262
+ @participant_id = options[:participant_id] if options[:participant_id].is_a?(String)
254
263
  end
255
-
256
264
  end
257
265
  end