eac_rails_remotes 0.3.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 +4 -4
- data/app/controllers/eac_rails_remotes/instances_controller.rb +3 -0
- data/app/models/eac_rails_remotes/instance/class_methods.rb +31 -0
- data/app/models/eac_rails_remotes/instance/export.rb +58 -0
- data/app/models/eac_rails_remotes/instance/export_target_attribute.rb +51 -0
- data/app/models/eac_rails_remotes/instance.rb +14 -58
- data/lib/eac_rails_remotes/errors/target_association_export.rb +15 -0
- data/lib/eac_rails_remotes/errors/target_export.rb +14 -0
- data/lib/eac_rails_remotes/export_all.rb +1 -1
- data/lib/eac_rails_remotes/version.rb +1 -1
- data/lib/eac_rails_remotes.rb +7 -2
- data/lib/tasks/eac_rails_remotes.rake +1 -1
- metadata +21 -42
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: b12a302c21f1a69b8e03576b69b3920f97c1feca24cfba1b98660ca9444da77d
|
4
|
+
data.tar.gz: dcd50e1ceea808433376d06d1dccd7c72959335e242c2e162b8af4216c3fd018
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
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
|
@@ -0,0 +1,58 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require 'eac_ruby_utils/core_ext'
|
4
|
+
|
5
|
+
module EacRailsRemotes
|
6
|
+
class Instance < ::ActiveRecord::Base
|
7
|
+
class Export < ::SimpleDelegator
|
8
|
+
acts_as_instance_method
|
9
|
+
enable_simple_cache
|
10
|
+
|
11
|
+
def result
|
12
|
+
Rails.logger.info("Exporting #{self}")
|
13
|
+
begin
|
14
|
+
filled_target.save ? update_as_ok : update_as_error
|
15
|
+
rescue ::EacRailsRemotes::Errors::TargetAssociationExport => e
|
16
|
+
update_as_association_error(e)
|
17
|
+
end
|
18
|
+
end
|
19
|
+
|
20
|
+
protected
|
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
|
+
|
29
|
+
# @return [Hash]
|
30
|
+
def target_attributes
|
31
|
+
parsed_data.map { |k, v| export_target_attribute(k, v) }.compact_blank.to_h
|
32
|
+
end
|
33
|
+
|
34
|
+
# @return [String]
|
35
|
+
def target_export_message(target)
|
36
|
+
"ATTRIBUTES: #{target.attributes}\nERRORS: #{target.errors.messages}\n"
|
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
|
56
|
+
end
|
57
|
+
end
|
58
|
+
end
|
@@ -0,0 +1,51 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require 'eac_ruby_utils/core_ext'
|
4
|
+
|
5
|
+
module EacRailsRemotes
|
6
|
+
class Instance < ::ActiveRecord::Base
|
7
|
+
class ExportTargetAttribute
|
8
|
+
acts_as_instance_method
|
9
|
+
enable_simple_cache
|
10
|
+
common_constructor :instance, :attribute, :value
|
11
|
+
|
12
|
+
# @return [Array]
|
13
|
+
def result
|
14
|
+
return nil unless valid?
|
15
|
+
return [attribute, value] unless entity_association_class
|
16
|
+
|
17
|
+
result_by_association
|
18
|
+
end
|
19
|
+
|
20
|
+
protected
|
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
|
+
|
29
|
+
# @return [ActiveRecord::Reflection::BelongsToReflection, nil]
|
30
|
+
def entity_association_class_uncached
|
31
|
+
instance.entity_class.reflect_on_all_associations(:belongs_to)
|
32
|
+
.find { |x| x.foreign_key.to_sym == attribute.to_sym }
|
33
|
+
end
|
34
|
+
|
35
|
+
# @return [Array]
|
36
|
+
def result_by_association
|
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
|
41
|
+
)
|
42
|
+
end
|
43
|
+
|
44
|
+
# @return [Boolean]
|
45
|
+
def valid?
|
46
|
+
instance.entity_class.primary_key != attribute.to_s &&
|
47
|
+
instance.entity_class.new.respond_to?("#{attribute}=")
|
48
|
+
end
|
49
|
+
end
|
50
|
+
end
|
51
|
+
end
|
@@ -16,10 +16,20 @@ module EacRailsRemotes
|
|
16
16
|
|
17
17
|
belongs_to :target, polymorphic: true, optional: true
|
18
18
|
|
19
|
-
scope :
|
19
|
+
scope :pending, lambda {
|
20
20
|
where.not(export_status: EXPORT_STATUS_OK)
|
21
21
|
}
|
22
22
|
|
23
|
+
# @return [Object]
|
24
|
+
def parsed_data
|
25
|
+
data.if_present(nil) { |v| ::EacRubyUtils::Yaml.load(v) }
|
26
|
+
end
|
27
|
+
|
28
|
+
# @param value [Object]
|
29
|
+
def parsed_data=(value)
|
30
|
+
self.data = value.if_present(nil) { |v| ::EacRubyUtils::Yaml.dump(v) }
|
31
|
+
end
|
32
|
+
|
23
33
|
def to_s
|
24
34
|
"#{source}|#{entity}|#{code}"
|
25
35
|
end
|
@@ -31,68 +41,14 @@ module EacRailsRemotes
|
|
31
41
|
export if export_status != EXPORT_STATUS_ERROR
|
32
42
|
return target if target.present?
|
33
43
|
|
34
|
-
raise
|
35
|
-
end
|
36
|
-
|
37
|
-
def export
|
38
|
-
Rails.logger.info("Exporting #{self}")
|
39
|
-
t = target || entity_class.new
|
40
|
-
t.attributes = target_attributes
|
41
|
-
if t.save
|
42
|
-
update!(export_status: EXPORT_STATUS_OK, export_message: '', target: t)
|
43
|
-
else
|
44
|
-
update!(export_status: EXPORT_STATUS_ERROR,
|
45
|
-
export_message: target_export_message(t))
|
46
|
-
end
|
47
|
-
end
|
48
|
-
|
49
|
-
private
|
50
|
-
|
51
|
-
def target_attributes
|
52
|
-
EacRubyUtils::Yaml.load(data).to_h { |k, v| target_attribute(k, v) }
|
53
|
-
end
|
54
|
-
|
55
|
-
def target_attribute(attr, value)
|
56
|
-
a = entity_association_class(attr)
|
57
|
-
return [attr, value] unless a
|
58
|
-
|
59
|
-
ri = self.class.find_by(source: source, entity: a.klass.name, code: value)
|
60
|
-
[a.name, ri&.target]
|
61
|
-
end
|
62
|
-
|
63
|
-
# @return [ActiveRecord::Reflection::BelongsToReflection, nil]
|
64
|
-
def entity_association_class(attribute)
|
65
|
-
entity_class.reflect_on_all_associations(:belongs_to)
|
66
|
-
.find { |x| x.foreign_key.to_sym == attribute.to_sym }
|
44
|
+
raise ::EacRailsRemotes::Errors::TargetExport, self
|
67
45
|
end
|
68
46
|
|
47
|
+
# @return [Class<ActiveRecord::Base>]
|
69
48
|
def entity_class
|
70
49
|
entity.constantize
|
71
50
|
end
|
72
51
|
|
73
|
-
|
74
|
-
"ATTRIBUTES: #{target.attributes}\nERRORS: #{target.errors.messages}\n"
|
75
|
-
end
|
76
|
-
|
77
|
-
class << self
|
78
|
-
# @param record [Hash]
|
79
|
-
# @return [EacRailsRemotes::Instance]
|
80
|
-
def import(record)
|
81
|
-
ri = where(source: record.fetch(:source), entity: sanitize_entity(record.fetch(:entity)),
|
82
|
-
code: record.fetch(:code)).first_or_initialize
|
83
|
-
ri.data = record.fetch(:data).to_yaml
|
84
|
-
if ri.data_changed?
|
85
|
-
ri.export_status = EXPORT_STATUS_NEW_DATA
|
86
|
-
ri.save!
|
87
|
-
end
|
88
|
-
ri
|
89
|
-
end
|
90
|
-
|
91
|
-
# @oaram entity [Object]
|
92
|
-
# @return [String]
|
93
|
-
def sanitize_entity(entity)
|
94
|
-
entity.is_a?(::Module) ? entity.name : entity.to_s
|
95
|
-
end
|
96
|
-
end
|
52
|
+
require_sub __FILE__, require_mode: :kernel, include_modules: true
|
97
53
|
end
|
98
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
|
data/lib/eac_rails_remotes.rb
CHANGED
@@ -1,7 +1,12 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
|
-
require 'eac_ruby_utils
|
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'
|
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
|
+
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:
|
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,88 +16,62 @@ dependencies:
|
|
16
16
|
requirements:
|
17
17
|
- - "~>"
|
18
18
|
- !ruby/object:Gem::Version
|
19
|
-
version: '0.
|
20
|
-
- - ">="
|
21
|
-
- !ruby/object:Gem::Version
|
22
|
-
version: 0.6.1
|
23
|
-
type: :runtime
|
24
|
-
prerelease: false
|
25
|
-
version_requirements: !ruby/object:Gem::Requirement
|
26
|
-
requirements:
|
27
|
-
- - "~>"
|
28
|
-
- !ruby/object:Gem::Version
|
29
|
-
version: '0.6'
|
30
|
-
- - ">="
|
31
|
-
- !ruby/object:Gem::Version
|
32
|
-
version: 0.6.1
|
33
|
-
- !ruby/object:Gem::Dependency
|
34
|
-
name: eac_rails_gem_support
|
35
|
-
requirement: !ruby/object:Gem::Requirement
|
36
|
-
requirements:
|
37
|
-
- - "~>"
|
38
|
-
- !ruby/object:Gem::Version
|
39
|
-
version: '0.10'
|
40
|
-
- - ">="
|
41
|
-
- !ruby/object:Gem::Version
|
42
|
-
version: 0.10.1
|
19
|
+
version: '0.7'
|
43
20
|
type: :runtime
|
44
21
|
prerelease: false
|
45
22
|
version_requirements: !ruby/object:Gem::Requirement
|
46
23
|
requirements:
|
47
24
|
- - "~>"
|
48
25
|
- !ruby/object:Gem::Version
|
49
|
-
version: '0.
|
50
|
-
- - ">="
|
51
|
-
- !ruby/object:Gem::Version
|
52
|
-
version: 0.10.1
|
26
|
+
version: '0.7'
|
53
27
|
- !ruby/object:Gem::Dependency
|
54
28
|
name: eac_rails_utils
|
55
29
|
requirement: !ruby/object:Gem::Requirement
|
56
30
|
requirements:
|
57
31
|
- - "~>"
|
58
32
|
- !ruby/object:Gem::Version
|
59
|
-
version: '0.
|
33
|
+
version: '0.26'
|
60
34
|
type: :runtime
|
61
35
|
prerelease: false
|
62
36
|
version_requirements: !ruby/object:Gem::Requirement
|
63
37
|
requirements:
|
64
38
|
- - "~>"
|
65
39
|
- !ruby/object:Gem::Version
|
66
|
-
version: '0.
|
40
|
+
version: '0.26'
|
67
41
|
- !ruby/object:Gem::Dependency
|
68
42
|
name: eac_ruby_utils
|
69
43
|
requirement: !ruby/object:Gem::Requirement
|
70
44
|
requirements:
|
71
45
|
- - "~>"
|
72
46
|
- !ruby/object:Gem::Version
|
73
|
-
version: '0.
|
47
|
+
version: '0.128'
|
48
|
+
- - ">="
|
49
|
+
- !ruby/object:Gem::Version
|
50
|
+
version: 0.128.3
|
74
51
|
type: :runtime
|
75
52
|
prerelease: false
|
76
53
|
version_requirements: !ruby/object:Gem::Requirement
|
77
54
|
requirements:
|
78
55
|
- - "~>"
|
79
56
|
- !ruby/object:Gem::Version
|
80
|
-
version: '0.
|
57
|
+
version: '0.128'
|
58
|
+
- - ">="
|
59
|
+
- !ruby/object:Gem::Version
|
60
|
+
version: 0.128.3
|
81
61
|
- !ruby/object:Gem::Dependency
|
82
62
|
name: eac_rails_gem_support
|
83
63
|
requirement: !ruby/object:Gem::Requirement
|
84
64
|
requirements:
|
85
65
|
- - "~>"
|
86
66
|
- !ruby/object:Gem::Version
|
87
|
-
version: '0.
|
88
|
-
- - ">="
|
89
|
-
- !ruby/object:Gem::Version
|
90
|
-
version: 0.9.1
|
67
|
+
version: '0.11'
|
91
68
|
type: :development
|
92
69
|
prerelease: false
|
93
70
|
version_requirements: !ruby/object:Gem::Requirement
|
94
71
|
requirements:
|
95
72
|
- - "~>"
|
96
73
|
- !ruby/object:Gem::Version
|
97
|
-
version: '0.
|
98
|
-
- - ">="
|
99
|
-
- !ruby/object:Gem::Version
|
100
|
-
version: 0.9.1
|
74
|
+
version: '0.11'
|
101
75
|
description:
|
102
76
|
email:
|
103
77
|
executables: []
|
@@ -108,6 +82,9 @@ files:
|
|
108
82
|
- app/assets/stylesheets/eac_rails_remotes/application.scss
|
109
83
|
- app/controllers/eac_rails_remotes/instances_controller.rb
|
110
84
|
- app/models/eac_rails_remotes/instance.rb
|
85
|
+
- app/models/eac_rails_remotes/instance/class_methods.rb
|
86
|
+
- app/models/eac_rails_remotes/instance/export.rb
|
87
|
+
- app/models/eac_rails_remotes/instance/export_target_attribute.rb
|
111
88
|
- config/initializers/menus.rb
|
112
89
|
- config/locales/en.yml
|
113
90
|
- config/locales/pt-BR.yml
|
@@ -115,6 +92,8 @@ files:
|
|
115
92
|
- db/migrate/20230521002623_create_eac_rails_remotes_instances.rb
|
116
93
|
- lib/eac_rails_remotes.rb
|
117
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
|
118
97
|
- lib/eac_rails_remotes/export_all.rb
|
119
98
|
- lib/eac_rails_remotes/import_file.rb
|
120
99
|
- lib/eac_rails_remotes/version.rb
|