Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
11 changes: 6 additions & 5 deletions Gemfile
Original file line number Diff line number Diff line change
@@ -1,10 +1,10 @@
source "http://rubygems.org"

gem "faraday", "~> 0.7"
gem "faraday_middleware", "~> 0.7"
gem "hashie", "~> 1.2"
gem "faraday", "~> 0.9.2"
gem "faraday_middleware", "~> 0.10"
gem "hashie", "~> 3.4"
gem "multi_json", "~> 1.0"
gem "chronic", "~> 0.6"
gem "chronic", "~> 0.10"

group :development, :test do
gem "rspec", "~> 2.8"
Expand All @@ -13,8 +13,9 @@ group :development, :test do
gem "bundler", "~> 1.0"
gem "jeweler", "~> 1.6.4"
gem "simplecov", "~> 0.5"
gem "vcr", "~> 1.11.3"
gem "vcr", "~> 3.0"
gem "webmock", "~> 1.7"
gem "rb-readline"
gem "pry"
end

95 changes: 57 additions & 38 deletions genability.gemspec
Original file line number Diff line number Diff line change
Expand Up @@ -2,14 +2,16 @@
# DO NOT EDIT THIS FILE DIRECTLY
# Instead, edit Jeweler::Tasks in Rakefile, and run 'rake gemspec'
# -*- encoding: utf-8 -*-
# stub: genability 0.3.0 ruby lib

Gem::Specification.new do |s|
s.name = "genability"
s.version = "0.3.0"

s.required_rubygems_version = Gem::Requirement.new("> 1.3.1") if s.respond_to? :required_rubygems_version=
s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
s.require_paths = ["lib"]
s.authors = ["Matthew Solt"]
s.date = "2011-11-27"
s.date = "2016-02-26"
s.description = "Ruby client for the Genability power pricing and related APIs - learn more at https://developer.genability.com"
s.email = "mattsolt@gmail.com"
s.extra_rdoc_files = [
Expand All @@ -33,6 +35,7 @@ Gem::Specification.new do |s|
"lib/genability.rb",
"lib/genability/api.rb",
"lib/genability/client.rb",
"lib/genability/client/account.rb",
"lib/genability/client/calculate.rb",
"lib/genability/client/echo.rb",
"lib/genability/client/helpers.rb",
Expand All @@ -43,27 +46,38 @@ Gem::Specification.new do |s|
"lib/genability/client/tariff.rb",
"lib/genability/client/territory.rb",
"lib/genability/client/time_of_use.rb",
"lib/genability/client/usage_profile.rb",
"lib/genability/client/zip_code.rb",
"lib/genability/configuration.rb",
"lib/genability/connection.rb",
"lib/genability/error.rb",
"lib/genability/request.rb",
"lib/mashie_extensions.rb",
"spec/cassettes/account.yml",
"spec/cassettes/account_add.yml",
"spec/cassettes/account_delete.yml",
"spec/cassettes/accounts.yml",
"spec/cassettes/calculate.yml",
"spec/cassettes/echo.yml",
"spec/cassettes/green_button.yml",
"spec/cassettes/load_serving_entities.yml",
"spec/cassettes/load_serving_entity.yml",
"spec/cassettes/prices.yml",
"spec/cassettes/properties.yml",
"spec/cassettes/property.yml",
"spec/cassettes/readings_add.yml",
"spec/cassettes/seasons.yml",
"spec/cassettes/tariff.yml",
"spec/cassettes/tariffs.yml",
"spec/cassettes/territories.yml",
"spec/cassettes/territory.yml",
"spec/cassettes/time_of_use.yml",
"spec/cassettes/time_of_uses.yml",
"spec/cassettes/usage_profile.yml",
"spec/cassettes/usage_profile_add.yml",
"spec/cassettes/usage_profiles.yml",
"spec/cassettes/zipcode.yml",
"spec/client/account_spec.rb",
"spec/client/calculate_spec.rb",
"spec/client/echo_spec.rb",
"spec/client/helpers_spec.rb",
Expand All @@ -74,64 +88,69 @@ Gem::Specification.new do |s|
"spec/client/tariff_spec.rb",
"spec/client/territory_spec.rb",
"spec/client/time_of_use_spec.rb",
"spec/client/usage_profile_spec.rb",
"spec/client/zip_code_spec.rb",
"spec/configuration.yml.sample",
"spec/faraday/response_spec.rb",
"spec/fixtures/greenbutton.xml",
"spec/fixtures/sample.csv",
"spec/genability_spec.rb",
"spec/spec_helper.rb"
]
s.homepage = "http://github.com/activefx/genability"
s.licenses = ["MIT"]
s.require_paths = ["lib"]
s.rubygems_version = "1.8.11"
s.rubygems_version = "2.4.8"
s.summary = "Ruby client for the Genability API"

if s.respond_to? :specification_version then
s.specification_version = 3
s.specification_version = 4

if Gem::Version.new(Gem::VERSION) >= Gem::Version.new('1.2.0') then
s.add_runtime_dependency(%q<faraday>, ["~> 0.7.4"])
s.add_runtime_dependency(%q<faraday_middleware>, ["~> 0.7.0"])
s.add_runtime_dependency(%q<hashie>, ["~> 1.2.0"])
s.add_runtime_dependency(%q<multi_json>, ["~> 1.0.3"])
s.add_runtime_dependency(%q<chronic>, ["~> 0.6.4"])
s.add_development_dependency(%q<rspec>, ["~> 2.7"])
s.add_development_dependency(%q<yard>, ["~> 0.7.0"])
s.add_development_dependency(%q<bundler>, ["~> 1.0.7"])
s.add_runtime_dependency(%q<faraday>, ["~> 0.7"])
s.add_runtime_dependency(%q<faraday_middleware>, ["~> 0.7"])
s.add_runtime_dependency(%q<hashie>, ["~> 3.4"])
s.add_runtime_dependency(%q<multi_json>, ["~> 1.0"])
s.add_runtime_dependency(%q<chronic>, ["~> 0.10"])
s.add_development_dependency(%q<rspec>, ["~> 2.8"])
s.add_development_dependency(%q<yard>, ["~> 0.7"])
s.add_development_dependency(%q<redcarpet>, [">= 0"])
s.add_development_dependency(%q<bundler>, ["~> 1.0"])
s.add_development_dependency(%q<jeweler>, ["~> 1.6.4"])
s.add_development_dependency(%q<simplecov>, ["~> 0.4"])
s.add_development_dependency(%q<simplecov>, ["~> 0.5"])
s.add_development_dependency(%q<vcr>, ["~> 1.11.3"])
s.add_development_dependency(%q<webmock>, ["~> 1.7.4"])
s.add_development_dependency(%q<ruby-debug19>, [">= 0"])
s.add_development_dependency(%q<webmock>, ["~> 1.7"])
s.add_development_dependency(%q<pry>, [">= 0"])
else
s.add_dependency(%q<faraday>, ["~> 0.7.4"])
s.add_dependency(%q<faraday_middleware>, ["~> 0.7.0"])
s.add_dependency(%q<hashie>, ["~> 1.2.0"])
s.add_dependency(%q<multi_json>, ["~> 1.0.3"])
s.add_dependency(%q<chronic>, ["~> 0.6.4"])
s.add_dependency(%q<rspec>, ["~> 2.7"])
s.add_dependency(%q<yard>, ["~> 0.7.0"])
s.add_dependency(%q<bundler>, ["~> 1.0.7"])
s.add_dependency(%q<faraday>, ["~> 0.7"])
s.add_dependency(%q<faraday_middleware>, ["~> 0.7"])
s.add_dependency(%q<hashie>, ["~> 3.4"])
s.add_dependency(%q<multi_json>, ["~> 1.0"])
s.add_dependency(%q<chronic>, ["~> 0.10"])
s.add_dependency(%q<rspec>, ["~> 2.8"])
s.add_dependency(%q<yard>, ["~> 0.7"])
s.add_dependency(%q<redcarpet>, [">= 0"])
s.add_dependency(%q<bundler>, ["~> 1.0"])
s.add_dependency(%q<jeweler>, ["~> 1.6.4"])
s.add_dependency(%q<simplecov>, ["~> 0.4"])
s.add_dependency(%q<simplecov>, ["~> 0.5"])
s.add_dependency(%q<vcr>, ["~> 1.11.3"])
s.add_dependency(%q<webmock>, ["~> 1.7.4"])
s.add_dependency(%q<ruby-debug19>, [">= 0"])
s.add_dependency(%q<webmock>, ["~> 1.7"])
s.add_dependency(%q<pry>, [">= 0"])
end
else
s.add_dependency(%q<faraday>, ["~> 0.7.4"])
s.add_dependency(%q<faraday_middleware>, ["~> 0.7.0"])
s.add_dependency(%q<hashie>, ["~> 1.2.0"])
s.add_dependency(%q<multi_json>, ["~> 1.0.3"])
s.add_dependency(%q<chronic>, ["~> 0.6.4"])
s.add_dependency(%q<rspec>, ["~> 2.7"])
s.add_dependency(%q<yard>, ["~> 0.7.0"])
s.add_dependency(%q<bundler>, ["~> 1.0.7"])
s.add_dependency(%q<faraday>, ["~> 0.7"])
s.add_dependency(%q<faraday_middleware>, ["~> 0.7"])
s.add_dependency(%q<hashie>, ["~> 3.4"])
s.add_dependency(%q<multi_json>, ["~> 1.0"])
s.add_dependency(%q<chronic>, ["~> 0.10"])
s.add_dependency(%q<rspec>, ["~> 2.8"])
s.add_dependency(%q<yard>, ["~> 0.7"])
s.add_dependency(%q<redcarpet>, [">= 0"])
s.add_dependency(%q<bundler>, ["~> 1.0"])
s.add_dependency(%q<jeweler>, ["~> 1.6.4"])
s.add_dependency(%q<simplecov>, ["~> 0.4"])
s.add_dependency(%q<simplecov>, ["~> 0.5"])
s.add_dependency(%q<vcr>, ["~> 1.11.3"])
s.add_dependency(%q<webmock>, ["~> 1.7.4"])
s.add_dependency(%q<ruby-debug19>, [">= 0"])
s.add_dependency(%q<webmock>, ["~> 1.7"])
s.add_dependency(%q<pry>, [">= 0"])
end
end

7 changes: 6 additions & 1 deletion lib/faraday/response/raise_http_4xx.rb
Original file line number Diff line number Diff line change
@@ -1,4 +1,5 @@
require 'faraday'
require 'hashie'

# @private
module Faraday
Expand All @@ -9,6 +10,8 @@ def on_complete(env)
case env[:status].to_i
when 400
raise Genability::BadRequest, error_message(env)
when 401
raise Genability::Unauthorized, error_message(env)
when 403
raise Genability::Forbidden, error_message(env)
when 404
Expand All @@ -26,12 +29,14 @@ def error_body(body)
if body.nil?
nil
else
"ERRORS:#{body.count}#{error_details(body)}"
body = JSON.parse(body) if body.is_a?(String)
"ERRORS:#{body["results"].count}#{error_details(body)}"
end
end

def error_details(body)
msg = ""
body = Hashie::Mash.new(body) if !body.is_a?(Hashie::Mash)
body.results.each_with_index do |result, i|
msg << " #{i+1}[code:#{result.code} object_name:#{result.objectName} property_name:#{result.propertyName} message:#{result.message}]"
end
Expand Down
8 changes: 8 additions & 0 deletions lib/genability/client.rb
Original file line number Diff line number Diff line change
Expand Up @@ -3,11 +3,15 @@ module Genability
class Client < API
require 'genability/client/helpers'
require 'genability/client/account'
require 'genability/client/account_calculation'
require 'genability/client/account_tariff'
require 'genability/client/calculate'
require 'genability/client/echo'
require 'genability/client/incentive'
require 'genability/client/load_serving_entity'
require 'genability/client/price'
require 'genability/client/property'
require 'genability/client/savings_analysis'
require 'genability/client/season'
require 'genability/client/tariff'
require 'genability/client/territory'
Expand All @@ -18,12 +22,16 @@ class Client < API
include Genability::Client::Helpers

include Genability::Client::Account
include Genability::Client::AccountCalculation
include Genability::Client::AccountTariff
include Genability::Client::Calculate
include Genability::Client::Echo
include Genability::Client::Incentive
include Genability::Client::LoadServingEntity
include Genability::Client::Price
include Genability::Client::Property
include Genability::Client::Season
include Genability::Client::SavingsAnalysis
include Genability::Client::Tariff
include Genability::Client::Territory
include Genability::Client::TimeOfUse
Expand Down
53 changes: 43 additions & 10 deletions lib/genability/client/account.rb
Original file line number Diff line number Diff line change
Expand Up @@ -4,39 +4,72 @@ class Client
module Account

def add_account(options = {})
post("beta/accounts?appId=#{application_id}&appKey=#{application_key}", account_params(options)).results.first
post("v1/accounts", add_account_params(options)).results.first
end

def upsert_account(options = {})
put("v1/accounts", add_account_params(options)).results.first
end

def delete_account(account_id)
delete("beta/accounts/#{account_id}")
delete("v1/accounts/#{account_id}")
end

def account(account_id, options = {})
get("v1/accounts/#{account_id}", account_params(options)).results.first
end

def account(account_id)
get("beta/accounts/#{account_id}").results.first
def provider_account(provider_account_id, options = {})
get("v1/accounts/pid/#{provider_account_id}", account_params(options)).results.first
end

def accounts(options = {})
get("beta/accounts", accounts_params(options)).results
get("v1/accounts", accounts_params(options)).results
end

private

def account_params(options)
def add_account_params(options)
{
"providerAccountId" => options[:provider_account_id],
"accountName" => options[:account_name],
"customerOrgId" => options[:customer_org_id],
"providerAccountId" => options[:provider_account_id],
"customerOrgName" => options[:customer_org_name]
"customerOrgName" => options[:customer_org_name],
"address" => address_params(options[:address]),
"properties" => properties_params(options[:properties])
}.
delete_if{ |k,v| v.nil? }
end

def account_params(options)
{
"fields" => options[:fields]
}.
delete_if{ |k,v| v.nil? }.
to_json
delete_if{ |k,v| v.nil? }
end

def accounts_params(options)
pagination_params(options).
merge( search_params(options) )
end

def address_params(options)
return nil if options.nil?
{
"addressString" => options[:address_string],
"addressName" => options[:address_name],
"address1" => options[:address1],
"address2" => options[:address2],
"city" => options[:city],
"state" => options[:state],
"zip" => options[:zip],
"country" => options[:country],
"lon" => options[:lon],
"lat" => options[:lat]
}.
delete_if{ |k,v| v.nil? }
end

end
end
end
Expand Down
42 changes: 42 additions & 0 deletions lib/genability/client/account_calculation.rb
Original file line number Diff line number Diff line change
@@ -0,0 +1,42 @@
module Genability
class Client
module AccountCalculation
def account_calculation(account_id, options = {})
post("v1/accounts/#{account_id}/calculate", calculation_params(options)).results.first
end

def provider_account_calculation(provider_account_id, options = {})
post("v1/accounts/pid/#{provider_account_id}/calculate", calculation_params(options)).results.first
end

private

def calculation_params(options)
{
"fromDateTime" => format_to_iso8601(options[:from] || options[:from_date_time]),
"toDateTime" => format_to_iso8601(options[:to] || options[:to_date_time]),
"tariffEffectiveOn" => format_to_ymd(options[:tariff_effective_on]),
"detailLevel" => convert_to_upcase(options[:detail_level]),
"groupBy" => convert_to_upcase(options[:group_by]),
"tiers" => convert_to_upcase(options[:tiers]),
"includeDefaultProfile" => convert_to_boolean(options[:include_default_profile]),
"profileId" => options[:profile_id],
"dataFactor" => options[:data_factor],
"billingPeriod" => convert_to_boolean(options[:billing_period]),
"minimums" => convert_to_boolean(options[:minimums]),
"applyUtilityTax" => convert_to_boolean(options[:apply_utility_tax]),
"calcNetExcessGeneration" => convert_to_boolean(options[:calc_net_excess_generation]),
"excludeChargeClass" => multi_option_handler(options[:exclude_charge_class]),
"autoBaseline" => convert_to_boolean(options[:auto_baseline]),
"useIntelligentBaselining" => convert_to_boolean(options[:use_intelligent_baselining]),
"masterTariffId" => options[:master_tariff_id],
"fields" => options[:fields],
"propertyInputs" => tariff_inputs_params(options[:property_inputs]),
"rateInputs" => rate_inputs_params(options[:rate_inputs])
}.
delete_if{ |k,v| v.nil? }
end
end
end
end

Loading