ratsit 0.0.1 → 0.0.2

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: 8fe41a466ccf397de54bac8fb52e76f96ada4bac
4
- data.tar.gz: c81222eb134bd582d1c5b708dff6bfddc14b03c6
3
+ metadata.gz: 2e5949f1ca309cd41832cb8f648f0f51e6957302
4
+ data.tar.gz: 53be756f285f8a21e755a09c62428b2b588abe00
5
5
  SHA512:
6
- metadata.gz: e33317326a6c442affc955fc4dda650e43495b205ff22e394ea487d71ac47598c0e5584d8bede38a6531a14d71cc34eb580d662ccdc340eab3289fcaf0adf3d0
7
- data.tar.gz: f15ac274848fe9da25ebceccca9c472ed1be104fabe49658c03edf4ebf0c6ff886f55de5fc6c185cfb3a482586095a39901cd4d7bf20c6d86c1f9b23221562eb
6
+ metadata.gz: bf45d638a1fd05c20c29fe7ebf3c9ea49d85826dc195797ffbf1171c97d7b386494cb5438a4d111e64a176b47b2955316e43ef5c8bf6296563caef0986bc372c
7
+ data.tar.gz: be59024c037d0b9597d2ed7168a46d1fc45331a985a4b909fb9b9f3e16ce6d0b09206b06d9938b7a927c53b3742843d2441c6d43f6346020f49d1679ea9bc31c
data/README.md CHANGED
@@ -1,5 +1,7 @@
1
1
  # Ratsit
2
2
 
3
+ [![Gem Version](https://badge.fury.io/rb/ratsit.svg)](https://rubygems.org/gems/ratsit)
4
+
3
5
  Ruby gem for performing Ratsit searches.
4
6
 
5
7
  _Note_: This gem is under active development and might not be suitable for use yet...
@@ -1,82 +1,106 @@
1
- require 'ratsit/version'
2
- require 'ratsit/package'
3
- require 'ratsit/search_type'
4
- require 'ratsit/request'
5
- require 'ratsit/filters'
1
+
6
2
  require 'ratsit/errors'
7
- require 'json'
3
+ require 'ratsit/monkey'
4
+ require 'ratsit/version'
8
5
 
9
- module Ratsit
6
+ require 'ratsit/filter/filter'
7
+ require 'ratsit/filter/filter_company'
8
+ require 'ratsit/filter/filter_get_annual_report'
9
+ require 'ratsit/filter/filter_get_companies'
10
+ require 'ratsit/filter/filter_get_company_information_package'
11
+ require 'ratsit/filter/filter_get_person_information_package'
12
+ require 'ratsit/filter/filter_person'
13
+ require 'ratsit/filter/filter_search_one_person'
14
+ require 'ratsit/filter/filter_search_persons'
10
15
 
11
- api_key_key = 'RATSIT_API_KEY'
12
- @env_api_key = ENV[api_key_key]
13
- if @env_api_key.nil?
14
- puts "No api key specified. The library can only search using the open api. Set your api key using key #{api_key_key}"
15
- end
16
+ require 'ratsit/request/request'
17
+ require 'ratsit/request/open_request'
18
+ require 'ratsit/request/token_request'
19
+ require 'ratsit/request/request_get_companies'
20
+ require 'ratsit/request/request_search_one_person'
21
+ require 'ratsit/request/request_search_persons'
16
22
 
17
- class RatsitSearch
18
23
 
19
- attr_reader :filter
20
- attr_reader :results
24
+ module Ratsit
21
25
 
22
- def initialize(search_type, filter_instance)
23
- @filter = filter_instance
24
- @search_type = search_type
25
- @results = nil
26
- @api_key = @env_api_key
26
+ def Ratsit.get_api_key
27
+ key_key = 'RATSIT_API_KEY'
28
+ if ENV[key_key].nil?
29
+ raise RatsitError, 'No api key specified'
27
30
  end
31
+ return ENV[key_key]
32
+ end
28
33
 
29
- def search(search_arg, search_area='')
30
- if !search_arg.is_a?(String)
31
- raise RatsitError, 'Invalid search argument'
32
- end
33
- if search_arg.length == 0
34
- raise RatsitError, 'Invalid search argument length'
35
- end
36
- if !search_area.is_a?(String)
37
- raise RatsitError, 'Invalid search area'
38
- end
39
- request_class = (!@api_key.nil?)? Ratsit::RatsitTokenRequest: Ratsit::RatsitOpenRequest
40
- @request = request_class.new(search_arg, search_area, @search_type, @filter)
41
- @request.exec()
42
- # check this...
43
- if @request.response_ok
44
- #puts "response ok"
45
- #@results = @request.response_body.to_json
46
- @results = @request.response_body
47
- else
48
- @results = nil
49
- end
50
- @results
34
+ def Ratsit.OpenPersonSearch(search_term, search_area, filter_instance=nil)
35
+ if !filter_instance.nil? && !filter_instance.instance_of?(Ratsit::Filter::PersonFilter)
36
+ raise RatsitFilterError, 'Invalid filter given to function'
51
37
  end
38
+ req = Ratsit::Request::OpenRequest.new(Ratsit::Request::OPEN_REQUEST_EPTS[:person], search_term, search_area, filter_instance || Ratsit::Filter::PersonFilter.new())
39
+ req.exec()
40
+ if req.response_ok
41
+ return req.response_body
42
+ end
43
+ nil
44
+ end
52
45
 
46
+ def Ratsit.OpenCompanySearch(search_term, search_area, filter_instance=nil)
47
+ if !filter_instance.nil? && !filter_instance.instance_of?(Ratsit::Filter::CompanyFilter)
48
+ raise RatsitFilterError, 'Invalid filter given to function'
49
+ end
50
+ req = Ratsit::Request::OpenRequest.new(Ratsit::Request::OPEN_REQUEST_EPTS[:company], search_term, search_area, filter_instance || Ratsit::Filter::CompanyFilter.new())
51
+ req.exec()
52
+ if req.response_ok
53
+ return req.response_body
54
+ end
55
+ nil
53
56
  end
54
57
 
55
- class PersonSearch < RatsitSearch
58
+ def Ratsit.doTokenRequest(req_class, filter_args)
59
+ req = req_class.new(filter_args)
60
+ puts req
61
+ req.exec()
62
+ return req.response
63
+ nil
64
+ end
56
65
 
57
- def initialize()
58
- super(Ratsit::SEARCH_TYPE_PERSON, Ratsit::PersonFilter.new())
59
- self
60
- end
66
+ def Ratsit.SearchCompanies(args=nil)
67
+ return Ratsit.doTokenRequest(Ratsit::Request::GetCompaniesRequest, args)
68
+ end
61
69
 
70
+ def Ratsit.SearchOnePerson(args=nil)
71
+ return Ratsit.doTokenRequest(Ratsit::Request::SearchOnePersonRequest, args)
62
72
  end
63
73
 
64
- class CompanySearch < RatsitSearch
74
+ def Ratsit.SearchPersons(args=nil)
75
+ return Ratsit.doTokenRequest(Ratsit::Request::SearchPersonsRequest, args)
76
+ end
65
77
 
66
- def initialize()
67
- super(Ratsit::SEARCH_TYPE_COMPANY, Ratsit::CompanyFilter.new())
68
- self
69
- end
70
78
 
79
+ end
80
+
81
+ =begin
82
+ def Ratsit.GetAnnualReport(args=nil)
83
+ return Ratsit.doTokenRequest('GetAnnualReport', Ratsit.parseFilterArgs(args, Ratsit::Filter::GetAnnualReportFilter))
71
84
  end
72
85
 
73
- class EstateSearch < RatsitSearch
86
+ def Ratsit.GetCompanies(args=nil)
87
+ return Ratsit.doTokenRequest('GetCompanies', Ratsit.parseFilterArgs(args, Ratsit::Filter::GetCompaniesFilter))
88
+ end
74
89
 
75
- def initialize()
76
- super(Ratsit::SEARCH_TYPE_ESTATE, Ratsit::EstateFilter.new())
77
- self
78
- end
90
+ def Ratsit.GetCompanyInformationPackage(args=nil)
91
+ return Ratsit.doTokenRequest('GetCompanyInformationPackage', Ratsit.parseFilterArgs(args, Ratsit::Filter::GetCompanyInformationPackageFilter))
92
+ end
79
93
 
94
+ def Ratsit.GetPersonInformationPackage(args=nil)
95
+ return Ratsit.doTokenRequest('GetPersonInformationPackage', Ratsit.parseFilterArgs(args, Ratsit::Filter::GetPersonInformationPackageFilter))
80
96
  end
81
97
 
82
- end
98
+ def Ratsit.SearchOnePerson(args=nil)
99
+ return Ratsit.doTokenRequest('SearchOnePerson', Ratsit.parseFilterArgs(args, Ratsit::Filter::SearchOnePersonFilter))
100
+ end
101
+
102
+ def Ratsit.SearchPersons(args=nil)
103
+ return Ratsit.doTokenRequest('SearchPersons', Ratsit.parseFilterArgs(args, Ratsit::Filter::SearchPersonsFilter))
104
+ end
105
+ =end
106
+
@@ -2,6 +2,9 @@
2
2
  class RatsitError < StandardError
3
3
  end
4
4
 
5
+ class RatsitAbstractError < RatsitError
6
+ end
7
+
5
8
  class RatsitRequestError < RatsitError
6
9
  end
7
10
 
@@ -0,0 +1,212 @@
1
+
2
+ require 'json'
3
+ require 'ratsit/errors'
4
+
5
+ module Ratsit
6
+ module Filter
7
+
8
+ # Person filters
9
+ FILTER_MARRIED = 'Married'
10
+ FILTER_UNMARRIED = 'Unmarried'
11
+ FILTER_MALE = 'Male'
12
+ FILTER_FEMALE = 'Female'
13
+ FILTER_COMPANY_ENGAGEMENT = 'CompanyEngagement'
14
+ FILTER_NO_COMPANY_ENGAGEMENT = 'NoCompanyEngagement'
15
+ FILTER_AGE_FROM = 'AgeFrom'
16
+ FILTER_AGE_TO = 'AgeTo'
17
+
18
+ FILTER_FIRST_NAME = 'firstName'
19
+ FILTER_LAST_NAME = 'lastName'
20
+ FILTER_SSN = 'ssn'
21
+ FILTER_USE_PHONETIC_SEARCH = 'usePhoneticSearch'
22
+
23
+ # Company filters
24
+ FILTER_AB = 'AB'
25
+ FILTER_EF = 'EF'
26
+ FILTER_HB = 'HB'
27
+ FILTER_KB = 'KB'
28
+ FILTER_HB_KB = "#{FILTER_HB}/#{FILTER_KB}"
29
+ FILTER_OTHER = 'Other'
30
+
31
+
32
+ # token filters
33
+ FILTER_TOKEN = 'token'
34
+ FILTER_IDS = 'IDs'
35
+ FILTER_COMPANY_NAME = 'companyName'
36
+ FILTER_ADDRESS = 'address'
37
+ FILTER_ZIP_CODE = 'zipCode'
38
+ FILTER_CITY = 'city'
39
+ FILTER_MUNICIPALITY = 'municipality'
40
+ FILTER_PHONE = 'phone'
41
+ FILTER_COMPANY_TYPE = 'companyType'
42
+ FILTER_SEARCH_AGE = 'searchAge'
43
+
44
+ FILTER_PACKAGES = 'packages'
45
+ FILTER_ORG_NR = 'orgnr'
46
+ FILTER_PNR = 'pnr'
47
+
48
+ FILTER_NUMBER_OF_HITS = 'numberOfHits'
49
+
50
+ FILTER_PACKAGE_SMALL_1 = 'small 1'
51
+ FILTER_PACKAGE_SMALL_2 = 'small 2'
52
+ FILTER_PACKAGE_SMALL_3 = 'small 3'
53
+ FILTER_PACKAGE_REMARK = 'anmärkning'
54
+ FILTER_PACKAGE_MEDIUM = 'medium'
55
+ FILTER_PACKAGE_LARGE = 'large'
56
+
57
+ class RatsitFilter
58
+
59
+ def abstract(msg=nil)
60
+ _msg = msg || 'This class should not be used directly'
61
+ raise RatsitAbstractError, _msg
62
+ end
63
+
64
+ def initialize()
65
+ @abstract_interface_msg = 'This interface is abstract. Implement method in subclass'
66
+ if self.instance_of?(RatsitFilter)
67
+ abstract
68
+ end
69
+ @active_filters = {}
70
+ @filter_defaults = {}
71
+ end
72
+
73
+ def active_filters
74
+ return (@active_filters.nil?)? nil: @active_filters
75
+ end
76
+
77
+ def to_json
78
+ af = self.active_filters
79
+ return '{}' if af.nil?
80
+ af.to_json
81
+ end
82
+
83
+ def to_obj
84
+ @active_filters
85
+ end
86
+
87
+ def update(filter_key='', filter_value)
88
+ #puts "update #{filter_key}: #{filter_value}"
89
+ if !filter_key.is_a?(String)
90
+ raise RatsitFilterError, 'Invalid filter key'
91
+ end
92
+ if filter_value.nil?
93
+ raise RatsitFilterError, 'Invalid filter value'
94
+ end
95
+ if !@active_filters.has_key?(filter_key)
96
+ raise RatsitFilterError, 'Non-existent filter key'
97
+ end
98
+ @curr_filters = Marshal.load(Marshal.dump(@active_filters))
99
+ @curr_filters[filter_key] = filter_value
100
+ @active_filters = validate_filters(@filter_defaults, @curr_filters)
101
+ end
102
+
103
+ def reset(filter_name='')
104
+ if !filter_name.is_a?(String)
105
+ raise RatsitFilterError, 'Invalid filter key'
106
+ end
107
+ if !@filter_defaults.has_key?(filter_name)
108
+ raise RatsitFilterError, 'Non-existent filter key'
109
+ end
110
+ @active_filters[filter_name] = @filter_defaults[filter_name][:default]
111
+ end
112
+
113
+ end
114
+
115
+ private
116
+
117
+ def parse_string(arg)
118
+ return arg if arg.is_a?(String)
119
+ raise RatsitFilterError, 'Invalid string'
120
+ end
121
+
122
+ def parse_bool(arg)
123
+ return arg if arg.is_a?(TrueClass) || arg.is_a?(FalseClass)
124
+ raise RatsitFilterError, 'Invalid bool representation' if !arg.is_a?(String)
125
+ return true if arg.downcase == 'true'
126
+ return false if arg.downcase == 'false'
127
+ raise RatsitFilterError, 'Invalid textual bool value'
128
+ end
129
+
130
+ def parse_bool_string(arg)
131
+ return arg if arg == 'true' || arg == 'false'
132
+ return 'true' if arg.is_a?(TrueClass)
133
+ return 'false' if arg.is_a?(FalseClass)
134
+ raise RatsitFilterError, 'Invalid string representation of bool'
135
+ end
136
+
137
+ def parse_age(arg)
138
+ if arg.is_a?(String)
139
+ if !(arg =~ /^[0-9]+$/)
140
+ raise RatsitFilterError, 'Invalid age in filter'
141
+ end
142
+ larg = arg.to_i
143
+ elsif arg.is_a?(Integer)
144
+ larg = arg
145
+ else
146
+ raise RatsitFilterError, 'Invalid arg type in filter'
147
+ end
148
+ # ratsit specifies these ages.
149
+ if larg < 0 || larg > 150
150
+ raise RatsitFilterError, 'Invalid age'
151
+ end
152
+ "#{larg}"
153
+ end
154
+
155
+ def parse_int(arg)
156
+ return arg if arg.is_a?(Integer)
157
+ return arg.to_i if arg =~ /^[0-9]+$/
158
+ raise RatsitFilterError, 'Invalid integer'
159
+ end
160
+
161
+ def parse_list(arg)
162
+ return arg.join(',') if arg.is_a?(Array)
163
+ return arg if arg.is_a?(String)
164
+ raise RatsitFilterError, 'Invalid array'
165
+ end
166
+
167
+ def validate_list(lst, accepted_values=[])
168
+ if lst.is_a?(Array)
169
+ arr = lst
170
+ elsif lst.is_a?(String)
171
+ arr = lst.split(',').map(&:strip)
172
+ end
173
+ err = []
174
+ arr.each { |v| err.push(v) if !accepted_values.include?(v) }
175
+ if err.length > 0
176
+ raise RatsitFilterError, "Invalid list values: #{err.join(',')}"
177
+ end
178
+ arr.join(',')
179
+ end
180
+
181
+ def validate_company_types(lst)
182
+ return validate_list(lst, [FILTER_AB, FILTER_EF, FILTER_HB_KB, FILTER_OTHER])
183
+ end
184
+
185
+ def validate_package_types(lst)
186
+ return validate_list(lst, [FILTER_PACKAGE_SMALL_1, FILTER_PACKAGE_SMALL_2, FILTER_PACKAGE_SMALL_3, FILTER_PACKAGE_REMARK, FILTER_PACKAGE_MEDIUM, FILTER_PACKAGE_LARGE])
187
+ end
188
+
189
+ def validate_filters(filter_defaults={}, filters={})
190
+ if !filters.is_a?(Hash)
191
+ filters = {}
192
+ end
193
+ filters.reject! { |k,_| !filter_defaults.keys.include? k }
194
+ filter_defaults.each do |filter_name, defs|
195
+ if !filters.keys.include? filter_name
196
+ filters[filter_name] = defs[:default]
197
+ end
198
+ filters[filter_name] = defs[:parse].call(filters[filter_name])
199
+ if defs.has_key?(:validate)
200
+ filters[filter_name] = defs[:validate].call(filters[filter_name])
201
+ end
202
+ end
203
+ if filters.keys.include?(FILTER_AGE_TO) && filters.keys.include?(FILTER_AGE_FROM)
204
+ if filters[FILTER_AGE_TO].to_i < filters[FILTER_AGE_FROM].to_i
205
+ raise RatsitFilterError, 'Invalid age span'
206
+ end
207
+ end
208
+ filters
209
+ end
210
+
211
+ end
212
+ end
@@ -0,0 +1,27 @@
1
+
2
+
3
+ require 'ratsit/errors'
4
+ require 'ratsit/filter/filter'
5
+
6
+ module Ratsit
7
+ module Filter
8
+
9
+
10
+
11
+ class CompanyFilter < Ratsit::Filter::RatsitFilter
12
+ include Ratsit::Filter
13
+ #{"AB":true,"EF":true,"HB":true,"Other":true}
14
+ def initialize(filters={})
15
+ super()
16
+ @filter_defaults = {
17
+ FILTER_AB => {:parse => method(:parse_bool), :default => true},
18
+ FILTER_EF => {:parse => method(:parse_bool), :default => true},
19
+ FILTER_HB => {:parse => method(:parse_bool), :default => true},
20
+ FILTER_OTHER => {:parse => method(:parse_bool), :default => true}
21
+ }
22
+ @active_filters = validate_filters(@filter_defaults, filters)
23
+ end
24
+ end
25
+
26
+ end
27
+ end
@@ -0,0 +1,21 @@
1
+
2
+ require 'ratsit/errors'
3
+ require 'ratsit/filter/filter'
4
+
5
+ module Ratsit
6
+ module Filter
7
+ class GetAnnualReportFilter < Ratsit::Filter::RatsitFilter
8
+ include Ratsit::Filter
9
+
10
+ def initialize(filters={})
11
+ super()
12
+ @filter_defaults = {
13
+ FILTER_TOKEN => {:parse => method(:parse_string), :default => Ratsit.get_api_key()},
14
+ FILTER_IDS => {:parse => method(:parse_list), :default => '', :validate => method(:validate_list)}
15
+ }
16
+ @active_filters = validate_filters(@filter_defaults, filters)
17
+ end
18
+ end
19
+
20
+ end
21
+ end