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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 2a1171c029073f7bd9dd0c198fcf082464aaa9ab
4
- data.tar.gz: fe0af2b14fb32d5bbd6cdba0bee43f808b9f5ccf
3
+ metadata.gz: b77a96ab7054cb4b7f62190a889ee65d61bbb53d
4
+ data.tar.gz: b3d4ade057ca6dca2de4194903c434d909c36bea
5
5
  SHA512:
6
- metadata.gz: c314e73105864c252eef83d7b1fa65fb10521e4c73b25ef59290dbabead48569c81c95f1fff4347630eb201766574419e547787b8f41aaea903bd5cfc5a6564f
7
- data.tar.gz: beb9e29be275621beaa6910c7c1f117c538871c3bb2af95ba9d6ae607f0422891c8f47d01e274f09d7ec268f486e2d920b014b0fff117d9b184d9ec4733c5aad
6
+ metadata.gz: 241c5a21c6fe458375319c401a9fdc39608bf9979babf5340cc5e24c54b829c2c1216d605b6aa5f9ffdc986d3b07f192ec8dc548afca7a9044850ab3f02f6a36
7
+ data.tar.gz: 71999fe4e1b2ae5c3dcbb2bc94bcd607fc642711cd7b702394ed76bc99168be76862faa344b63d68643deaa3e36d1f9e4e660ad21b4091eadb8345c4d8527409
@@ -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
@@ -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
@@ -21,6 +21,8 @@ require "hopo/version"
21
21
 
22
22
  # Extend Ruby Classes
23
23
  require 'extend/object' unless defined?(::Rails)
24
+ require 'extend/array' unless defined?(::Rails)
25
+ require 'extend/hash' unless defined?(::Rails)
24
26
 
25
27
  # General
26
28
  require 'hopo/errors'
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( parameters ) )
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 = 1
10
+ API_VERSION = 2
10
11
  API_PATH = 'rates'
11
12
 
12
- def initialize(line, premium_mode='annually', sorter='premiums-asc')
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
- # TEMP Hack for v1 Until Integral API is cleaned Up (v2)
37
- if response['status']
38
- hash = { :errors => [response['message']] }
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
- hash.merge!( {:rates => sorted_rates} ) unless rates.blank?
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
- hash
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='premiums-asc')
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
- :test1 => 'test 1',
22
- :test2 => 'test 2',
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
 
@@ -1,7 +1,7 @@
1
1
  module Hopo
2
2
  class HomeRater < Rater
3
3
 
4
- def initialize(premium_mode='annually', sorter='premiums-asc')
4
+ def initialize(premium_mode='annually', sorter='premium-asc')
5
5
  super('home', premium_mode, sorter)
6
6
  end
7
7
 
@@ -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 do |k, v|
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
@@ -5,14 +5,17 @@ module Hopo
5
5
  def sort_rates(rates, mode)
6
6
  return if rates.blank?
7
7
 
8
- sort = mode.split('-')
8
+ sort_value = mode.split('-')[0]
9
+ sort_direction = mode.split('-')[1]
9
10
 
10
- sorted_rates =
11
- if sort[1] == 'desc'
12
- Hash[rates.sort_by {|k, v| sort[0]=='companies' ? k : v }.reverse]
13
- else
14
- Hash[rates.sort_by {|k, v| sort[0]=='companies' ? k : v }]
15
- end
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
@@ -1,3 +1,3 @@
1
1
  module Hopo
2
- VERSION = "0.0.4"
2
+ VERSION = "0.0.5"
3
3
  end
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
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-07 00:00:00.000000000 Z
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.2.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