base_indexer 0.4.4 → 0.4.5
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 +4 -4
- data/lib/base_indexer/collection.rb +29 -23
- data/lib/base_indexer/main_indexer_engine.rb +43 -46
- data/lib/base_indexer/version.rb +1 -1
- metadata +39 -39
- data/MIT-LICENSE +0 -20
- data/lib/base_indexer/message.rb +0 -6
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 52a07e79fae26de30296699bf6e70f9699d4fc15
|
4
|
+
data.tar.gz: d0f06d3d351c58547673b56b6fde957c55d08d62
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 15ea24fd20bcc51a446d479d87a23b9491b60055ca9099c109775116652a8334ba102a6713018688ac09cd60ac39a0d257ef36886edf063ece050e8d10909004
|
7
|
+
data.tar.gz: 268317e54af8bf08a714624d743e783b7b55ce7b53fe7d7f05975cdc50ef9b53b30256fcad2307d7efd0504d3c5c7d537bb0d6c701b23c7ea573eef911277597
|
@@ -1,41 +1,47 @@
|
|
1
1
|
module BaseIndexer
|
2
|
-
|
2
|
+
|
3
3
|
# It caches the collection information such as name and catkey
|
4
4
|
class Collection
|
5
|
-
|
5
|
+
|
6
|
+
def initialize(collection_druid)
|
7
|
+
@collection_druid = collection_druid
|
8
|
+
end
|
9
|
+
|
6
10
|
# Returns the collection name from cache, otherwise will fetch it from PURL.
|
7
11
|
#
|
8
12
|
# @param collection_druid [String] is the druid for a collection e.g., ab123cd4567
|
9
13
|
# @return [Array<String>] the collection data or [] if there is no name and catkey or the object
|
10
14
|
# is not a collection
|
11
|
-
def
|
12
|
-
|
13
|
-
collection_info = get_from_cache(collection_druid)
|
14
|
-
if collection_info.nil?
|
15
|
-
collection_info = get_from_purl(collection_druid)
|
16
|
-
end
|
17
|
-
collection_info
|
15
|
+
def collection_info
|
16
|
+
from_cache || from_purl || {}
|
18
17
|
end
|
19
|
-
|
18
|
+
|
19
|
+
private
|
20
|
+
|
20
21
|
# @param [String] collection_druid is the druid for a collection e.g., ab123cd4567
|
21
22
|
# @return [String] return the collection label from cache if available, nil otherwise
|
22
|
-
def
|
23
|
-
Rails.cache.read(collection_druid)
|
23
|
+
def from_cache
|
24
|
+
Rails.cache.read(@collection_druid)
|
24
25
|
end
|
25
|
-
|
26
|
+
|
26
27
|
# @param [String] collection_druid is the druid for a collection e.g., ab123cd4567
|
27
28
|
# @return [String] return the collection label from purl if available, nil otherwise
|
28
|
-
def
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
|
34
|
-
|
29
|
+
def from_purl
|
30
|
+
return nil unless purl_model
|
31
|
+
return nil unless purl_model.is_collection
|
32
|
+
return nil unless purl_model.label && purl_model.catkey
|
33
|
+
purl_data = { label: purl_model.label, ckey: purl_model.catkey }
|
34
|
+
Rails.cache.write(@collection_druid, purl_data, expires_in: 1.hours)
|
35
|
+
purl_data
|
36
|
+
end
|
37
|
+
|
38
|
+
def purl_model
|
39
|
+
@purl_model ||= begin
|
40
|
+
DiscoveryIndexer::InputXml::Purlxml.new(@collection_druid).load
|
35
41
|
rescue => e
|
36
|
-
Rails.logger.error "There is a problem in retrieving collection name and/or catkey for #{collection_druid}. #{e.inspect}\n#{e.message }\n#{e.backtrace}"
|
37
|
-
|
42
|
+
Rails.logger.error "There is a problem in retrieving collection name and/or catkey for #{@collection_druid}. #{e.inspect}\n#{e.message }\n#{e.backtrace}"
|
43
|
+
nil
|
38
44
|
end
|
39
45
|
end
|
40
46
|
end
|
41
|
-
end
|
47
|
+
end
|
@@ -1,10 +1,9 @@
|
|
1
1
|
require 'discovery-indexer'
|
2
2
|
module BaseIndexer
|
3
|
-
|
4
3
|
# It is responsible for performing the basic indexing steps, it includes reading
|
5
|
-
# the input from PURL server, getting collection names, mapping it to solr doc hash,
|
6
|
-
# and write it to SOLR core . It can also delete the object from all the registered
|
7
|
-
#
|
4
|
+
# the input from PURL server, getting collection names, mapping it to solr doc hash,
|
5
|
+
# and write it to SOLR core . It can also delete the object from all the registered
|
6
|
+
#
|
8
7
|
# @example Index with target list
|
9
8
|
# indexer = BaseIndexer::MainIndexerEngine.new
|
10
9
|
# indexer.index "ab123cd456", ["searchworks","revs"]
|
@@ -18,95 +17,93 @@ module BaseIndexer
|
|
18
17
|
# indexer.delete "ab123cd456"
|
19
18
|
class MainIndexerEngine
|
20
19
|
include DiscoveryIndexer
|
21
|
-
|
20
|
+
|
22
21
|
# It is the main indexing function
|
23
|
-
#
|
22
|
+
#
|
24
23
|
# @param druid [String] is the druid for an object e.g., ab123cd4567
|
25
|
-
# @param targets [Array] is an array with the targets list to index towards,
|
24
|
+
# @param targets [Array] is an array with the targets list to index towards,
|
26
25
|
# if it is nil, the method will read the target list from release_tags
|
27
26
|
#
|
28
27
|
# @raise it will raise erros if there is any problems happen in any level
|
29
|
-
def index
|
28
|
+
def index(druid, targets = nil)
|
30
29
|
# Read input mods and purl
|
31
30
|
purl_model = read_purl(druid)
|
32
31
|
mods_model = read_mods(druid)
|
33
|
-
collection_data =
|
34
|
-
|
32
|
+
collection_data = collection_data(purl_model.collection_druids)
|
33
|
+
|
35
34
|
# Map the input to solr_doc
|
36
|
-
solr_doc =
|
37
|
-
|
35
|
+
solr_doc = BaseIndexer.mapper_class_name.constantize.new(druid, mods_model, purl_model, collection_data).convert_to_solr_doc
|
36
|
+
|
38
37
|
# Get target list
|
39
|
-
targets_hash={}
|
40
|
-
if targets.
|
41
|
-
targets_hash =
|
38
|
+
targets_hash = {}
|
39
|
+
if targets.present?
|
40
|
+
targets_hash = targets_hash_from_param(targets)
|
42
41
|
else
|
43
|
-
targets_hash =
|
42
|
+
targets_hash = purl_model.release_tags_hash
|
44
43
|
end
|
45
|
-
|
44
|
+
|
46
45
|
targets_hash = update_targets_before_write(targets_hash, purl_model)
|
47
|
-
|
46
|
+
|
48
47
|
# Get SOLR configuration and write
|
49
48
|
solr_targets_configs = BaseIndexer.solr_configuration_class_name.constantize.instance.get_configuration_hash
|
50
|
-
BaseIndexer.solr_writer_class_name.constantize.new.process(
|
49
|
+
BaseIndexer.solr_writer_class_name.constantize.new.process(druid, solr_doc, targets_hash, solr_targets_configs)
|
51
50
|
end
|
52
|
-
|
51
|
+
|
53
52
|
# It deletes an item defined by druid from all registered solr core
|
54
53
|
# @param druid [String] is the druid for an object e.g., ab123cd4567
|
55
|
-
def delete
|
54
|
+
def delete(druid)
|
56
55
|
solr_targets_configs = BaseIndexer.solr_configuration_class_name.constantize.instance.get_configuration_hash
|
57
|
-
BaseIndexer.solr_writer_class_name.constantize.new.solr_delete_from_all(
|
56
|
+
BaseIndexer.solr_writer_class_name.constantize.new.solr_delete_from_all(druid, solr_targets_configs)
|
58
57
|
end
|
59
|
-
|
60
|
-
def read_purl
|
61
|
-
|
58
|
+
|
59
|
+
def read_purl(druid)
|
60
|
+
DiscoveryIndexer::InputXml::Purlxml.new(druid).load
|
62
61
|
end
|
63
|
-
|
64
|
-
def read_mods
|
65
|
-
|
62
|
+
|
63
|
+
def read_mods(druid)
|
64
|
+
DiscoveryIndexer::InputXml::Modsxml.new(druid).load
|
66
65
|
end
|
67
|
-
|
66
|
+
|
68
67
|
# It converts targets array to targets hash
|
69
68
|
# @param targets [Array] a list of specfic targets
|
70
69
|
# @return [Hash] a hash of targets with true value
|
71
70
|
# @example convert target list
|
72
|
-
#
|
71
|
+
# targets_hash_from_param( ["searchworks","revs"] )
|
73
72
|
# {"searchworks"=>true, "revs"=>true}
|
74
|
-
def
|
73
|
+
def targets_hash_from_param(targets)
|
75
74
|
targets_hash = {}
|
76
|
-
unless targets.nil?
|
75
|
+
unless targets.nil?
|
77
76
|
targets.each do |target|
|
78
77
|
targets_hash[target] = true
|
79
78
|
end
|
80
79
|
end
|
81
|
-
|
80
|
+
targets_hash
|
82
81
|
end
|
83
|
-
|
82
|
+
|
84
83
|
# It allows the consumer to modify the targets list before doing the final writing
|
85
84
|
# to the solr core. Default behavior returns the targets_hash as it is
|
86
85
|
# @param targets_hash [Hash] a hash of targets with true value
|
87
86
|
# @param purl_model [DiscoveryIndexer::Reader::PurlxmlModel] represents the purlxml model
|
88
|
-
# @return [Hash] a hash of targets
|
89
|
-
def update_targets_before_write(targets_hash,
|
90
|
-
|
87
|
+
# @return [Hash] a hash of targets
|
88
|
+
def update_targets_before_write(targets_hash, _purl_model)
|
89
|
+
targets_hash
|
91
90
|
end
|
92
|
-
|
91
|
+
|
93
92
|
# It converts collection_druids list to a hash with names. If the druid doesn't
|
94
93
|
# have a collection name, it will be excluded from the hash
|
95
|
-
# @param collection_druids [Array] a list of druids
|
94
|
+
# @param collection_druids [Array] a list of druids
|
96
95
|
# !["ab123cd4567", "ef123gh4567"]
|
97
|
-
# @return [Hash] a hash for collection druid and its name
|
96
|
+
# @return [Hash] a hash for collection druid and its name
|
98
97
|
# !{"ab123cd4567"=>"Collection 1", "ef123gh4567"=>"Collection 2"}
|
99
|
-
def
|
98
|
+
def collection_data(collection_druids)
|
100
99
|
collection_data = {}
|
101
|
-
|
102
|
-
unless collection_druids.nil? then
|
100
|
+
unless collection_druids.nil?
|
103
101
|
collection_druids.each do |cdruid|
|
104
|
-
|
105
|
-
collection_data[cdruid] = cdata
|
102
|
+
cdata = BaseIndexer::Collection.new(cdruid).collection_info
|
103
|
+
collection_data[cdruid] = cdata if cdata.present?
|
106
104
|
end
|
107
105
|
end
|
108
106
|
collection_data
|
109
107
|
end
|
110
|
-
|
111
108
|
end
|
112
109
|
end
|
data/lib/base_indexer/version.rb
CHANGED
metadata
CHANGED
@@ -1,225 +1,226 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: base_indexer
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.4.
|
4
|
+
version: 0.4.5
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Ahmed Alsum
|
8
|
+
- Laney McGlohon
|
8
9
|
autorequire:
|
9
10
|
bindir: bin
|
10
11
|
cert_chain: []
|
11
|
-
date: 2015-
|
12
|
+
date: 2015-10-01 00:00:00.000000000 Z
|
12
13
|
dependencies:
|
13
14
|
- !ruby/object:Gem::Dependency
|
14
15
|
name: rails
|
15
16
|
requirement: !ruby/object:Gem::Requirement
|
16
17
|
requirements:
|
17
|
-
- - ~>
|
18
|
+
- - "~>"
|
18
19
|
- !ruby/object:Gem::Version
|
19
20
|
version: '4.1'
|
20
|
-
- -
|
21
|
+
- - ">="
|
21
22
|
- !ruby/object:Gem::Version
|
22
23
|
version: 4.1.9
|
23
24
|
type: :runtime
|
24
25
|
prerelease: false
|
25
26
|
version_requirements: !ruby/object:Gem::Requirement
|
26
27
|
requirements:
|
27
|
-
- - ~>
|
28
|
+
- - "~>"
|
28
29
|
- !ruby/object:Gem::Version
|
29
30
|
version: '4.1'
|
30
|
-
- -
|
31
|
+
- - ">="
|
31
32
|
- !ruby/object:Gem::Version
|
32
33
|
version: 4.1.9
|
33
34
|
- !ruby/object:Gem::Dependency
|
34
35
|
name: discovery-indexer
|
35
36
|
requirement: !ruby/object:Gem::Requirement
|
36
37
|
requirements:
|
37
|
-
- -
|
38
|
+
- - ">="
|
38
39
|
- !ruby/object:Gem::Version
|
39
|
-
version: 0.9.
|
40
|
+
version: 0.9.9
|
40
41
|
type: :runtime
|
41
42
|
prerelease: false
|
42
43
|
version_requirements: !ruby/object:Gem::Requirement
|
43
44
|
requirements:
|
44
|
-
- -
|
45
|
+
- - ">="
|
45
46
|
- !ruby/object:Gem::Version
|
46
|
-
version: 0.9.
|
47
|
+
version: 0.9.9
|
47
48
|
- !ruby/object:Gem::Dependency
|
48
49
|
name: retries
|
49
50
|
requirement: !ruby/object:Gem::Requirement
|
50
51
|
requirements:
|
51
|
-
- -
|
52
|
+
- - ">="
|
52
53
|
- !ruby/object:Gem::Version
|
53
54
|
version: '0'
|
54
55
|
type: :runtime
|
55
56
|
prerelease: false
|
56
57
|
version_requirements: !ruby/object:Gem::Requirement
|
57
58
|
requirements:
|
58
|
-
- -
|
59
|
+
- - ">="
|
59
60
|
- !ruby/object:Gem::Version
|
60
61
|
version: '0'
|
61
62
|
- !ruby/object:Gem::Dependency
|
62
63
|
name: is_it_working-cbeer
|
63
64
|
requirement: !ruby/object:Gem::Requirement
|
64
65
|
requirements:
|
65
|
-
- -
|
66
|
+
- - ">="
|
66
67
|
- !ruby/object:Gem::Version
|
67
68
|
version: '0'
|
68
69
|
type: :runtime
|
69
70
|
prerelease: false
|
70
71
|
version_requirements: !ruby/object:Gem::Requirement
|
71
72
|
requirements:
|
72
|
-
- -
|
73
|
+
- - ">="
|
73
74
|
- !ruby/object:Gem::Version
|
74
75
|
version: '0'
|
75
76
|
- !ruby/object:Gem::Dependency
|
76
77
|
name: sqlite3
|
77
78
|
requirement: !ruby/object:Gem::Requirement
|
78
79
|
requirements:
|
79
|
-
- -
|
80
|
+
- - ">="
|
80
81
|
- !ruby/object:Gem::Version
|
81
82
|
version: '0'
|
82
83
|
type: :development
|
83
84
|
prerelease: false
|
84
85
|
version_requirements: !ruby/object:Gem::Requirement
|
85
86
|
requirements:
|
86
|
-
- -
|
87
|
+
- - ">="
|
87
88
|
- !ruby/object:Gem::Version
|
88
89
|
version: '0'
|
89
90
|
- !ruby/object:Gem::Dependency
|
90
91
|
name: rspec
|
91
92
|
requirement: !ruby/object:Gem::Requirement
|
92
93
|
requirements:
|
93
|
-
- - ~>
|
94
|
+
- - "~>"
|
94
95
|
- !ruby/object:Gem::Version
|
95
96
|
version: 3.1.0
|
96
97
|
type: :development
|
97
98
|
prerelease: false
|
98
99
|
version_requirements: !ruby/object:Gem::Requirement
|
99
100
|
requirements:
|
100
|
-
- - ~>
|
101
|
+
- - "~>"
|
101
102
|
- !ruby/object:Gem::Version
|
102
103
|
version: 3.1.0
|
103
104
|
- !ruby/object:Gem::Dependency
|
104
105
|
name: rspec-rails
|
105
106
|
requirement: !ruby/object:Gem::Requirement
|
106
107
|
requirements:
|
107
|
-
- - ~>
|
108
|
+
- - "~>"
|
108
109
|
- !ruby/object:Gem::Version
|
109
110
|
version: 3.1.0
|
110
111
|
type: :development
|
111
112
|
prerelease: false
|
112
113
|
version_requirements: !ruby/object:Gem::Requirement
|
113
114
|
requirements:
|
114
|
-
- - ~>
|
115
|
+
- - "~>"
|
115
116
|
- !ruby/object:Gem::Version
|
116
117
|
version: 3.1.0
|
117
118
|
- !ruby/object:Gem::Dependency
|
118
119
|
name: capybara
|
119
120
|
requirement: !ruby/object:Gem::Requirement
|
120
121
|
requirements:
|
121
|
-
- -
|
122
|
+
- - ">="
|
122
123
|
- !ruby/object:Gem::Version
|
123
124
|
version: '0'
|
124
125
|
type: :development
|
125
126
|
prerelease: false
|
126
127
|
version_requirements: !ruby/object:Gem::Requirement
|
127
128
|
requirements:
|
128
|
-
- -
|
129
|
+
- - ">="
|
129
130
|
- !ruby/object:Gem::Version
|
130
131
|
version: '0'
|
131
132
|
- !ruby/object:Gem::Dependency
|
132
133
|
name: vcr
|
133
134
|
requirement: !ruby/object:Gem::Requirement
|
134
135
|
requirements:
|
135
|
-
- -
|
136
|
+
- - ">="
|
136
137
|
- !ruby/object:Gem::Version
|
137
138
|
version: '0'
|
138
139
|
type: :development
|
139
140
|
prerelease: false
|
140
141
|
version_requirements: !ruby/object:Gem::Requirement
|
141
142
|
requirements:
|
142
|
-
- -
|
143
|
+
- - ">="
|
143
144
|
- !ruby/object:Gem::Version
|
144
145
|
version: '0'
|
145
146
|
- !ruby/object:Gem::Dependency
|
146
147
|
name: webmock
|
147
148
|
requirement: !ruby/object:Gem::Requirement
|
148
149
|
requirements:
|
149
|
-
- -
|
150
|
+
- - ">="
|
150
151
|
- !ruby/object:Gem::Version
|
151
152
|
version: '0'
|
152
153
|
type: :development
|
153
154
|
prerelease: false
|
154
155
|
version_requirements: !ruby/object:Gem::Requirement
|
155
156
|
requirements:
|
156
|
-
- -
|
157
|
+
- - ">="
|
157
158
|
- !ruby/object:Gem::Version
|
158
159
|
version: '0'
|
159
160
|
- !ruby/object:Gem::Dependency
|
160
161
|
name: coveralls
|
161
162
|
requirement: !ruby/object:Gem::Requirement
|
162
163
|
requirements:
|
163
|
-
- -
|
164
|
+
- - ">="
|
164
165
|
- !ruby/object:Gem::Version
|
165
166
|
version: '0'
|
166
167
|
type: :development
|
167
168
|
prerelease: false
|
168
169
|
version_requirements: !ruby/object:Gem::Requirement
|
169
170
|
requirements:
|
170
|
-
- -
|
171
|
+
- - ">="
|
171
172
|
- !ruby/object:Gem::Version
|
172
173
|
version: '0'
|
173
174
|
- !ruby/object:Gem::Dependency
|
174
175
|
name: yard
|
175
176
|
requirement: !ruby/object:Gem::Requirement
|
176
177
|
requirements:
|
177
|
-
- -
|
178
|
+
- - ">="
|
178
179
|
- !ruby/object:Gem::Version
|
179
180
|
version: '0'
|
180
181
|
type: :development
|
181
182
|
prerelease: false
|
182
183
|
version_requirements: !ruby/object:Gem::Requirement
|
183
184
|
requirements:
|
184
|
-
- -
|
185
|
+
- - ">="
|
185
186
|
- !ruby/object:Gem::Version
|
186
187
|
version: '0'
|
187
188
|
- !ruby/object:Gem::Dependency
|
188
189
|
name: engine_cart
|
189
190
|
requirement: !ruby/object:Gem::Requirement
|
190
191
|
requirements:
|
191
|
-
- -
|
192
|
+
- - ">="
|
192
193
|
- !ruby/object:Gem::Version
|
193
194
|
version: '0'
|
194
195
|
type: :development
|
195
196
|
prerelease: false
|
196
197
|
version_requirements: !ruby/object:Gem::Requirement
|
197
198
|
requirements:
|
198
|
-
- -
|
199
|
+
- - ">="
|
199
200
|
- !ruby/object:Gem::Version
|
200
201
|
version: '0'
|
201
202
|
- !ruby/object:Gem::Dependency
|
202
203
|
name: jettywrapper
|
203
204
|
requirement: !ruby/object:Gem::Requirement
|
204
205
|
requirements:
|
205
|
-
- -
|
206
|
+
- - ">="
|
206
207
|
- !ruby/object:Gem::Version
|
207
208
|
version: '0'
|
208
209
|
type: :development
|
209
210
|
prerelease: false
|
210
211
|
version_requirements: !ruby/object:Gem::Requirement
|
211
212
|
requirements:
|
212
|
-
- -
|
213
|
+
- - ">="
|
213
214
|
- !ruby/object:Gem::Version
|
214
215
|
version: '0'
|
215
216
|
description: Description of BaseIndexer.
|
216
217
|
email:
|
217
218
|
- aalsum@stanford.edu
|
219
|
+
- laneymcg@stanford.edu
|
218
220
|
executables: []
|
219
221
|
extensions: []
|
220
222
|
extra_rdoc_files: []
|
221
223
|
files:
|
222
|
-
- MIT-LICENSE
|
223
224
|
- README.rdoc
|
224
225
|
- Rakefile
|
225
226
|
- app/controllers/base_indexer/about_controller.rb
|
@@ -238,7 +239,6 @@ files:
|
|
238
239
|
- lib/base_indexer/collection.rb
|
239
240
|
- lib/base_indexer/engine.rb
|
240
241
|
- lib/base_indexer/main_indexer_engine.rb
|
241
|
-
- lib/base_indexer/message.rb
|
242
242
|
- lib/base_indexer/solr/solr_configuration.rb
|
243
243
|
- lib/base_indexer/solr/solr_configuration_from_file.rb
|
244
244
|
- lib/base_indexer/version.rb
|
@@ -256,17 +256,17 @@ require_paths:
|
|
256
256
|
- lib
|
257
257
|
required_ruby_version: !ruby/object:Gem::Requirement
|
258
258
|
requirements:
|
259
|
-
- -
|
259
|
+
- - ">="
|
260
260
|
- !ruby/object:Gem::Version
|
261
261
|
version: '0'
|
262
262
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
263
263
|
requirements:
|
264
|
-
- -
|
264
|
+
- - ">="
|
265
265
|
- !ruby/object:Gem::Version
|
266
266
|
version: '0'
|
267
267
|
requirements: []
|
268
268
|
rubyforge_project:
|
269
|
-
rubygems_version: 2.
|
269
|
+
rubygems_version: 2.4.5
|
270
270
|
signing_key:
|
271
271
|
specification_version: 4
|
272
272
|
summary: Summary of BaseIndexer.
|
data/MIT-LICENSE
DELETED
@@ -1,20 +0,0 @@
|
|
1
|
-
Copyright 2015 YOURNAME
|
2
|
-
|
3
|
-
Permission is hereby granted, free of charge, to any person obtaining
|
4
|
-
a copy of this software and associated documentation files (the
|
5
|
-
"Software"), to deal in the Software without restriction, including
|
6
|
-
without limitation the rights to use, copy, modify, merge, publish,
|
7
|
-
distribute, sublicense, and/or sell copies of the Software, and to
|
8
|
-
permit persons to whom the Software is furnished to do so, subject to
|
9
|
-
the following conditions:
|
10
|
-
|
11
|
-
The above copyright notice and this permission notice shall be
|
12
|
-
included in all copies or substantial portions of the Software.
|
13
|
-
|
14
|
-
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
15
|
-
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
16
|
-
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
|
17
|
-
NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
|
18
|
-
LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
|
19
|
-
OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
|
20
|
-
WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|