inat-get 0.8.0.11
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 +7 -0
- data/LICENSE +674 -0
- data/README.md +16 -0
- data/Rakefile +4 -0
- data/bin/inat-get +59 -0
- data/docs/logo.png +0 -0
- data/inat-get.gemspec +33 -0
- data/lib/extra/enum.rb +184 -0
- data/lib/extra/period.rb +252 -0
- data/lib/extra/uuid.rb +90 -0
- data/lib/inat/app/application.rb +50 -0
- data/lib/inat/app/config/messagelevel.rb +22 -0
- data/lib/inat/app/config/shiftage.rb +24 -0
- data/lib/inat/app/config/updatemode.rb +20 -0
- data/lib/inat/app/config.rb +296 -0
- data/lib/inat/app/globals.rb +80 -0
- data/lib/inat/app/info.rb +21 -0
- data/lib/inat/app/logging.rb +35 -0
- data/lib/inat/app/preamble.rb +27 -0
- data/lib/inat/app/status.rb +74 -0
- data/lib/inat/app/task/context.rb +47 -0
- data/lib/inat/app/task/dsl.rb +24 -0
- data/lib/inat/app/task.rb +75 -0
- data/lib/inat/data/api.rb +218 -0
- data/lib/inat/data/cache.rb +9 -0
- data/lib/inat/data/db.rb +87 -0
- data/lib/inat/data/ddl.rb +18 -0
- data/lib/inat/data/entity/comment.rb +29 -0
- data/lib/inat/data/entity/flag.rb +22 -0
- data/lib/inat/data/entity/identification.rb +45 -0
- data/lib/inat/data/entity/observation.rb +172 -0
- data/lib/inat/data/entity/observationphoto.rb +25 -0
- data/lib/inat/data/entity/observationsound.rb +26 -0
- data/lib/inat/data/entity/photo.rb +31 -0
- data/lib/inat/data/entity/place.rb +57 -0
- data/lib/inat/data/entity/project.rb +94 -0
- data/lib/inat/data/entity/projectadmin.rb +21 -0
- data/lib/inat/data/entity/projectobservationrule.rb +50 -0
- data/lib/inat/data/entity/request.rb +58 -0
- data/lib/inat/data/entity/sound.rb +27 -0
- data/lib/inat/data/entity/taxon.rb +94 -0
- data/lib/inat/data/entity/user.rb +67 -0
- data/lib/inat/data/entity/vote.rb +22 -0
- data/lib/inat/data/entity.rb +291 -0
- data/lib/inat/data/enums/conservationstatus.rb +30 -0
- data/lib/inat/data/enums/geoprivacy.rb +14 -0
- data/lib/inat/data/enums/iconictaxa.rb +23 -0
- data/lib/inat/data/enums/identificationcategory.rb +13 -0
- data/lib/inat/data/enums/licensecode.rb +16 -0
- data/lib/inat/data/enums/projectadminrole.rb +11 -0
- data/lib/inat/data/enums/projecttype.rb +37 -0
- data/lib/inat/data/enums/qualitygrade.rb +12 -0
- data/lib/inat/data/enums/rank.rb +60 -0
- data/lib/inat/data/model.rb +551 -0
- data/lib/inat/data/query.rb +1145 -0
- data/lib/inat/data/sets/dataset.rb +104 -0
- data/lib/inat/data/sets/list.rb +190 -0
- data/lib/inat/data/sets/listers.rb +15 -0
- data/lib/inat/data/sets/wrappers.rb +137 -0
- data/lib/inat/data/types/extras.rb +88 -0
- data/lib/inat/data/types/location.rb +89 -0
- data/lib/inat/data/types/std.rb +293 -0
- data/lib/inat/report/table.rb +135 -0
- data/lib/inat/utils/deep.rb +30 -0
- metadata +137 -0
@@ -0,0 +1,293 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require 'time'
|
4
|
+
require 'date'
|
5
|
+
require 'uri'
|
6
|
+
|
7
|
+
class Integer
|
8
|
+
|
9
|
+
def self.parse src
|
10
|
+
return nil if src == nil
|
11
|
+
return src if Integer === src
|
12
|
+
return src.to_i if String === src
|
13
|
+
raise TypeError, "Source must be a String!", caller
|
14
|
+
end
|
15
|
+
|
16
|
+
def self.ddl
|
17
|
+
:INTEGER
|
18
|
+
end
|
19
|
+
|
20
|
+
def self.from_db src
|
21
|
+
return nil if src == nil
|
22
|
+
return src if Integer === src
|
23
|
+
raise TypeError, "Source must be an Integer!", caller
|
24
|
+
end
|
25
|
+
|
26
|
+
def to_db
|
27
|
+
self
|
28
|
+
end
|
29
|
+
|
30
|
+
def to_query
|
31
|
+
to_s
|
32
|
+
end
|
33
|
+
|
34
|
+
end
|
35
|
+
|
36
|
+
class String
|
37
|
+
|
38
|
+
def self.parse src
|
39
|
+
return nil if src == nil
|
40
|
+
return src if String === src
|
41
|
+
raise TypeError, "Source must be a String!", caller
|
42
|
+
end
|
43
|
+
|
44
|
+
def self.ddl
|
45
|
+
:TEXT
|
46
|
+
end
|
47
|
+
|
48
|
+
def self.from_db src
|
49
|
+
return nil if src == nil
|
50
|
+
return src if String === src
|
51
|
+
raise TypeError, "Source must be a String!", caller
|
52
|
+
end
|
53
|
+
|
54
|
+
def to_db
|
55
|
+
self
|
56
|
+
end
|
57
|
+
|
58
|
+
def to_query
|
59
|
+
self
|
60
|
+
end
|
61
|
+
|
62
|
+
end
|
63
|
+
|
64
|
+
class Symbol
|
65
|
+
|
66
|
+
def self.parse src
|
67
|
+
return nil if src == nil
|
68
|
+
return src if Symbol === src
|
69
|
+
return src.intern if String === src
|
70
|
+
raise TypeError, "Source must be a String!", caller
|
71
|
+
end
|
72
|
+
|
73
|
+
def self.ddl
|
74
|
+
:TEXT
|
75
|
+
end
|
76
|
+
|
77
|
+
def self.from_db src
|
78
|
+
return nil if src == nil
|
79
|
+
return src if Symbol === src
|
80
|
+
return src.intern if String === src
|
81
|
+
raise TypeError, "Source must be a String!", caller
|
82
|
+
end
|
83
|
+
|
84
|
+
def to_db
|
85
|
+
self.to_s
|
86
|
+
end
|
87
|
+
|
88
|
+
def to_query
|
89
|
+
to_s
|
90
|
+
end
|
91
|
+
|
92
|
+
end
|
93
|
+
|
94
|
+
class Float
|
95
|
+
|
96
|
+
def self.parse src
|
97
|
+
return nil if src == nil
|
98
|
+
return src if Float === src
|
99
|
+
return src.to_f if String === src || Integer === src
|
100
|
+
raise TypeError, "Source must be a String!", caller
|
101
|
+
end
|
102
|
+
|
103
|
+
def self.ddl
|
104
|
+
:REAL
|
105
|
+
end
|
106
|
+
|
107
|
+
def self.from_db src
|
108
|
+
return nil if src == nil
|
109
|
+
return src if Float === src
|
110
|
+
raise TypeError, "Source must be a Float!", caller
|
111
|
+
end
|
112
|
+
|
113
|
+
def to_db
|
114
|
+
self
|
115
|
+
end
|
116
|
+
|
117
|
+
def to_query
|
118
|
+
to_s
|
119
|
+
end
|
120
|
+
|
121
|
+
end
|
122
|
+
|
123
|
+
class Time
|
124
|
+
|
125
|
+
class << self
|
126
|
+
|
127
|
+
alias :std_parse :parse
|
128
|
+
|
129
|
+
def parse src
|
130
|
+
return nil if src == nil
|
131
|
+
return src if Time === src
|
132
|
+
return std_parse(src) if String === src
|
133
|
+
raise TypeError, "Source must be a String!", caller
|
134
|
+
end
|
135
|
+
|
136
|
+
def ddl
|
137
|
+
:INTEGER
|
138
|
+
end
|
139
|
+
|
140
|
+
def from_db src
|
141
|
+
return nil if src == nil
|
142
|
+
return src if Time === src
|
143
|
+
return Time::at(src) if Integer === src
|
144
|
+
raise TypeError, "Source must be an Integer!", caller
|
145
|
+
end
|
146
|
+
|
147
|
+
end
|
148
|
+
|
149
|
+
def to_db
|
150
|
+
to_i
|
151
|
+
end
|
152
|
+
|
153
|
+
def to_query
|
154
|
+
xmlschema
|
155
|
+
end
|
156
|
+
|
157
|
+
end
|
158
|
+
|
159
|
+
class Date
|
160
|
+
|
161
|
+
class << self
|
162
|
+
|
163
|
+
alias :std_parse :parse
|
164
|
+
|
165
|
+
def parse src
|
166
|
+
return nil if src == nil
|
167
|
+
return src if Date === src
|
168
|
+
return std_parse(src) if String === src
|
169
|
+
raise TypeError, "Source must be a String!", caller
|
170
|
+
end
|
171
|
+
|
172
|
+
def ddl
|
173
|
+
:INTEGER
|
174
|
+
end
|
175
|
+
|
176
|
+
def from_db src
|
177
|
+
return nil if src == nil
|
178
|
+
return src if Date === src
|
179
|
+
return Time::at(src).to_date if Integer === src
|
180
|
+
raise TypeError, "Source must be an Integer!", caller
|
181
|
+
end
|
182
|
+
|
183
|
+
end
|
184
|
+
|
185
|
+
def to_db
|
186
|
+
to_time.to_i
|
187
|
+
end
|
188
|
+
|
189
|
+
def to_query
|
190
|
+
xmlschema
|
191
|
+
end
|
192
|
+
|
193
|
+
end
|
194
|
+
|
195
|
+
module Boolean
|
196
|
+
|
197
|
+
class << self
|
198
|
+
|
199
|
+
def parse src
|
200
|
+
return nil if src == nil
|
201
|
+
return src if Boolean === src
|
202
|
+
raise TypeError, "Source must be a Boolean!", caller
|
203
|
+
end
|
204
|
+
|
205
|
+
def ddl
|
206
|
+
:INTEGER
|
207
|
+
end
|
208
|
+
|
209
|
+
def from_db src
|
210
|
+
return nil if src == nil
|
211
|
+
return src if Boolean === src
|
212
|
+
return src != 0 if Integer === src
|
213
|
+
raise TypeError, "Source must be an Integer!", caller
|
214
|
+
end
|
215
|
+
|
216
|
+
end
|
217
|
+
|
218
|
+
def to_db
|
219
|
+
self && 1 || 0
|
220
|
+
end
|
221
|
+
|
222
|
+
def to_query
|
223
|
+
inspect
|
224
|
+
end
|
225
|
+
|
226
|
+
end
|
227
|
+
|
228
|
+
class TrueClass
|
229
|
+
include Boolean
|
230
|
+
end
|
231
|
+
|
232
|
+
class FalseClass
|
233
|
+
include Boolean
|
234
|
+
end
|
235
|
+
|
236
|
+
module URI
|
237
|
+
|
238
|
+
class << self
|
239
|
+
|
240
|
+
pre_verbose = $VERBOSE
|
241
|
+
$VERBOSE = nil
|
242
|
+
|
243
|
+
alias :std_parse :parse
|
244
|
+
|
245
|
+
def parse src
|
246
|
+
return nil if src == nil
|
247
|
+
return src if URI === src
|
248
|
+
url = URI::DEFAULT_PARSER.escape(src).gsub('+', '%2B')
|
249
|
+
return std_parse(url) if String === src
|
250
|
+
raise TypeError, "Source must be a String!", caller
|
251
|
+
end
|
252
|
+
|
253
|
+
$VERBOSE = pre_verbose
|
254
|
+
|
255
|
+
def ddl
|
256
|
+
:TEXT
|
257
|
+
end
|
258
|
+
|
259
|
+
def from_db src
|
260
|
+
parse src
|
261
|
+
# return nil if src == nil
|
262
|
+
# return src if URI === src
|
263
|
+
# return URI(URI::DEFAULT_PARSER.escape(src)) if String === src
|
264
|
+
# raise TypeError, "Source must be a String!", caller
|
265
|
+
end
|
266
|
+
|
267
|
+
end
|
268
|
+
|
269
|
+
def to_db
|
270
|
+
to_s
|
271
|
+
end
|
272
|
+
|
273
|
+
end
|
274
|
+
|
275
|
+
class NilClass
|
276
|
+
|
277
|
+
def self.parse src
|
278
|
+
nil
|
279
|
+
end
|
280
|
+
|
281
|
+
def to_db
|
282
|
+
nil
|
283
|
+
end
|
284
|
+
|
285
|
+
end
|
286
|
+
|
287
|
+
class Array
|
288
|
+
|
289
|
+
def to_query
|
290
|
+
map { |i| i.to_query }.join(',')
|
291
|
+
end
|
292
|
+
|
293
|
+
end
|
@@ -0,0 +1,135 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
class Table
|
4
|
+
|
5
|
+
attr_reader :columns
|
6
|
+
|
7
|
+
def initialize
|
8
|
+
@columns = []
|
9
|
+
@rows = []
|
10
|
+
@line_no = 0
|
11
|
+
end
|
12
|
+
|
13
|
+
def column title, width: nil, align: nil, data: nil, marker: false, &block
|
14
|
+
if data == nil && !block_given?
|
15
|
+
raise ArgumentError, "Data argument or block must be provided!", caller
|
16
|
+
end
|
17
|
+
@columns << {
|
18
|
+
title: title,
|
19
|
+
width: width,
|
20
|
+
align: align,
|
21
|
+
data: data,
|
22
|
+
marker: marker,
|
23
|
+
block: block
|
24
|
+
}
|
25
|
+
end
|
26
|
+
|
27
|
+
private :column
|
28
|
+
|
29
|
+
def row **data
|
30
|
+
if !data.has_key?(:line_no)
|
31
|
+
@line_no += 1
|
32
|
+
data[:line_no] ||= @line_no
|
33
|
+
end
|
34
|
+
@rows << data
|
35
|
+
end
|
36
|
+
|
37
|
+
def rows *data
|
38
|
+
data.each do |r|
|
39
|
+
row(**r)
|
40
|
+
end
|
41
|
+
@rows
|
42
|
+
end
|
43
|
+
|
44
|
+
def << data
|
45
|
+
if Array === data
|
46
|
+
rows(*data)
|
47
|
+
elsif Hash === data
|
48
|
+
row(**data)
|
49
|
+
else
|
50
|
+
raise TypeError, "Invalid data type: #{ data.inspect }!", caller
|
51
|
+
end
|
52
|
+
end
|
53
|
+
|
54
|
+
private def th column
|
55
|
+
style = ""
|
56
|
+
case column[:width]
|
57
|
+
when Numeric
|
58
|
+
style += "width:#{ column[:width] }em;"
|
59
|
+
when String
|
60
|
+
style += "width:#{ column[:width] };"
|
61
|
+
end
|
62
|
+
style += "text-align:#{ column[:align] };" if column[:align]
|
63
|
+
if style.empty?
|
64
|
+
"<th>#{ column[:title] }</th>"
|
65
|
+
else
|
66
|
+
"<th style=\"#{ style }\">#{ column[:title] }</th>"
|
67
|
+
end
|
68
|
+
end
|
69
|
+
|
70
|
+
private def header
|
71
|
+
result = []
|
72
|
+
result << "<tr>"
|
73
|
+
result += @columns.map { |c| th(c) }
|
74
|
+
result << "</tr>"
|
75
|
+
result.join ""
|
76
|
+
end
|
77
|
+
|
78
|
+
private def td column, row
|
79
|
+
inner = case column[:data]
|
80
|
+
when String, Symbol
|
81
|
+
row[column[:data].intern]
|
82
|
+
when Proc
|
83
|
+
column[:data].call row
|
84
|
+
when nil
|
85
|
+
column[:block].call row
|
86
|
+
end
|
87
|
+
inner = inner.to_html if inner.respond_to?(:to_html)
|
88
|
+
style = ""
|
89
|
+
case column[:width]
|
90
|
+
when Numeric
|
91
|
+
style += "width:#{ column[:width] }em;"
|
92
|
+
when String
|
93
|
+
style += "width:#{ column[:width] };"
|
94
|
+
end
|
95
|
+
style += "text-align:#{ column[:align] };" if column[:align]
|
96
|
+
marker = nil
|
97
|
+
if column[:marker]
|
98
|
+
anchor = row[:anchor]
|
99
|
+
marker = "<a name=\"#{ anchor }\"></a>"
|
100
|
+
end
|
101
|
+
if style.empty?
|
102
|
+
"<td>#{ marker }#{ inner }</td>"
|
103
|
+
else
|
104
|
+
"<td style=\"#{ style }\">#{ marker }#{ inner }</td>"
|
105
|
+
end
|
106
|
+
end
|
107
|
+
|
108
|
+
private def row_to_html row
|
109
|
+
result = []
|
110
|
+
result << "<tr#{ row[:style] ? " style=\"#{ row[:style] }\"" : '' }>"
|
111
|
+
result += @columns.map { |c| td(c, row) }
|
112
|
+
result << "</td>"
|
113
|
+
result.join "\n"
|
114
|
+
end
|
115
|
+
|
116
|
+
def to_html
|
117
|
+
result = []
|
118
|
+
result << "<table>"
|
119
|
+
result << header
|
120
|
+
result += @rows.map { |r| row_to_html(r) }
|
121
|
+
result << "</table>"
|
122
|
+
result.join "\n"
|
123
|
+
end
|
124
|
+
|
125
|
+
end
|
126
|
+
|
127
|
+
module TableDSL
|
128
|
+
|
129
|
+
private def table &block
|
130
|
+
tbl = Table::new
|
131
|
+
tbl.instance_eval(&block) if block_given?
|
132
|
+
tbl
|
133
|
+
end
|
134
|
+
|
135
|
+
end
|
@@ -0,0 +1,30 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
class Hash
|
4
|
+
|
5
|
+
def deep_merge! other
|
6
|
+
other.each do |key, value|
|
7
|
+
if has_key?(key) && self[key].respond_to?(:deep_merge!)
|
8
|
+
self[key].deep_merge! value
|
9
|
+
else
|
10
|
+
self[key] = value
|
11
|
+
end
|
12
|
+
end
|
13
|
+
self
|
14
|
+
end
|
15
|
+
|
16
|
+
end
|
17
|
+
|
18
|
+
class Array
|
19
|
+
|
20
|
+
def deep_merge! other
|
21
|
+
other.each do |value|
|
22
|
+
next if self.include?(value)
|
23
|
+
next if String === value && self.include?(value.intern)
|
24
|
+
next if Symbol === value && self.include?(value.to_s)
|
25
|
+
self << value
|
26
|
+
end
|
27
|
+
self
|
28
|
+
end
|
29
|
+
|
30
|
+
end
|
metadata
ADDED
@@ -0,0 +1,137 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: inat-get
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.8.0.11
|
5
|
+
platform: ruby
|
6
|
+
authors:
|
7
|
+
- Ivan Shikhalev
|
8
|
+
autorequire:
|
9
|
+
bindir: bin
|
10
|
+
cert_chain: []
|
11
|
+
date: 2023-11-22 00:00:00.000000000 Z
|
12
|
+
dependencies:
|
13
|
+
- !ruby/object:Gem::Dependency
|
14
|
+
name: sqlite3
|
15
|
+
requirement: !ruby/object:Gem::Requirement
|
16
|
+
requirements:
|
17
|
+
- - "~>"
|
18
|
+
- !ruby/object:Gem::Version
|
19
|
+
version: 1.6.6
|
20
|
+
type: :runtime
|
21
|
+
prerelease: false
|
22
|
+
version_requirements: !ruby/object:Gem::Requirement
|
23
|
+
requirements:
|
24
|
+
- - "~>"
|
25
|
+
- !ruby/object:Gem::Version
|
26
|
+
version: 1.6.6
|
27
|
+
- !ruby/object:Gem::Dependency
|
28
|
+
name: tzinfo
|
29
|
+
requirement: !ruby/object:Gem::Requirement
|
30
|
+
requirements:
|
31
|
+
- - "~>"
|
32
|
+
- !ruby/object:Gem::Version
|
33
|
+
version: 2.0.6
|
34
|
+
type: :runtime
|
35
|
+
prerelease: false
|
36
|
+
version_requirements: !ruby/object:Gem::Requirement
|
37
|
+
requirements:
|
38
|
+
- - "~>"
|
39
|
+
- !ruby/object:Gem::Version
|
40
|
+
version: 2.0.6
|
41
|
+
description:
|
42
|
+
email:
|
43
|
+
- shkikhalev@gmail.com
|
44
|
+
executables:
|
45
|
+
- inat-get
|
46
|
+
extensions: []
|
47
|
+
extra_rdoc_files: []
|
48
|
+
files:
|
49
|
+
- LICENSE
|
50
|
+
- README.md
|
51
|
+
- Rakefile
|
52
|
+
- bin/inat-get
|
53
|
+
- docs/logo.png
|
54
|
+
- inat-get.gemspec
|
55
|
+
- lib/extra/enum.rb
|
56
|
+
- lib/extra/period.rb
|
57
|
+
- lib/extra/uuid.rb
|
58
|
+
- lib/inat/app/application.rb
|
59
|
+
- lib/inat/app/config.rb
|
60
|
+
- lib/inat/app/config/messagelevel.rb
|
61
|
+
- lib/inat/app/config/shiftage.rb
|
62
|
+
- lib/inat/app/config/updatemode.rb
|
63
|
+
- lib/inat/app/globals.rb
|
64
|
+
- lib/inat/app/info.rb
|
65
|
+
- lib/inat/app/logging.rb
|
66
|
+
- lib/inat/app/preamble.rb
|
67
|
+
- lib/inat/app/status.rb
|
68
|
+
- lib/inat/app/task.rb
|
69
|
+
- lib/inat/app/task/context.rb
|
70
|
+
- lib/inat/app/task/dsl.rb
|
71
|
+
- lib/inat/data/api.rb
|
72
|
+
- lib/inat/data/cache.rb
|
73
|
+
- lib/inat/data/db.rb
|
74
|
+
- lib/inat/data/ddl.rb
|
75
|
+
- lib/inat/data/entity.rb
|
76
|
+
- lib/inat/data/entity/comment.rb
|
77
|
+
- lib/inat/data/entity/flag.rb
|
78
|
+
- lib/inat/data/entity/identification.rb
|
79
|
+
- lib/inat/data/entity/observation.rb
|
80
|
+
- lib/inat/data/entity/observationphoto.rb
|
81
|
+
- lib/inat/data/entity/observationsound.rb
|
82
|
+
- lib/inat/data/entity/photo.rb
|
83
|
+
- lib/inat/data/entity/place.rb
|
84
|
+
- lib/inat/data/entity/project.rb
|
85
|
+
- lib/inat/data/entity/projectadmin.rb
|
86
|
+
- lib/inat/data/entity/projectobservationrule.rb
|
87
|
+
- lib/inat/data/entity/request.rb
|
88
|
+
- lib/inat/data/entity/sound.rb
|
89
|
+
- lib/inat/data/entity/taxon.rb
|
90
|
+
- lib/inat/data/entity/user.rb
|
91
|
+
- lib/inat/data/entity/vote.rb
|
92
|
+
- lib/inat/data/enums/conservationstatus.rb
|
93
|
+
- lib/inat/data/enums/geoprivacy.rb
|
94
|
+
- lib/inat/data/enums/iconictaxa.rb
|
95
|
+
- lib/inat/data/enums/identificationcategory.rb
|
96
|
+
- lib/inat/data/enums/licensecode.rb
|
97
|
+
- lib/inat/data/enums/projectadminrole.rb
|
98
|
+
- lib/inat/data/enums/projecttype.rb
|
99
|
+
- lib/inat/data/enums/qualitygrade.rb
|
100
|
+
- lib/inat/data/enums/rank.rb
|
101
|
+
- lib/inat/data/model.rb
|
102
|
+
- lib/inat/data/query.rb
|
103
|
+
- lib/inat/data/sets/dataset.rb
|
104
|
+
- lib/inat/data/sets/list.rb
|
105
|
+
- lib/inat/data/sets/listers.rb
|
106
|
+
- lib/inat/data/sets/wrappers.rb
|
107
|
+
- lib/inat/data/types/extras.rb
|
108
|
+
- lib/inat/data/types/location.rb
|
109
|
+
- lib/inat/data/types/std.rb
|
110
|
+
- lib/inat/report/table.rb
|
111
|
+
- lib/inat/utils/deep.rb
|
112
|
+
homepage: https://github.com/shikhalev/inat-get
|
113
|
+
licenses:
|
114
|
+
- GPL-3.0
|
115
|
+
metadata:
|
116
|
+
homepage_uri: https://github.com/shikhalev/inat-get
|
117
|
+
source_code_uri: https://github.com/shikhalev/inat-get
|
118
|
+
post_install_message:
|
119
|
+
rdoc_options: []
|
120
|
+
require_paths:
|
121
|
+
- lib
|
122
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
123
|
+
requirements:
|
124
|
+
- - ">="
|
125
|
+
- !ruby/object:Gem::Version
|
126
|
+
version: 3.1.0
|
127
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
128
|
+
requirements:
|
129
|
+
- - ">="
|
130
|
+
- !ruby/object:Gem::Version
|
131
|
+
version: '0'
|
132
|
+
requirements: []
|
133
|
+
rubygems_version: 3.4.19
|
134
|
+
signing_key:
|
135
|
+
specification_version: 4
|
136
|
+
summary: Client for iNaturalist API.
|
137
|
+
test_files: []
|