lunanode 0.2.0 → 0.3.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: e34a9df27d3a00d606d1de48db6eb9bbf2f2c403
4
- data.tar.gz: f2937c563d7e2ce7ac80a8f12e77ca8223a8643d
3
+ metadata.gz: 25b84a457a8cec75b71c9506f0c7a1989507cb24
4
+ data.tar.gz: 592c51192a8a11f6582375a55552da9c2dfea090
5
5
  SHA512:
6
- metadata.gz: 70914da6f5a7bc35141a03338abd3f98cc81179413d2d4ceb687bcd89cc2ec689332be581e539c98fd4936b27ef773d2003cbf68785aaf784a92a40bf425f7fd
7
- data.tar.gz: 2bd8e4a9053eb640dd53b0ee359f4be4eb0fe608afc8d3cdfc760aa5e73ed08a4a8d953b3948141f8d8ce30866ffba5a0b459f8edc1f9b6655b5bfd407596291
6
+ metadata.gz: 7380c1d7d2f152936d26827182e694738e80518a56891589dfae3f2b0278ec86edff4bb648e5ed50727180d302b7e9ebe48aece47f7df80154e1d31b03648d2c
7
+ data.tar.gz: 3d4d6d8a385269a9ba2e70d5236534a6b8d6422e1a29bc7c464702b2d1e39f50e3323cc88add8e0727be9a437c6447cb81f462d91bf226e6d9c8c8fe5b629c46
data/.rubocop.yml CHANGED
@@ -1,3 +1,5 @@
1
+ require: rubocop-rspec
2
+
1
3
  AllCops:
2
4
  TargetRubyVersion: 2.1
3
5
  DisplayCopNames: true
data/.travis.yml CHANGED
@@ -1,3 +1,4 @@
1
+ dist: trusty
1
2
  sudo: false
2
3
  language: ruby
3
4
  rvm:
@@ -5,6 +6,13 @@ rvm:
5
6
  - 2.3.3
6
7
  - 2.2.6
7
8
  - 2.1.10
9
+ - ruby-head
10
+ - jruby-9.1.5.0
11
+ - jruby-head
12
+ matrix:
13
+ allow_failures:
14
+ - rvm: ruby-head
15
+ - rvm: jruby-head
8
16
  before_install:
9
17
  - gem update --system
10
18
  - gem --version
data/CHANGELOG.md CHANGED
@@ -6,7 +6,25 @@ and this project adheres to [Semantic Versioning](http://semver.org/).
6
6
 
7
7
  ## [Unreleased]
8
8
 
9
- ## [0.2.0]
9
+ ## [0.3.0] - 2017-02-10
10
+ ### Added
11
+ - New `api#image_rename` and `api#volume_rename` actions in the API. Thanks to
12
+ the people at Luna Node for implementing them so quickly!
13
+ - (Testing) Some rudimentary RSpec tests.
14
+ - (Development) Reek code analyzer for code smells.
15
+ - (Development) Rubocop-rspec code analyzer for tests.
16
+
17
+ ### Changed
18
+ - Cleaned up and broke apart larger action generator methods.
19
+ - Changed API definition file to use Ruby-style parameter types.
20
+ - Simplified how APIError displays messages.
21
+ - Improved Travis CI setup to include JRuby.
22
+ - Miscellaneous code smells and cleanups.
23
+
24
+ ### Fixed
25
+ - `RestClient::Exception` was passed a non-existent parameter.
26
+
27
+ ## [0.2.0] - 2017-02-08
10
28
  ### Added
11
29
  - Created this Changelog.
12
30
  - API calls will now print potentially-useful information if $DEBUG=true
@@ -38,7 +56,8 @@ This is the first point of reasonable functionality/stability.
38
56
  ### Added
39
57
  - Initial commit, not publicly released
40
58
 
41
- [Unreleased]: https://github.com/nomoon/lunanode/compare/v0.2.0...HEAD
59
+ [Unreleased]: https://github.com/nomoon/lunanode/compare/v0.3.0...HEAD
60
+ [0.3.0]: https://github.com/nomoon/lunanode/compare/v0.2.0...v0.3.0
42
61
  [0.2.0]: https://github.com/nomoon/lunanode/compare/v0.1.6...v0.2.0
43
62
  [0.1.6]: https://github.com/nomoon/lunanode/compare/v0.1.5...v0.1.6
44
63
  [0.1.5]: https://github.com/nomoon/lunanode/compare/v0.0.1...v0.1.5
data/Gemfile CHANGED
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
  source "https://rubygems.org"
3
3
 
4
- # Specify your gem's dependencies in lunanode_api.gemspec
4
+ # Specify your gem's dependencies in lunanode.gemspec
5
5
  gemspec
data/Rakefile CHANGED
@@ -1,7 +1,17 @@
1
1
  # frozen_string_literal: true
2
2
  require "bundler/gem_tasks"
3
+ require "reek/rake/task"
4
+ require "rubocop/rake_task"
3
5
  require "rspec/core/rake_task"
4
6
 
7
+ Reek::Rake::Task.new do |t|
8
+ t.fail_on_error = false
9
+ end
10
+
11
+ RuboCop::RakeTask.new do |t|
12
+ t.fail_on_error = false
13
+ end
14
+
5
15
  RSpec::Core::RakeTask.new(:spec)
6
16
 
7
17
  desc "Generates default actions modules from API spec YAML file."
@@ -10,10 +20,13 @@ task :generate_default_api_modules do
10
20
  modules = Lunanode::ActionGenerator.generate_default_modules
11
21
  modules.each do |category, module_s|
12
22
  filename = "lib/lunanode/api_actions/default/#{category}.rb"
13
- raise "File already exists: #{filename}" if File.exist?(filename)
14
- bytes = File.write(filename, module_s)
15
- puts "File written: #{filename} (#{bytes} bytes)"
23
+ existing_data = File.read(filename) if File.exist?(filename)
24
+ if module_s == existing_data
25
+ puts "File unchanged: #{filename}"
26
+ else
27
+ puts "File written: #{filename} (#{File.write(filename, module_s)} bytes)"
28
+ end
16
29
  end
17
30
  end
18
31
 
19
- task default: :spec
32
+ task default: %i[reek rubocop spec]
data/config.reek ADDED
@@ -0,0 +1,20 @@
1
+ ---
2
+
3
+ IrresponsibleModule:
4
+ enabled: false
5
+
6
+ NestedIterators:
7
+ max_allowed_nesting: 2
8
+
9
+ TooManyStatements:
10
+ max_statements: 10
11
+
12
+ UtilityFunction:
13
+ public_methods_only: true
14
+
15
+ # Don't complain about undocumented default actions
16
+ "lib/lunanode/api_actions/default":
17
+ DataClump:
18
+ enabled: false
19
+ LongParameterList:
20
+ enabled: false
@@ -23,20 +23,20 @@ module Lunanode
23
23
 
24
24
  UNSAFE_IDENTIFIER = /.{21,}|[^A-Za-z0-9_*\-]/
25
25
 
26
- def module_name(name)
27
- if name.length > 3
28
- name.capitalize
29
- else
30
- name.upcase
31
- end
26
+ def check_safe!(identifier)
27
+ raise "Unsafe name `#{identifier}`" if identifier =~ UNSAFE_IDENTIFIER
32
28
  end
33
29
 
34
30
  def indent_lines(string)
35
31
  string.gsub(/^(?!$)/, " ")
36
32
  end
37
33
 
38
- def check_safe!(identifier)
39
- raise "Unsafe name `#{identifier}`" if identifier =~ UNSAFE_IDENTIFIER
34
+ def module_name(name)
35
+ if name.length > 3
36
+ name.capitalize
37
+ else
38
+ name.upcase
39
+ end
40
40
  end
41
41
 
42
42
  def generate_categories(data)
@@ -48,49 +48,57 @@ module Lunanode
48
48
 
49
49
  def generate_actions(category, actions)
50
50
  actions = actions.map do |action, params|
51
- generate_action(category, action, params)
51
+ indent_lines(generate_action(category, action, params))
52
52
  end
53
53
 
54
- category_module = "module #{module_name(category)}\n" +
55
- actions.map { |a| indent_lines(a) }.join("\n") +
56
- "end\n"
57
-
58
- actions_module = "module APIActions\n" +
59
- indent_lines(category_module) +
60
- "end\n"
61
-
62
- src = "module #{name.split('::')[-2]}\n" +
63
- indent_lines(actions_module) +
64
- "end\n"
54
+ category_mod = "module #{module_name(category)}\n" \
55
+ "#{actions.join("\n")}end\n"
56
+ actions_mod = "module APIActions\n#{indent_lines(category_mod)}end\n"
65
57
 
66
- "# frozen_string_literal: true\n\n#{src}"
58
+ "# frozen_string_literal: true\n\n" \
59
+ "module #{name.split('::')[-2]}\n#{indent_lines(actions_mod)}end\n"
67
60
  end
68
61
 
69
- def generate_action(category, action, params)
70
- check_safe!(action)
71
- params = params.to_h
72
-
73
- param_list_req = Array(params[:required])
74
- param_list_opt = Array(params[:optional])
75
- param_list = param_list_req + param_list_opt
76
- param_list.each { |p| check_safe!(p) }
77
-
78
- param_list_call_arr = param_list.map do |p|
79
- p.start_with?("**") ? p : "#{p}: #{p}"
62
+ def generate_param_list(params)
63
+ params.to_h.each_with_object({}) do |(status, param_arr), acc|
64
+ param_arr.each do |param|
65
+ check_safe!(param)
66
+ acc[param] = status
67
+ end
80
68
  end
69
+ end
81
70
 
82
- param_list_req_sig_arr = param_list_req.map do |p|
83
- "#{p}:"
71
+ def generate_param_list_sig(param_list)
72
+ param_list.map do |param, status|
73
+ case status
74
+ when :keyreq
75
+ "#{param}:"
76
+ when :key
77
+ "#{param}: nil"
78
+ when :keyrest
79
+ "**#{param}"
80
+ end
84
81
  end
82
+ end
85
83
 
86
- param_list_opt_sig_arr = param_list_opt.map do |p|
87
- p.start_with?("**") ? p : "#{p}: nil"
84
+ def generate_param_list_call(param_list)
85
+ param_list.map do |(param, status)|
86
+ case status
87
+ when :keyrest
88
+ "**#{param}"
89
+ else
90
+ "#{param}: #{param}"
91
+ end
88
92
  end
89
- param_list_sig_arr = (param_list_req_sig_arr + param_list_opt_sig_arr)
93
+ end
94
+
95
+ def generate_action(category, action, params)
96
+ check_safe!(action)
97
+ param_list = generate_param_list(params)
90
98
 
91
99
  unless param_list.empty?
92
- param_list_call = ", #{param_list_call_arr.join(', ')}"
93
- param_list_sig = "(#{param_list_sig_arr.join(', ')})"
100
+ param_list_call = ", #{generate_param_list_call(param_list).join(', ')}"
101
+ param_list_sig = "(#{generate_param_list_sig(param_list).join(', ')})"
94
102
  end
95
103
 
96
104
  "def #{category}_#{action.to_s.tr('-', '_')}#{param_list_sig}\n" \
@@ -99,7 +107,9 @@ module Lunanode
99
107
  end
100
108
 
101
109
  private_constant :UNSAFE_IDENTIFIER
102
- private_class_method :check_safe!, :generate_categories, :generate_actions,
103
- :generate_action
110
+ private_class_method :check_safe!, :indent_lines, :module_name,
111
+ :generate_categories, :generate_actions,
112
+ :generate_param_list, :generate_param_list_sig,
113
+ :generate_param_list_call, :generate_action
104
114
  end
105
115
  end
data/lib/lunanode/api.rb CHANGED
@@ -40,12 +40,15 @@ module Lunanode
40
40
  #
41
41
  # @param method_name[#to_sym] The name of the API method
42
42
  # @return [Hash] information about the method parameters.
43
+ #
43
44
  def self.params_for(method_name)
45
+ method_name = method_name.to_sym
44
46
  @params_for[method_name] ||= begin
45
- method_name = method_name.to_sym
46
47
  param_groups = instance_method(method_name).parameters.group_by(&:first)
47
- out = param_groups.map { |k, v| [k, v.map(&:last)] }.to_h
48
- out.each_value(&:freeze).freeze
48
+ out = param_groups.map do |status, param_def|
49
+ [status, param_def.map(&:last)]
50
+ end
51
+ out.to_h.each_value(&:freeze).freeze
49
52
  end
50
53
  end
51
54
 
@@ -106,15 +109,14 @@ module Lunanode
106
109
  #
107
110
  def action(category, action, **params)
108
111
  resp = call_api("#{category}/#{action}/", params)
109
- raise APIError, %("#{resp[:error]}") unless resp[:success] == "yes"
110
- resp.delete(:success)
112
+ raise APIError, resp[:error] unless resp.delete(:success) == "yes"
111
113
 
112
114
  if resp.size == 1
113
115
  resp.values.first
114
116
  else
115
117
  resp
116
118
  end
117
- end
119
+ end # :reek:FeatureEnvy
118
120
 
119
121
  private
120
122
 
@@ -122,31 +124,33 @@ module Lunanode
122
124
 
123
125
  # Make an API call and return response.
124
126
  def call_api(handler_path, params)
127
+ req_url = "#{rest_client.url}#{handler_path}"
125
128
  req_formdata = auth_request_formdata(handler_path, clean_params(params))
129
+
126
130
  if $DEBUG
127
131
  STDERR.puts "call_api()\n" + JSON.pretty_generate(
128
- path: "#{rest_client.url}#{handler_path}",
132
+ path: req_url,
129
133
  req: JSON.parse(req_formdata[:req]),
130
134
  signature: req_formdata[:signature],
131
135
  nonce: req_formdata[:nonce]
132
136
  )
133
137
  end
134
- JSON.parse(rest_client[handler_path].post(req_formdata),
135
- symbolize_names: true)
138
+
139
+ response = rest_client[handler_path].post(req_formdata)
140
+ JSON.parse(response, symbolize_names: true)
136
141
  rescue RestClient::Exception => err
137
- err.message += "\n Request Path: #{rest_client.url}#{handler_path}" \
138
- "\n Request Data: #{req_data}"
142
+ err.message += "\n Request Path: #{req_url}" \
143
+ "\n Request Data: #{req_formdata}"
139
144
  raise err
140
145
  end
141
146
 
142
147
  # Clean empty request parameters
143
148
  def clean_params(params)
144
- params.each_with_object({}) do |(k, v), acc|
145
- if k && k.respond_to?(:to_sym) && v && v.respond_to?(:to_s)
146
- acc[k.to_sym] = v.to_s
147
- end
149
+ params.each_with_object({}) do |(param, value), acc|
150
+ next unless param.respond_to?(:to_sym) && value.respond_to?(:to_s)
151
+ acc[param.to_sym] = value.to_s
148
152
  end
149
- end
153
+ end # :reek:ManualDispatch
150
154
 
151
155
  # Create signed request data
152
156
  def auth_request_formdata(handler_path, params)
@@ -26,6 +26,10 @@ module Lunanode
26
26
  def image_retrieve(image_id:)
27
27
  action(:image, :retrieve, image_id: image_id)
28
28
  end
29
+
30
+ def image_rename(image_id:, name:)
31
+ action(:image, :rename, image_id: image_id, name: name)
32
+ end
29
33
  end
30
34
  end
31
35
  end
@@ -42,6 +42,10 @@ module Lunanode
42
42
  def volume_snapshot_list(region:)
43
43
  action(:volume, :"snapshot-list", region: region)
44
44
  end
45
+
46
+ def volume_rename(volume_id:, name:)
47
+ action(:volume, :rename, volume_id: volume_id, name: name)
48
+ end
45
49
  end
46
50
  end
47
51
  end
@@ -7,8 +7,7 @@ module Lunanode
7
7
  class APIError < RuntimeError
8
8
  def to_s
9
9
  unescaped = CGI.unescapeHTML(super)
10
- return unescaped unless unescaped.start_with?("\"{")
11
- JSON.pretty_generate(JSON.parse(unescaped.gsub(/\A"|"\z/, "")))
10
+ JSON.pretty_generate(JSON.parse(unescaped))
12
11
  rescue JSON::ParserError
13
12
  unescaped
14
13
  end
@@ -1,4 +1,4 @@
1
1
  # frozen_string_literal: true
2
2
  module Lunanode
3
- VERSION = "0.2.0".freeze
3
+ VERSION = "0.3.0".freeze
4
4
  end
data/lunanode.gemspec CHANGED
@@ -29,5 +29,7 @@ Gem::Specification.new do |spec|
29
29
  spec.add_development_dependency "rspec", "~> 3.0"
30
30
  spec.add_development_dependency "yard", "~> 0.9"
31
31
  spec.add_development_dependency "pry", "~> 0.10"
32
+ spec.add_development_dependency "reek", "~> 4.5"
32
33
  spec.add_development_dependency "rubocop", "~> 0.47"
34
+ spec.add_development_dependency "rubocop-rspec", "~> 1.10"
33
35
  end
@@ -1,74 +1,74 @@
1
1
  :vm:
2
2
  :start:
3
- :required:
3
+ :keyreq:
4
4
  - vm_id
5
5
  :stop:
6
- :required:
6
+ :keyreq:
7
7
  - vm_id
8
8
  :reboot:
9
- :required:
9
+ :keyreq:
10
10
  - vm_id
11
11
  :diskswap:
12
- :required:
12
+ :keyreq:
13
13
  - vm_id
14
14
  :info:
15
- :required:
15
+ :keyreq:
16
16
  - vm_id
17
17
  :delete:
18
- :required:
18
+ :keyreq:
19
19
  - vm_id
20
20
  :reimage:
21
- :required:
21
+ :keyreq:
22
22
  - vm_id
23
23
  - image_id
24
24
  :resize:
25
- :required:
25
+ :keyreq:
26
26
  - vm_id
27
27
  - plan_id
28
28
  :rescue:
29
- :required:
29
+ :keyreq:
30
30
  - vm_id
31
31
  :vnc:
32
- :required:
32
+ :keyreq:
33
33
  - vm_id
34
34
  :floatingip-add:
35
- :required:
35
+ :keyreq:
36
36
  - vm_id
37
- :optional:
37
+ :key:
38
38
  - ip
39
39
  - private_ip
40
40
  :floatingip-delete:
41
- :required:
41
+ :keyreq:
42
42
  - vm_id
43
- :optional:
43
+ :key:
44
44
  - ip
45
45
  - keep
46
46
  :iplist:
47
- :required:
47
+ :keyreq:
48
48
  - vm_id
49
49
  :ip-add:
50
- :required:
50
+ :keyreq:
51
51
  - vm_id
52
- :optional:
52
+ :key:
53
53
  - ip
54
54
  :ip-delete:
55
- :required:
55
+ :keyreq:
56
56
  - vm_id
57
57
  - ip
58
58
  :securitygroup-add:
59
- :required:
59
+ :keyreq:
60
60
  - vm_id
61
61
  - group_id
62
62
  :securitygroup-remove:
63
- :required:
63
+ :keyreq:
64
64
  - vm_id
65
65
  - group_id
66
66
  :create:
67
- :required:
67
+ :keyreq:
68
68
  - hostname
69
69
  - plan_id
70
70
  - image_id
71
- :optional:
71
+ :key:
72
72
  - region
73
73
  - ip
74
74
  - net_id
@@ -80,164 +80,172 @@
80
80
  - set_password
81
81
  - affinity_group
82
82
  :snapshot:
83
- :required:
83
+ :keyreq:
84
84
  - vm_id
85
85
  - name
86
86
  :list:
87
87
  :shelve:
88
- :required:
88
+ :keyreq:
89
89
  - vm_id
90
90
  :unshelve:
91
- :required:
91
+ :keyreq:
92
92
  - vm_id
93
93
  :rename:
94
- :required:
94
+ :keyreq:
95
95
  - vm_id
96
96
  - hostname
97
97
  :dns:
98
98
  :list:
99
99
  :set:
100
- :required:
100
+ :keyreq:
101
101
  - ip
102
102
  - hostname
103
103
  :zone-list:
104
104
  :zone-add:
105
- :required:
105
+ :keyreq:
106
106
  - origin
107
- :optional:
107
+ :key:
108
108
  - ttl
109
109
  :zone-remove:
110
- :required:
110
+ :keyreq:
111
111
  - zone_id
112
112
  :record-list:
113
- :required:
113
+ :keyreq:
114
114
  - zone_id
115
115
  :record-add:
116
- :required:
116
+ :keyreq:
117
117
  - zone_id
118
118
  - name
119
119
  - data
120
120
  - ttl
121
121
  - type
122
122
  :record-remove:
123
- :required:
123
+ :keyreq:
124
124
  - record_id
125
125
  :dyn-list:
126
126
  :dyn-add:
127
- :required:
127
+ :keyreq:
128
128
  - name
129
129
  - ip
130
130
  :dyn-update:
131
- :required:
131
+ :keyreq:
132
132
  - dyn_id
133
133
  - name
134
134
  - ip
135
135
  :dyn-remove:
136
- :required:
136
+ :keyreq:
137
137
  - dyn_id
138
138
  :image:
139
139
  :list:
140
- :optional:
140
+ :key:
141
141
  - region
142
142
  :delete:
143
- :required:
143
+ :keyreq:
144
144
  - image_id
145
145
  :details:
146
- :required:
146
+ :keyreq:
147
147
  - image_id
148
148
  :replicate:
149
- :required:
149
+ :keyreq:
150
150
  - image_id
151
151
  - region
152
152
  :fetch:
153
- :required:
153
+ :keyreq:
154
154
  - region
155
155
  - name
156
156
  - location
157
157
  - format
158
- :optional:
158
+ :key:
159
159
  - virtio
160
160
  :retrieve:
161
- :required:
161
+ :keyreq:
162
162
  - image_id
163
+ :rename:
164
+ :keyreq:
165
+ - image_id
166
+ - name
163
167
  :volume:
164
168
  :list:
165
- :required:
169
+ :keyreq:
166
170
  - region
167
171
  :create:
168
- :required:
172
+ :keyreq:
169
173
  - region
170
174
  - label
171
175
  - size
172
- :optional:
176
+ :key:
173
177
  - image
174
178
  - snapshot_id
175
179
  :delete:
176
- :required:
180
+ :keyreq:
177
181
  - region
178
182
  - volume_id
179
183
  :attach:
180
- :required:
184
+ :keyreq:
181
185
  - region
182
186
  - volume_id
183
187
  - vm_id
184
188
  - target
185
189
  :detach:
186
- :required:
190
+ :keyreq:
187
191
  - region
188
192
  - volume_id
189
193
  :info:
190
- :required:
194
+ :keyreq:
191
195
  - region
192
196
  - volume_id
193
197
  :extend:
194
- :required:
198
+ :keyreq:
195
199
  - region
196
200
  - volume_id
197
201
  - size
198
202
  :snapshot-create:
199
- :required:
203
+ :keyreq:
200
204
  - region
201
205
  - volume_id
202
206
  - label
203
207
  :snapshot-delete:
204
- :required:
208
+ :keyreq:
205
209
  - region
206
210
  - snapshot_id
207
211
  :snapshot-list:
208
- :required:
212
+ :keyreq:
209
213
  - region
214
+ :rename:
215
+ :keyreq:
216
+ - volume_id
217
+ - name
210
218
  :floating:
211
219
  :list:
212
220
  :add:
213
- :required:
221
+ :keyreq:
214
222
  - region
215
223
  :delete:
216
- :required:
224
+ :keyreq:
217
225
  - region
218
226
  - ip
219
227
  :network:
220
228
  :list:
221
- :optional:
229
+ :key:
222
230
  - region
223
231
  :create:
224
- :required:
232
+ :keyreq:
225
233
  - region
226
234
  - name
227
235
  - subnet
228
236
  - dns
229
237
  :delete:
230
- :required:
238
+ :keyreq:
231
239
  - region
232
240
  - net_id
233
241
  :lb:
234
242
  :list:
235
- :required:
243
+ :keyreq:
236
244
  - region
237
- :optional:
245
+ :key:
238
246
  - net_id
239
247
  :create:
240
- :required:
248
+ :keyreq:
241
249
  - region
242
250
  - net_id
243
251
  - name
@@ -246,26 +254,26 @@
246
254
  - connection_limit
247
255
  - port
248
256
  :delete:
249
- :required:
257
+ :keyreq:
250
258
  - region
251
259
  - lb_id
252
260
  :info:
253
- :required:
261
+ :keyreq:
254
262
  - region
255
263
  - lb_id
256
264
  :member_add:
257
- :required:
265
+ :keyreq:
258
266
  - region
259
267
  - lb_id
260
268
  - ip
261
269
  - port
262
270
  :member_remove:
263
- :required:
271
+ :keyreq:
264
272
  - region
265
273
  - lb_id
266
274
  - member_id
267
275
  :associate:
268
- :required:
276
+ :keyreq:
269
277
  - region
270
278
  - lb_id
271
279
  - ip
@@ -277,54 +285,54 @@
277
285
  :check-list:
278
286
  :check-types:
279
287
  :check-add:
280
- :required:
288
+ :keyreq:
281
289
  - name
282
290
  - type
283
291
  - fail_count
284
292
  - success_count
285
293
  - check_interval
286
- :optional:
287
- - "**from_check_type"
294
+ :keyrest:
295
+ - from_check_type
288
296
  :check-remove:
289
- :required:
297
+ :keyreq:
290
298
  - check_id
291
299
  :contact-list:
292
300
  :contact-add:
293
301
  :contact-remove:
294
- :required:
302
+ :keyreq:
295
303
  - type
296
304
  - rel
297
305
  :alert-list:
298
- :required:
306
+ :keyreq:
299
307
  - check_id
300
308
  :alert-add:
301
- :required:
309
+ :keyreq:
302
310
  - check_id
303
311
  - contact_id
304
312
  :alert-remove:
305
- :required:
313
+ :keyreq:
306
314
  - alert_id
307
315
  securitygroup:
308
316
  :list:
309
317
  :create:
310
- :required:
318
+ :keyreq:
311
319
  - region
312
320
  - name
313
321
  :delete:
314
- :required:
322
+ :keyreq:
315
323
  - region
316
324
  - group_id
317
325
  :rename:
318
- :required:
326
+ :keyreq:
319
327
  - region
320
328
  - group_id
321
329
  - name
322
330
  :rule-list:
323
- :required:
331
+ :keyreq:
324
332
  - region
325
333
  - group_id
326
334
  :rule-insert:
327
- :required:
335
+ :keyreq:
328
336
  - region
329
337
  - group_id
330
338
  - direction
@@ -332,12 +340,12 @@ securitygroup:
332
340
  - protocol
333
341
  - remote_type
334
342
  - remote_value
335
- :optional:
343
+ :key:
336
344
  - port_min
337
345
  - port_max
338
346
  - label
339
347
  :rule-delete:
340
- :required:
348
+ :keyreq:
341
349
  - region
342
350
  - group_id
343
351
  - rule_id
@@ -347,45 +355,45 @@ securitygroup:
347
355
  :usage:
348
356
  :domain-list:
349
357
  :domain-add:
350
- :required:
358
+ :keyreq:
351
359
  - name
352
360
  :domain-remove:
353
- :required:
361
+ :keyreq:
354
362
  - domain_id
355
363
  :domain-dkim-set:
356
- :required:
364
+ :keyreq:
357
365
  - domain_id
358
366
  - selector
359
367
  - private_key
360
368
  :domain-dkim-unset:
361
- :required:
369
+ :keyreq:
362
370
  - domain_id
363
371
  :user-list:
364
- :required:
372
+ :keyreq:
365
373
  - domain_id
366
374
  :user-add:
367
- :required:
375
+ :keyreq:
368
376
  - domain_id
369
377
  - username
370
378
  - password
371
379
  :user-set-password:
372
- :required:
380
+ :keyreq:
373
381
  - domain_id
374
382
  - user_id
375
383
  - password
376
384
  :user-remove:
377
- :required:
385
+ :keyreq:
378
386
  - domain_id
379
387
  - user_id
380
388
  :alias-list:
381
- :required:
389
+ :keyreq:
382
390
  - domain_id
383
391
  :alias-add:
384
- :required:
392
+ :keyreq:
385
393
  - domain_id
386
394
  - name
387
395
  - target
388
396
  :alias-remove:
389
- :required:
397
+ :keyreq:
390
398
  - domain_id
391
399
  - alias_id
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: lunanode
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.2.0
4
+ version: 0.3.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Tim Bellefleur
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2017-02-09 00:00:00.000000000 Z
11
+ date: 2017-02-11 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rest-client
@@ -94,6 +94,20 @@ dependencies:
94
94
  - - "~>"
95
95
  - !ruby/object:Gem::Version
96
96
  version: '0.10'
97
+ - !ruby/object:Gem::Dependency
98
+ name: reek
99
+ requirement: !ruby/object:Gem::Requirement
100
+ requirements:
101
+ - - "~>"
102
+ - !ruby/object:Gem::Version
103
+ version: '4.5'
104
+ type: :development
105
+ prerelease: false
106
+ version_requirements: !ruby/object:Gem::Requirement
107
+ requirements:
108
+ - - "~>"
109
+ - !ruby/object:Gem::Version
110
+ version: '4.5'
97
111
  - !ruby/object:Gem::Dependency
98
112
  name: rubocop
99
113
  requirement: !ruby/object:Gem::Requirement
@@ -108,6 +122,20 @@ dependencies:
108
122
  - - "~>"
109
123
  - !ruby/object:Gem::Version
110
124
  version: '0.47'
125
+ - !ruby/object:Gem::Dependency
126
+ name: rubocop-rspec
127
+ requirement: !ruby/object:Gem::Requirement
128
+ requirements:
129
+ - - "~>"
130
+ - !ruby/object:Gem::Version
131
+ version: '1.10'
132
+ type: :development
133
+ prerelease: false
134
+ version_requirements: !ruby/object:Gem::Requirement
135
+ requirements:
136
+ - - "~>"
137
+ - !ruby/object:Gem::Version
138
+ version: '1.10'
111
139
  description:
112
140
  email:
113
141
  - nomoon@phoebus.ca
@@ -131,6 +159,7 @@ files:
131
159
  - Rakefile
132
160
  - bin/console
133
161
  - bin/setup
162
+ - config.reek
134
163
  - lib/lunanode.rb
135
164
  - lib/lunanode/action_generator.rb
136
165
  - lib/lunanode/api.rb