apiaryio 0.10.2 → 0.11.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: 1d7b421e749c1bd1307e63b1bc23ebb2caaceed4
4
- data.tar.gz: aa8f2ae6ed17b14d1988b60239c1bc4c78c875d9
3
+ metadata.gz: 5756528c3736e0906c6b0548508705fb4b43c601
4
+ data.tar.gz: 9910234e8ac83f76eca23712bccc01be7c9e28c1
5
5
  SHA512:
6
- metadata.gz: 8e1246cca1c28cc2593f74dcc9acd81e7bc0a9158b54ebbf452ae590d66ed7fa9cd015e9c80f34e57b1d0f527d150c98a531435e4fa5b9e7e32c9084fa2efa86
7
- data.tar.gz: 853bf679a6b669b389d4b8eeafb726cb0ae6025e3ce03f4ab2056b15a337e04d3a44f1b22a26feac19c9b01152d08b4e3c14d80d74bc06ae2177cdb9aff299f4
6
+ metadata.gz: edfda0ff24e9ee17001f1ebf3365908e95b76e5308d6af714db4b80de06e97f2dd8b29377a4bdb147882be82f4e46106b5c76143d489ff071cd32ff98d8deee6
7
+ data.tar.gz: 8460c8eea49d4ef58681e7c1c5d4d52a3265b8353c43eeca82200f6afca7e4000d7fbb636e57c4fa103edf31d54d6e6a282c5e050b82780119c53f889cab1b11
@@ -10,10 +10,10 @@ Metrics/AbcSize:
10
10
  Max: 33
11
11
 
12
12
  Metrics/BlockLength:
13
- Max: 150
13
+ Max: 200
14
14
 
15
15
  Metrics/ClassLength:
16
- Max: 190 # or whatever ends up being appropriate
16
+ Max: 250 # or whatever ends up being appropriate
17
17
 
18
18
  Metrics/PerceivedComplexity:
19
19
  Max: 12
data/README.md CHANGED
@@ -132,6 +132,7 @@ Usage:
132
132
 
133
133
  Options:
134
134
  [--fetch], [--no-fetch] # Fetch styleguide rules and functions from apiary.io
135
+ [--push], [--no-push] # Push styleguide rules and functions to apiary.io
135
136
  [--add=ADD] # Path to API Description Document. When given a directory, it will look for `apiary.apib` and `swagger.yaml` file
136
137
  [--functions=FUNCTIONS] # Path to to the file with functions definitions
137
138
  [--rules=RULES] # Path to to the file with rules definitions - `functions.js` and `rules.json` are loaded if not specified
@@ -49,6 +49,7 @@ module Apiary
49
49
 
50
50
  desc 'styleguide', 'Check API Description Document against styleguide rules (Apiary.io pro plan is required - https://apiary.io/plans )'
51
51
  method_option :fetch, type: :boolean, desc: 'Fetch styleguide rules and functions from apiary.io'
52
+ method_option :push, type: :boolean, desc: 'Push styleguide rules and functions to apiary.io'
52
53
  method_option :add, type: :string, desc: 'Path to API Description Document. When given a directory, it will look for `apiary.apib` and `swagger.yaml` file'
53
54
  method_option :functions, type: :string, desc: 'Path to to the file with functions definitions'
54
55
  method_option :rules, type: :string, desc: 'Path to to the file with rules definitions - `functions.js` and `rules.json` are loaded if not specified'
@@ -49,7 +49,7 @@ module Apiary::Command
49
49
  end
50
50
 
51
51
  def execute
52
- if @options.server
52
+ if @options.server || @options.watch
53
53
  watch
54
54
  server
55
55
  else
@@ -70,15 +70,15 @@ module Apiary::Command
70
70
  end
71
71
 
72
72
  def server
73
- generate_app = get_app('/') do
73
+ generate_app = get_app(path: '/') do
74
74
  generate
75
75
  end
76
76
 
77
- change_app = get_app('/changed') do
77
+ change_app = get_app(path: '/changed', options: { 'Content-Type' => 'text/plain' }) do
78
78
  @changed
79
79
  end
80
80
 
81
- source_app = get_app('/source') do
81
+ source_app = get_app(path: '/source', options: { 'Content-Type' => 'text/plain' }) do
82
82
  api_description_source(@source_path)
83
83
  end
84
84
 
@@ -99,10 +99,10 @@ module Apiary::Command
99
99
  end
100
100
  end
101
101
 
102
- def get_app(path)
102
+ def get_app(path: '/', options: {})
103
103
  Rack::Builder.new do
104
104
  map path do
105
- run ->(env) { [200, {}, [yield]] }
105
+ run ->(env) { [200, options, [yield]] }
106
106
  end
107
107
  end
108
108
  end
@@ -36,11 +36,37 @@ module Apiary::Command
36
36
  check_api_key
37
37
  if @options.fetch
38
38
  fetch
39
+ elsif @options.push
40
+ push
39
41
  else
40
42
  validate
41
43
  end
42
44
  end
43
45
 
46
+ def push
47
+ begin
48
+ load(add: false)
49
+ rescue StandardError => e
50
+ abort "Error: #{e.message}"
51
+ end
52
+
53
+ path = 'styleguide-cli/set-assertions/'
54
+ headers = @options.headers.clone
55
+ headers[:authentication] = "Token #{@options.api_key}"
56
+
57
+ data = {
58
+ functions: @functions,
59
+ rules: @rules
60
+ }.to_json
61
+
62
+ begin
63
+ call_apiary(path, data, headers, :post)
64
+ rescue => e
65
+ puts e
66
+ abort "Error: Can not write into the rules/functions file: #{e}"
67
+ end
68
+ end
69
+
44
70
  def fetch
45
71
  begin
46
72
  assertions = fetch_from_apiary
@@ -82,6 +108,7 @@ module Apiary::Command
82
108
 
83
109
  headers = @options.headers.clone
84
110
  headers[:Authorization] = "Bearer #{token}"
111
+ headers['Accept-Encoding'] = 'identity'
85
112
 
86
113
  output call_resource(@options.vk_url, data, headers, :post)
87
114
  end
@@ -195,11 +222,13 @@ module Apiary::Command
195
222
  abort 'Error: API key must be provided through environment variable APIARY_API_KEY. \Please go to https://login.apiary.io/tokens to obtain it.'
196
223
  end
197
224
 
198
- def load
199
- @add_path = api_description_source_path(@options.add)
200
- @add = api_description_source(@add_path)
201
- @functions = get_functions(@options.functions)
202
- @rules = get_rules(@options.rules)
225
+ def load(add: true, functions: true, rules: true)
226
+ if add
227
+ @add_path = api_description_source_path(@options.add)
228
+ @add = api_description_source(@add_path)
229
+ end
230
+ @functions = get_functions(@options.functions) if functions
231
+ @rules = get_rules(@options.rules) if rules
203
232
  end
204
233
 
205
234
  def fetch_from_apiary
@@ -12,7 +12,7 @@
12
12
  });
13
13
 
14
14
  if (<%= data[:watch] %>) {
15
- var changed = null
15
+ var changed = null;
16
16
  var xhrChanged = new XMLHttpRequest();
17
17
  var xhrData = new XMLHttpRequest();
18
18
  setInterval(function() {
@@ -20,18 +20,18 @@
20
20
  xhrChanged.send();
21
21
 
22
22
  xhrChanged.onreadystatechange = function() {
23
- if (xhrChanged.readyState == 4 && xhrChanged.status == 200) {
23
+ if (xhrChanged.readyState === 4 && xhrChanged.status === 200) {
24
24
  if (!changed) {
25
- changed = xhrChanged.responseText
25
+ changed = xhrChanged.responseText;
26
26
  }
27
27
  if (changed != xhrChanged.responseText) {
28
- changed = xhrChanged.responseText
28
+ changed = xhrChanged.responseText;
29
29
  xhrData.open('GET', window.location.href + "/source", true);
30
30
  xhrData.send();
31
31
 
32
32
  xhrData.onreadystatechange = function() {
33
- if (xhrData.readyState == 4 && xhrData.status == 200) {
34
- embed.iframeElement.contentWindow.postMessage({"origin": embed.ORIGIN, "eventType": "anonymousPreview", "data": {"code": xhrData.responseText}}, '*');
33
+ if (xhrData.readyState === 4 && xhrData.status === 200) {
34
+ window[embed.adaptee.id].contentWindow.postMessage({"origin": "Apiary.Embed", "eventType": "anonymousPreview", "data": {"code": xhrData.responseText}}, '*');
35
35
  }
36
36
  }
37
37
  }
@@ -1,3 +1,3 @@
1
1
  module Apiary
2
- VERSION = '0.10.2'.freeze
2
+ VERSION = '0.11.0'.freeze
3
3
  end
@@ -172,4 +172,48 @@ describe Apiary::Command::Styleguide do
172
172
  end.to output("[\n\n]\n").to_stdout
173
173
  end
174
174
  end
175
+
176
+ describe 'push' do
177
+ it 'call command without APIARY_API_KEY set' do
178
+ opts = {
179
+ push: true,
180
+ api_key: '',
181
+ functions: 'features/support',
182
+ rules: 'features/support'
183
+ }
184
+ command = Apiary::Command::Styleguide.new(opts)
185
+ test_abort(command, 'Error: API key must be provided through environment variable APIARY_API_KEY.')
186
+ end
187
+
188
+ it 'call command with incorrect APIARY_API_KEY' do
189
+ opts = {
190
+ push: true,
191
+ api_key: 'xxx'
192
+ }
193
+
194
+ command = Apiary::Command::Styleguide.new(opts)
195
+ stub_request(:post, "https://#{command.options.api_host}/styleguide-cli/set-assertions/").to_return(status: [403, 'This resource requires authenticated API call.'])
196
+
197
+ test_abort(command, 'Error: Apiary service responded with: 403')
198
+ end
199
+
200
+ it 'call command with correct APIARY_API_KEY' do
201
+ opts = {
202
+ push: true,
203
+ api_key: 'xxx',
204
+ functions: 'function testFunction(data) { return "failed"; }',
205
+ rules: '[{"ruleName": "testName","functionName": "testFunction","target": "Request_Body","intent": "testIntent"}]'
206
+ }
207
+
208
+ command = Apiary::Command::Styleguide.new(opts)
209
+ stub_request(:post, "https://#{command.options.api_host}/styleguide-cli/set-assertions/").to_return(status: 200, body: '')
210
+
211
+ expect do
212
+ begin
213
+ command.execute
214
+ rescue SystemExit
215
+ end
216
+ end.to output('').to_stdout
217
+ end
218
+ end
175
219
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: apiaryio
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.10.2
4
+ version: 0.11.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Apiary Ltd.
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2018-01-10 00:00:00.000000000 Z
11
+ date: 2018-04-13 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rest-client