ratsit 0.0.1 → 0.0.2

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