inat-get 0.8.0.11 → 0.8.0.13

Sign up to get free protection for your applications and to get access to all the features.
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