inat-get 0.8.0.12 → 0.8.0.14
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/.yardopts +6 -0
- data/bin/inat-get +1 -1
- data/inat-get.gemspec +6 -6
- data/lib/extra/enum.rb +4 -0
- data/lib/extra/period.rb +15 -0
- data/lib/inat/app/application.rb +4 -3
- data/lib/inat/app/config/messagelevel.rb +3 -1
- data/lib/inat/app/config/shiftage.rb +1 -1
- data/lib/inat/app/config/updatemode.rb +1 -1
- data/lib/inat/app/config.rb +6 -2
- data/lib/inat/app/globals.rb +6 -3
- data/lib/inat/app/info.rb +18 -13
- data/lib/inat/app/logging.rb +3 -3
- data/lib/inat/app/preamble.rb +1 -1
- data/lib/inat/app/status.rb +3 -9
- data/lib/inat/app/task/context.rb +8 -4
- data/lib/inat/app/task/dsl.rb +5 -3
- data/lib/inat/app/task.rb +2 -2
- data/lib/inat/data/api.rb +210 -181
- data/lib/inat/data/db.rb +9 -4
- data/lib/inat/data/ddl.rb +24 -5
- data/lib/inat/data/entity/comment.rb +8 -4
- data/lib/inat/data/entity/flag.rb +7 -3
- data/lib/inat/data/entity/identification.rb +9 -4
- data/lib/inat/data/entity/observation.rb +27 -14
- data/lib/inat/data/entity/observationphoto.rb +7 -3
- data/lib/inat/data/entity/observationsound.rb +6 -7
- data/lib/inat/data/entity/photo.rb +9 -3
- data/lib/inat/data/entity/place.rb +11 -2
- data/lib/inat/data/entity/project.rb +16 -10
- data/lib/inat/data/entity/projectadmin.rb +4 -4
- data/lib/inat/data/entity/projectobservationrule.rb +3 -4
- data/lib/inat/data/entity/request.rb +7 -3
- data/lib/inat/data/entity/sound.rb +7 -2
- data/lib/inat/data/entity/taxon.rb +11 -3
- data/lib/inat/data/entity/user.rb +7 -3
- data/lib/inat/data/entity/vote.rb +7 -3
- data/lib/inat/data/entity.rb +38 -24
- data/lib/inat/data/enums/conservationstatus.rb +3 -3
- data/lib/inat/data/enums/geoprivacy.rb +3 -1
- data/lib/inat/data/enums/iconictaxa.rb +1 -1
- data/lib/inat/data/enums/identificationcategory.rb +1 -1
- data/lib/inat/data/enums/licensecode.rb +6 -2
- data/lib/inat/data/enums/projectadminrole.rb +1 -1
- data/lib/inat/data/enums/projecttype.rb +5 -3
- data/lib/inat/data/enums/qualitygrade.rb +1 -1
- data/lib/inat/data/enums/rank.rb +1 -1
- data/lib/inat/data/model.rb +73 -24
- data/lib/inat/data/query.rb +14 -9
- data/lib/inat/data/sets/dataset.rb +9 -5
- data/lib/inat/data/sets/list.rb +8 -3
- data/lib/inat/data/sets/listers.rb +10 -5
- data/lib/inat/data/sets/wrappers.rb +79 -75
- data/lib/inat/data/types/location.rb +17 -8
- data/lib/inat/data/types/std.rb +171 -176
- data/lib/inat/report/report_dsl.rb +18 -12
- data/lib/inat/report/table.rb +7 -3
- data/lib/inat/utils/deep.rb +25 -19
- metadata +5 -5
- data/lib/inat/data/cache.rb +0 -9
data/lib/inat/data/types/std.rb
CHANGED
@@ -1,170 +1,186 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
|
-
require
|
4
|
-
require
|
5
|
-
require
|
3
|
+
require "time"
|
4
|
+
require "date"
|
5
|
+
require "uri"
|
6
6
|
|
7
|
-
|
7
|
+
module INat::Types; end
|
8
8
|
|
9
|
-
|
10
|
-
|
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
|
9
|
+
module Boolean
|
10
|
+
end
|
29
11
|
|
30
|
-
|
31
|
-
|
32
|
-
|
12
|
+
class TrueClass
|
13
|
+
include Boolean
|
14
|
+
end
|
33
15
|
|
16
|
+
class FalseClass
|
17
|
+
include Boolean
|
34
18
|
end
|
35
19
|
|
36
|
-
|
20
|
+
# TODO: возможно, разбить по функционалу
|
37
21
|
|
38
|
-
|
39
|
-
|
40
|
-
|
41
|
-
|
42
|
-
|
22
|
+
module INat::Types::Std
|
23
|
+
refine Boolean do
|
24
|
+
def to_db
|
25
|
+
self && 1 || 0
|
26
|
+
end
|
43
27
|
|
44
|
-
|
45
|
-
|
28
|
+
def to_query
|
29
|
+
inspect
|
30
|
+
end
|
46
31
|
end
|
47
32
|
|
48
|
-
|
49
|
-
|
50
|
-
|
51
|
-
|
52
|
-
|
33
|
+
refine Boolean.singleton_class do
|
34
|
+
def parse(src)
|
35
|
+
return nil if src == nil
|
36
|
+
return src if Boolean === src
|
37
|
+
raise TypeError, "Source must be a Boolean!", caller
|
38
|
+
end
|
53
39
|
|
54
|
-
|
55
|
-
|
56
|
-
|
40
|
+
def ddl
|
41
|
+
:INTEGER
|
42
|
+
end
|
57
43
|
|
58
|
-
|
59
|
-
|
44
|
+
def from_db(src)
|
45
|
+
return nil if src == nil
|
46
|
+
return src if Boolean === src
|
47
|
+
return src != 0 if Integer === src
|
48
|
+
raise TypeError, "Source must be an Integer!", caller
|
49
|
+
end
|
60
50
|
end
|
61
51
|
|
62
|
-
|
63
|
-
|
64
|
-
|
52
|
+
refine Integer do
|
53
|
+
def to_db
|
54
|
+
self
|
55
|
+
end
|
65
56
|
|
66
|
-
|
67
|
-
|
68
|
-
|
69
|
-
return src.intern if String === src
|
70
|
-
raise TypeError, "Source must be a String!", caller
|
57
|
+
def to_query
|
58
|
+
to_s
|
59
|
+
end
|
71
60
|
end
|
72
61
|
|
73
|
-
|
74
|
-
|
75
|
-
|
62
|
+
refine Integer.singleton_class do
|
63
|
+
def parse(src)
|
64
|
+
return nil if src == nil
|
65
|
+
return src if Integer === src
|
66
|
+
return src.to_i if String === src
|
67
|
+
raise TypeError, "Source must be a String!", caller
|
68
|
+
end
|
76
69
|
|
77
|
-
|
78
|
-
|
79
|
-
|
80
|
-
return src.intern if String === src
|
81
|
-
raise TypeError, "Source must be a String!", caller
|
82
|
-
end
|
70
|
+
def ddl
|
71
|
+
:INTEGER
|
72
|
+
end
|
83
73
|
|
84
|
-
|
85
|
-
|
74
|
+
def from_db(src)
|
75
|
+
return nil if src == nil
|
76
|
+
return src if Integer === src
|
77
|
+
raise TypeError, "Source must be an Integer!", caller
|
78
|
+
end
|
86
79
|
end
|
87
80
|
|
88
|
-
|
89
|
-
|
90
|
-
|
81
|
+
refine String do
|
82
|
+
def to_db
|
83
|
+
self
|
84
|
+
end
|
91
85
|
|
92
|
-
|
86
|
+
def to_query
|
87
|
+
self
|
88
|
+
end
|
89
|
+
end
|
93
90
|
|
94
|
-
|
91
|
+
refine String.singleton_class do
|
92
|
+
def parse(src)
|
93
|
+
return nil if src == nil
|
94
|
+
return src if String === src
|
95
|
+
raise TypeError, "Source must be a String!", caller
|
96
|
+
end
|
95
97
|
|
96
|
-
|
97
|
-
|
98
|
-
|
99
|
-
return src.to_f if String === src || Integer === src
|
100
|
-
raise TypeError, "Source must be a String!", caller
|
101
|
-
end
|
98
|
+
def ddl
|
99
|
+
:TEXT
|
100
|
+
end
|
102
101
|
|
103
|
-
|
104
|
-
|
102
|
+
def from_db(src)
|
103
|
+
return nil if src == nil
|
104
|
+
return src if String === src
|
105
|
+
raise TypeError, "Source must be a String!", caller
|
106
|
+
end
|
105
107
|
end
|
106
108
|
|
107
|
-
|
108
|
-
|
109
|
-
|
110
|
-
|
111
|
-
end
|
109
|
+
refine Symbol do
|
110
|
+
def to_db
|
111
|
+
self.to_s
|
112
|
+
end
|
112
113
|
|
113
|
-
|
114
|
-
|
114
|
+
def to_query
|
115
|
+
to_s
|
116
|
+
end
|
115
117
|
end
|
116
118
|
|
117
|
-
|
118
|
-
|
119
|
-
|
119
|
+
refine Symbol.singleton_class do
|
120
|
+
def parse(src)
|
121
|
+
return nil if src == nil
|
122
|
+
return src if Symbol === src
|
123
|
+
return src.intern if String === src
|
124
|
+
raise TypeError, "Source must be a String!", caller
|
125
|
+
end
|
120
126
|
|
121
|
-
|
127
|
+
def ddl
|
128
|
+
:TEXT
|
129
|
+
end
|
122
130
|
|
123
|
-
|
131
|
+
def from_db(src)
|
132
|
+
return nil if src == nil
|
133
|
+
return src if Symbol === src
|
134
|
+
return src.intern if String === src
|
135
|
+
raise TypeError, "Source must be a String!", caller
|
136
|
+
end
|
137
|
+
end
|
124
138
|
|
125
|
-
|
139
|
+
refine Float do
|
140
|
+
def to_db
|
141
|
+
self
|
142
|
+
end
|
126
143
|
|
127
|
-
|
144
|
+
def to_query
|
145
|
+
to_s
|
146
|
+
end
|
147
|
+
end
|
128
148
|
|
129
|
-
|
149
|
+
refine Float.singleton_class do
|
150
|
+
def parse(src)
|
130
151
|
return nil if src == nil
|
131
|
-
return src if
|
132
|
-
return
|
152
|
+
return src if Float === src
|
153
|
+
return src.to_f if String === src || Integer === src
|
133
154
|
raise TypeError, "Source must be a String!", caller
|
134
155
|
end
|
135
156
|
|
136
157
|
def ddl
|
137
|
-
:
|
158
|
+
:REAL
|
138
159
|
end
|
139
160
|
|
140
|
-
def from_db
|
161
|
+
def from_db(src)
|
141
162
|
return nil if src == nil
|
142
|
-
return src if
|
143
|
-
|
144
|
-
raise TypeError, "Source must be an Integer!", caller
|
163
|
+
return src if Float === src
|
164
|
+
raise TypeError, "Source must be a Float!", caller
|
145
165
|
end
|
146
|
-
|
147
166
|
end
|
148
167
|
|
149
|
-
|
150
|
-
|
151
|
-
|
168
|
+
refine Time do
|
169
|
+
def to_db
|
170
|
+
to_i
|
171
|
+
end
|
152
172
|
|
153
|
-
|
154
|
-
|
173
|
+
def to_query
|
174
|
+
xmlschema
|
175
|
+
end
|
155
176
|
end
|
156
177
|
|
157
|
-
|
158
|
-
|
159
|
-
class Date
|
160
|
-
|
161
|
-
class << self
|
162
|
-
|
178
|
+
refine Time.singleton_class do
|
163
179
|
alias :std_parse :parse
|
164
180
|
|
165
|
-
def parse
|
181
|
+
def parse(src)
|
166
182
|
return nil if src == nil
|
167
|
-
return src if
|
183
|
+
return src if Time === src
|
168
184
|
return std_parse(src) if String === src
|
169
185
|
raise TypeError, "Source must be a String!", caller
|
170
186
|
end
|
@@ -173,79 +189,62 @@ class Date
|
|
173
189
|
:INTEGER
|
174
190
|
end
|
175
191
|
|
176
|
-
def from_db
|
192
|
+
def from_db(src)
|
177
193
|
return nil if src == nil
|
178
|
-
return src if
|
179
|
-
return Time::at(src)
|
194
|
+
return src if Time === src
|
195
|
+
return Time::at(src) if Integer === src
|
180
196
|
raise TypeError, "Source must be an Integer!", caller
|
181
197
|
end
|
182
|
-
|
183
198
|
end
|
184
199
|
|
185
|
-
|
186
|
-
|
187
|
-
|
200
|
+
refine Date do
|
201
|
+
def to_db
|
202
|
+
to_time.to_i
|
203
|
+
end
|
188
204
|
|
189
|
-
|
190
|
-
|
205
|
+
def to_query
|
206
|
+
xmlschema
|
207
|
+
end
|
191
208
|
end
|
192
209
|
|
193
|
-
|
194
|
-
|
195
|
-
module Boolean
|
196
|
-
|
197
|
-
class << self
|
210
|
+
refine Date.singleton_class do
|
211
|
+
alias :std_parse :parse
|
198
212
|
|
199
|
-
def parse
|
213
|
+
def parse(src)
|
200
214
|
return nil if src == nil
|
201
|
-
return src if
|
202
|
-
|
215
|
+
return src if Date === src
|
216
|
+
return std_parse(src) if String === src
|
217
|
+
raise TypeError, "Source must be a String!", caller
|
203
218
|
end
|
204
219
|
|
205
220
|
def ddl
|
206
221
|
:INTEGER
|
207
222
|
end
|
208
223
|
|
209
|
-
def from_db
|
224
|
+
def from_db(src)
|
210
225
|
return nil if src == nil
|
211
|
-
return src if
|
212
|
-
return src
|
226
|
+
return src if Date === src
|
227
|
+
return Time::at(src).to_date if Integer === src
|
213
228
|
raise TypeError, "Source must be an Integer!", caller
|
214
229
|
end
|
215
|
-
|
216
230
|
end
|
217
231
|
|
218
|
-
|
219
|
-
|
220
|
-
|
221
|
-
|
222
|
-
def to_query
|
223
|
-
inspect
|
232
|
+
refine URI do
|
233
|
+
def to_db
|
234
|
+
to_s
|
235
|
+
end
|
224
236
|
end
|
225
237
|
|
226
|
-
|
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
|
-
|
238
|
+
refine URI.singleton_class do
|
240
239
|
pre_verbose = $VERBOSE
|
241
240
|
$VERBOSE = nil
|
242
241
|
|
243
242
|
alias :std_parse :parse
|
244
243
|
|
245
|
-
def parse
|
244
|
+
def parse(src)
|
246
245
|
return nil if src == nil
|
247
246
|
return src if URI === src
|
248
|
-
url = URI::DEFAULT_PARSER.escape(src).gsub(
|
247
|
+
url = URI::DEFAULT_PARSER.escape(src).gsub("+", "%2B")
|
249
248
|
return std_parse(url) if String === src
|
250
249
|
raise TypeError, "Source must be a String!", caller
|
251
250
|
end
|
@@ -256,38 +255,34 @@ module URI
|
|
256
255
|
:TEXT
|
257
256
|
end
|
258
257
|
|
259
|
-
def from_db
|
258
|
+
def from_db(src)
|
260
259
|
parse src
|
261
260
|
# return nil if src == nil
|
262
261
|
# return src if URI === src
|
263
262
|
# return URI(URI::DEFAULT_PARSER.escape(src)) if String === src
|
264
263
|
# raise TypeError, "Source must be a String!", caller
|
265
264
|
end
|
266
|
-
|
267
|
-
end
|
268
|
-
|
269
|
-
def to_db
|
270
|
-
to_s
|
271
265
|
end
|
272
266
|
|
273
|
-
|
274
|
-
|
275
|
-
|
267
|
+
refine NilClass do
|
268
|
+
def self.parse(src)
|
269
|
+
nil
|
270
|
+
end
|
276
271
|
|
277
|
-
|
278
|
-
|
272
|
+
def to_db
|
273
|
+
nil
|
274
|
+
end
|
279
275
|
end
|
280
276
|
|
281
|
-
|
282
|
-
|
277
|
+
refine Array do
|
278
|
+
def to_query
|
279
|
+
map { |i| i.to_query }.join(",")
|
280
|
+
end
|
283
281
|
end
|
284
282
|
|
285
|
-
|
286
|
-
|
287
|
-
|
288
|
-
|
289
|
-
def to_query
|
290
|
-
map { |i| i.to_query }.join(',')
|
283
|
+
refine Module do
|
284
|
+
def short_name
|
285
|
+
name.split("::").last
|
286
|
+
end
|
291
287
|
end
|
292
|
-
|
293
288
|
end
|
@@ -2,25 +2,27 @@
|
|
2
2
|
|
3
3
|
require_relative 'table'
|
4
4
|
|
5
|
-
module
|
5
|
+
module INat::Report::DSL
|
6
6
|
|
7
|
-
include
|
7
|
+
include INat
|
8
|
+
include INat::Report
|
9
|
+
include INat::Report::Table::DSL
|
8
10
|
|
9
|
-
def class_title object, is_observer: true
|
11
|
+
private def class_title object, is_observer: true
|
10
12
|
case object
|
11
|
-
when Taxon
|
13
|
+
when Entity::Taxon
|
12
14
|
'Таксон'
|
13
|
-
when Place
|
15
|
+
when Entity::Place
|
14
16
|
'Территория'
|
15
|
-
when Project
|
17
|
+
when Entity::Project
|
16
18
|
'Проект'
|
17
|
-
when User
|
19
|
+
when Entity::User
|
18
20
|
if is_observer
|
19
21
|
'Наблюдатель'
|
20
22
|
else
|
21
23
|
'Пользователь'
|
22
24
|
end
|
23
|
-
when
|
25
|
+
when Report::Period
|
24
26
|
'Период'
|
25
27
|
else
|
26
28
|
'Объект'
|
@@ -45,7 +47,7 @@ module ReportDSL
|
|
45
47
|
@@prefix ||= 0
|
46
48
|
@@prefix += 1
|
47
49
|
users = table do
|
48
|
-
column '#', width: 3, align: :right, data: :line_no
|
50
|
+
column '#', width: 3, align: :right, data: :line_no, marker: true
|
49
51
|
column 'Наблюдатель', data: :user
|
50
52
|
column 'Виды', width: 6, align: :right, data: :species
|
51
53
|
column 'Наблюдения', width: 6, align: :right, data: :observations
|
@@ -63,9 +65,13 @@ module ReportDSL
|
|
63
65
|
list.each do |ds|
|
64
66
|
observations = if details
|
65
67
|
if observers
|
66
|
-
ds.observations.map { |o| "#{ o }<sup><a href=\"\##{ @@prefix }-user-#{ o.user.id }\">#{ user_rows.index { |row| row[:user] == o.user } }</a></sup>" }
|
68
|
+
ds.observations.map { |o| "#{ o }<sup><a href=\"\##{ @@prefix }-user-#{ o.user.id }\">#{ user_rows.index { |row| row[:user] == o.user } + 1 }</a></sup>" }
|
67
69
|
else
|
68
|
-
ds.
|
70
|
+
if ds.count > 10
|
71
|
+
[ 'Более 10 наблюдений' ]
|
72
|
+
else
|
73
|
+
ds.observations.map(&:to_s)
|
74
|
+
end
|
69
75
|
end
|
70
76
|
else
|
71
77
|
[ ds.count.to_s ]
|
@@ -155,7 +161,7 @@ module ReportDSL
|
|
155
161
|
|
156
162
|
# TODO: разобраться с разными count в разных контекстах.
|
157
163
|
def rating_table list, limit: 1, count: 3, details: true, key: :species, summary: false
|
158
|
-
object_title = class_title list.first
|
164
|
+
object_title = class_title list.first&.object
|
159
165
|
rating = table do
|
160
166
|
column '#', width: 3, align: :right, data: :line_no
|
161
167
|
column object_title, data: :object
|
data/lib/inat/report/table.rb
CHANGED
@@ -1,6 +1,6 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
|
-
class Table
|
3
|
+
class INat::Report::Table
|
4
4
|
|
5
5
|
attr_reader :columns
|
6
6
|
|
@@ -128,12 +128,16 @@ class Table
|
|
128
128
|
|
129
129
|
end
|
130
130
|
|
131
|
-
module
|
131
|
+
module INat::Report::Table::DSL
|
132
132
|
|
133
|
-
|
133
|
+
include INat::Report
|
134
|
+
|
135
|
+
def table &block
|
134
136
|
tbl = Table::new
|
135
137
|
tbl.instance_eval(&block) if block_given?
|
136
138
|
tbl
|
137
139
|
end
|
138
140
|
|
141
|
+
module_function :table
|
142
|
+
|
139
143
|
end
|
data/lib/inat/utils/deep.rb
CHANGED
@@ -1,30 +1,36 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
|
-
|
4
|
-
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
3
|
+
# TODO: убрать, все равно конфиг надо парсить нормально
|
4
|
+
|
5
|
+
module DeepMerge
|
6
|
+
|
7
|
+
refine Hash do
|
8
|
+
|
9
|
+
def deep_merge! other
|
10
|
+
other.each do |key, value|
|
11
|
+
if has_key?(key) && self[key].respond_to?(:deep_merge!)
|
12
|
+
self[key].deep_merge! value
|
13
|
+
else
|
14
|
+
self[key] = value
|
15
|
+
end
|
11
16
|
end
|
17
|
+
self
|
12
18
|
end
|
13
|
-
self
|
14
|
-
end
|
15
19
|
|
16
|
-
end
|
20
|
+
end
|
17
21
|
|
18
|
-
|
22
|
+
refine Array do
|
19
23
|
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
24
|
+
def deep_merge! other
|
25
|
+
other.each do |value|
|
26
|
+
next if self.include?(value)
|
27
|
+
next if String === value && self.include?(value.intern)
|
28
|
+
next if Symbol === value && self.include?(value.to_s)
|
29
|
+
self << value
|
30
|
+
end
|
31
|
+
self
|
26
32
|
end
|
27
|
-
|
33
|
+
|
28
34
|
end
|
29
35
|
|
30
36
|
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: inat-get
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.8.0.
|
4
|
+
version: 0.8.0.14
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Ivan Shikhalev
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2024-01-10 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: sqlite3
|
@@ -46,6 +46,7 @@ executables:
|
|
46
46
|
extensions: []
|
47
47
|
extra_rdoc_files: []
|
48
48
|
files:
|
49
|
+
- ".yardopts"
|
49
50
|
- LICENSE
|
50
51
|
- README.md
|
51
52
|
- Rakefile
|
@@ -69,7 +70,6 @@ files:
|
|
69
70
|
- lib/inat/app/task/context.rb
|
70
71
|
- lib/inat/app/task/dsl.rb
|
71
72
|
- lib/inat/data/api.rb
|
72
|
-
- lib/inat/data/cache.rb
|
73
73
|
- lib/inat/data/db.rb
|
74
74
|
- lib/inat/data/ddl.rb
|
75
75
|
- lib/inat/data/entity.rb
|
@@ -112,7 +112,7 @@ files:
|
|
112
112
|
- lib/inat/utils/deep.rb
|
113
113
|
homepage: https://github.com/shikhalev/inat-get
|
114
114
|
licenses:
|
115
|
-
- GPL-3.0
|
115
|
+
- GPL-3.0-or-later
|
116
116
|
metadata:
|
117
117
|
homepage_uri: https://github.com/shikhalev/inat-get
|
118
118
|
source_code_uri: https://github.com/shikhalev/inat-get
|
@@ -131,7 +131,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
131
131
|
- !ruby/object:Gem::Version
|
132
132
|
version: '0'
|
133
133
|
requirements: []
|
134
|
-
rubygems_version: 3.
|
134
|
+
rubygems_version: 3.5.3
|
135
135
|
signing_key:
|
136
136
|
specification_version: 4
|
137
137
|
summary: Client for iNaturalist API.
|