inat-get 0.8.0.12 → 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 +8 -4
  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 +9 -5
  52. data/lib/inat/data/sets/list.rb +8 -3
  53. data/lib/inat/data/sets/listers.rb +10 -5
  54. data/lib/inat/data/sets/wrappers.rb +79 -75
  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 +13 -11
  58. data/lib/inat/report/table.rb +7 -3
  59. data/lib/inat/utils/deep.rb +25 -19
  60. metadata +5 -5
  61. data/lib/inat/data/cache.rb +0 -9
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 8b6b2164211848152ba97642e69979744046065cc6916b7f64d5f0b6127137e2
4
- data.tar.gz: c3578401e4ac8127126da08d124c27834d4ce0ed3c083fe0de61aefcc9b72618
3
+ metadata.gz: df7509aed95fafc1944ec83113fff7f22e4d0ae6ec8f5f9326c2db57a257ccd2
4
+ data.tar.gz: dd7eff7e9ef9052bb88b329cdcc0c2beb944595f318a507809f74749a020d559
5
5
  SHA512:
6
- metadata.gz: 9cfa13aeecf17554be9d62b41c4ef1cac2018e916e49aa9cc9698260c36598e1f90acfeb2cd89f0320027446fb58f099a4d3f65f8a48f7c358b2db16f8630a05
7
- data.tar.gz: ddee5675c3b2b832a9ecfa35e37a0059947aea87e98cce5f67ab7e7179e41750f08fe15c3937756268e2b8ac3c9ba6c137bf2996f5077847ca3a98997c3352c0
6
+ metadata.gz: 373b8050cfcb590324af92dcbe8add0cc182b1a6210aba67870692b9f3d4547906055bd3e47cdd107ce0ac83d20614e5cb59b812d4991af2b0d65c678b9704b7
7
+ data.tar.gz: 689eabfd32e1dd385208a27b4e2ac7eec58cfaebf2d9a51e8c2e2cf3569f4223d74e0aa8dc1f031058739893ea8fcbc37cb7a960f57016fcf693f74e1adb21d5
data/.yardopts ADDED
@@ -0,0 +1,6 @@
1
+ --no-private
2
+ --title "INat::Get"
3
+ --hide-void-return
4
+ --private
5
+ --asset docs/ doc/docs/
6
+ lib/**/*.rb
data/bin/inat-get CHANGED
@@ -12,7 +12,7 @@ require 'inat/data/entity/request'
12
12
  require 'inat/data/db'
13
13
  require 'inat/data/query'
14
14
 
15
- app = Application.new
15
+ app = INat::Application.new
16
16
  app.run
17
17
  # PP::pp Globals.config, $>, 64
18
18
 
data/inat-get.gemspec CHANGED
@@ -4,18 +4,18 @@ require_relative 'lib/inat/app/info'
4
4
 
5
5
  Gem::Specification.new do |spec|
6
6
  spec.name = "inat-get"
7
- spec.version = AppInfo::VERSION
8
- spec.authors = [ AppInfo::AUTHOR ]
9
- spec.email = [ AppInfo::EMAIL ]
7
+ spec.version = INat::App::Info::VERSION
8
+ spec.authors = [ INat::App::Info::AUTHOR ]
9
+ spec.email = [ INat::App::Info::EMAIL ]
10
10
 
11
11
  spec.summary = "Client for iNaturalist API."
12
12
  # spec.description = "TODO: Write a longer description or delete this line."
13
- spec.homepage = AppInfo::HOMEPAGE
14
- spec.license = "GPL-3.0"
13
+ spec.homepage = INat::App::Info::HOMEPAGE
14
+ spec.license = "GPL-3.0-or-later"
15
15
  spec.required_ruby_version = ">= 3.1.0"
16
16
 
17
17
  spec.metadata["homepage_uri"] = spec.homepage
18
- spec.metadata["source_code_uri"] = AppInfo::SOURCE_URL
18
+ spec.metadata["source_code_uri"] = INat::App::Info::SOURCE_URL
19
19
 
20
20
  spec.files = Dir.chdir(__dir__) do
21
21
  `git ls-files -z`.split("\x0").reject do |f|
data/lib/extra/enum.rb CHANGED
@@ -12,6 +12,7 @@ class Enum
12
12
 
13
13
  private :new
14
14
 
15
+ # @!scope class
15
16
  private def item name, order = nil, description: nil, data: nil
16
17
  raise TypeError, "Name of enum value must be a Symbol!", caller unless Symbol === name
17
18
  raise TypeError, "Order of enum value must be a Integer!", caller unless nil === order || Integer === order
@@ -35,6 +36,7 @@ class Enum
35
36
  return value
36
37
  end
37
38
 
39
+ # @!scope class
38
40
  private def items *names, **names_with_order
39
41
  names.each do |name|
40
42
  item name
@@ -45,6 +47,7 @@ class Enum
45
47
  return values
46
48
  end
47
49
 
50
+ # @!scope class
48
51
  private def item_alias **params
49
52
  @aliases ||= {}
50
53
  params.each do |name, value|
@@ -94,6 +97,7 @@ class Enum
94
97
  end
95
98
  end
96
99
 
100
+ # @!scope class
97
101
  private def get name_or_order
98
102
  return nil if name == nil
99
103
  result = @by_name[name_or_order] || @by_order[name_or_order]
data/lib/extra/period.rb CHANGED
@@ -185,6 +185,7 @@ class Period
185
185
  self.class.make(seconds: (@value / num).to_i)
186
186
  end
187
187
 
188
+ # @private
188
189
  class Num
189
190
 
190
191
  attr_reader :value
@@ -199,6 +200,8 @@ class Period
199
200
 
200
201
  end
201
202
 
203
+ private_constant :Num
204
+
202
205
  def coerce num
203
206
  case num
204
207
  when Integer, Float, Rational
@@ -212,7 +215,9 @@ end
212
215
 
213
216
  class Time
214
217
 
218
+ # @private
215
219
  alias :preperiod_plus :+
220
+ # @private
216
221
  alias :preperiod_minus :-
217
222
 
218
223
  def + arg
@@ -229,22 +234,32 @@ end
229
234
 
230
235
  class Numeric
231
236
 
237
+ #
238
+ # @return [Period]
232
239
  def weeks
233
240
  Period::make(weeks: 1) * self
234
241
  end
235
242
 
243
+ #
244
+ # @return [Period]
236
245
  def days
237
246
  Period::make(days: 1) * self
238
247
  end
239
248
 
249
+ #
250
+ # @return [Period]
240
251
  def hours
241
252
  Period::make(hours: 1) * self
242
253
  end
243
254
 
255
+ #
256
+ # @return [Period]
244
257
  def minutes
245
258
  Period::make(minutes: 1) * self
246
259
  end
247
260
 
261
+ #
262
+ # @return [Period]
248
263
  def seconds
249
264
  Period::make(seconds: 1) * self
250
265
  end
@@ -6,9 +6,10 @@ require_relative 'preamble'
6
6
  require_relative 'globals'
7
7
  require_relative 'task'
8
8
 
9
- class Application
9
+ class INat::Application
10
10
 
11
- include AppPreamble
11
+ include INat::App
12
+ include INat::App::Preamble
12
13
 
13
14
  def logger
14
15
  G.logger
@@ -17,7 +18,7 @@ class Application
17
18
  def initialize
18
19
  setup!
19
20
  G.config = @config.freeze
20
- G.logger = DualLogger::new self
21
+ G.logger = INat::App::Logger::new self
21
22
  end
22
23
 
23
24
  private def tasks!
@@ -2,7 +2,9 @@
2
2
 
3
3
  require 'extra/enum'
4
4
 
5
- class MessageLevel < Enum
5
+ module INat::App::Config; end
6
+
7
+ class INat::App::Config::MessageLevel < Enum
6
8
 
7
9
  item :TRACE, -1
8
10
  item :DEBUG, data: 0
@@ -1,6 +1,6 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- module ShiftAge
3
+ module INat::App::Config::ShiftAge
4
4
 
5
5
  class << self
6
6
 
@@ -2,7 +2,7 @@
2
2
 
3
3
  require 'extra/enum'
4
4
 
5
- class UpdateMode < Enum
5
+ class INat::App::Config::UpdateMode < Enum
6
6
 
7
7
  items :UPDATE,
8
8
  :FORCE,
@@ -10,9 +10,13 @@ require_relative 'config/messagelevel'
10
10
  require_relative 'config/updatemode'
11
11
  require_relative 'config/shiftage'
12
12
 
13
- class Application
13
+ # TODO: переделать в модуль INat::App::Config
14
+ class INat::Application
14
15
 
15
- include AppInfo
16
+ using DeepMerge
17
+
18
+ include INat::App::Info
19
+ include INat::App::Config
16
20
 
17
21
  API_DEFAULT = 'https://api.inaturalist.org/v1/'
18
22
  DEFAULT_LOG = "./#{ NAME }.log"
@@ -1,6 +1,6 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- module Globals
3
+ module INat::App::Globals
4
4
 
5
5
  class << self
6
6
 
@@ -40,10 +40,13 @@ module Globals
40
40
 
41
41
  end
42
42
 
43
- G = Globals
43
+ G = INat::App::Globals
44
44
 
45
- module LogDSL
45
+ module INat::App::Logger::DSL
46
46
 
47
+ include INat::App::Config
48
+
49
+ # @private
47
50
  def included mod
48
51
  mod.extend LogDSL
49
52
  end
data/lib/inat/app/info.rb CHANGED
@@ -1,21 +1,26 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- module AppInfo
3
+ module INat
4
4
 
5
- AUTHOR = 'Ivan Shikhalev'
6
- EMAIL = 'shkikhalev@gmail.com'
5
+ module App
7
6
 
8
- VERSION = '0.8.0.12'
9
- HOMEPAGE = 'https://github.com/shikhalev/inat-get'
10
- SOURCE_URL = 'https://github.com/shikhalev/inat-get'
7
+ module Info
11
8
 
12
- EXE = File.basename $0
13
- NAME = File.basename $0, '.rb'
9
+ AUTHOR = "Ivan Shikhalev"
10
+ EMAIL = "shkikhalev@gmail.com"
14
11
 
15
- USAGE = "\e[1mUsage $\e[0m #{EXE} [options] ‹task[, ...]›"
16
- ABOUT = "\e[1mINat::Get v#{VERSION}\e[0m — A toolset for fetching and processing data from \e[4miNaturalist.org\e[0m.\n" +
17
- "\n" +
18
- "\e[1mSource:\e[0m \e[4m#{HOMEPAGE}\e[0m\n" +
19
- "\e[1mAuthor:\e[0m #{AUTHOR} ‹\e[4m#{EMAIL}\e[0m›"
12
+ VERSION = "0.8.0.13"
13
+ HOMEPAGE = "https://github.com/shikhalev/inat-get"
14
+ SOURCE_URL = "https://github.com/shikhalev/inat-get"
20
15
 
16
+ EXE = File.basename $0
17
+ NAME = File.basename $0, ".rb"
18
+
19
+ USAGE = "\e[1mUsage $\e[0m #{EXE} [options] ‹task[, ...]›"
20
+ ABOUT = "\e[1mINat::Get v#{VERSION}\e[0m — A toolset for fetching and processing data from \e[4miNaturalist.org\e[0m.\n" +
21
+ "\n" +
22
+ "\e[1mSource:\e[0m \e[4m#{HOMEPAGE}\e[0m\n" +
23
+ "\e[1mAuthor:\e[0m #{AUTHOR} ‹\e[4m#{EMAIL}\e[0m›"
24
+ end
25
+ end
21
26
  end
@@ -2,7 +2,7 @@
2
2
 
3
3
  require 'logger'
4
4
 
5
- class DualLogger
5
+ class INat::App::Logger
6
6
 
7
7
  def config
8
8
  @application.config
@@ -13,14 +13,14 @@ class DualLogger
13
13
  v_para = {
14
14
  level: config[:verbose].severity
15
15
  }
16
- @verb = Logger::new STDERR, **v_para
16
+ @verb = ::Logger::new STDERR, **v_para
17
17
  if config[:log][:enable]
18
18
  f_para = {
19
19
  level: config[:log][:level].severity,
20
20
  }
21
21
  f_para[:shift_age] = config[:log][:shift][:age] if config[:log][:shift][:age]
22
22
  f_para[:shift_level] = config[:log][:shift][:level] if config[:log][:shift][:level]
23
- @file = Logger::new config[:log][:file], **f_para
23
+ @file = ::Logger::new config[:log][:file], **f_para
24
24
  else
25
25
  @file = nil
26
26
  end
@@ -1,6 +1,6 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- module AppPreamble
3
+ module INat::App::Preamble
4
4
 
5
5
  private def do_clean_requests
6
6
  # NEED: implement
@@ -4,7 +4,7 @@ require_relative 'globals'
4
4
 
5
5
  # TODO: переделать на отдельный поток и очередь статусов. Ввести отдельно ключ, как идентификатор запроса, например.
6
6
 
7
- module Status
7
+ module INat::App::Status
8
8
 
9
9
  class << self
10
10
 
@@ -17,12 +17,6 @@ module Status
17
17
  end
18
18
  end
19
19
 
20
- # private def get_num
21
- # @num ||= 0
22
- # @num += 1
23
- # @num
24
- # end
25
-
26
20
  def init
27
21
  @lines = {}
28
22
  @mutex = Mutex::new
@@ -70,5 +64,5 @@ module Status
70
64
 
71
65
  end
72
66
 
73
- Status::init
74
- G.status = Status
67
+ INat::App::Status::init
68
+ G.status = INat::App::Status
@@ -4,11 +4,15 @@ require_relative 'dsl'
4
4
  require_relative '../../report/table'
5
5
  require_relative '../../report/report_dsl'
6
6
 
7
- class Task::Context
7
+ class INat::App::Task::Context
8
8
 
9
- include Task::DSL
10
- include TableDSL
11
- include ReportDSL
9
+ include INat::App::Task::DSL
10
+ include INat::Report::DSL
11
+ include INat::Report::Table::DSL
12
+
13
+ include INat
14
+ include INat::App
15
+ include INat::Report
12
16
 
13
17
  attr_accessor :name
14
18
 
@@ -8,11 +8,13 @@ require_relative '../../data/query'
8
8
  require_relative '../../data/sets/dataset'
9
9
  require_relative '../../data/sets/list'
10
10
 
11
- class Task; end
11
+ class INat::App::Task; end
12
12
 
13
- module Task::DSL
13
+ module INat::App::Task::DSL
14
14
 
15
- include LogDSL
15
+ include INat
16
+ include INat::Report
17
+ include INat::App::Logger::DSL
16
18
 
17
19
  def select **params
18
20
  query = Query::new(**params)
data/lib/inat/app/task.rb CHANGED
@@ -3,7 +3,7 @@
3
3
  require_relative 'globals'
4
4
  require_relative 'task/context'
5
5
 
6
- class Task
6
+ class INat::App::Task
7
7
 
8
8
  CHECK_LIST = %w[ . .inat .rb ]
9
9
  FILE_CHECK_LIST = %w[ .inat .iNat .INat .INAT .rb .RB ]
@@ -64,7 +64,7 @@ class Task
64
64
  @application = application
65
65
  @basename, @path = get_names source
66
66
  raise ArgumentError, "File not found: #{source}!" if @path.nil?
67
- @context = Task::Context::new self, @basename, @path
67
+ @context = Context::new self, @basename, @path
68
68
  end
69
69
 
70
70
  def execute