apiaryio 0.6.1 → 0.7.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: 7d1f7b93ee67ce7410a17db97727e31798890639
4
- data.tar.gz: e9ea2a78542a7df2b2694ab33a40f3aa7dc182e5
3
+ metadata.gz: 6e639544bbbeeeccb5ee418216fccdd4931adfd1
4
+ data.tar.gz: c1adc732daf47c4a9a988d15a65098c5fb52633d
5
5
  SHA512:
6
- metadata.gz: 4b435dbff98370af119a89103d516c05a1680c174144ba4ff41194c84010288888c91a0b7dd80a8b7bd7be2b03aa8f1afc50cb89564a7f658bb047852b19a194
7
- data.tar.gz: 7eaea8e80f97c7afadc64d6e1e7ddb6585182c74d38604c39d4f95178587729012a7a274789dd8ebb72dc587272a65345e9b11e681329716202abff39be94205
6
+ metadata.gz: 45a77fc5663fde0d5079acb6021e8f4607cf87816079edea83ff8f27ffc33578c9ee9cab39dfbd05c0e5033a4c93591f60192954dd68390a2b8b9bd5f9577799
7
+ data.tar.gz: 6e8940c09315916b67f5ff75448aac975d87fd1d9cc4ec35a4b9388752e92ca5308f91777978eb61a1ba11afe44d88b24122e4ad5c607051d4dbfcf07038bf27
data/.rubocop_todo.yml CHANGED
@@ -9,6 +9,9 @@ Lint/UnusedBlockArgument:
9
9
  Metrics/AbcSize:
10
10
  Max: 33
11
11
 
12
+ Metrics/ClassLength:
13
+ Max: 150 # or whatever ends up being appropriate
14
+
12
15
  Metrics/PerceivedComplexity:
13
16
  Max: 12
14
17
 
data/README.md CHANGED
@@ -98,6 +98,7 @@ Options:
98
98
  [--server], [--no-server] # Start standalone web server on port 8080
99
99
  [--port=PORT] # Set port for --server option
100
100
  [--host=HOST] # Set host for --server option
101
+ [--watch], [--no-watch] # Reload API documentation when API Description Document has changed
101
102
 
102
103
  Show API documentation in browser or write it to file
103
104
  ```
data/apiary.gemspec CHANGED
@@ -26,6 +26,7 @@ Gem::Specification.new do |gem|
26
26
  gem.add_runtime_dependency 'thor', '~> 0.19.1'
27
27
  gem.add_runtime_dependency 'json', '~> 1.8'
28
28
  gem.add_runtime_dependency 'launchy', '~> 2.4'
29
+ gem.add_runtime_dependency 'listen', '~> 2.0'
29
30
 
30
31
  gem.add_development_dependency 'bundler', '~> 1.12'
31
32
  gem.add_development_dependency 'rake', '~> 10.0'
data/lib/apiary/cli.rb CHANGED
@@ -25,6 +25,7 @@ module Apiary
25
25
  method_option :server, type: :boolean, desc: 'Start standalone web server on port 8080'
26
26
  method_option :port, type: :numeric, banner: 'PORT', desc: 'Set port for --server option'
27
27
  method_option :host, type: :string, desc: 'Set host for --server option'
28
+ method_option :watch, type: :boolean, desc: 'Reload API documentation when API Description Document has changed'
28
29
 
29
30
  def preview
30
31
  cmd = Apiary::Command::Preview.new options
@@ -6,6 +6,7 @@ require 'json'
6
6
  require 'tmpdir'
7
7
  require 'erb'
8
8
  require 'launchy'
9
+ require 'listen'
9
10
 
10
11
  require 'apiary/agent'
11
12
  require 'apiary/helpers'
@@ -29,6 +30,8 @@ module Apiary::Command
29
30
  @options.proxy ||= ENV['http_proxy']
30
31
  @options.server ||= false
31
32
  @options.json ||= false
33
+ @options.watch ||= false
34
+ @options.interval ||= 1000
32
35
  @options.host ||= '127.0.0.1'
33
36
  @options.headers ||= {
34
37
  accept: 'text/html',
@@ -36,6 +39,8 @@ module Apiary::Command
36
39
  user_agent: Apiary.user_agent
37
40
  }
38
41
 
42
+ @changed = timestamp
43
+
39
44
  begin
40
45
  @source_path = api_description_source_path(@options.path)
41
46
  rescue StandardError => e
@@ -45,17 +50,44 @@ module Apiary::Command
45
50
 
46
51
  def execute
47
52
  if @options.server
53
+ watch
48
54
  server
49
55
  else
50
56
  show
51
57
  end
52
58
  end
53
59
 
60
+ def watch
61
+ if @options.watch
62
+ listener = Listen.to(File.dirname(@source_path), only: /#{File.basename(@source_path)}/) do |modified|
63
+ @changed = timestamp
64
+ end
65
+
66
+ listener.start
67
+ end
68
+ end
69
+
70
+ def timestamp
71
+ Time.now.getutc.to_i.to_s
72
+ end
73
+
54
74
  def server
55
- app = rack_app do
75
+ generate_app = get_app('/') do
56
76
  generate
57
77
  end
58
78
 
79
+ change_app = get_app('/changed') do
80
+ @changed
81
+ end
82
+
83
+ source_app = get_app('/source') do
84
+ api_description_source(@source_path)
85
+ end
86
+
87
+ app = Rack::Builder.new do
88
+ run Rack::Cascade.new([source_app, change_app, generate_app])
89
+ end
90
+
59
91
  Rack::Server.start(Port: @options.port, Host: @options.host, app: app)
60
92
  end
61
93
 
@@ -69,9 +101,11 @@ module Apiary::Command
69
101
  end
70
102
  end
71
103
 
72
- def rack_app
104
+ def get_app(path)
73
105
  Rack::Builder.new do
74
- run ->(env) { [200, {}, [yield]] }
106
+ map path do
107
+ run ->(env) { [200, {}, [yield]] }
108
+ end
75
109
  end
76
110
  end
77
111
 
@@ -104,7 +138,9 @@ module Apiary::Command
104
138
 
105
139
  data = {
106
140
  title: File.basename(@source_path, '.*'),
107
- source: source
141
+ source: source,
142
+ interval: @options.interval,
143
+ watch: @options.watch
108
144
  }
109
145
 
110
146
  template.result(binding)
@@ -10,6 +10,35 @@
10
10
  var embed = new Apiary.Embed({
11
11
  apiBlueprint: "<%= escape_javascript data[:source] %>"
12
12
  });
13
+
14
+ if (<%= data[:watch] %>) {
15
+ var changed = null
16
+ var xhrChanged = new XMLHttpRequest();
17
+ var xhrData = new XMLHttpRequest();
18
+ setInterval(function() {
19
+ xhrChanged.open('GET', window.location.href + "/changed", true);
20
+ xhrChanged.send();
21
+
22
+ xhrChanged.onreadystatechange = function() {
23
+ if (xhrChanged.readyState == 4 && xhrChanged.status == 200) {
24
+ if (!changed) {
25
+ changed = xhrChanged.responseText
26
+ }
27
+ if (changed != xhrChanged.responseText) {
28
+ changed = xhrChanged.responseText
29
+ xhrData.open('GET', window.location.href + "/source", true);
30
+ xhrData.send();
31
+
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}}, '*');
35
+ }
36
+ }
37
+ }
38
+ }
39
+ }
40
+ }, <%= data[:interval] %>);
41
+ }
13
42
  </script>
14
43
  </body>
15
44
  </html>
@@ -1,3 +1,3 @@
1
1
  module Apiary
2
- VERSION = '0.6.1'.freeze
2
+ VERSION = '0.7.0'.freeze
3
3
  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.6.1
4
+ version: 0.7.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: 2016-12-16 00:00:00.000000000 Z
11
+ date: 2017-01-02 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rest-client
@@ -80,6 +80,20 @@ dependencies:
80
80
  - - ~>
81
81
  - !ruby/object:Gem::Version
82
82
  version: '2.4'
83
+ - !ruby/object:Gem::Dependency
84
+ name: listen
85
+ requirement: !ruby/object:Gem::Requirement
86
+ requirements:
87
+ - - ~>
88
+ - !ruby/object:Gem::Version
89
+ version: '2.0'
90
+ type: :runtime
91
+ prerelease: false
92
+ version_requirements: !ruby/object:Gem::Requirement
93
+ requirements:
94
+ - - ~>
95
+ - !ruby/object:Gem::Version
96
+ version: '2.0'
83
97
  - !ruby/object:Gem::Dependency
84
98
  name: bundler
85
99
  requirement: !ruby/object:Gem::Requirement