puzzle 0.1.0 → 0.2.0

Sign up to get free protection for your applications and to get access to all the features.
data/VERSION CHANGED
@@ -1 +1 @@
1
- 0.1.0
1
+ 0.2.0
@@ -13,6 +13,10 @@ module Puzzle
13
13
  @active_contacts = company_info["activeContacts"]
14
14
  end
15
15
 
16
+ # Return a list of companies
17
+ # => pageSize: The attribute specifies the maximum number of records to be returned in a request. The default value is 50 and the system limit is 100.
18
+ # => name: Name of the desired company (indexed to include Company Name, URL, and ticker symbol)
19
+ # => View http://developer.jigsaw.com/documentation/search_and_get_api_guide/6_Data_Keys_and_Values for available search parameter
16
20
  def self.find(options)
17
21
  companies = []
18
22
  result = Puzzle::Request.get("/searchCompany", options)
@@ -0,0 +1,14 @@
1
+ module Puzzle
2
+ module ErrorCode
3
+ PARAM_ERROR = "PARAM_ERROR"
4
+ LOGIN_FAIL = "LOGIN_FAIL"
5
+ TOKEN_FAIL = "TOKEN_FAIL"
6
+ PURCHASE_LOW_POINTS = "PURCHASE_LOW_POINTS"
7
+ CONTACT_NOT_EXIST = "CONTACT_NOT_EXIS"
8
+ CONTACT_NOT_OWNED = "CONTACT_NOT_OWNED"
9
+ SEARCH_ERROR = "SEARCH_ERROR"
10
+ SYS_ERROR = "SYS_ERROR"
11
+ NOT_IMPLEMENTED = "NOT_IMPLEMENTED"
12
+ NOT_AVAILABLE = "NOT_AVAILABLE"
13
+ end
14
+ end
@@ -43,6 +43,14 @@ module Puzzle
43
43
  @owned_type = contact_info["ownedType"]
44
44
  end
45
45
 
46
+ # Return a list of contacts
47
+ # => pageSize: The attribute specifies the maximum number of records to be returned in a request. The system limit and default value is 500.
48
+ # => firstname: firstname of the contact to be searched
49
+ # => lastname: last (or family) name of the contact to be searched
50
+ # => levels: employee rank (e.g. VP, Staff)
51
+ # => companyName: company for whom contact works (indexed to include Company Name, URL, and ticker symbol)
52
+ # => email: full email address of the contact to be searched
53
+ # => View http://developer.jigsaw.com/documentation/search_and_get_api_guide/6_Data_Keys_and_Values for available search parameter
46
54
  def self.find(options)
47
55
  contacts = []
48
56
  result = Puzzle::Request.get("/searchContact", options)
@@ -0,0 +1,11 @@
1
+ module Puzzle
2
+ class Error
3
+ attr_accessor :stack_trace, :code, :message, :http_status_code
4
+ def initialize(error)
5
+ @code = error["errorCode"]
6
+ @message = error["errorMsg"]
7
+ @stack_trace = error["stackTrace"]
8
+ @http_status_code = error["httpStatusCode"]
9
+ end
10
+ end
11
+ end
@@ -0,0 +1,14 @@
1
+ module Puzzle
2
+ module Exception
3
+ class ParamError < StandardError; end
4
+ class LoginFail < StandardError; end
5
+ class TokenFail < StandardError; end
6
+ class PurchaseLowPoints < StandardError; end
7
+ class ContactNotExist < StandardError; end
8
+ class ContactNotOwned < StandardError; end
9
+ class SearchError < StandardError; end
10
+ class SysError < StandardError; end
11
+ class NotImplemented < StandardError; end
12
+ class NotAvailable < StandardError; end
13
+ end
14
+ end
@@ -1,3 +1,6 @@
1
+ require File.join(File.dirname(__FILE__), 'exception')
2
+ require File.join(File.dirname(__FILE__), 'error')
3
+ require File.join(File.dirname(__FILE__), 'const')
1
4
  require "json"
2
5
  require "cgi"
3
6
  require "net/http"
@@ -30,8 +33,7 @@ module Puzzle
30
33
  # TODO: Support XML format
31
34
  end
32
35
  else
33
- # TODO: Handle Errors
34
- false
36
+ handle_error(response.body, format)
35
37
  end
36
38
  end
37
39
 
@@ -55,6 +57,57 @@ module Puzzle
55
57
  "#{CGI.escape(key.to_s).gsub(/%(5B|5D)/n) { [$1].pack("H*") }}=#{CGI.escape(value.to_s)}"
56
58
  }.join("&")
57
59
  end
60
+
61
+ def self.handle_error(error_body, format = "json")
62
+ error = parse_error(error_body, format)
63
+ case error.http_status_code
64
+ when 400
65
+ raise Puzzle::Exception::ParamError, error.message
66
+ when 403
67
+ case error.code
68
+ when Puzzle::ErrorCode::LOGIN_FAIL
69
+ raise Puzzle::Exception::LoginFail, error.message
70
+ when Puzzle::ErrorCode::TOKEN_FAIL
71
+ raise Puzzle::Exception::TokenFail, error.message
72
+ end
73
+ when 404
74
+ raise Puzzle::Exception::ContactNotExist, error.message
75
+ when 405
76
+ case error.code
77
+ when Puzzle::ErrorCode::CONTACT_NOT_OWNED
78
+ raise Puzzle::Exception::ContactNotOwned, error.message
79
+ when Puzzle::ErrorCode::PURCHASE_LOW_POINTS
80
+ raise Puzzle::Exception::PurchaseLowPoints, error.message
81
+ end
82
+ when 500
83
+ case error.code
84
+ when Puzzle::ErrorCode::SEARCH_ERROR
85
+ raise Puzzle::Exception::SearchError, error.message
86
+ when Puzzle::ErrorCode::SYS_ERROR
87
+ raise Puzzle::Exception::SysError, error.message
88
+ end
89
+ when 501
90
+ raise Puzzle::Exception::NotImplemented, error.message
91
+ when 503
92
+ raise Puzzle::Exception::NotAvailable, error.message
93
+ else
94
+ raise StandardError, "Unknown Error"
95
+ end
96
+ end
97
+
98
+ def self.parse_error(error_data, format = "json")
99
+ error = nil
100
+ case format
101
+ when "json"
102
+ parsed_error = JSON.parse(error_data)
103
+ if parsed_error && parsed_error.length > 0
104
+ error = Error.new(parsed_error[0])
105
+ end
106
+ when "xml"
107
+ # TODO: Add xml support
108
+ end
109
+ error
110
+ end
58
111
  end
59
112
  end
60
113
 
@@ -5,7 +5,7 @@
5
5
 
6
6
  Gem::Specification.new do |s|
7
7
  s.name = "puzzle"
8
- s.version = "0.1.0"
8
+ s.version = "0.2.0"
9
9
 
10
10
  s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
11
11
  s.authors = ["Simon Gingras"]
@@ -26,7 +26,10 @@ Gem::Specification.new do |s|
26
26
  "lib/puzzle.rb",
27
27
  "lib/puzzle/company.rb",
28
28
  "lib/puzzle/configuration.rb",
29
+ "lib/puzzle/const.rb",
29
30
  "lib/puzzle/contact.rb",
31
+ "lib/puzzle/error.rb",
32
+ "lib/puzzle/exception.rb",
30
33
  "lib/puzzle/request.rb",
31
34
  "puzzle.gemspec",
32
35
  "test/helper.rb",
metadata CHANGED
@@ -2,7 +2,7 @@
2
2
  name: puzzle
3
3
  version: !ruby/object:Gem::Version
4
4
  prerelease:
5
- version: 0.1.0
5
+ version: 0.2.0
6
6
  platform: ruby
7
7
  authors:
8
8
  - Simon Gingras
@@ -86,7 +86,10 @@ files:
86
86
  - lib/puzzle.rb
87
87
  - lib/puzzle/company.rb
88
88
  - lib/puzzle/configuration.rb
89
+ - lib/puzzle/const.rb
89
90
  - lib/puzzle/contact.rb
91
+ - lib/puzzle/error.rb
92
+ - lib/puzzle/exception.rb
90
93
  - lib/puzzle/request.rb
91
94
  - puzzle.gemspec
92
95
  - test/helper.rb
@@ -104,7 +107,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
104
107
  requirements:
105
108
  - - ">="
106
109
  - !ruby/object:Gem::Version
107
- hash: 1302281104639078200
110
+ hash: -4390695954410806016
108
111
  segments:
109
112
  - 0
110
113
  version: "0"