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.
Files changed (61) hide show
  1. checksums.yaml +4 -4
  2. data/.yardopts +6 -0
  3. data/bin/inat-get +1 -1
  4. data/inat-get.gemspec +6 -6
  5. data/lib/extra/enum.rb +4 -0
  6. data/lib/extra/period.rb +15 -0
  7. data/lib/inat/app/application.rb +4 -3
  8. data/lib/inat/app/config/messagelevel.rb +3 -1
  9. data/lib/inat/app/config/shiftage.rb +1 -1
  10. data/lib/inat/app/config/updatemode.rb +1 -1
  11. data/lib/inat/app/config.rb +6 -2
  12. data/lib/inat/app/globals.rb +6 -3
  13. data/lib/inat/app/info.rb +18 -13
  14. data/lib/inat/app/logging.rb +3 -3
  15. data/lib/inat/app/preamble.rb +1 -1
  16. data/lib/inat/app/status.rb +3 -9
  17. data/lib/inat/app/task/context.rb +9 -3
  18. data/lib/inat/app/task/dsl.rb +5 -3
  19. data/lib/inat/app/task.rb +2 -2
  20. data/lib/inat/data/api.rb +210 -181
  21. data/lib/inat/data/db.rb +9 -4
  22. data/lib/inat/data/ddl.rb +24 -5
  23. data/lib/inat/data/entity/comment.rb +8 -4
  24. data/lib/inat/data/entity/flag.rb +7 -3
  25. data/lib/inat/data/entity/identification.rb +9 -4
  26. data/lib/inat/data/entity/observation.rb +27 -14
  27. data/lib/inat/data/entity/observationphoto.rb +7 -3
  28. data/lib/inat/data/entity/observationsound.rb +6 -7
  29. data/lib/inat/data/entity/photo.rb +9 -3
  30. data/lib/inat/data/entity/place.rb +11 -2
  31. data/lib/inat/data/entity/project.rb +16 -10
  32. data/lib/inat/data/entity/projectadmin.rb +4 -4
  33. data/lib/inat/data/entity/projectobservationrule.rb +3 -4
  34. data/lib/inat/data/entity/request.rb +7 -3
  35. data/lib/inat/data/entity/sound.rb +7 -2
  36. data/lib/inat/data/entity/taxon.rb +11 -3
  37. data/lib/inat/data/entity/user.rb +7 -3
  38. data/lib/inat/data/entity/vote.rb +7 -3
  39. data/lib/inat/data/entity.rb +38 -24
  40. data/lib/inat/data/enums/conservationstatus.rb +3 -3
  41. data/lib/inat/data/enums/geoprivacy.rb +3 -1
  42. data/lib/inat/data/enums/iconictaxa.rb +1 -1
  43. data/lib/inat/data/enums/identificationcategory.rb +1 -1
  44. data/lib/inat/data/enums/licensecode.rb +5 -2
  45. data/lib/inat/data/enums/projectadminrole.rb +1 -1
  46. data/lib/inat/data/enums/projecttype.rb +5 -3
  47. data/lib/inat/data/enums/qualitygrade.rb +1 -1
  48. data/lib/inat/data/enums/rank.rb +1 -1
  49. data/lib/inat/data/model.rb +73 -24
  50. data/lib/inat/data/query.rb +14 -9
  51. data/lib/inat/data/sets/dataset.rb +10 -6
  52. data/lib/inat/data/sets/list.rb +8 -3
  53. data/lib/inat/data/sets/listers.rb +10 -4
  54. data/lib/inat/data/sets/wrappers.rb +111 -82
  55. data/lib/inat/data/types/location.rb +17 -8
  56. data/lib/inat/data/types/std.rb +171 -176
  57. data/lib/inat/report/report_dsl.rb +205 -0
  58. data/lib/inat/report/table.rb +11 -3
  59. data/lib/inat/utils/deep.rb +25 -19
  60. metadata +6 -5
  61. data/lib/inat/data/cache.rb +0 -9
@@ -1,6 +1,9 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- class Location
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
- def radius latitude, longitude, radius
84
- Radius::new latitude, longitude, radius
85
- end
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
@@ -1,170 +1,186 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- require 'time'
4
- require 'date'
5
- require 'uri'
3
+ require "time"
4
+ require "date"
5
+ require "uri"
6
6
 
7
- class Integer
7
+ module INat::Types; end
8
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
9
+ module Boolean
10
+ end
29
11
 
30
- def to_query
31
- to_s
32
- end
12
+ class TrueClass
13
+ include Boolean
14
+ end
33
15
 
16
+ class FalseClass
17
+ include Boolean
34
18
  end
35
19
 
36
- class String
20
+ # TODO: возможно, разбить по функционалу
37
21
 
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
22
+ module INat::Types::Std
23
+ refine Boolean do
24
+ def to_db
25
+ self && 1 || 0
26
+ end
43
27
 
44
- def self.ddl
45
- :TEXT
28
+ def to_query
29
+ inspect
30
+ end
46
31
  end
47
32
 
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
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
- def to_db
55
- self
56
- end
40
+ def ddl
41
+ :INTEGER
42
+ end
57
43
 
58
- def to_query
59
- self
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
- end
63
-
64
- class Symbol
52
+ refine Integer do
53
+ def to_db
54
+ self
55
+ end
65
56
 
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
57
+ def to_query
58
+ to_s
59
+ end
71
60
  end
72
61
 
73
- def self.ddl
74
- :TEXT
75
- end
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
- 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
70
+ def ddl
71
+ :INTEGER
72
+ end
83
73
 
84
- def to_db
85
- self.to_s
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
- def to_query
89
- to_s
90
- end
81
+ refine String do
82
+ def to_db
83
+ self
84
+ end
91
85
 
92
- end
86
+ def to_query
87
+ self
88
+ end
89
+ end
93
90
 
94
- class Float
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
- 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
98
+ def ddl
99
+ :TEXT
100
+ end
102
101
 
103
- def self.ddl
104
- :REAL
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
- 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
109
+ refine Symbol do
110
+ def to_db
111
+ self.to_s
112
+ end
112
113
 
113
- def to_db
114
- self
114
+ def to_query
115
+ to_s
116
+ end
115
117
  end
116
118
 
117
- def to_query
118
- to_s
119
- end
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
- end
127
+ def ddl
128
+ :TEXT
129
+ end
122
130
 
123
- class Time
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
- class << self
139
+ refine Float do
140
+ def to_db
141
+ self
142
+ end
126
143
 
127
- alias :std_parse :parse
144
+ def to_query
145
+ to_s
146
+ end
147
+ end
128
148
 
129
- def parse src
149
+ refine Float.singleton_class do
150
+ def parse(src)
130
151
  return nil if src == nil
131
- return src if Time === src
132
- return std_parse(src) if String === src
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
- :INTEGER
158
+ :REAL
138
159
  end
139
160
 
140
- def from_db src
161
+ def from_db(src)
141
162
  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
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
- def to_db
150
- to_i
151
- end
168
+ refine Time do
169
+ def to_db
170
+ to_i
171
+ end
152
172
 
153
- def to_query
154
- xmlschema
173
+ def to_query
174
+ xmlschema
175
+ end
155
176
  end
156
177
 
157
- end
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 src
181
+ def parse(src)
166
182
  return nil if src == nil
167
- return src if Date === src
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 src
192
+ def from_db(src)
177
193
  return nil if src == nil
178
- return src if Date === src
179
- return Time::at(src).to_date if Integer === 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
- def to_db
186
- to_time.to_i
187
- end
200
+ refine Date do
201
+ def to_db
202
+ to_time.to_i
203
+ end
188
204
 
189
- def to_query
190
- xmlschema
205
+ def to_query
206
+ xmlschema
207
+ end
191
208
  end
192
209
 
193
- end
194
-
195
- module Boolean
196
-
197
- class << self
210
+ refine Date.singleton_class do
211
+ alias :std_parse :parse
198
212
 
199
- def parse src
213
+ def parse(src)
200
214
  return nil if src == nil
201
- return src if Boolean === src
202
- raise TypeError, "Source must be a Boolean!", caller
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 src
224
+ def from_db(src)
210
225
  return nil if src == nil
211
- return src if Boolean === src
212
- return src != 0 if Integer === 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
- def to_db
219
- self && 1 || 0
220
- end
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
- 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
-
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 src
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('+', '%2B')
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 src
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
- end
274
-
275
- class NilClass
267
+ refine NilClass do
268
+ def self.parse(src)
269
+ nil
270
+ end
276
271
 
277
- def self.parse src
278
- nil
272
+ def to_db
273
+ nil
274
+ end
279
275
  end
280
276
 
281
- def to_db
282
- nil
277
+ refine Array do
278
+ def to_query
279
+ map { |i| i.to_query }.join(",")
280
+ end
283
281
  end
284
282
 
285
- end
286
-
287
- class Array
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