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 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