pipe_fitter 0.1.2 → 0.1.3

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: 56ac5e3871868bdb5e9fb09a961cc24d09627e09
4
- data.tar.gz: d1da7aea03341b8bd35c8652c1150984c31c6514
3
+ metadata.gz: d7fb6064d720bceb50a5f67593a34d8ab88e0265
4
+ data.tar.gz: 42ad10d0a56aa467273b792ba3e96d0940a2e6a6
5
5
  SHA512:
6
- metadata.gz: 0ad84d8cc742c4a004c25d0fd0974d68f86e09c040af1b58718e52bb8db876cd7b76cf8d594358b1bfe944e6cc83db8fcfde9b7f046cfbbd5a153bdb59f6b560
7
- data.tar.gz: d2de15a6adca24eee47af9e1679de61d067a971cc383f050627eef82cca2e7bc3f0bac87e69743ea71ee736e857d35e9121f39f816bbcf489f7511656fbf3c75
6
+ metadata.gz: 80191b605a9a17ae25820fbf1a0ab4baa5908e009d8fb96e11b9ad8a1e5bb85d9873e221cd01ebde4ec4b5d912b918df106b1eb9db6fbe5f0b37e7a13c329633
7
+ data.tar.gz: a4a95adea95583151321ef7eef80f773f0052573f25a7c66abb06e6b1574c07ada735d9b50243876cd9f8a1374b0ee08e5dfd6d97d028f9e7a99a60279b71e3d
@@ -26,7 +26,7 @@ module PipeFitter
26
26
  def definition(pipeline_id)
27
27
  res = exec(:get_pipeline_definition, pipeline_id: pipeline_id)
28
28
  desc = description(pipeline_id)
29
- Pipeline.new(res.to_h, desc.to_h)
29
+ Pipeline.create(res.to_h, desc.to_h)
30
30
  end
31
31
 
32
32
  def put_definition(pipeline_id, pipeline)
@@ -55,7 +55,7 @@ module PipeFitter
55
55
  def sync_tags(pipeline_id, pipeline)
56
56
  p = definition(pipeline_id)
57
57
  return if p.tags == pipeline.tags
58
- exec(:remove_tags, p.remove_tags_opts) unless p.tags.empty?
58
+ exec(:remove_tags, p.remove_tags_opts(pipeline_id)) unless p.tags.empty?
59
59
  exec(:add_tags, pipeline.add_tags_opts(pipeline_id)) unless pipeline.tags.empty?
60
60
  end
61
61
 
@@ -5,108 +5,198 @@ require "pathname"
5
5
 
6
6
  module PipeFitter
7
7
  class Pipeline
8
- class << self
9
- def load_yaml(filename)
10
- filepath = Pathname.new(filename)
11
- desc = YamlLoader.load(filepath)
12
- definition = desc.delete("definition")
13
- Pipeline.new(definition, desc)
14
- end
8
+ def self.create(definition_from_api, description_from_api)
9
+ new(PipelineObjects.create(definition_from_api[:pipeline_objects]),
10
+ ParameterObjects.create(definition_from_api[:parameter_objects]),
11
+ ParameterValues.create(definition_from_api[:parameter_values]),
12
+ PipelineDescription.create(description_from_api))
15
13
  end
16
14
 
17
- DESCRIPTION_KEYS = %w(name tags unique_id description).freeze
18
- Diffy::Diff.default_options.merge!(diff: "-u", include_diff_info: true)
19
-
20
- def initialize(definition, description = {})
21
- @definition = Hashie::Mash.new(definition)
22
- @full_description = Hashie::Mash.new(description).tap do |h|
23
- if (fs = h[:fields]) && (f = fs.find { |e| e[:key] == "uniqueId" }) && f.key?(:string_value)
24
- h.unique_id ||= f[:string_value]
25
- end
26
- end
27
- @description = Hashie::Mash.new(@full_description.select { |k, v| DESCRIPTION_KEYS.include?(k) && !v.nil? })
15
+ def self.load_yaml(filename)
16
+ filepath = Pathname.new(filename)
17
+ yml = YamlLoader.load(filepath)
18
+ new(PipelineObjects.new(yml["pipeline_objects"]),
19
+ ParameterObjects.new(yml["parameter_objects"]),
20
+ ParameterValues.new(yml["parameter_values"]),
21
+ PipelineDescription.new(yml["pipeline_description"]))
28
22
  end
29
23
 
30
- def to_yaml
31
- stringify_keys(@description.merge("definition" => sorted_definition)).to_yaml
24
+ def initialize(pipeline_objects, parameter_objects, parameter_values, pipeline_description)
25
+ @pipeline_objects = pipeline_objects
26
+ @parameter_objects = parameter_objects
27
+ @parameter_values = parameter_values
28
+ @pipeline_description = pipeline_description
32
29
  end
33
30
 
34
- def create_opts
35
- symbolize_keys(@description)
31
+ def tags
32
+ @pipeline_description.tags
36
33
  end
37
34
 
38
- def put_definition_opts(id = nil)
39
- base = { pipeline_id: id || pipeline_id }
40
- base.merge(symbolize_keys(@definition))
35
+ def to_yaml
36
+ {
37
+ "pipeline_description" => @pipeline_description.to_objs,
38
+ "pipeline_objects" => @pipeline_objects.to_objs,
39
+ "parameter_objects" => @parameter_objects.to_objs,
40
+ "parameter_values" => @parameter_values.to_objs,
41
+ }.to_yaml
41
42
  end
42
43
 
43
- def add_tags_opts(id = nil)
44
- { pipeline_id: id || pipeline_id, tags: @full_description.tags }
44
+ def put_definition_opts(pipeline_id)
45
+ {
46
+ pipeline_id: pipeline_id,
47
+ pipeline_objects: @pipeline_objects.to_api_opts,
48
+ parameter_objects: @parameter_objects.to_api_opts,
49
+ parameter_values: @parameter_values.to_api_opts,
50
+ }
45
51
  end
46
52
 
47
- def remove_tags_opts(id = nil)
48
- { pipeline_id: id || pipeline_id, tag_keys: @full_description.tags.map { |e| e["key"] } }
53
+ def add_tags_opts(pipeline_id)
54
+ { pipeline_id: pipeline_id, tags: @pipeline_description.tags_opts }
49
55
  end
50
56
 
51
- def activate_opts(parameter_values, start_timestamp = nil, id = nil)
52
- pv = (parameter_values || {}).map { |k, v| { "id" => k.to_s, "string_value" => v.to_s } }
53
- { pipeline_id: id || pipeline_id, parameter_values: pv, start_timestamp: start_timestamp }.select { |_, v| !v.nil? }
57
+ def remove_tags_opts(pipeline_id)
58
+ { pipeline_id: pipeline_id, tag_keys: @pipeline_description.tag_keys }
54
59
  end
55
60
 
56
- def pipeline_id
57
- @full_description.pipeline_id
61
+ def diff(other, format = nil)
62
+ Diffy::Diff.new(self.to_yaml, other.to_yaml).to_s(format)
58
63
  end
59
64
 
60
- def name
61
- @full_description.name
62
- end
65
+ class PipelineBaseObjects
66
+ def initialize(objs)
67
+ @objs = case objs
68
+ when Array then objs.map { |obj| symbolize_keys(obj) }
69
+ else symbolize_keys(objs) || {}
70
+ end
71
+ end
63
72
 
64
- def tags
65
- @full_description.tags
66
- end
73
+ def to_objs
74
+ case @objs
75
+ when Array then @objs.map { |obj| stringify_keys(obj) }
76
+ else stringify_keys(@objs)
77
+ end
78
+ end
67
79
 
68
- def diff(other, format = nil)
69
- Diffy::Diff.new(self.to_yaml, other.to_yaml).to_s(format)
80
+ private
81
+
82
+ def stringify_keys(val)
83
+ modify_keys_recursively(val, __method__)
84
+ end
85
+
86
+ def symbolize_keys(val)
87
+ modify_keys_recursively(val, __method__)
88
+ end
89
+
90
+ def modify_keys_recursively(val, method)
91
+ return val unless val.is_a?(Hash)
92
+ h = Hashie.send(method, val.to_h)
93
+ h.each do |k, v|
94
+ case v
95
+ when Array then h[k].map! { |e| self.send(method, e) }
96
+ when Hash then h[k] = self.send(method, v)
97
+ end
98
+ end
99
+ h
100
+ end
70
101
  end
71
102
 
72
- private
73
-
74
- def sorted_definition
75
- top_keys = %w(pipeline_objects parameter_objects parameter_values).freeze
76
- obj_keys = %w(id name fields).freeze
77
- field_keys = %w(key string_value ref_value).freeze
78
-
79
- d = @definition.sort_by { |k, _| [top_keys.index(k) || top_keys.size, k] }.to_h
80
- top_keys.each do |k|
81
- next if !d[k].is_a?(Array) || d[k].empty?
82
- d[k] = d[k].sort_by { |e| e["id"] }
83
- d[k].map! do |v|
84
- v["fields"] = v["fields"].sort_by { |e| e["key"] }
85
- v["fields"].map! { |vv| vv.sort_by { |kk, _| field_keys.index(kk) }.to_h }
86
- v.sort_by { |kk, _| obj_keys.index(kk) }.to_h
103
+ class PipelineObjects < PipelineBaseObjects
104
+ def self.create(api_res)
105
+ objs = api_res.map(&:to_h).sort_by { |obj| obj[:id] }.map do |obj|
106
+ base = { id: obj[:id], name: obj[:name] }
107
+ 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] } ))
109
+ end
110
+ end
111
+ new(objs)
112
+ end
113
+
114
+ def to_api_opts
115
+ @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
87
126
  end
88
127
  end
89
- d
90
128
  end
91
129
 
92
- def stringify_keys(val)
93
- modify_keys_recursively(val, __method__)
130
+ class ParameterObjects < PipelineBaseObjects
131
+ def self.create(api_res)
132
+ objs = api_res.map(&:to_h).sort_by { |obj| obj[:id] }.map do |obj|
133
+ base = { id: obj[:id] }
134
+ obj[:attributes].sort_by { |a| a[:key] }.inject(base) do |a, e|
135
+ a.update(e[:key].to_sym => e[:string_value])
136
+ end
137
+ end
138
+ new(objs)
139
+ end
140
+
141
+ def to_api_opts
142
+ @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
149
+ end
150
+ end
94
151
  end
95
152
 
96
- def symbolize_keys(val)
97
- modify_keys_recursively(val, __method__)
153
+ class ParameterValues < PipelineBaseObjects
154
+ def self.create(api_res)
155
+ objs = (api_res || []).sort_by { |obj| [obj[:id], obj[:string_value]] }.map do |obj|
156
+ { obj[:id].to_sym => obj[:string_value] }
157
+ end
158
+ new(objs)
159
+ end
160
+
161
+ def to_api_opts
162
+ @objs.map do |e|
163
+ e.map do |k, v|
164
+ { id: k, string_value: v }
165
+ end
166
+ end.flatten
167
+ end
98
168
  end
99
169
 
100
- def modify_keys_recursively(val, method)
101
- return val unless val.is_a?(Hash)
102
- h = Hashie.send(method, val.to_h)
103
- h.each do |k, v|
104
- case v
105
- when Array then h[k].map! { |e| self.send(method, e) }
106
- when Hash then h[k] = self.send(method, v)
170
+ class PipelineDescription < PipelineBaseObjects
171
+ def self.create(api_res)
172
+ objs = {
173
+ pipeline_id: api_res[:pipeline_id],
174
+ name: api_res[:name],
175
+ description: api_res[:description],
176
+ }
177
+ objs[:tags] = api_res[:tags].map { |e| { e[:key].to_sym => e[:value] } }
178
+ api_res[:fields].inject(objs) do |a, e|
179
+ a.update(e[:key].to_sym => (e[:string_value] || { ref: e[:ref_value] } ))
107
180
  end
181
+ new(objs)
182
+ end
183
+
184
+ def to_objs
185
+ keys = %i(name description tags uniqueId)
186
+ stringify_keys(@objs.select { |k, _| keys.include?(k) })
187
+ end
188
+
189
+ def tags
190
+ @objs[:tags]
191
+ end
192
+
193
+ def tags_opts
194
+ @objs[:tags].map { |e| e.map { |k, v| { key: k, value: v } } }.flatten
195
+ end
196
+
197
+ def tag_keys
198
+ @objs[:tags].map(&keys).flatten
108
199
  end
109
- h
110
200
  end
111
201
  end
112
202
  end
@@ -1,3 +1,3 @@
1
1
  module PipeFitter
2
- VERSION = "0.1.2"
2
+ VERSION = "0.1.3"
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.2
4
+ version: 0.1.3
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-05 00:00:00.000000000 Z
11
+ date: 2016-06-12 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: aws-sdk