opener-property-tagger 3.2.1 → 3.3.1

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
  SHA256:
3
- metadata.gz: 168a0501dc6567285dd70b1a304fdc885b6d9493f9ca62863a428068b42d284e
4
- data.tar.gz: 6e9dd2b446eca6e75d4644e5cb59ec8ad64ec6f7f88e79266142129ce5ee59eb
3
+ metadata.gz: d732e35937583e6fbad1452c2dc72f894df668979a9259c19f4a84a9557b8971
4
+ data.tar.gz: 6999b3814921c0ec9cefd59b096c89b18c4ac4e9c5a9529f0fa3141c463ea306
5
5
  SHA512:
6
- metadata.gz: 7a209b8da679c06ea5fce64a11142b22b8b7a3c4da2775f832f4266af152c624f8ddb9e81bf7cbb96d668babc303fedb1243988b243faa2c72a5b7438c47c9b6
7
- data.tar.gz: 621b9a11a6c2230aee345fc4d072b8636d1c63b6533960103de475355a54baac7924867eb59176850d7b0aaaccdbc1a4a6eccf9af62652bbaf6f26097163778d
6
+ metadata.gz: 0d1d7714bfeab24e5505ea3d442b423ab3fe6daa26dfe214b412add729e2544543d0ccadf078bec3d852bb3fa2b1ec541b131a064b9a2598e38bebbeb58a6061
7
+ data.tar.gz: 24a4b3b4dcd85edd9249b16e79673487a174c58e7c826820c4b1a67aed56a8f92ec4e228e0d773598b3ed6ce14b5196a2163b48c63646d3442014fcfc2af561c
@@ -5,14 +5,15 @@ require 'monitor'
5
5
  require 'httpclient'
6
6
  require 'hashie'
7
7
  require 'json'
8
+ require 'active_support/all'
8
9
 
9
10
  require 'rexml/document'
10
11
  require 'rexml/formatters/pretty'
11
12
 
12
13
  require_relative 'property_tagger/version'
13
14
  require_relative 'property_tagger/cli'
14
- require_relative 'property_tagger/aspects_cache'
15
15
  require_relative 'property_tagger/remote_aspects_cache'
16
+ require_relative 'property_tagger/file_aspects_cache'
16
17
  require_relative 'property_tagger/processor'
17
18
 
18
19
  module Opener
@@ -66,10 +67,11 @@ module Opener
66
67
  # @param [String] input
67
68
  # @return [String]
68
69
  #
69
- def run input
70
+ def run input, params = {}
70
71
  timestamp = !options[:no_time]
71
72
 
72
73
  Processor.new(input,
74
+ params: params,
73
75
  url: remote_url,
74
76
  path: path,
75
77
  timestamp: timestamp,
@@ -3,7 +3,8 @@ module Opener
3
3
  ##
4
4
  # Thread-safe cache for storing the contents of aspect files.
5
5
  #
6
- class AspectsCache
6
+ class FileAspectsCache
7
+
7
8
  include MonitorMixin
8
9
 
9
10
  def initialize
@@ -42,6 +43,7 @@ module Opener
42
43
 
43
44
  return mapping
44
45
  end
45
- end # AspectsCache
46
- end # PropertyTagger
47
- end # Opener
46
+
47
+ end
48
+ end
49
+ end
@@ -12,9 +12,9 @@ module Opener
12
12
  ##
13
13
  # Global cache used for storing loaded aspects.
14
14
  #
15
- # @return [Opener::PropertyTagger::AspectsCache.new]
15
+ # @return [Opener::PropertyTagger::FileAspectsCache.new]
16
16
  #
17
- ASPECTS_CACHE = AspectsCache.new
17
+ FILE_ASPECTS_CACHE = FileAspectsCache.new
18
18
  REMOTE_ASPECTS_CACHE = RemoteAspectsCache.new
19
19
 
20
20
  ##
@@ -24,17 +24,19 @@ module Opener
24
24
  # @param [TrueClass|FalseClass] pretty Enable pretty formatting, disabled
25
25
  # by default due to the performance overhead.
26
26
  #
27
- def initialize file, url: nil, path: nil, timestamp: true, pretty: false
27
+ def initialize file, params: {}, url: nil, path: nil, timestamp: true, pretty: false
28
28
  @document = Oga.parse_xml file
29
29
  raise 'Error parsing input. Input is required to be KAF' unless is_kaf?
30
30
  @timestamp = timestamp
31
31
  @pretty = pretty
32
32
 
33
+ @params = params
34
+ @cache_keys = params[:cache_keys] || {lang: language}
33
35
  @remote = !url.nil?
34
36
  @aspects_path = path
35
37
  @aspects_url = url
36
38
 
37
- @aspects = if @remote then REMOTE_ASPECTS_CACHE[language] else ASPECTS_CACHE[aspects_file] end
39
+ @aspects = if @remote then REMOTE_ASPECTS_CACHE[**@cache_keys].aspects else FILE_ASPECTS_CACHE[aspects_file] end
38
40
  end
39
41
 
40
42
  ##
@@ -14,25 +14,43 @@ module Opener
14
14
  @cache = {}
15
15
  end
16
16
 
17
- def [] lang
17
+ def [] **params
18
18
  synchronize do
19
- @cache[lang] ||= load_aspects lang
19
+ if existing = @cache[params]
20
+ existing.tap do
21
+ Thread.new{ @cache[params] = cache_update existing, **params }
22
+ end
23
+ else
24
+ @cache[params] = cache_update **params
25
+ end
20
26
  end
21
27
  end
22
28
  alias_method :get, :[]
23
29
 
24
- def load_aspects lang
25
- mapping = Hash.new{ |hash, key| hash[key] = [] }
26
- url = "#{@url}&language_code=#{lang}"
30
+ def cache_update existing = nil, **params
31
+ from = Time.now
32
+ lexicons = load_aspects cache: existing, **params
33
+
34
+ return existing if existing and lexicons.blank?
35
+ Hashie::Mash.new(
36
+ aspects: lexicons,
37
+ from: from,
38
+ )
39
+ end
40
+
41
+ def load_aspects lang:, cache:, **params
42
+ url = "#{@url}&language_code=#{lang}&#{params.to_query}"
43
+ url += "&if_updated_since=#{cache.from.iso8601}" if cache
44
+ puts "#{lang}: loading aspects from #{url}"
45
+
27
46
  lexicons = JSON.parse HTTPClient.new.get(url).body
28
47
  lexicons = lexicons['data'].map{ |l| Hashie::Mash.new l }
29
- puts "#{lang}: loaded aspects from #{url}"
30
-
48
+ mapping = Hash.new{ |hash, key| hash[key] = [] }
31
49
  lexicons.each do |l|
32
50
  mapping[l.lemma.to_sym] << l.aspect
33
51
  end
34
52
 
35
- return mapping
53
+ mapping
36
54
  end
37
55
 
38
56
  end
@@ -1,7 +1,7 @@
1
1
  module Opener
2
2
  class PropertyTagger
3
3
 
4
- VERSION = '3.2.1'
4
+ VERSION = '3.3.1'
5
5
 
6
6
  end
7
7
  end
@@ -31,6 +31,7 @@ Gem::Specification.new do |gem|
31
31
  gem.add_dependency 'oga', ['~> 1.0', '>= 1.3.1']
32
32
  gem.add_dependency 'httpclient'
33
33
  gem.add_dependency 'hashie'
34
+ gem.add_dependency 'activesupport'
34
35
 
35
36
  gem.add_development_dependency 'rspec', '~> 3.0'
36
37
  gem.add_development_dependency 'cucumber'
metadata CHANGED
@@ -1,59 +1,58 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: opener-property-tagger
3
3
  version: !ruby/object:Gem::Version
4
- version: 3.2.1
4
+ version: 3.3.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - development@olery.com
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2020-09-23 00:00:00.000000000 Z
11
+ date: 2020-10-07 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
- name: opener-daemons
15
14
  requirement: !ruby/object:Gem::Requirement
16
15
  requirements:
17
16
  - - "~>"
18
17
  - !ruby/object:Gem::Version
19
18
  version: '2.2'
20
- type: :runtime
19
+ name: opener-daemons
21
20
  prerelease: false
21
+ type: :runtime
22
22
  version_requirements: !ruby/object:Gem::Requirement
23
23
  requirements:
24
24
  - - "~>"
25
25
  - !ruby/object:Gem::Version
26
26
  version: '2.2'
27
27
  - !ruby/object:Gem::Dependency
28
- name: opener-webservice
29
28
  requirement: !ruby/object:Gem::Requirement
30
29
  requirements:
31
30
  - - "~>"
32
31
  - !ruby/object:Gem::Version
33
32
  version: '2.1'
34
- type: :runtime
33
+ name: opener-webservice
35
34
  prerelease: false
35
+ type: :runtime
36
36
  version_requirements: !ruby/object:Gem::Requirement
37
37
  requirements:
38
38
  - - "~>"
39
39
  - !ruby/object:Gem::Version
40
40
  version: '2.1'
41
41
  - !ruby/object:Gem::Dependency
42
- name: opener-core
43
42
  requirement: !ruby/object:Gem::Requirement
44
43
  requirements:
45
44
  - - "~>"
46
45
  - !ruby/object:Gem::Version
47
46
  version: '2.2'
48
- type: :runtime
47
+ name: opener-core
49
48
  prerelease: false
49
+ type: :runtime
50
50
  version_requirements: !ruby/object:Gem::Requirement
51
51
  requirements:
52
52
  - - "~>"
53
53
  - !ruby/object:Gem::Version
54
54
  version: '2.2'
55
55
  - !ruby/object:Gem::Dependency
56
- name: oga
57
56
  requirement: !ruby/object:Gem::Requirement
58
57
  requirements:
59
58
  - - "~>"
@@ -62,8 +61,9 @@ dependencies:
62
61
  - - ">="
63
62
  - !ruby/object:Gem::Version
64
63
  version: 1.3.1
65
- type: :runtime
64
+ name: oga
66
65
  prerelease: false
66
+ type: :runtime
67
67
  version_requirements: !ruby/object:Gem::Requirement
68
68
  requirements:
69
69
  - - "~>"
@@ -73,84 +73,98 @@ dependencies:
73
73
  - !ruby/object:Gem::Version
74
74
  version: 1.3.1
75
75
  - !ruby/object:Gem::Dependency
76
- name: httpclient
77
76
  requirement: !ruby/object:Gem::Requirement
78
77
  requirements:
79
78
  - - ">="
80
79
  - !ruby/object:Gem::Version
81
80
  version: '0'
82
- type: :runtime
81
+ name: httpclient
83
82
  prerelease: false
83
+ type: :runtime
84
84
  version_requirements: !ruby/object:Gem::Requirement
85
85
  requirements:
86
86
  - - ">="
87
87
  - !ruby/object:Gem::Version
88
88
  version: '0'
89
89
  - !ruby/object:Gem::Dependency
90
- name: hashie
91
90
  requirement: !ruby/object:Gem::Requirement
92
91
  requirements:
93
92
  - - ">="
94
93
  - !ruby/object:Gem::Version
95
94
  version: '0'
95
+ name: hashie
96
+ prerelease: false
96
97
  type: :runtime
98
+ version_requirements: !ruby/object:Gem::Requirement
99
+ requirements:
100
+ - - ">="
101
+ - !ruby/object:Gem::Version
102
+ version: '0'
103
+ - !ruby/object:Gem::Dependency
104
+ requirement: !ruby/object:Gem::Requirement
105
+ requirements:
106
+ - - ">="
107
+ - !ruby/object:Gem::Version
108
+ version: '0'
109
+ name: activesupport
97
110
  prerelease: false
111
+ type: :runtime
98
112
  version_requirements: !ruby/object:Gem::Requirement
99
113
  requirements:
100
114
  - - ">="
101
115
  - !ruby/object:Gem::Version
102
116
  version: '0'
103
117
  - !ruby/object:Gem::Dependency
104
- name: rspec
105
118
  requirement: !ruby/object:Gem::Requirement
106
119
  requirements:
107
120
  - - "~>"
108
121
  - !ruby/object:Gem::Version
109
122
  version: '3.0'
110
- type: :development
123
+ name: rspec
111
124
  prerelease: false
125
+ type: :development
112
126
  version_requirements: !ruby/object:Gem::Requirement
113
127
  requirements:
114
128
  - - "~>"
115
129
  - !ruby/object:Gem::Version
116
130
  version: '3.0'
117
131
  - !ruby/object:Gem::Dependency
118
- name: cucumber
119
132
  requirement: !ruby/object:Gem::Requirement
120
133
  requirements:
121
134
  - - ">="
122
135
  - !ruby/object:Gem::Version
123
136
  version: '0'
124
- type: :development
137
+ name: cucumber
125
138
  prerelease: false
139
+ type: :development
126
140
  version_requirements: !ruby/object:Gem::Requirement
127
141
  requirements:
128
142
  - - ">="
129
143
  - !ruby/object:Gem::Version
130
144
  version: '0'
131
145
  - !ruby/object:Gem::Dependency
132
- name: rake
133
146
  requirement: !ruby/object:Gem::Requirement
134
147
  requirements:
135
148
  - - ">="
136
149
  - !ruby/object:Gem::Version
137
150
  version: '0'
138
- type: :development
151
+ name: rake
139
152
  prerelease: false
153
+ type: :development
140
154
  version_requirements: !ruby/object:Gem::Requirement
141
155
  requirements:
142
156
  - - ">="
143
157
  - !ruby/object:Gem::Version
144
158
  version: '0'
145
159
  - !ruby/object:Gem::Dependency
146
- name: benchmark-ips
147
160
  requirement: !ruby/object:Gem::Requirement
148
161
  requirements:
149
162
  - - "~>"
150
163
  - !ruby/object:Gem::Version
151
164
  version: '2.0'
152
- type: :development
165
+ name: benchmark-ips
153
166
  prerelease: false
167
+ type: :development
154
168
  version_requirements: !ruby/object:Gem::Requirement
155
169
  requirements:
156
170
  - - "~>"
@@ -173,8 +187,8 @@ files:
173
187
  - config.ru
174
188
  - exec/property-tagger.rb
175
189
  - lib/opener/property_tagger.rb
176
- - lib/opener/property_tagger/aspects_cache.rb
177
190
  - lib/opener/property_tagger/cli.rb
191
+ - lib/opener/property_tagger/file_aspects_cache.rb
178
192
  - lib/opener/property_tagger/processor.rb
179
193
  - lib/opener/property_tagger/public/markdown.css
180
194
  - lib/opener/property_tagger/remote_aspects_cache.rb
@@ -205,7 +219,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
205
219
  version: '0'
206
220
  requirements: []
207
221
  rubyforge_project:
208
- rubygems_version: 2.7.8
222
+ rubygems_version: 2.7.9
209
223
  signing_key:
210
224
  specification_version: 4
211
225
  summary: Property tagger for hotels in Dutch and English.