pipe_fitter 0.1.3 → 0.1.4

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
  SHA1:
3
- metadata.gz: d7fb6064d720bceb50a5f67593a34d8ab88e0265
4
- data.tar.gz: 42ad10d0a56aa467273b792ba3e96d0940a2e6a6
3
+ metadata.gz: 6ca34c72ead67585ab3933c20339c6024dba555d
4
+ data.tar.gz: 434c953698fb018b6babfbdcde83e1f4d770ab2c
5
5
  SHA512:
6
- metadata.gz: 80191b605a9a17ae25820fbf1a0ab4baa5908e009d8fb96e11b9ad8a1e5bb85d9873e221cd01ebde4ec4b5d912b918df106b1eb9db6fbe5f0b37e7a13c329633
7
- data.tar.gz: a4a95adea95583151321ef7eef80f773f0052573f25a7c66abb06e6b1574c07ada735d9b50243876cd9f8a1374b0ee08e5dfd6d97d028f9e7a99a60279b71e3d
6
+ metadata.gz: a4ffd2b3e959cda33c02760755be11f05460c144a8700915f20a4f04fac44d74b825b29e25fbd03f4646fcb24333ca8afeb8b5e24640f09a3dac30af44b114c3
7
+ data.tar.gz: 0fe0ec48c13e2bcc260d9dbe7cae396a265e8f7f555fedb669c112874f48f6f2ec1d50939aca8a7496473374eac4f500e16cd36cb54f5f4654a4aad974f5026e
@@ -98,14 +98,40 @@ module PipeFitter
98
98
  end
99
99
  h
100
100
  end
101
+
102
+ private_class_method def self.update_hash(base, key, value)
103
+ if base.key?(key)
104
+ base[key] = [base[key]] unless base[key].is_a?(Array)
105
+ base[key] << value
106
+ base[key].sort!
107
+ else
108
+ base[key] = value
109
+ end
110
+ base
111
+ end
112
+
113
+ def split_object(obj, skip_keys)
114
+ res = []
115
+ obj.each do |k, v|
116
+ next if skip_keys.include?(k)
117
+ (v.is_a?(Array) ? v : [v]).each do |vv|
118
+ if vv.is_a?(Hash) && vv.key?(:ref)
119
+ res << { key: k, ref_value: vv[:ref] }
120
+ else
121
+ res << { key: k, string_value: vv }
122
+ end
123
+ end
124
+ end
125
+ res
126
+ end
101
127
  end
102
128
 
103
129
  class PipelineObjects < PipelineBaseObjects
104
130
  def self.create(api_res)
105
- objs = api_res.map(&:to_h).sort_by { |obj| obj[:id] }.map do |obj|
131
+ objs = (api_res || []).map(&:to_h).sort_by { |obj| obj[:id] }.map do |obj|
106
132
  base = { id: obj[:id], name: obj[:name] }
107
133
  obj[:fields].sort_by { |f| f[:key] }.inject(base) do |a, e|
108
- a.update(e[:key].to_sym => (e[:string_value] || { ref: e[:ref_value] } ))
134
+ update_hash(a, e[:key].to_sym, e[:string_value] || { ref: e[:ref_value] })
109
135
  end
110
136
  end
111
137
  new(objs)
@@ -113,26 +139,17 @@ module PipeFitter
113
139
 
114
140
  def to_api_opts
115
141
  @objs.map do |obj|
116
- base = { id: obj[:id], name: obj[:name], fields: [] }
117
- obj.each do |k, v|
118
- next if k == :id || k == :name
119
- if v.is_a?(Hash) && v.key?(:ref)
120
- base[:fields] << { key: k, ref_value: v[:ref] }
121
- else
122
- base[:fields] << { key: k, string_value: v }
123
- end
124
- end
125
- base
142
+ { id: obj[:id], name: obj[:name], fields: split_object(obj, %i(id name)) }
126
143
  end
127
144
  end
128
145
  end
129
146
 
130
147
  class ParameterObjects < PipelineBaseObjects
131
148
  def self.create(api_res)
132
- objs = api_res.map(&:to_h).sort_by { |obj| obj[:id] }.map do |obj|
149
+ objs = (api_res || []).map(&:to_h).sort_by { |obj| obj[:id] }.map do |obj|
133
150
  base = { id: obj[:id] }
134
151
  obj[:attributes].sort_by { |a| a[:key] }.inject(base) do |a, e|
135
- a.update(e[:key].to_sym => e[:string_value])
152
+ update_hash(a, e[:key].to_sym, e[:string_value])
136
153
  end
137
154
  end
138
155
  new(objs)
@@ -140,12 +157,7 @@ module PipeFitter
140
157
 
141
158
  def to_api_opts
142
159
  @objs.map do |obj|
143
- base = { id: obj[:id], attributes: [] }
144
- obj.each do |k, v|
145
- next if k == :id
146
- base[:attributes] << { key: k, string_value: v }
147
- end
148
- base
160
+ { id: obj[:id], attributes: split_object(obj, %i(id)) }
149
161
  end
150
162
  end
151
163
  end
@@ -174,8 +186,8 @@ module PipeFitter
174
186
  name: api_res[:name],
175
187
  description: api_res[:description],
176
188
  }
177
- objs[:tags] = api_res[:tags].map { |e| { e[:key].to_sym => e[:value] } }
178
- api_res[:fields].inject(objs) do |a, e|
189
+ objs[:tags] = (api_res[:tags] || []).map { |e| { e[:key].to_sym => e[:value] } }
190
+ (api_res[:fields] || []).inject(objs) do |a, e|
179
191
  a.update(e[:key].to_sym => (e[:string_value] || { ref: e[:ref_value] } ))
180
192
  end
181
193
  new(objs)
@@ -1,3 +1,3 @@
1
1
  module PipeFitter
2
- VERSION = "0.1.3"
2
+ VERSION = "0.1.4"
3
3
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: pipe_fitter
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.3
4
+ version: 0.1.4
5
5
  platform: ruby
6
6
  authors:
7
7
  - masa21kik
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2016-06-12 00:00:00.000000000 Z
11
+ date: 2016-06-13 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: aws-sdk