fruit_to_lime 0.6.1 → 0.6.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.
- data/lib/fruit_to_lime/serialize_helper.rb +207 -0
- metadata +3 -1
@@ -0,0 +1,207 @@
|
|
1
|
+
module FruitToLime
|
2
|
+
module SerializeHelper
|
3
|
+
|
4
|
+
def fill_using(entity_columns, row)
|
5
|
+
entity_columns.select do |ecol|
|
6
|
+
ecol.selected!=nil && ecol.selected.length >0 && ecol.column!=nil && ecol.column.length > 0
|
7
|
+
end.each do |ecol|
|
8
|
+
selected = ecol.selected
|
9
|
+
value = row[ecol.column]
|
10
|
+
set_attribute(selected, value)
|
11
|
+
end
|
12
|
+
return self
|
13
|
+
end
|
14
|
+
|
15
|
+
def serialize()
|
16
|
+
SerializeHelper::serialize(self)
|
17
|
+
end
|
18
|
+
|
19
|
+
def serialize_to_file(file)
|
20
|
+
SerializeHelper::serialize_to_file(file, self)
|
21
|
+
end
|
22
|
+
|
23
|
+
def self.serialize_variables(obj)
|
24
|
+
if (obj.respond_to?(:serialize_variables))
|
25
|
+
return obj.serialize_variables.map do |ivar|
|
26
|
+
varn = ivar[:id].to_s.gsub(/^\@/,'').split('_').map do |m|
|
27
|
+
m.capitalize
|
28
|
+
end.join('')
|
29
|
+
varv = obj.instance_variable_get("@#{ivar[:id].to_s}")
|
30
|
+
if (varv.respond_to?(:serialize_variables))
|
31
|
+
varv = serialize_variables(varv)
|
32
|
+
elsif (varv.is_a?(Array))
|
33
|
+
varv = varv.map { |elem| SerializeHelper::serialize(elem) }.join("\n")
|
34
|
+
else
|
35
|
+
varv = varv.to_s.encode(:xml => :text)
|
36
|
+
end
|
37
|
+
"<#{varn}>#{ varv }</#{varn}>"
|
38
|
+
end.join("\n")
|
39
|
+
end
|
40
|
+
raise "!!#{obj.class}"
|
41
|
+
end
|
42
|
+
|
43
|
+
def self.serialize(obj)
|
44
|
+
if (obj.respond_to?(:serialize_variables))
|
45
|
+
varn = obj.serialize_name
|
46
|
+
"<#{varn}>#{ SerializeHelper::serialize_variables(obj) }</#{varn}>"
|
47
|
+
elsif obj.respond_to?(:to_xml)
|
48
|
+
obj.to_xml
|
49
|
+
else
|
50
|
+
obj.to_s.encode(:xml => :text)
|
51
|
+
end
|
52
|
+
end
|
53
|
+
|
54
|
+
def self.serialize_to_file(file, obj)
|
55
|
+
File.open(file, 'w') do |f|
|
56
|
+
f.write(SerializeHelper::serialize(obj))
|
57
|
+
end
|
58
|
+
end
|
59
|
+
|
60
|
+
def set_attribute(selected, value)
|
61
|
+
if selected.is_a? String
|
62
|
+
selected = [selected]
|
63
|
+
end
|
64
|
+
case selected.length
|
65
|
+
when 1
|
66
|
+
found = get_import_rows.find do |v|
|
67
|
+
v[:id].to_s == selected.first
|
68
|
+
end
|
69
|
+
if !found
|
70
|
+
return false
|
71
|
+
end
|
72
|
+
send(found[:id].to_s+"=",value)
|
73
|
+
return true
|
74
|
+
when 2
|
75
|
+
found = get_import_rows.find do |v|
|
76
|
+
v[:id].to_s == selected.first
|
77
|
+
end
|
78
|
+
if !found
|
79
|
+
return false
|
80
|
+
end
|
81
|
+
subval = send(found[:id].to_s)
|
82
|
+
if !subval
|
83
|
+
subval = get_default(found[:type])
|
84
|
+
send(found[:id].to_s+"=",subval)
|
85
|
+
end
|
86
|
+
subval.set_attribute(selected.slice(1), value)
|
87
|
+
else
|
88
|
+
raise "! #{selected.length}"
|
89
|
+
end
|
90
|
+
end
|
91
|
+
|
92
|
+
def symbol_to_name(symbol)
|
93
|
+
symbol.to_s.split('_').join(' ').capitalize
|
94
|
+
end
|
95
|
+
|
96
|
+
def get_default(type)
|
97
|
+
case type
|
98
|
+
when :string then
|
99
|
+
""
|
100
|
+
when :bool then
|
101
|
+
false
|
102
|
+
when :source_ref then
|
103
|
+
SourceRef.new
|
104
|
+
when :address then
|
105
|
+
Address.new
|
106
|
+
when :notes then
|
107
|
+
[]
|
108
|
+
when :tags then
|
109
|
+
[]
|
110
|
+
when :persons then
|
111
|
+
[]
|
112
|
+
when :custom_fields then
|
113
|
+
[]
|
114
|
+
when :organization_reference then
|
115
|
+
OrganizationReference.new
|
116
|
+
when :date then
|
117
|
+
nil
|
118
|
+
when :coworker_reference then
|
119
|
+
CoworkerReference.new
|
120
|
+
else
|
121
|
+
raise "Dont know how to handle '#{type}'"
|
122
|
+
end
|
123
|
+
end
|
124
|
+
|
125
|
+
def map_symbol_to_row(symbol,type)
|
126
|
+
{
|
127
|
+
:id=>symbol.to_s,
|
128
|
+
:name=> symbol==:id ? 'Go id' : symbol_to_name(symbol),
|
129
|
+
:type=>type
|
130
|
+
}
|
131
|
+
end
|
132
|
+
|
133
|
+
def map_to_row(p)
|
134
|
+
case p[:type]
|
135
|
+
when :string then
|
136
|
+
map_symbol_to_row(p[:id],p[:type])
|
137
|
+
when :bool then
|
138
|
+
map_symbol_to_row(p[:id],p[:type])
|
139
|
+
when :date then
|
140
|
+
map_symbol_to_row(p[:id],p[:type])
|
141
|
+
when :notes then
|
142
|
+
{
|
143
|
+
:id => p[:id].to_s,
|
144
|
+
:name => symbol_to_name(p[:id]),
|
145
|
+
:type => p[:type],
|
146
|
+
:models => SerializeHelper.get_import_rows(:note)
|
147
|
+
}
|
148
|
+
when :tags then
|
149
|
+
{
|
150
|
+
:id => p[:id].to_s,
|
151
|
+
:type => p[:type],
|
152
|
+
:name => symbol_to_name(p[:id]),
|
153
|
+
}
|
154
|
+
when :persons then
|
155
|
+
{
|
156
|
+
:id => p[:id].to_s,
|
157
|
+
:type => p[:type],
|
158
|
+
:name => symbol_to_name(p[:id]),
|
159
|
+
:models => SerializeHelper.get_import_rows(:person)
|
160
|
+
}
|
161
|
+
when :custom_fields then
|
162
|
+
{
|
163
|
+
:id => p[:id].to_s,
|
164
|
+
:type => p[:type],
|
165
|
+
:name => symbol_to_name(p[:id]),
|
166
|
+
:models => SerializeHelper.get_import_rows(:custom_field)
|
167
|
+
}
|
168
|
+
else
|
169
|
+
{
|
170
|
+
:id => p[:id].to_s,
|
171
|
+
:name => symbol_to_name(p[:id]),
|
172
|
+
:type => p[:type],
|
173
|
+
:model => SerializeHelper.get_import_rows(p[:type])
|
174
|
+
}
|
175
|
+
end
|
176
|
+
end
|
177
|
+
|
178
|
+
def get_import_rows
|
179
|
+
serialize_variables.map do |p|
|
180
|
+
map_to_row p
|
181
|
+
end
|
182
|
+
end
|
183
|
+
|
184
|
+
def self.get_import_rows(type)
|
185
|
+
case type
|
186
|
+
when :person then
|
187
|
+
Person.new
|
188
|
+
when :source_ref then
|
189
|
+
SourceRef.new
|
190
|
+
when :note then
|
191
|
+
Note.new
|
192
|
+
when :address then
|
193
|
+
Address.new
|
194
|
+
when :organization then
|
195
|
+
Organization.new
|
196
|
+
when :coworker_reference then
|
197
|
+
CoworkerReference.new
|
198
|
+
when :organization_reference then
|
199
|
+
OrganizationReference.new
|
200
|
+
when :custom_field then
|
201
|
+
CustomField.new
|
202
|
+
else
|
203
|
+
raise "Unknown type: #{type}"
|
204
|
+
end.get_import_rows
|
205
|
+
end
|
206
|
+
end
|
207
|
+
end
|
metadata
CHANGED
@@ -1,11 +1,12 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: fruit_to_lime
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.6.
|
4
|
+
version: 0.6.2
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
8
8
|
- Oskar Gewalli
|
9
|
+
- Peter Wilhelmsson
|
9
10
|
autorequire:
|
10
11
|
bindir: bin
|
11
12
|
cert_chain: []
|
@@ -80,6 +81,7 @@ files:
|
|
80
81
|
- lib/fruit_to_lime/model/rootmodel.rb
|
81
82
|
- lib/fruit_to_lime/model/sourceref.rb
|
82
83
|
- lib/fruit_to_lime/model/tag.rb
|
84
|
+
- lib/fruit_to_lime/serialize_helper.rb
|
83
85
|
- lib/fruit_to_lime.rb
|
84
86
|
- spec/gosourceref_spec.rb
|
85
87
|
- spec/helpers/address_helper_spec.rb
|