hopo-ruby 0.0.4 → 0.0.5
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/lib/extend/array.rb +23 -0
- data/lib/extend/hash.rb +28 -0
- data/lib/extend/object.rb +11 -0
- data/lib/hopo.rb +2 -0
- data/lib/hopo/api.rb +4 -2
- data/lib/hopo/rater.rb +8 -18
- data/lib/hopo/rater/auto_rater.rb +3 -6
- data/lib/hopo/rater/home_rater.rb +1 -1
- data/lib/hopo/utils/calculator.rb +1 -3
- data/lib/hopo/utils/sorter.rb +10 -7
- data/lib/hopo/version.rb +1 -1
- metadata +5 -3
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: b77a96ab7054cb4b7f62190a889ee65d61bbb53d
|
4
|
+
data.tar.gz: b3d4ade057ca6dca2de4194903c434d909c36bea
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 241c5a21c6fe458375319c401a9fdc39608bf9979babf5340cc5e24c54b829c2c1216d605b6aa5f9ffdc986d3b07f192ec8dc548afca7a9044850ab3f02f6a36
|
7
|
+
data.tar.gz: 71999fe4e1b2ae5c3dcbb2bc94bcd607fc642711cd7b702394ed76bc99168be76862faa344b63d68643deaa3e36d1f9e4e660ad21b4091eadb8345c4d8527409
|
data/lib/extend/array.rb
ADDED
@@ -0,0 +1,23 @@
|
|
1
|
+
# Borrowed from Rails source
|
2
|
+
|
3
|
+
class Array
|
4
|
+
# Calls <tt>to_param</tt> on all its elements and joins the result with
|
5
|
+
# slashes. This is used by <tt>url_for</tt> in Action Pack.
|
6
|
+
def to_param
|
7
|
+
collect { |e| e.to_param }.join '/'
|
8
|
+
end
|
9
|
+
|
10
|
+
# Converts an array into a string suitable for use as a URL query string,
|
11
|
+
# using the given +key+ as the param name.
|
12
|
+
#
|
13
|
+
# ['Rails', 'coding'].to_query('hobbies') # => "hobbies%5B%5D=Rails&hobbies%5B%5D=coding"
|
14
|
+
def to_query(key)
|
15
|
+
prefix = "#{key}[]"
|
16
|
+
|
17
|
+
if empty?
|
18
|
+
nil.to_query(prefix)
|
19
|
+
else
|
20
|
+
collect { |value| value.to_query(prefix) }.join '&'
|
21
|
+
end
|
22
|
+
end
|
23
|
+
end
|
data/lib/extend/hash.rb
ADDED
@@ -0,0 +1,28 @@
|
|
1
|
+
# Borrowed from Rails source
|
2
|
+
|
3
|
+
class Hash
|
4
|
+
# Returns a string representation of the receiver suitable for use as a URL
|
5
|
+
# query string:
|
6
|
+
#
|
7
|
+
# {name: 'David', nationality: 'Danish'}.to_query
|
8
|
+
# # => "name=David&nationality=Danish"
|
9
|
+
#
|
10
|
+
# An optional namespace can be passed to enclose key names:
|
11
|
+
#
|
12
|
+
# {name: 'David', nationality: 'Danish'}.to_query('user')
|
13
|
+
# # => "user%5Bname%5D=David&user%5Bnationality%5D=Danish"
|
14
|
+
#
|
15
|
+
# The string pairs "key=value" that conform the query string
|
16
|
+
# are sorted lexicographically in ascending order.
|
17
|
+
#
|
18
|
+
# This method is also aliased as +to_param+.
|
19
|
+
def to_query(namespace = nil)
|
20
|
+
collect do |key, value|
|
21
|
+
unless (value.is_a?(Hash) || value.is_a?(Array)) && value.empty?
|
22
|
+
value.to_query(namespace ? "#{namespace}[#{key}]" : key)
|
23
|
+
end
|
24
|
+
end.compact.sort! * '&'
|
25
|
+
end
|
26
|
+
|
27
|
+
alias_method :to_param, :to_query
|
28
|
+
end
|
data/lib/extend/object.rb
CHANGED
@@ -1,6 +1,17 @@
|
|
1
1
|
# Borrowed from Rails source
|
2
2
|
|
3
3
|
class Object
|
4
|
+
# Alias of <tt>to_s</tt>.
|
5
|
+
def to_param
|
6
|
+
to_s
|
7
|
+
end
|
8
|
+
|
9
|
+
# Converts an object into a string suitable for use as a URL query string,
|
10
|
+
# using the given <tt>key</tt> as the param name.
|
11
|
+
def to_query(key)
|
12
|
+
"#{CGI.escape(key.to_param)}=#{CGI.escape(to_param.to_s)}"
|
13
|
+
end
|
14
|
+
|
4
15
|
# An object is blank if it's false, empty, or a whitespace string.
|
5
16
|
# For example, '', ' ', +nil+, [], and {} are all blank.
|
6
17
|
#
|
data/lib/hopo.rb
CHANGED
data/lib/hopo/api.rb
CHANGED
@@ -43,13 +43,15 @@ module Hopo
|
|
43
43
|
end
|
44
44
|
|
45
45
|
def perform_request(method, parameters, type)
|
46
|
-
request = method.new( encode_params(
|
46
|
+
request = method.new( encode_params(parameters) )
|
47
47
|
response = http.request(request)
|
48
|
+
|
48
49
|
self.send("response_#{type}", response)
|
49
50
|
end
|
50
51
|
|
51
52
|
def encode_params(parameters)
|
52
|
-
uri.query = URI.encode_www_form( merge_parameters(parameters) )
|
53
|
+
# uri.query = URI.encode_www_form( merge_parameters(parameters) )
|
54
|
+
uri.query = merge_parameters(parameters).to_query
|
53
55
|
uri
|
54
56
|
end
|
55
57
|
|
data/lib/hopo/rater.rb
CHANGED
@@ -5,11 +5,12 @@ module Hopo
|
|
5
5
|
|
6
6
|
attr_accessor :line, :premium_mode, :sorter
|
7
7
|
|
8
|
+
# BASE_URL = 'https://integral.dev/api'
|
8
9
|
BASE_URL = 'https://integral.honestpolicy.com/api'
|
9
|
-
API_VERSION =
|
10
|
+
API_VERSION = 2
|
10
11
|
API_PATH = 'rates'
|
11
12
|
|
12
|
-
def initialize(line, premium_mode='annually', sorter='
|
13
|
+
def initialize(line, premium_mode='annually', sorter='premium-asc')
|
13
14
|
unless Hopo.api_key
|
14
15
|
raise AuthenticationError, 'No API key provided. Set your API key using "Hopo.api_key = <API-KEY>".'
|
15
16
|
end
|
@@ -33,28 +34,17 @@ module Hopo
|
|
33
34
|
end
|
34
35
|
|
35
36
|
def format_response(response)
|
36
|
-
#
|
37
|
-
|
38
|
-
|
39
|
-
|
40
|
-
elsif response['errors']
|
41
|
-
hash = {:errors => [response['errors']]}
|
42
|
-
|
43
|
-
else
|
44
|
-
hash = {}
|
45
|
-
rates = response['results']['rates']
|
46
|
-
errors = response['results']['errors']
|
47
|
-
risk = response['risk']
|
37
|
+
# Calculate and Sort Rates if available.
|
38
|
+
unless response['status']['type'] == 'error'
|
39
|
+
rates = response['data']
|
48
40
|
|
49
41
|
calculated_rates = factor_rates(rates, premium_mode)
|
50
42
|
sorted_rates = sort_rates(calculated_rates, sorter)
|
51
43
|
|
52
|
-
|
53
|
-
hash.merge!( {:errors => errors} ) unless errors.blank?
|
54
|
-
hash.merge!( {:risk => risk} ) unless risk.blank?
|
44
|
+
response['data'] = sorted_rates
|
55
45
|
end
|
56
46
|
|
57
|
-
|
47
|
+
response
|
58
48
|
end
|
59
49
|
|
60
50
|
end
|
@@ -1,15 +1,13 @@
|
|
1
1
|
module Hopo
|
2
2
|
class AutoRater < Rater
|
3
3
|
|
4
|
-
def initialize(premium_mode='annually', sorter='
|
4
|
+
def initialize(premium_mode='annually', sorter='premium-asc')
|
5
5
|
super('auto', premium_mode, sorter)
|
6
6
|
end
|
7
7
|
|
8
8
|
def required_fields?
|
9
9
|
{
|
10
10
|
:zip => 'Five diging Zip Code for location',
|
11
|
-
:num_vehicles => 'Number representing the total count of vehicles',
|
12
|
-
:num_drivers => 'Number representing the total number of drivers',
|
13
11
|
:model_year => 'Not Required - defaults to 2012',
|
14
12
|
:make => 'Not Required - defaults to Toyota',
|
15
13
|
:model => 'Not Required - defaults to Camry'
|
@@ -18,9 +16,8 @@ module Hopo
|
|
18
16
|
|
19
17
|
def optional_fields?
|
20
18
|
{
|
21
|
-
:
|
22
|
-
:
|
23
|
-
:test3 => 'test 3'
|
19
|
+
:num_vehicles => 'Number representing the total count of vehicles',
|
20
|
+
:num_drivers => 'Number representing the total number of drivers'
|
24
21
|
}
|
25
22
|
end
|
26
23
|
|
@@ -8,9 +8,7 @@ module Hopo
|
|
8
8
|
premiums = {:monthly => 12, :triannually => 3, :quarterly => 4, :biannually => 2, :annually => 1}
|
9
9
|
divisor = premiums[mode.to_sym] || 1
|
10
10
|
|
11
|
-
rates.each
|
12
|
-
rates[k] = v / divisor
|
13
|
-
end
|
11
|
+
rates.each {|rate| rate['premium'] /= divisor unless rate['premium'].blank? }
|
14
12
|
|
15
13
|
rates
|
16
14
|
end
|
data/lib/hopo/utils/sorter.rb
CHANGED
@@ -5,14 +5,17 @@ module Hopo
|
|
5
5
|
def sort_rates(rates, mode)
|
6
6
|
return if rates.blank?
|
7
7
|
|
8
|
-
|
8
|
+
sort_value = mode.split('-')[0]
|
9
|
+
sort_direction = mode.split('-')[1]
|
9
10
|
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
11
|
+
# Simple hack for sorting nil values last.
|
12
|
+
if sort_direction == 'desc'
|
13
|
+
puts '**************************'
|
14
|
+
rates.sort_by! { |rate| rate[sort_value] || 0 }.reverse!
|
15
|
+
else
|
16
|
+
puts '--------------------------'
|
17
|
+
rates.sort_by! { |rate| rate[sort_value] || 9999999 }
|
18
|
+
end
|
16
19
|
end
|
17
20
|
|
18
21
|
end
|
data/lib/hopo/version.rb
CHANGED
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: hopo-ruby
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
4
|
+
version: 0.0.5
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Mike Reinmiller
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2014-10-
|
11
|
+
date: 2014-10-21 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bundler
|
@@ -66,6 +66,8 @@ files:
|
|
66
66
|
- README.md
|
67
67
|
- Rakefile
|
68
68
|
- hopo-ruby.gemspec
|
69
|
+
- lib/extend/array.rb
|
70
|
+
- lib/extend/hash.rb
|
69
71
|
- lib/extend/object.rb
|
70
72
|
- lib/generators/hopo/install_generator.rb
|
71
73
|
- lib/generators/hopo/templates/hopo_config.rb
|
@@ -100,7 +102,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
100
102
|
version: '0'
|
101
103
|
requirements: []
|
102
104
|
rubyforge_project:
|
103
|
-
rubygems_version: 2.
|
105
|
+
rubygems_version: 2.4.2
|
104
106
|
signing_key:
|
105
107
|
specification_version: 4
|
106
108
|
summary: A simple library for communicating with the Honest Policy API
|