lurker 0.5.3 → 0.5.4

Sign up to get free protection for your applications and to get access to all the features.
Files changed (62) hide show
  1. checksums.yaml +4 -4
  2. checksums.yaml.gz.asc +7 -7
  3. data.tar.gz.asc +7 -7
  4. data/.gitignore +1 -0
  5. data/.travis.yml +4 -4
  6. data/README.md +4 -2
  7. data/Rakefile +13 -1
  8. data/features/controller_specs/nested_schema_scaffolding.feature +4 -4
  9. data/features/controller_specs/test_endpoint.feature +36 -15
  10. data/features/request_specs/nested_schema_scaffolding.feature +4 -4
  11. data/features/request_specs/schema_suffixes.feature +173 -0
  12. data/features/support/env.rb +7 -1
  13. data/gemfiles/Gemfile32.ci +6 -0
  14. data/{Gemfile.ci → gemfiles/Gemfile40.ci} +3 -1
  15. data/gemfiles/Gemfile41.ci +6 -0
  16. data/lib/lurker.rb +0 -2
  17. data/lib/lurker/cli.rb +10 -55
  18. data/lib/lurker/controller_spec_watcher.rb +12 -6
  19. data/lib/lurker/endpoint.rb +1 -1
  20. data/lib/lurker/presenters/base_presenter.rb +0 -13
  21. data/lib/lurker/presenters/endpoint_presenter.rb +7 -6
  22. data/lib/lurker/presenters/json_presenter.rb +0 -9
  23. data/lib/lurker/presenters/response_code_presenter.rb +0 -9
  24. data/lib/lurker/presenters/schema_presenter.rb +1 -33
  25. data/lib/lurker/presenters/service_presenter.rb +2 -24
  26. data/lib/lurker/request_spec_watcher.rb +11 -6
  27. data/lib/lurker/service.rb +1 -1
  28. data/lib/lurker/templates/javascripts/application.js +0 -2
  29. data/lib/lurker/templates/public/application.css +0 -148
  30. data/lib/lurker/templates/public/application.js +2 -1904
  31. data/lib/lurker/templates/stylesheets/application.css +0 -2
  32. data/lib/lurker/version.rb +1 -1
  33. data/lurker.gemspec +2 -1
  34. data/templates/generate_stuff.rb +111 -22
  35. data/templates/lurker_app.rb +0 -5
  36. metadata +31 -32
  37. metadata.gz.asc +7 -7
  38. data/lib/lurker/meta_service.rb +0 -46
  39. data/lib/lurker/presenters/meta_service_presenter.rb +0 -85
  40. data/lib/lurker/templates/endpoint.html.erb +0 -62
  41. data/lib/lurker/templates/endpoint.md.erb +0 -40
  42. data/lib/lurker/templates/javascripts/demo/dashboard-demo.js +0 -117
  43. data/lib/lurker/templates/javascripts/demo/flot-demo.js +0 -1242
  44. data/lib/lurker/templates/javascripts/demo/morris-demo.js +0 -155
  45. data/lib/lurker/templates/javascripts/plugins/dataTables/dataTables.bootstrap.js +0 -245
  46. data/lib/lurker/templates/javascripts/plugins/dataTables/jquery.dataTables.js +0 -14013
  47. data/lib/lurker/templates/javascripts/plugins/flot/excanvas.min.js +0 -1
  48. data/lib/lurker/templates/javascripts/plugins/flot/jquery.flot.js +0 -2599
  49. data/lib/lurker/templates/javascripts/plugins/flot/jquery.flot.pie.js +0 -750
  50. data/lib/lurker/templates/javascripts/plugins/flot/jquery.flot.resize.js +0 -60
  51. data/lib/lurker/templates/javascripts/plugins/flot/jquery.flot.tooltip.min.js +0 -12
  52. data/lib/lurker/templates/javascripts/plugins/morris/morris.js +0 -1888
  53. data/lib/lurker/templates/javascripts/plugins/morris/raphael-2.1.0.min.js +0 -10
  54. data/lib/lurker/templates/lurker/rendering/_endpoint.html.erb +0 -65
  55. data/lib/lurker/templates/meta_service.html.erb +0 -54
  56. data/lib/lurker/templates/service.html.erb +0 -50
  57. data/lib/lurker/templates/service.md.erb +0 -18
  58. data/lib/lurker/templates/styles.css +0 -75
  59. data/lib/lurker/templates/stylesheets/plugins/dataTables/dataTables.bootstrap.css +0 -233
  60. data/lib/lurker/templates/stylesheets/plugins/morris/morris-0.4.3.min.css +0 -2
  61. data/lib/lurker/templates/stylesheets/plugins/social-buttons/social-buttons.css +0 -68
  62. data/lib/lurker/templates/stylesheets/plugins/timeline/timeline.css +0 -144
@@ -1,6 +1,9 @@
1
1
  require 'simplecov'
2
2
  SimpleCov.start do
3
- add_filter 'lurker_app'
3
+ filters.clear # This will remove the :root_filter that comes via simplecov's defaults
4
+ add_filter do |src|
5
+ !(src.filename =~ /^#{SimpleCov.root}\/lib\/lurker/)
6
+ end
4
7
  end
5
8
 
6
9
  require 'fileutils'
@@ -38,10 +41,13 @@ Before do
38
41
  system "bin/spring stop"
39
42
  FileUtils.rm_rf File.expand_path('../../../tmp/lurker_app/lurker', __FILE__)
40
43
  FileUtils.rm_rf File.expand_path('../../../tmp/lurker_app/html', __FILE__)
44
+ FileUtils.rm_rf File.expand_path('../../../tmp/lurker_app/spec/request', __FILE__)
45
+ FileUtils.rm_rf File.expand_path('../../../tmp/lurker_app/spec/controllers', __FILE__)
41
46
  end
42
47
  end
43
48
 
44
49
  After do |scenario|
50
+ ActiveRecord::Base.connection.reconnect!
45
51
  DatabaseCleaner.clean
46
52
  end
47
53
 
@@ -0,0 +1,6 @@
1
+ source 'https://rubygems.org'
2
+
3
+ # Specify your gem's dependencies in lurker.gemspec
4
+ gemspec path: '../'
5
+
6
+ gem 'rails', '~> 3.2.17'
@@ -1,4 +1,6 @@
1
1
  source 'https://rubygems.org'
2
2
 
3
3
  # Specify your gem's dependencies in lurker.gemspec
4
- gemspec
4
+ gemspec path: '../'
5
+
6
+ gem 'rails', '~> 4.0.4'
@@ -0,0 +1,6 @@
1
+ source 'https://rubygems.org'
2
+
3
+ # Specify your gem's dependencies in lurker.gemspec
4
+ gemspec path: '../'
5
+
6
+ gem 'rails', '~> 4.1.0'
data/lib/lurker.rb CHANGED
@@ -38,7 +38,6 @@ require 'lurker/schema'
38
38
  require 'lurker/ref_object'
39
39
  require 'lurker/erb_schema_context'
40
40
  require 'lurker/service'
41
- require 'lurker/meta_service'
42
41
  require 'lurker/jaml_descriptor'
43
42
  require 'lurker/validator'
44
43
  require 'lurker/validation_error'
@@ -49,7 +48,6 @@ require 'lurker/form_builder'
49
48
  require 'lurker/presenters/json_presenter'
50
49
  require 'lurker/presenters/base_presenter'
51
50
  require 'lurker/presenters/service_presenter'
52
- require 'lurker/presenters/meta_service_presenter'
53
51
  require 'lurker/presenters/endpoint_presenter'
54
52
  require 'lurker/presenters/schema_presenter'
55
53
  require 'lurker/presenters/response_code_presenter'
data/lib/lurker/cli.rb CHANGED
@@ -1,7 +1,6 @@
1
1
  require 'thor'
2
2
  require 'digest/sha1'
3
3
  require 'lurker/service'
4
- require 'lurker/meta_service'
5
4
 
6
5
  module Lurker
7
6
  # A Thor::Error to be thrown when an lurker directory is not found
@@ -24,13 +23,13 @@ module Lurker
24
23
  File.expand_path("../templates/public", __FILE__)
25
24
  end
26
25
 
27
- desc "convert [LURKER_PATH]", "Convert lurker to HTML or Markdowns"
26
+ desc "convert [LURKER_PATH]", "Convert lurker to HTML"
28
27
  method_option :rails, :type => :boolean, :desc => "Includes Rails environment"
29
28
  method_option :exclude, :aliases => "-e", :desc => "Select endpoints by given regexp, if NOT matching prefix"
30
29
  method_option :select, :aliases => "-s", :desc => "Select endpoints by given regexp, matching prefix"
31
30
  method_option :output, :aliases => "-o", :desc => "Output path"
32
31
  method_option :url_base_path, :aliases => "-u", :desc => "URL base path"
33
- method_option :format, :aliases => "-f", :desc => "Format in html or markdown, defaults to html", :default => "html"
32
+ method_option :format, :aliases => "-f", :desc => "Format in html or pdf, defaults to html", :default => "html"
34
33
  method_option :templates, :aliases => "-t", :desc => "Template overrides path"
35
34
  method_option :content, :aliases => "-c", :desc => "Content to be rendered into html-docs main page"
36
35
  def convert(lurker_path=Lurker::DEFAULT_SERVICE_PATH)
@@ -49,14 +48,18 @@ module Lurker
49
48
  require "#{Dir.pwd}/config/environment"
50
49
  end
51
50
 
52
- if options[:format] == 'markdown'
53
- convert_to_markdown
51
+ if options[:format] == 'pdf'
52
+ convert_to_pdf
54
53
  else
55
54
  convert_to_html
56
55
  end
57
56
  end
58
57
 
59
58
  no_tasks do
59
+ def convert_to_pdf
60
+ # TODO
61
+ end
62
+
60
63
  def convert_to_html
61
64
  in_root do
62
65
  # js, css, fonts
@@ -71,12 +74,10 @@ module Lurker
71
74
  FileUtils.cp_r fname, destination.to_s
72
75
  end
73
76
  end
74
-
75
- create_file("index.html", meta_presenter.to_html) if has_meta_service?
76
77
  end
77
78
 
78
79
  service_presenters.each do |service_presenter|
79
- inside_service_presenter(service_presenter) do
80
+ in_root do
80
81
  create_file("index.html", service_presenter.to_html, force: true)
81
82
 
82
83
  service_presenter.endpoints.each do |endpoint_prefix_group|
@@ -88,32 +89,6 @@ module Lurker
88
89
  end
89
90
  end
90
91
 
91
- def convert_to_markdown
92
- in_root do
93
- create_file("index.md", meta_presenter.to_markdown) if has_meta_service?
94
- end
95
-
96
- service_presenters.each do |service_presenter|
97
- inside_service_presenter(service_presenter) do
98
- create_file("index.md", service_presenter.to_markdown)
99
-
100
- service_presenter.endpoints.each do |endpoint_prefix_group|
101
- endpoint_prefix_group.each do |endpoint|
102
- create_file(endpoint.url('.md'), endpoint.to_markdown)
103
- end
104
- end
105
- end
106
- end
107
- end
108
-
109
- def inside_service_presenter(service, &block)
110
- if has_meta_service?
111
- inside(service.slug_name, {:verbose => true}, &block)
112
- else
113
- in_root(&block)
114
- end
115
- end
116
-
117
92
  def output_path
118
93
  @output_path ||=
119
94
  if options[:output]
@@ -140,10 +115,6 @@ module Lurker
140
115
  !destination.exist? || destination.directory?
141
116
  end
142
117
 
143
- def has_meta_service?
144
- !meta_service.empty?
145
- end
146
-
147
118
  def service_presenters
148
119
  @service_presenters ||= services.map do |service|
149
120
  Lurker::ServicePresenter.new(service, html_options, &filtering_block)
@@ -194,23 +165,7 @@ module Lurker
194
165
  end
195
166
 
196
167
  def services
197
- @services ||=
198
- if has_meta_service?
199
- meta_service.services
200
- else
201
- [Lurker::Service.new(origin_path)]
202
- end
203
- end
204
-
205
- def meta_presenter
206
- @meta_presenter ||= Lurker::MetaServicePresenter.new(
207
- meta_service,
208
- html_options
209
- )
210
- end
211
-
212
- def meta_service
213
- @meta_service ||= Lurker::MetaService.new(origin_path)
168
+ @services ||= [Lurker::Service.new(origin_path)]
214
169
  end
215
170
 
216
171
  def origin
@@ -8,10 +8,7 @@ module Lurker
8
8
 
9
9
  included do
10
10
  # _describe = self # RSpec::ExampleGroups::... # class
11
- actions = [:get, :post, :put, :delete]
12
- if defined?(ActionDispatch::Request::HTTP_METHODS) && ActionDispatch::Request::HTTP_METHODS.include?('PATCH')
13
- actions << :patch
14
- end
11
+ actions = [:get, :post, :put, :delete, :patch]
15
12
  actions.each do |verb|
16
13
  send(:define_method, "#{verb}_with_lurker") do |*params|
17
14
  @__action, @__request_params = params
@@ -19,7 +16,7 @@ module Lurker
19
16
 
20
17
  send("#{verb}_without_lurker", @__action, @__request_params)
21
18
 
22
- @__query_params = Hash[@__request_params.except(*path_params.keys).map do |k,v|
19
+ @__query_params = Hash[@__request_params.reject { |k,_| path_params.keys.include? k } .map do |k,v|
23
20
  [k.to_s, v.to_s]
24
21
  end]
25
22
  endpoint_path = explicit_path(@__example)
@@ -47,7 +44,16 @@ module Lurker
47
44
  verify(verb, endpoint_path)
48
45
  end
49
46
 
50
- send :alias_method_chain, verb, :lurker
47
+ begin
48
+ send :alias_method_chain, verb, :lurker
49
+ rescue NameError
50
+ if verb == :patch
51
+ alias_method :patch_without_lurker, :put_without_lurker
52
+ alias_method :patch, :patch_with_lurker
53
+ else
54
+ raise
55
+ end
56
+ end
51
57
  end
52
58
 
53
59
  around do |example|
@@ -95,7 +95,7 @@ class Lurker::Endpoint
95
95
  end
96
96
 
97
97
  def url_params
98
- (schema.extensions['path_params'] || {}).except('action', 'controller')
98
+ (schema.extensions['path_params'] || {}).reject { |k, _| ['action', 'controller', 'format'].include? k }
99
99
  end
100
100
 
101
101
  def query_params
@@ -1,12 +1,7 @@
1
1
  require 'erb'
2
- require 'kramdown'
3
2
  require 'json'
4
3
  require 'forwardable'
5
4
 
6
- # BasePresenters assist in generating Html for lurker classes.
7
- # BasePresenters is an abstract class with a lot of helper methods
8
- # for URLs and common text styling tasks (like #render_markdown
9
- # and #render_json)
10
5
  class Lurker::BasePresenter
11
6
 
12
7
  attr_reader :options
@@ -21,14 +16,6 @@ class Lurker::BasePresenter
21
16
  template.result(binding)
22
17
  end
23
18
 
24
- def render_markdown(markdown_str)
25
- if markdown_str
26
- Kramdown::Document.new(markdown_str, :entity_output => :numeric).to_html
27
- else
28
- nil
29
- end
30
- end
31
-
32
19
  def get_binding
33
20
  binding
34
21
  end
@@ -20,10 +20,6 @@ class Lurker::EndpointPresenter < Lurker::BasePresenter
20
20
  render('show')
21
21
  end
22
22
 
23
- def to_markdown
24
- render_erb('endpoint.md.erb')
25
- end
26
-
27
23
  def relative_path(extension = ".html")
28
24
  '%s%s-%s%s' % [ options[:prefix], endpoint.path, endpoint.verb, extension ]
29
25
  end
@@ -79,7 +75,7 @@ class Lurker::EndpointPresenter < Lurker::BasePresenter
79
75
  return if endpoint.request_parameters.empty?
80
76
  Lurker::JsonPresenter.new(
81
77
  example_from_schema(endpoint.request_parameters, endpoint.schema)
82
- .except(*endpoint.url_params.keys)
78
+ .reject { |k,_| endpoint.url_params.keys.include? k }
83
79
  )
84
80
  end
85
81
 
@@ -110,7 +106,12 @@ class Lurker::EndpointPresenter < Lurker::BasePresenter
110
106
 
111
107
  # for live form WITH :placeholders
112
108
  def named_path
113
- base_path.sub(/\/?$/, '/') + endpoint.path.gsub(/__/, ':')
109
+ return @named_path if @named_path
110
+ @named_path = base_path.sub(/\/?$/, '/') + endpoint.path.gsub(/__/, ':')
111
+ if (suffix = endpoint.schema.extensions.try(:[], 'suffix')).present?
112
+ @named_path = @named_path.gsub(/-#{suffix}/, '')
113
+ end
114
+ @named_path
114
115
  end
115
116
 
116
117
  def verb
@@ -19,13 +19,4 @@ class Lurker::JsonPresenter
19
19
  '<pre><code>%s</code></pre>' % JSON.pretty_generate(json)
20
20
  end
21
21
  end
22
-
23
- def to_markdown
24
- if json.kind_of?(Hash) ||
25
- json.kind_of?(Array)
26
- JSON.pretty_generate(json)
27
- else
28
- json
29
- end
30
- end
31
22
  end
@@ -18,10 +18,6 @@ class Lurker::ResponseCodePresenter < Lurker::BasePresenter
18
18
  EOS
19
19
  end
20
20
 
21
- def to_markdown
22
- "__#{status}__: #{description_raw}"
23
- end
24
-
25
21
  def successful?
26
22
  response_code["successful"]
27
23
  end
@@ -31,11 +27,6 @@ class Lurker::ResponseCodePresenter < Lurker::BasePresenter
31
27
  end
32
28
 
33
29
  def description
34
- render_markdown(description_raw)
35
- end
36
-
37
- def description_raw
38
30
  response_code["description"]
39
31
  end
40
-
41
32
  end
@@ -34,7 +34,7 @@ class Lurker::SchemaPresenter < Lurker::BasePresenter
34
34
  html << '<span class="deprecated">Deprecated</span>' if deprecated?
35
35
 
36
36
  html << '<div class="schema">'
37
- html << render_markdown(@schema["description"])
37
+ html << @schema["description"]
38
38
 
39
39
  html << '<ul>'
40
40
  begin
@@ -59,38 +59,6 @@ class Lurker::SchemaPresenter < Lurker::BasePresenter
59
59
  html.string
60
60
  end
61
61
 
62
- def to_markdown(prefix = "")
63
- md = StringIO.new
64
- md << 'Deprecated' if deprecated?
65
- md << "\n#{@schema["description"]}"
66
- md << "\n#{prefix}* __Required__: #{required?}" if nested?
67
- md << "\n#{prefix}* __Type__: #{type}" if type
68
- md << "\n#{prefix}* __Format__: #{format}" if format
69
- md << "\n#{prefix}* __Example__: <tt>#{example.to_markdown}</tt>" if example
70
- md << "\n#{@schema['enum']}"
71
- (@schema.keys - Lurker::SchemaPresenter::FORMATTED_KEYS).each do |key|
72
- md << "\n#{prefix}* %{key} %{@schema[key]}"
73
- end
74
- if items = @schema["items"]
75
- md << "\n#{prefix}* Items"
76
- if items.kind_of? Array
77
- item.compact.each do |item|
78
- md << Lurker::SchemaPresenter.new(item, options.merge(:nested => true)).to_markdown(prefix + "\t")
79
- end
80
- else
81
- md << Lurker::SchemaPresenter.new(@schema["items"], options.merge(:nested => true)).to_markdown(prefix + "\t")
82
- end
83
- end
84
- if properties = @schema["properties"]
85
- properties.each do |key, property|
86
- next if property.nil?
87
- md << "\n#{prefix}* __#{key}__:"
88
- md << Lurker::SchemaPresenter.new(property, options.merge(:nested => true)).to_markdown(prefix + "\t")
89
- end
90
- end
91
- md.string
92
- end
93
-
94
62
  def type
95
63
  t = @schema["type"]
96
64
  if t.kind_of? Array
@@ -3,7 +3,7 @@ class Lurker::ServicePresenter < Lurker::BasePresenter
3
3
  attr_reader :service
4
4
 
5
5
  extend Forwardable
6
- def_delegators :service, :name, :service_dir, :meta_service
6
+ def_delegators :service, :description, :discussion, :name, :service_dir
7
7
 
8
8
 
9
9
  def initialize(service, options = {}, &block)
@@ -18,10 +18,6 @@ class Lurker::ServicePresenter < Lurker::BasePresenter
18
18
  render('index')
19
19
  end
20
20
 
21
- def to_markdown
22
- render_erb('service.md.erb')
23
- end
24
-
25
21
  def title
26
22
  "Lurker | #{name}"
27
23
  end
@@ -37,7 +33,7 @@ class Lurker::ServicePresenter < Lurker::BasePresenter
37
33
  end
38
34
 
39
35
  def name_as_link(options = {})
40
- path = service.meta_service ? index_path(slug_name) : index_path
36
+ path = index_path
41
37
  '<a href="%s">%s %s</a>' % [ path, options[:prefix], service.name ]
42
38
  end
43
39
 
@@ -92,22 +88,4 @@ class Lurker::ServicePresenter < Lurker::BasePresenter
92
88
  hash
93
89
  end
94
90
  end
95
-
96
- def description(options = {:render => true})
97
- options[:render] ? render_markdown(service.description) : service.description
98
- end
99
-
100
- def discussion(options = {:render => true})
101
- options[:render] ? render_markdown(service.discussion) : service.discussion
102
- end
103
-
104
- def relative_meta_service_path(file_name = nil)
105
- service_path = service_dir.gsub(meta_service.meta_service_dir, "")
106
- service_path = service_path.count("/").times.map { "../" }.join
107
- if file_name
108
- service_path = File.join(service_path, file_name)
109
- end
110
- service_path
111
- end
112
-
113
91
  end
@@ -8,11 +8,7 @@ module Lurker
8
8
 
9
9
  included do
10
10
  # _describe = self # RSpec::ExampleGroups::... # class
11
- actions = [:get, :post, :put, :delete]
12
- if defined?(ActionDispatch::Request::HTTP_METHODS) && ActionDispatch::Request::HTTP_METHODS.include?('PATCH')
13
- actions << :patch
14
- end
15
-
11
+ actions = [:get, :post, :put, :delete, :patch]
16
12
  actions.each do |verb|
17
13
  send(:define_method, "#{verb}_with_lurker") do |*params|
18
14
  @__action, @__request_params, @__env = params
@@ -58,7 +54,16 @@ module Lurker
58
54
  verify(verb, endpoint_path)
59
55
  end
60
56
 
61
- send :alias_method_chain, verb, :lurker
57
+ begin
58
+ send :alias_method_chain, verb, :lurker
59
+ rescue NameError
60
+ if verb == :patch
61
+ alias_method :patch_without_lurker, :put_without_lurker
62
+ alias_method :patch, :patch_with_lurker
63
+ else
64
+ raise
65
+ end
66
+ end
62
67
  end
63
68
 
64
69
  around do |example|