eac_rails_remotes 0.4.0 → 0.5.0

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: 20d00ca632f9889c6bb6158d9931d28de7d0fb41f5a803f9b375322c40f22185
4
- data.tar.gz: 2549430c7a500b0faa2ba60ea86e110a081dcc27a30f24c501506163eeb66cdf
3
+ metadata.gz: b12a302c21f1a69b8e03576b69b3920f97c1feca24cfba1b98660ca9444da77d
4
+ data.tar.gz: dcd50e1ceea808433376d06d1dccd7c72959335e242c2e162b8af4216c3fd018
5
5
  SHA512:
6
- metadata.gz: ca3bfc3d8dcbe6d927b8a660ec2b4ef8fe1b16cf3885a34e1bdf42fe7ab8bc2b12e577342b523dcd7c4fa21be6ed9fb170b30e27f3b9b74943f71afe4b5d7303
7
- data.tar.gz: 8db027139ca17da7d9149cc9bd4ea22b3ba82051358e46ae1ddfe8587153928c1e48e06014fb07c344bd220ac15564c79a7e3b6cbeb9ece9937bac27de7e814f
6
+ metadata.gz: c422d2c1b729540570886c2c9ea98613f4dbeaa865538c67afb69cbfb66303cec22be1bb6933789b6e3e33b905de03d3a40a1c0ddf4b144c507c3361c7d2bf6f
7
+ data.tar.gz: a674d9384cf95c83dbe7ea118cce32283a10b5845f4b3a593688d27f30538cd17999b1a610e2c123a8f05ae928c7de5ed7c1f9a1d5430d96088e7ca148f92c38
@@ -6,8 +6,11 @@ module EacRailsRemotes
6
6
 
7
7
  active_scaffold :'eac_rails_remotes/instance' do |conf|
8
8
  conf.actions.exclude :create, :update
9
+ conf.list.columns = %i[entity source code export_status target created_at
10
+ updated_at]
9
11
  conf.columns[:export_status].form_ui = :select
10
12
  conf.columns[:entity].form_ui = :select
13
+ conf.columns[:target].clear_link
11
14
  conf.actions.swap :search, :field_search
12
15
  conf.field_search.columns = :entity, :export_status
13
16
  end
@@ -0,0 +1,31 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'eac_ruby_utils/core_ext'
4
+
5
+ module EacRailsRemotes
6
+ class Instance < ::ActiveRecord::Base
7
+ module ClassMethods
8
+ common_concern
9
+ class_methods do
10
+ # @param record [Hash]
11
+ # @return [EacRailsRemotes::Instance]
12
+ def import(record)
13
+ ri = where(source: record.fetch(:source), entity: sanitize_entity(record.fetch(:entity)),
14
+ code: record.fetch(:code)).first_or_initialize
15
+ ri.parsed_data = record.fetch(:data)
16
+ if ri.data_changed?
17
+ ri.export_status = EXPORT_STATUS_NEW_DATA
18
+ ri.save!
19
+ end
20
+ ri
21
+ end
22
+
23
+ # @oaram entity [Object]
24
+ # @return [String]
25
+ def sanitize_entity(entity)
26
+ entity.is_a?(::Module) ? entity.name : entity.to_s
27
+ end
28
+ end
29
+ end
30
+ end
31
+ end
@@ -6,21 +6,26 @@ module EacRailsRemotes
6
6
  class Instance < ::ActiveRecord::Base
7
7
  class Export < ::SimpleDelegator
8
8
  acts_as_instance_method
9
+ enable_simple_cache
9
10
 
10
11
  def result
11
12
  Rails.logger.info("Exporting #{self}")
12
- t = target || entity_class.new
13
- t.attributes = target_attributes
14
- if t.save
15
- update!(export_status: EXPORT_STATUS_OK, export_message: '', target: t)
16
- else
17
- update!(export_status: EXPORT_STATUS_ERROR,
18
- export_message: target_export_message(t))
13
+ begin
14
+ filled_target.save ? update_as_ok : update_as_error
15
+ rescue ::EacRailsRemotes::Errors::TargetAssociationExport => e
16
+ update_as_association_error(e)
19
17
  end
20
18
  end
21
19
 
22
20
  protected
23
21
 
22
+ # @return [ActiveRecord::Base]
23
+ def filled_target_uncached
24
+ t = target || entity_class.new
25
+ t.attributes = target_attributes
26
+ t
27
+ end
28
+
24
29
  # @return [Hash]
25
30
  def target_attributes
26
31
  parsed_data.map { |k, v| export_target_attribute(k, v) }.compact_blank.to_h
@@ -30,6 +35,24 @@ module EacRailsRemotes
30
35
  def target_export_message(target)
31
36
  "ATTRIBUTES: #{target.attributes}\nERRORS: #{target.errors.messages}\n"
32
37
  end
38
+
39
+ # @param error [EacRailsRemotes::Errors::TargetAssociationExport]
40
+ # @return [void]
41
+ def update_as_association_error(error)
42
+ update!(export_status: EXPORT_STATUS_ERROR,
43
+ export_message: target_export_message(error.record))
44
+ end
45
+
46
+ # @return [void]
47
+ def update_as_error
48
+ update!(export_status: EXPORT_STATUS_ERROR,
49
+ export_message: target_export_message(filled_target))
50
+ end
51
+
52
+ # @return [void]
53
+ def update_as_ok
54
+ update!(export_status: EXPORT_STATUS_OK, export_message: '', target: filled_target)
55
+ end
33
56
  end
34
57
  end
35
58
  end
@@ -19,6 +19,13 @@ module EacRailsRemotes
19
19
 
20
20
  protected
21
21
 
22
+ # @return [EacRailsRemotes::Instance]
23
+ def association_record_uncached
24
+ instance.class.find_by(
25
+ source: instance.source, entity: entity_association_class.klass.name, code: value
26
+ )
27
+ end
28
+
22
29
  # @return [ActiveRecord::Reflection::BelongsToReflection, nil]
23
30
  def entity_association_class_uncached
24
31
  instance.entity_class.reflect_on_all_associations(:belongs_to)
@@ -27,10 +34,11 @@ module EacRailsRemotes
27
34
 
28
35
  # @return [Array]
29
36
  def result_by_association
30
- ri = instance.class.find_by(
31
- source: instance.source, entity: entity_association_class.klass.name, code: value
37
+ [entity_association_class.name, association_record&.assert_target]
38
+ rescue ::EacRailsRemotes::Errors::TargetExport => e
39
+ raise ::EacRailsRemotes::Errors::TargetAssociationExport.new(
40
+ instance, entity_association_class.name, e.record
32
41
  )
33
- [entity_association_class.name, ri&.assert_target]
34
42
  end
35
43
 
36
44
  # @return [Boolean]
@@ -16,7 +16,7 @@ module EacRailsRemotes
16
16
 
17
17
  belongs_to :target, polymorphic: true, optional: true
18
18
 
19
- scope :pendent, lambda {
19
+ scope :pending, lambda {
20
20
  where.not(export_status: EXPORT_STATUS_OK)
21
21
  }
22
22
 
@@ -41,7 +41,7 @@ module EacRailsRemotes
41
41
  export if export_status != EXPORT_STATUS_ERROR
42
42
  return target if target.present?
43
43
 
44
- raise "Export failed (ID: #{id}, export message: \"#{export_message}\""
44
+ raise ::EacRailsRemotes::Errors::TargetExport, self
45
45
  end
46
46
 
47
47
  # @return [Class<ActiveRecord::Base>]
@@ -49,27 +49,6 @@ module EacRailsRemotes
49
49
  entity.constantize
50
50
  end
51
51
 
52
- class << self
53
- # @param record [Hash]
54
- # @return [EacRailsRemotes::Instance]
55
- def import(record)
56
- ri = where(source: record.fetch(:source), entity: sanitize_entity(record.fetch(:entity)),
57
- code: record.fetch(:code)).first_or_initialize
58
- ri.parsed_data = record.fetch(:data)
59
- if ri.data_changed?
60
- ri.export_status = EXPORT_STATUS_NEW_DATA
61
- ri.save!
62
- end
63
- ri
64
- end
65
-
66
- # @oaram entity [Object]
67
- # @return [String]
68
- def sanitize_entity(entity)
69
- entity.is_a?(::Module) ? entity.name : entity.to_s
70
- end
71
- end
72
-
73
- require_sub __FILE__, require_mode: :kernel
52
+ require_sub __FILE__, require_mode: :kernel, include_modules: true
74
53
  end
75
54
  end
@@ -0,0 +1,15 @@
1
+ # frozen_string_literal: true
2
+
3
+ module EacRailsRemotes
4
+ module Errors
5
+ class TargetAssociationExport < ::EacRailsRemotes::Errors::TargetExport
6
+ attr_reader :association_name, :owner_record
7
+
8
+ def initialize(association_record, association_name, owner_record)
9
+ super(association_record)
10
+ @association_name = association_name
11
+ @owner_record = owner_record
12
+ end
13
+ end
14
+ end
15
+ end
@@ -0,0 +1,14 @@
1
+ # frozen_string_literal: true
2
+
3
+ module EacRailsRemotes
4
+ module Errors
5
+ class TargetExport < ::RuntimeError
6
+ attr_reader :record
7
+
8
+ def initialize(record)
9
+ super("Export failed (ID: #{record.id}, export message: \"#{record.export_message}\")")
10
+ @record = record
11
+ end
12
+ end
13
+ end
14
+ end
@@ -3,7 +3,7 @@
3
3
  module EacRailsRemotes
4
4
  class ExportAll
5
5
  def perform
6
- ::EacRailsRemotes::Instance.pendent.each(&:export)
6
+ ::EacRailsRemotes::Instance.pending.each(&:export)
7
7
  end
8
8
  end
9
9
  end
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module EacRailsRemotes
4
- VERSION = '0.4.0'
4
+ VERSION = '0.5.0'
5
5
  end
@@ -1,7 +1,12 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- require 'eac_ruby_utils/core_ext'
3
+ require 'eac_ruby_utils'
4
+ EacRubyUtils::RootModuleSetup.perform __FILE__
4
5
 
5
6
  module EacRailsRemotes
6
- require_sub __FILE__
7
7
  end
8
+
9
+ require 'eac_active_scaffold'
10
+ require 'eac_rails_utils'
11
+
12
+ require 'eac_rails_remotes/engine'
@@ -8,6 +8,6 @@ namespace :eac_rails_remotes do
8
8
 
9
9
  desc 'Export pending remote instances'
10
10
  task export_all: :environment do |_t, _args|
11
- EacRailsRemotes::Instance.pendent.each(&:export)
11
+ EacRailsRemotes::Instance.pending.each(&:export)
12
12
  end
13
13
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: eac_rails_remotes
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.4.0
4
+ version: 0.5.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Put here the authors
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2024-09-22 00:00:00.000000000 Z
11
+ date: 2025-07-22 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: eac_active_scaffold
@@ -16,68 +16,62 @@ dependencies:
16
16
  requirements:
17
17
  - - "~>"
18
18
  - !ruby/object:Gem::Version
19
- version: '0.6'
20
- - - ">="
21
- - !ruby/object:Gem::Version
22
- version: 0.6.1
19
+ version: '0.7'
23
20
  type: :runtime
24
21
  prerelease: false
25
22
  version_requirements: !ruby/object:Gem::Requirement
26
23
  requirements:
27
24
  - - "~>"
28
25
  - !ruby/object:Gem::Version
29
- version: '0.6'
30
- - - ">="
31
- - !ruby/object:Gem::Version
32
- version: 0.6.1
26
+ version: '0.7'
33
27
  - !ruby/object:Gem::Dependency
34
28
  name: eac_rails_utils
35
29
  requirement: !ruby/object:Gem::Requirement
36
30
  requirements:
37
31
  - - "~>"
38
32
  - !ruby/object:Gem::Version
39
- version: '0.24'
33
+ version: '0.26'
40
34
  type: :runtime
41
35
  prerelease: false
42
36
  version_requirements: !ruby/object:Gem::Requirement
43
37
  requirements:
44
38
  - - "~>"
45
39
  - !ruby/object:Gem::Version
46
- version: '0.24'
40
+ version: '0.26'
47
41
  - !ruby/object:Gem::Dependency
48
42
  name: eac_ruby_utils
49
43
  requirement: !ruby/object:Gem::Requirement
50
44
  requirements:
51
45
  - - "~>"
52
46
  - !ruby/object:Gem::Version
53
- version: '0.123'
47
+ version: '0.128'
48
+ - - ">="
49
+ - !ruby/object:Gem::Version
50
+ version: 0.128.3
54
51
  type: :runtime
55
52
  prerelease: false
56
53
  version_requirements: !ruby/object:Gem::Requirement
57
54
  requirements:
58
55
  - - "~>"
59
56
  - !ruby/object:Gem::Version
60
- version: '0.123'
57
+ version: '0.128'
58
+ - - ">="
59
+ - !ruby/object:Gem::Version
60
+ version: 0.128.3
61
61
  - !ruby/object:Gem::Dependency
62
62
  name: eac_rails_gem_support
63
63
  requirement: !ruby/object:Gem::Requirement
64
64
  requirements:
65
65
  - - "~>"
66
66
  - !ruby/object:Gem::Version
67
- version: '0.10'
68
- - - ">="
69
- - !ruby/object:Gem::Version
70
- version: 0.10.1
67
+ version: '0.11'
71
68
  type: :development
72
69
  prerelease: false
73
70
  version_requirements: !ruby/object:Gem::Requirement
74
71
  requirements:
75
72
  - - "~>"
76
73
  - !ruby/object:Gem::Version
77
- version: '0.10'
78
- - - ">="
79
- - !ruby/object:Gem::Version
80
- version: 0.10.1
74
+ version: '0.11'
81
75
  description:
82
76
  email:
83
77
  executables: []
@@ -88,6 +82,7 @@ files:
88
82
  - app/assets/stylesheets/eac_rails_remotes/application.scss
89
83
  - app/controllers/eac_rails_remotes/instances_controller.rb
90
84
  - app/models/eac_rails_remotes/instance.rb
85
+ - app/models/eac_rails_remotes/instance/class_methods.rb
91
86
  - app/models/eac_rails_remotes/instance/export.rb
92
87
  - app/models/eac_rails_remotes/instance/export_target_attribute.rb
93
88
  - config/initializers/menus.rb
@@ -97,6 +92,8 @@ files:
97
92
  - db/migrate/20230521002623_create_eac_rails_remotes_instances.rb
98
93
  - lib/eac_rails_remotes.rb
99
94
  - lib/eac_rails_remotes/engine.rb
95
+ - lib/eac_rails_remotes/errors/target_association_export.rb
96
+ - lib/eac_rails_remotes/errors/target_export.rb
100
97
  - lib/eac_rails_remotes/export_all.rb
101
98
  - lib/eac_rails_remotes/import_file.rb
102
99
  - lib/eac_rails_remotes/version.rb