eac_rails_remotes 0.3.0 → 0.4.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:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 20d00ca632f9889c6bb6158d9931d28de7d0fb41f5a803f9b375322c40f22185
|
4
|
+
data.tar.gz: 2549430c7a500b0faa2ba60ea86e110a081dcc27a30f24c501506163eeb66cdf
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: ca3bfc3d8dcbe6d927b8a660ec2b4ef8fe1b16cf3885a34e1bdf42fe7ab8bc2b12e577342b523dcd7c4fa21be6ed9fb170b30e27f3b9b74943f71afe4b5d7303
|
7
|
+
data.tar.gz: 8db027139ca17da7d9149cc9bd4ea22b3ba82051358e46ae1ddfe8587153928c1e48e06014fb07c344bd220ac15564c79a7e3b6cbeb9ece9937bac27de7e814f
|
@@ -0,0 +1,35 @@
|
|
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
|
+
|
10
|
+
def result
|
11
|
+
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))
|
19
|
+
end
|
20
|
+
end
|
21
|
+
|
22
|
+
protected
|
23
|
+
|
24
|
+
# @return [Hash]
|
25
|
+
def target_attributes
|
26
|
+
parsed_data.map { |k, v| export_target_attribute(k, v) }.compact_blank.to_h
|
27
|
+
end
|
28
|
+
|
29
|
+
# @return [String]
|
30
|
+
def target_export_message(target)
|
31
|
+
"ATTRIBUTES: #{target.attributes}\nERRORS: #{target.errors.messages}\n"
|
32
|
+
end
|
33
|
+
end
|
34
|
+
end
|
35
|
+
end
|
@@ -0,0 +1,43 @@
|
|
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 [ActiveRecord::Reflection::BelongsToReflection, nil]
|
23
|
+
def entity_association_class_uncached
|
24
|
+
instance.entity_class.reflect_on_all_associations(:belongs_to)
|
25
|
+
.find { |x| x.foreign_key.to_sym == attribute.to_sym }
|
26
|
+
end
|
27
|
+
|
28
|
+
# @return [Array]
|
29
|
+
def result_by_association
|
30
|
+
ri = instance.class.find_by(
|
31
|
+
source: instance.source, entity: entity_association_class.klass.name, code: value
|
32
|
+
)
|
33
|
+
[entity_association_class.name, ri&.assert_target]
|
34
|
+
end
|
35
|
+
|
36
|
+
# @return [Boolean]
|
37
|
+
def valid?
|
38
|
+
instance.entity_class.primary_key != attribute.to_s &&
|
39
|
+
instance.entity_class.new.respond_to?("#{attribute}=")
|
40
|
+
end
|
41
|
+
end
|
42
|
+
end
|
43
|
+
end
|
@@ -20,6 +20,16 @@ module EacRailsRemotes
|
|
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
|
@@ -34,53 +44,18 @@ module EacRailsRemotes
|
|
34
44
|
raise "Export failed (ID: #{id}, export message: \"#{export_message}\""
|
35
45
|
end
|
36
46
|
|
37
|
-
|
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 }
|
67
|
-
end
|
68
|
-
|
47
|
+
# @return [Class<ActiveRecord::Base>]
|
69
48
|
def entity_class
|
70
49
|
entity.constantize
|
71
50
|
end
|
72
51
|
|
73
|
-
def target_export_message(target)
|
74
|
-
"ATTRIBUTES: #{target.attributes}\nERRORS: #{target.errors.messages}\n"
|
75
|
-
end
|
76
|
-
|
77
52
|
class << self
|
78
53
|
# @param record [Hash]
|
79
54
|
# @return [EacRailsRemotes::Instance]
|
80
55
|
def import(record)
|
81
56
|
ri = where(source: record.fetch(:source), entity: sanitize_entity(record.fetch(:entity)),
|
82
57
|
code: record.fetch(:code)).first_or_initialize
|
83
|
-
ri.
|
58
|
+
ri.parsed_data = record.fetch(:data)
|
84
59
|
if ri.data_changed?
|
85
60
|
ri.export_status = EXPORT_STATUS_NEW_DATA
|
86
61
|
ri.save!
|
@@ -94,5 +69,7 @@ module EacRailsRemotes
|
|
94
69
|
entity.is_a?(::Module) ? entity.name : entity.to_s
|
95
70
|
end
|
96
71
|
end
|
72
|
+
|
73
|
+
require_sub __FILE__, require_mode: :kernel
|
97
74
|
end
|
98
75
|
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
|
+
version: 0.4.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-
|
11
|
+
date: 2024-09-22 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: eac_active_scaffold
|
@@ -30,26 +30,6 @@ dependencies:
|
|
30
30
|
- - ">="
|
31
31
|
- !ruby/object:Gem::Version
|
32
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
|
43
|
-
type: :runtime
|
44
|
-
prerelease: false
|
45
|
-
version_requirements: !ruby/object:Gem::Requirement
|
46
|
-
requirements:
|
47
|
-
- - "~>"
|
48
|
-
- !ruby/object:Gem::Version
|
49
|
-
version: '0.10'
|
50
|
-
- - ">="
|
51
|
-
- !ruby/object:Gem::Version
|
52
|
-
version: 0.10.1
|
53
33
|
- !ruby/object:Gem::Dependency
|
54
34
|
name: eac_rails_utils
|
55
35
|
requirement: !ruby/object:Gem::Requirement
|
@@ -70,34 +50,34 @@ dependencies:
|
|
70
50
|
requirements:
|
71
51
|
- - "~>"
|
72
52
|
- !ruby/object:Gem::Version
|
73
|
-
version: '0.
|
53
|
+
version: '0.123'
|
74
54
|
type: :runtime
|
75
55
|
prerelease: false
|
76
56
|
version_requirements: !ruby/object:Gem::Requirement
|
77
57
|
requirements:
|
78
58
|
- - "~>"
|
79
59
|
- !ruby/object:Gem::Version
|
80
|
-
version: '0.
|
60
|
+
version: '0.123'
|
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.
|
67
|
+
version: '0.10'
|
88
68
|
- - ">="
|
89
69
|
- !ruby/object:Gem::Version
|
90
|
-
version: 0.
|
70
|
+
version: 0.10.1
|
91
71
|
type: :development
|
92
72
|
prerelease: false
|
93
73
|
version_requirements: !ruby/object:Gem::Requirement
|
94
74
|
requirements:
|
95
75
|
- - "~>"
|
96
76
|
- !ruby/object:Gem::Version
|
97
|
-
version: '0.
|
77
|
+
version: '0.10'
|
98
78
|
- - ">="
|
99
79
|
- !ruby/object:Gem::Version
|
100
|
-
version: 0.
|
80
|
+
version: 0.10.1
|
101
81
|
description:
|
102
82
|
email:
|
103
83
|
executables: []
|
@@ -108,6 +88,8 @@ files:
|
|
108
88
|
- app/assets/stylesheets/eac_rails_remotes/application.scss
|
109
89
|
- app/controllers/eac_rails_remotes/instances_controller.rb
|
110
90
|
- app/models/eac_rails_remotes/instance.rb
|
91
|
+
- app/models/eac_rails_remotes/instance/export.rb
|
92
|
+
- app/models/eac_rails_remotes/instance/export_target_attribute.rb
|
111
93
|
- config/initializers/menus.rb
|
112
94
|
- config/locales/en.yml
|
113
95
|
- config/locales/pt-BR.yml
|