inat-get 0.8.0.11 → 0.8.0.13
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 +9 -3
- 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 +5 -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 +10 -6
- data/lib/inat/data/sets/list.rb +8 -3
- data/lib/inat/data/sets/listers.rb +10 -4
- data/lib/inat/data/sets/wrappers.rb +111 -82
- 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 +205 -0
- data/lib/inat/report/table.rb +11 -3
- data/lib/inat/utils/deep.rb +25 -19
- metadata +6 -5
- data/lib/inat/data/cache.rb +0 -9
@@ -1,6 +1,9 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
|
-
|
3
|
+
module INat::Data; end
|
4
|
+
module INat::Data::Types; end
|
5
|
+
|
6
|
+
class INat::Data::Types::Location
|
4
7
|
|
5
8
|
class << self
|
6
9
|
|
@@ -53,7 +56,7 @@ class Location
|
|
53
56
|
|
54
57
|
end
|
55
58
|
|
56
|
-
class Radius
|
59
|
+
class INat::Data::Types::Radius
|
57
60
|
|
58
61
|
attr_reader :latitude, :longitude, :radius
|
59
62
|
|
@@ -66,7 +69,7 @@ class Radius
|
|
66
69
|
|
67
70
|
end
|
68
71
|
|
69
|
-
class Sector
|
72
|
+
class INat::Data::Types::Sector
|
70
73
|
|
71
74
|
attr_reader :north, :east, :south, :west
|
72
75
|
|
@@ -80,10 +83,16 @@ class Sector
|
|
80
83
|
|
81
84
|
end
|
82
85
|
|
83
|
-
|
84
|
-
|
85
|
-
|
86
|
+
module INat::Data::Types
|
87
|
+
|
88
|
+
def radius latitude, longitude, radius
|
89
|
+
Radius::new latitude, longitude, radius
|
90
|
+
end
|
91
|
+
|
92
|
+
def sector north, east, south, west
|
93
|
+
Sector::new north, east, south, west
|
94
|
+
end
|
95
|
+
|
96
|
+
module_function :radius, :sector
|
86
97
|
|
87
|
-
def sector north, east, south, west
|
88
|
-
Sector::new north, east, south, west
|
89
98
|
end
|
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
|