hopo-ruby 0.0.4 → 0.0.5
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.
- 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
|