inat-get 0.9.0.18 → 0.9.2

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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 4755573543862b68a12f01b319807ec43826ec16fa4ce875d7b241b4b9d19a50
4
- data.tar.gz: aae527530c9c0a04017254eb86fb591dc43a53cfac2f3b17809e351fd0cdedd5
3
+ metadata.gz: d982769c0da51e8d5c408de8299ce6ee2674b2013b816dff73cb61f2f9a1bd06
4
+ data.tar.gz: 163e3dd44f9e65cc9bfdb41c622bc0da686c344cd2df94ab36da69d808faa8c0
5
5
  SHA512:
6
- metadata.gz: fc75d5593af48b7f1518577afb26ecf4dbc6dc3e2ccea894aa3acee2394b9a5246fe6726f5a4217c10688ac0789485c670a6d5604e913570e3316d316edc2b3b
7
- data.tar.gz: 86ba6085e4964c0d8e57e96c2b1ae6117d616f69b95a56b7fd144549ce991311980745142a6219d9a45b776e1429980bfe97f5362eb8f71a8a92617f3fb16b0e
6
+ metadata.gz: 855bda803c41a0d860ea243cd4debbd38bfa9af57cca2e03d11610a9353713eccf2c9fd6bd29982e0cb486f2f25339ad432b797dcc835c324ebb99a25ef0e997
7
+ data.tar.gz: 79a1ace30214d7c1761956c40ee787350c89317e40608faed77f3d79f5486184cf5ff2bfde3e904dad68558a775ec51537b1918ebbb892b412fcf6d8c81274e4
@@ -34,7 +34,13 @@ class INatGet::App::Main
34
34
  api = nil
35
35
  api = INatGet::App::Server::API::create api_socket, console: console if !@config[:offline]
36
36
 
37
- tasks = @config[:tasks].map { |path| INatGet::App::Task::new path, @config, console: console, api: api }
37
+ tasks = @config[:tasks].map do |path|
38
+ if path.end_with?('.erb')
39
+ INatGet::App::Task::ERB::new path, @config, console: console, api: api
40
+ else
41
+ INatGet::App::Task::new path, @config, console: console, api: api
42
+ end
43
+ end
38
44
  Process::warmup
39
45
  INatGet::App::Worker::enqueue @config, *tasks, console: console, api: api
40
46
  console.quit
@@ -9,7 +9,7 @@ require 'is-duration'
9
9
 
10
10
  require_relative 'server'
11
11
  require_relative 'console_logger'
12
- require_relative 'api_cache'
12
+ # require_relative 'api_cache'
13
13
 
14
14
  class INatGet::App::Server::API < INatGet::App::Server
15
15
 
@@ -1,5 +1,7 @@
1
1
  # frozen_string_literal: true
2
2
 
3
+ require 'erb'
4
+
3
5
  require 'sequel'
4
6
  Sequel.extension :core_extensions
5
7
  Sequel.datetime_class = Time
@@ -8,6 +10,7 @@ Sequel.application_timezone = :local
8
10
 
9
11
  require_relative '../../info'
10
12
  require_relative '../../data/dsl/dsl'
13
+ require_relative '../../data/dsl/reports'
11
14
  require_relative 'console_logger'
12
15
 
13
16
  class INatGet::App::Task
@@ -67,7 +70,7 @@ class INatGet::App::Task
67
70
  Sequel::Model.strict_param_setting = false
68
71
  Sequel::Model.raise_on_save_failure = true
69
72
  Sequel::Model.db = @db
70
- # Sequel::Model.db.loggers << ::Logger::new("common.log", level: :info)
73
+ Sequel::Model.db.loggers << ::Logger::new("sequel.log", level: :info)
71
74
  require_relative '../../data/models'
72
75
  require_relative '../../data/managers'
73
76
  # # ... etc
@@ -80,3 +83,15 @@ class INatGet::App::Task
80
83
  end
81
84
 
82
85
  end
86
+
87
+
88
+ class INatGet::App::Task::ERB < INatGet::App::Task
89
+
90
+ TRIM_MODE = ''
91
+
92
+ def execute
93
+ report = INatGet::Data::DSL::Report::ERB::new file: @path, trim_mode: TRIM_MODE
94
+ report.save
95
+ end
96
+
97
+ end
@@ -277,6 +277,14 @@ module INatGet::App::Setup
277
277
  "#{ file }.inat"
278
278
  elsif File.exist?("#{ file }.rb")
279
279
  "#{ file }.rb"
280
+ elsif File.exist?("#{ file }.erb")
281
+ "#{ file }.erb"
282
+ elsif File.exist?("#{ file }.md.erb")
283
+ "#{ file }.md.erb"
284
+ elsif File.exist?("#{ file }.html.erb")
285
+ "#{ file }.html.erb"
286
+ elsif File.exist?("#{ file }.htm.erb")
287
+ "#{ file }.htm.erb"
280
288
  else
281
289
  $stderr.puts "❌ \e[1mTask file not found:\e[0m #{ file }\e[1m. Stopped!\e[0m"
282
290
  exit Errno::ENOENT::Errno
@@ -213,7 +213,7 @@ class INatGet::Data::DSL::Dataset
213
213
 
214
214
  case reflection[:type]
215
215
  when :many_to_one
216
- ids = query.distinct.select_map(reflection[:key])
216
+ ids = query.select(reflection[:key]).distinct.select_map(reflection[:key])
217
217
  target.where(id: ids)
218
218
  when :one_to_many, :many_to_many
219
219
  # Для всех типов "много" используем ассоциативный датасет
@@ -0,0 +1,60 @@
1
+ # frozen_string_literal: true
2
+
3
+ require_relative '../../../info.rb'
4
+ require_relative '../dsl'
5
+
6
+ class INatGet::Data::DSL::Report
7
+
8
+ include INatGet::Data::DSL
9
+
10
+ def initialize mode: nil, suffix: nil, **data
11
+ @mode = mode
12
+ @data = data
13
+ @suffix = suffix
14
+ yield self if block_given?
15
+ end
16
+
17
+ # @return [String]
18
+ def basename suffix = nil
19
+ suffix ||= @suffix
20
+ if suffix
21
+ self.name + ' -- ' + suffix
22
+ else
23
+ self.name
24
+ end
25
+ end
26
+
27
+ # @return [String]
28
+ def ext mode: nil
29
+ (mode || @mode)&.to_s
30
+ end
31
+
32
+ # @return [String]
33
+ def filename suffix: nil, mode: nil
34
+ if self.ext(mode: mode)
35
+ self.basename(suffix) + '.' + self.ext(mode: mode)
36
+ else
37
+ self.basename(suffix)
38
+ end
39
+ end
40
+
41
+ # @return [String]
42
+ def render mode: nil
43
+ raise NotImplementedError, "Not implemented method 'render' for abstract Report", caller_locations
44
+ end
45
+
46
+ # @return [void]
47
+ def save filename = nil, suffix: nil, mode: nil
48
+ filename ||= self.filename(suffix: suffix, mode: mode)
49
+ File.write filename, self.render(mode: mode)
50
+ end
51
+
52
+ def [] key
53
+ @data[key]
54
+ end
55
+
56
+ def []= key, value
57
+ @data[key] = value
58
+ end
59
+
60
+ end
@@ -0,0 +1,42 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'erb'
4
+
5
+ require_relative 'base'
6
+
7
+ class INatGet::Data::DSL::Report::ERB < INatGet::Data::DSL::Report
8
+
9
+ def initialize code = nil, file: nil, ext: nil, trim_mode: nil, suffix: nil, **data, &block
10
+ @code = code
11
+ @code ||= File.read(file) if file
12
+ raise ArgumentError, "Source not specified", caller_locations unless @code
13
+ @ext = ext
14
+ @ext ||= File.extname(File.basename(file, '.erb')) if file
15
+ @erb = ::ERB::new @code, trim_mode: trim_mode
16
+ @erb.filename = file || '(erb)'
17
+ suffix ||= File.basename(File.basename(file, '.erb'), '.*') if file
18
+ super(mode: nil, suffix: suffix, **data, &block)
19
+ end
20
+
21
+ # @return [Hash]
22
+ attr_reader :data
23
+
24
+ # @return [String]
25
+ def ext mode: nil
26
+ @ext
27
+ end
28
+
29
+ # @return [String]
30
+ def render
31
+ @erb.result binding
32
+ end
33
+
34
+ end
35
+
36
+ module INatGet::Data::DSL
37
+
38
+ def erb_report code = nil, file: nil, ext: nil, trim_mode: nil, suffix: nil, **data, &block
39
+ INatGet::Data::DSL::Report::ERB::new(code, file: file, ext: ext, trim_mode: trim_mode, suffix: suffix, **data, &block)
40
+ end
41
+
42
+ end
@@ -0,0 +1,3 @@
1
+ # frozen_string_literal: true
2
+
3
+ require_relative 'reports/erb'
data/lib/inat-get/info.rb CHANGED
@@ -5,8 +5,8 @@ module INatGet; end
5
5
  module INatGet::Info
6
6
 
7
7
  NAME = 'inat-get'
8
- VERSION = '0.9.0.18'
9
- VERSION_ALIAS = 'Carduelis carduelis'
8
+ VERSION = '0.9.2'
9
+ VERSION_ALIAS = 'Parus major'
10
10
 
11
11
  AUTHOR = 'Ivan Shikhalev'
12
12
  AUTHOR_URL = 'https://github.com/shikhalev'
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: inat-get
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.9.0.18
4
+ version: 0.9.2
5
5
  platform: ruby
6
6
  authors:
7
7
  - Ivan Shikhalev
@@ -296,6 +296,9 @@ files:
296
296
  - lib/inat-get/data/dsl/dataset.rb
297
297
  - lib/inat-get/data/dsl/dsl.rb
298
298
  - lib/inat-get/data/dsl/list.rb
299
+ - lib/inat-get/data/dsl/reports.rb
300
+ - lib/inat-get/data/dsl/reports/base.rb
301
+ - lib/inat-get/data/dsl/reports/erb.rb
299
302
  - lib/inat-get/data/helpers/base.rb
300
303
  - lib/inat-get/data/helpers/defs.rb
301
304
  - lib/inat-get/data/helpers/defs/accuracy.rb