schema-model 0.3.7 → 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 +4 -4
- data/lib/schema/array_headers.rb +18 -13
- data/lib/schema/associations/has_many.rb +1 -0
- data/lib/schema/associations/has_one.rb +1 -0
- data/lib/schema/model.rb +26 -9
- data/lib/schema/utils.rb +2 -0
- metadata +3 -3
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 4e5bb83843c2fd8c09fc7773719e9c6c91a7008f5ff5ad69b935bee1616c4026
|
4
|
+
data.tar.gz: 7abce97c2b8ba2dbd5b1f955025a85bf64bfc4589e079531db823b150268c777
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 8e7ea9b0a73e35c8d1b69a7429d7a923959db7b3a38eb8c78326f5a96415326c4bea926c3c24f0d958bbe56cb7ee8b35b08d37fdc67a9ea563f02ebf308f457b
|
7
|
+
data.tar.gz: 2e0a2a6217c2594f152a1544d36d0eeb63d13fb9b1d6ee23589d63c70f4fccec5178869dd81bd2f3f0dc42dfb1f02cef0a022c75f2190a1765cf3c85da873f0f
|
data/lib/schema/array_headers.rb
CHANGED
@@ -28,12 +28,12 @@ module Schema
|
|
28
28
|
def get_field_names(mapped_headers, header_prefix = nil, mapped = true)
|
29
29
|
fields = []
|
30
30
|
schema.each do |field_name, field_options|
|
31
|
-
|
32
|
-
|
33
|
-
|
31
|
+
next if field_options[:alias_of]
|
32
|
+
|
33
|
+
if field_options[:association]
|
34
34
|
fields += get_model_field_names(field_name, field_options, mapped_headers, header_prefix, mapped)
|
35
35
|
else
|
36
|
-
next if skip_field?(field_name,
|
36
|
+
next if skip_field?(field_name, mapped_headers, mapped)
|
37
37
|
|
38
38
|
fields << generate_field_name(field_name, field_options, header_prefix)
|
39
39
|
end
|
@@ -47,15 +47,12 @@ module Schema
|
|
47
47
|
mapped_model = mapped_headers[field_name] || {}
|
48
48
|
const_get(field_options[:class_name]).get_field_names(
|
49
49
|
mapped_model,
|
50
|
-
header_prefix || field_options[:
|
50
|
+
header_prefix || field_options[:aliases]&.first,
|
51
51
|
mapped
|
52
52
|
)
|
53
53
|
end
|
54
54
|
|
55
|
-
def skip_field?(field_name,
|
56
|
-
# skip alias fields
|
57
|
-
return true if field_options[:alias_of]
|
58
|
-
|
55
|
+
def skip_field?(field_name, mapped_headers, mapped)
|
59
56
|
if mapped
|
60
57
|
mapped_headers[field_name].nil?
|
61
58
|
else
|
@@ -88,12 +85,14 @@ module Schema
|
|
88
85
|
def map_headers_to_has_many_associations(headers, mapped_headers)
|
89
86
|
schema.each do |field_name, field_options|
|
90
87
|
next unless field_options[:type] == :has_many
|
91
|
-
next unless field_options[:header_prefix]
|
92
88
|
|
93
|
-
|
94
|
-
|
89
|
+
get_header_prefixes(field_name, field_options).each do |header_prefix|
|
90
|
+
mapped_model = get_mapped_model(field_options, headers, header_prefix)
|
91
|
+
next if mapped_model.empty?
|
95
92
|
|
96
|
-
|
93
|
+
mapped_headers[field_name] = mapped_model
|
94
|
+
break
|
95
|
+
end
|
97
96
|
end
|
98
97
|
mapped_headers
|
99
98
|
end
|
@@ -121,6 +120,12 @@ module Schema
|
|
121
120
|
end
|
122
121
|
indexes
|
123
122
|
end
|
123
|
+
|
124
|
+
def get_header_prefixes(field_name, field_options)
|
125
|
+
names = [field_name.to_s]
|
126
|
+
names += field_options[:aliases] if field_options[:aliases]
|
127
|
+
names
|
128
|
+
end
|
124
129
|
end
|
125
130
|
end
|
126
131
|
end
|
data/lib/schema/model.rb
CHANGED
@@ -92,15 +92,8 @@ module Schema
|
|
92
92
|
|
93
93
|
def update_attributes(data)
|
94
94
|
schema = get_schema(data)
|
95
|
-
|
96
|
-
|
97
|
-
parsing_errors.add(key, ::Schema::ParsingErrors::UNKNOWN_ATTRIBUTE)
|
98
|
-
next
|
99
|
-
end
|
100
|
-
|
101
|
-
public_send(schema[key][:setter], value)
|
102
|
-
end
|
103
|
-
|
95
|
+
update_model_attributes(schema, data)
|
96
|
+
update_associations(schema, data)
|
104
97
|
self
|
105
98
|
end
|
106
99
|
|
@@ -122,6 +115,8 @@ module Schema
|
|
122
115
|
@parsing_errors ||= Errors.new
|
123
116
|
end
|
124
117
|
|
118
|
+
private
|
119
|
+
|
125
120
|
def get_schema(data)
|
126
121
|
data.each_key do |key|
|
127
122
|
break unless key.is_a?(Symbol)
|
@@ -130,5 +125,27 @@ module Schema
|
|
130
125
|
end
|
131
126
|
self.class.schema_with_string_keys
|
132
127
|
end
|
128
|
+
|
129
|
+
def update_model_attributes(schema, data)
|
130
|
+
data.each do |key, value|
|
131
|
+
unless schema.key?(key)
|
132
|
+
parsing_errors.add(key, ::Schema::ParsingErrors::UNKNOWN_ATTRIBUTE)
|
133
|
+
next
|
134
|
+
end
|
135
|
+
|
136
|
+
next if schema[key][:association]
|
137
|
+
|
138
|
+
public_send(schema[key][:setter], value)
|
139
|
+
end
|
140
|
+
end
|
141
|
+
|
142
|
+
def update_associations(schema, data)
|
143
|
+
data.each do |key, value|
|
144
|
+
next unless schema.key?(key)
|
145
|
+
next unless schema[key][:association]
|
146
|
+
|
147
|
+
public_send(schema[key][:setter], value)
|
148
|
+
end
|
149
|
+
end
|
133
150
|
end
|
134
151
|
end
|
data/lib/schema/utils.rb
CHANGED
@@ -26,6 +26,8 @@ module Schema
|
|
26
26
|
|
27
27
|
def association_options(schema_name, schema_type, options)
|
28
28
|
options[:class_name] ||= 'Schema' + classify_name(schema_type.to_s) + classify_name(schema_name.to_s)
|
29
|
+
options[:association] = true
|
30
|
+
options[:aliases] = [options[:alias]] if options.key?(:alias)
|
29
31
|
::Schema::Model.default_attribute_options(schema_name, schema_type).merge(options)
|
30
32
|
end
|
31
33
|
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: schema-model
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.4.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Doug Youch
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2019-08-
|
11
|
+
date: 2019-08-19 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: inheritance-helper
|
@@ -70,7 +70,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
70
70
|
- !ruby/object:Gem::Version
|
71
71
|
version: '0'
|
72
72
|
requirements: []
|
73
|
-
rubygems_version: 3.0.
|
73
|
+
rubygems_version: 3.0.3
|
74
74
|
signing_key:
|
75
75
|
specification_version: 4
|
76
76
|
summary: Schema Model
|