From 43480752fa311a76b0377902f13f4cd479d2c97d Mon Sep 17 00:00:00 2001 From: carlad Date: Thu, 7 Jan 2016 12:34:10 +0100 Subject: [PATCH 1/9] intial work on adding /lint endpoint --- lib/travis/api/v3/permissions/lint.rb | 9 +++++++++ lib/travis/api/v3/queries/lint.rb | 13 +++++++++++++ lib/travis/api/v3/routes.rb | 6 ++++++ lib/travis/api/v3/services.rb | 1 + lib/travis/api/v3/services/lint/lint.rb | 7 +++++++ 5 files changed, 36 insertions(+) create mode 100644 lib/travis/api/v3/permissions/lint.rb create mode 100644 lib/travis/api/v3/queries/lint.rb create mode 100644 lib/travis/api/v3/services/lint/lint.rb diff --git a/lib/travis/api/v3/permissions/lint.rb b/lib/travis/api/v3/permissions/lint.rb new file mode 100644 index 00000000..7ae54412 --- /dev/null +++ b/lib/travis/api/v3/permissions/lint.rb @@ -0,0 +1,9 @@ +require 'travis/api/v3/permissions/generic' + +module Travis::API::V3 + class Permissions::Lint < Permissions::Generic + def lint? + write? + end + end +end diff --git a/lib/travis/api/v3/queries/lint.rb b/lib/travis/api/v3/queries/lint.rb new file mode 100644 index 00000000..66f6370b --- /dev/null +++ b/lib/travis/api/v3/queries/lint.rb @@ -0,0 +1,13 @@ +require 'travis/yaml' + +module Travis::API::V3 + class Queries::Lint < Query + def lint + request.body.rewind + content = params[:content] || request.body.read + parsed = Travis::Yaml.parse(content) + warnings = parsed.nested_warnings.map { |k, m| { key: k, message: m } } + { lint: { warnings: warnings } }.to_json + end + end +end \ No newline at end of file diff --git a/lib/travis/api/v3/routes.rb b/lib/travis/api/v3/routes.rb index 4243edb4..da60103d 100644 --- a/lib/travis/api/v3/routes.rb +++ b/lib/travis/api/v3/routes.rb @@ -36,6 +36,12 @@ module Travis::API::V3 post :restart, '/restart' end + resource :lint do + route '/lint' + post :lint + put :lint + end + resource :organization do capture id: :digit route '/org/{organization.id}' diff --git a/lib/travis/api/v3/services.rb b/lib/travis/api/v3/services.rb index ffb67158..985e9d4e 100644 --- a/lib/travis/api/v3/services.rb +++ b/lib/travis/api/v3/services.rb @@ -11,6 +11,7 @@ module Travis::API::V3 Builds = Module.new { extend Services } Job = Module.new { extend Services } Jobs = Module.new { extend Services } + Lint = Module.new { extend Services } Organization = Module.new { extend Services } Organizations = Module.new { extend Services } Owner = Module.new { extend Services } diff --git a/lib/travis/api/v3/services/lint/lint.rb b/lib/travis/api/v3/services/lint/lint.rb new file mode 100644 index 00000000..a4d5dc63 --- /dev/null +++ b/lib/travis/api/v3/services/lint/lint.rb @@ -0,0 +1,7 @@ +module Travis::API::V3 + class Services::Lint::Lint < Service + def run! + lint + end + end +end From 01a86c1dd5a38a7d5d97c836240a480000ccd682 Mon Sep 17 00:00:00 2001 From: carlad Date: Thu, 7 Jan 2016 12:39:54 +0100 Subject: [PATCH 2/9] v3 remove put request type --- lib/travis/api/v3/routes.rb | 1 - 1 file changed, 1 deletion(-) diff --git a/lib/travis/api/v3/routes.rb b/lib/travis/api/v3/routes.rb index da60103d..6d2eaa1b 100644 --- a/lib/travis/api/v3/routes.rb +++ b/lib/travis/api/v3/routes.rb @@ -39,7 +39,6 @@ module Travis::API::V3 resource :lint do route '/lint' post :lint - put :lint end resource :organization do From 089deeb217960901b860b97ed0042f2a42396b6a Mon Sep 17 00:00:00 2001 From: carlad Date: Thu, 7 Jan 2016 13:02:54 +0100 Subject: [PATCH 3/9] add renderer for lint --- lib/travis/api/v3/queries/lint.rb | 3 ++- lib/travis/api/v3/renderer/lint.rb | 9 +++++++++ 2 files changed, 11 insertions(+), 1 deletion(-) create mode 100644 lib/travis/api/v3/renderer/lint.rb diff --git a/lib/travis/api/v3/queries/lint.rb b/lib/travis/api/v3/queries/lint.rb index 66f6370b..7a0234e0 100644 --- a/lib/travis/api/v3/queries/lint.rb +++ b/lib/travis/api/v3/queries/lint.rb @@ -7,7 +7,8 @@ module Travis::API::V3 content = params[:content] || request.body.read parsed = Travis::Yaml.parse(content) warnings = parsed.nested_warnings.map { |k, m| { key: k, message: m } } - { lint: { warnings: warnings } }.to_json + payload = { lint: { warnings: warnings } }.to_json + payload end end end \ No newline at end of file diff --git a/lib/travis/api/v3/renderer/lint.rb b/lib/travis/api/v3/renderer/lint.rb new file mode 100644 index 00000000..bf36b59f --- /dev/null +++ b/lib/travis/api/v3/renderer/lint.rb @@ -0,0 +1,9 @@ +module Travis::API::V3 + module Renderer::Lint + extend self + + def render(payload) + { Renderer.render_value(payload) } + end + end +end From cf20650d39e7e10380a555a49345c52c821f09e6 Mon Sep 17 00:00:00 2001 From: carlad Date: Thu, 7 Jan 2016 13:06:47 +0100 Subject: [PATCH 4/9] fix syntax --- lib/travis/api/v3/renderer/lint.rb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/travis/api/v3/renderer/lint.rb b/lib/travis/api/v3/renderer/lint.rb index bf36b59f..0698aa7f 100644 --- a/lib/travis/api/v3/renderer/lint.rb +++ b/lib/travis/api/v3/renderer/lint.rb @@ -3,7 +3,7 @@ module Travis::API::V3 extend self def render(payload) - { Renderer.render_value(payload) } + Renderer.render_value(payload) end end end From 2d00e1696270a641970cc673cc3646258199ef09 Mon Sep 17 00:00:00 2001 From: carlad Date: Mon, 11 Jan 2016 14:43:23 +0100 Subject: [PATCH 5/9] remove query and permission --- lib/travis/api/v3/permissions/lint.rb | 9 --------- lib/travis/api/v3/queries/lint.rb | 14 -------------- lib/travis/api/v3/services/lint/lint.rb | 7 ++++++- 3 files changed, 6 insertions(+), 24 deletions(-) delete mode 100644 lib/travis/api/v3/permissions/lint.rb delete mode 100644 lib/travis/api/v3/queries/lint.rb diff --git a/lib/travis/api/v3/permissions/lint.rb b/lib/travis/api/v3/permissions/lint.rb deleted file mode 100644 index 7ae54412..00000000 --- a/lib/travis/api/v3/permissions/lint.rb +++ /dev/null @@ -1,9 +0,0 @@ -require 'travis/api/v3/permissions/generic' - -module Travis::API::V3 - class Permissions::Lint < Permissions::Generic - def lint? - write? - end - end -end diff --git a/lib/travis/api/v3/queries/lint.rb b/lib/travis/api/v3/queries/lint.rb deleted file mode 100644 index 7a0234e0..00000000 --- a/lib/travis/api/v3/queries/lint.rb +++ /dev/null @@ -1,14 +0,0 @@ -require 'travis/yaml' - -module Travis::API::V3 - class Queries::Lint < Query - def lint - request.body.rewind - content = params[:content] || request.body.read - parsed = Travis::Yaml.parse(content) - warnings = parsed.nested_warnings.map { |k, m| { key: k, message: m } } - payload = { lint: { warnings: warnings } }.to_json - payload - end - end -end \ No newline at end of file diff --git a/lib/travis/api/v3/services/lint/lint.rb b/lib/travis/api/v3/services/lint/lint.rb index a4d5dc63..0365576b 100644 --- a/lib/travis/api/v3/services/lint/lint.rb +++ b/lib/travis/api/v3/services/lint/lint.rb @@ -1,7 +1,12 @@ module Travis::API::V3 class Services::Lint::Lint < Service def run! - lint + request.body.rewind + content = params[:content] || request.body.read + parsed = Travis::Yaml.parse(content) + warnings = parsed.nested_warnings.map { |k, m| { key: k, message: m } } + payload = { lint: { warnings: warnings } }.to_json + payload end end end From 0632c3d08ffa338c6092316d1c8bf8ecd1fb5dbb Mon Sep 17 00:00:00 2001 From: carlad Date: Mon, 11 Jan 2016 15:03:06 +0100 Subject: [PATCH 6/9] change run! to run --- lib/travis/api/v3/services/lint/lint.rb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/travis/api/v3/services/lint/lint.rb b/lib/travis/api/v3/services/lint/lint.rb index 0365576b..58badfe3 100644 --- a/lib/travis/api/v3/services/lint/lint.rb +++ b/lib/travis/api/v3/services/lint/lint.rb @@ -1,6 +1,6 @@ module Travis::API::V3 class Services::Lint::Lint < Service - def run! + def run request.body.rewind content = params[:content] || request.body.read parsed = Travis::Yaml.parse(content) From b572a1a50e5f10f7b46ece9815bcb51431033190 Mon Sep 17 00:00:00 2001 From: carlad Date: Wed, 20 Jan 2016 11:31:05 +0100 Subject: [PATCH 7/9] updates --- lib/travis/api/v3/renderer/lint.rb | 3 ++- lib/travis/api/v3/services/lint/lint.rb | 14 +++++++------- 2 files changed, 9 insertions(+), 8 deletions(-) diff --git a/lib/travis/api/v3/renderer/lint.rb b/lib/travis/api/v3/renderer/lint.rb index 0698aa7f..2fb59bb9 100644 --- a/lib/travis/api/v3/renderer/lint.rb +++ b/lib/travis/api/v3/renderer/lint.rb @@ -3,7 +3,8 @@ module Travis::API::V3 extend self def render(payload) - Renderer.render_value(payload) + # Renderer.render_value(payload) + puts payload end end end diff --git a/lib/travis/api/v3/services/lint/lint.rb b/lib/travis/api/v3/services/lint/lint.rb index 58badfe3..62dd43fe 100644 --- a/lib/travis/api/v3/services/lint/lint.rb +++ b/lib/travis/api/v3/services/lint/lint.rb @@ -1,12 +1,12 @@ module Travis::API::V3 class Services::Lint::Lint < Service - def run - request.body.rewind - content = params[:content] || request.body.read - parsed = Travis::Yaml.parse(content) - warnings = parsed.nested_warnings.map { |k, m| { key: k, message: m } } - payload = { lint: { warnings: warnings } }.to_json - payload + def run! + # request.body.rewind + # content = params[:content] || request.body.read + # parsed = Travis::Yaml.parse(content) + # warnings = parsed.nested_warnings.map { |k, m| { key: k, message: m } } + # payload = { lint: { warnings: warnings } }.to_json + end end end From f940bffe3f1f5e16255128d56ee2192861708cdf Mon Sep 17 00:00:00 2001 From: carlad Date: Fri, 18 Mar 2016 16:43:18 +0100 Subject: [PATCH 8/9] more work on lint endpoint --- lib/travis/api/v3/renderer/lint.rb | 17 +++++++++-- lib/travis/api/v3/router.rb | 2 +- lib/travis/api/v3/service.rb | 5 ++-- lib/travis/api/v3/services/lint/lint.rb | 12 ++++---- spec/v3/services/lint/lint_spec.rb | 40 +++++++++++++++++++++++++ 5 files changed, 64 insertions(+), 12 deletions(-) create mode 100644 spec/v3/services/lint/lint_spec.rb diff --git a/lib/travis/api/v3/renderer/lint.rb b/lib/travis/api/v3/renderer/lint.rb index 2fb59bb9..7c782a2a 100644 --- a/lib/travis/api/v3/renderer/lint.rb +++ b/lib/travis/api/v3/renderer/lint.rb @@ -1,10 +1,21 @@ module Travis::API::V3 module Renderer::Lint + AVAILABLE_ATTRIBUTES = [ :warnings ] extend self - def render(payload) - # Renderer.render_value(payload) - puts payload + def available_attributes + AVAILABLE_ATTRIBUTES + end + + def render(lint, **) + { + :@type => 'lint'.freeze, + :warnings => warnings_for(lint) + } + end + + def warnings_for(lint) + lint.nested_warnings.map { |k, m| { key: k, message: m } } end end end diff --git a/lib/travis/api/v3/router.rb b/lib/travis/api/v3/router.rb index 28085e81..91c5fd4a 100644 --- a/lib/travis/api/v3/router.rb +++ b/lib/travis/api/v3/router.rb @@ -23,7 +23,7 @@ module Travis::API::V3 metrics.name_after(factory) filtered = factory.filter_params(env_params) - service = factory.new(access_control, filtered.merge(params)) + service = factory.new(access_control, filtered.merge(params), env['rack.input'.freeze]) metrics.tick(:prepare) result = service.run diff --git a/lib/travis/api/v3/service.rb b/lib/travis/api/v3/service.rb index f627b74c..fa63ecf1 100644 --- a/lib/travis/api/v3/service.rb +++ b/lib/travis/api/v3/service.rb @@ -42,13 +42,14 @@ module Travis::API::V3 Queries[result_type] end - attr_accessor :access_control, :params + attr_accessor :access_control, :params, :request_body - def initialize(access_control, params) + def initialize(access_control, params, request_body) @access_control = access_control @params = params @queries = {} @github = {} + @request_body = request_body end def query(type = result_type) diff --git a/lib/travis/api/v3/services/lint/lint.rb b/lib/travis/api/v3/services/lint/lint.rb index 62dd43fe..e3e5cf2f 100644 --- a/lib/travis/api/v3/services/lint/lint.rb +++ b/lib/travis/api/v3/services/lint/lint.rb @@ -1,12 +1,12 @@ +require 'travis/yaml' + module Travis::API::V3 class Services::Lint::Lint < Service + params "content" def run! - # request.body.rewind - # content = params[:content] || request.body.read - # parsed = Travis::Yaml.parse(content) - # warnings = parsed.nested_warnings.map { |k, m| { key: k, message: m } } - # payload = { lint: { warnings: warnings } }.to_json - + request_body.rewind + content = params[:content] || request_body.read + parsed = Travis::Yaml.parse(content) end end end diff --git a/spec/v3/services/lint/lint_spec.rb b/spec/v3/services/lint/lint_spec.rb new file mode 100644 index 00000000..e111f33a --- /dev/null +++ b/spec/v3/services/lint/lint_spec.rb @@ -0,0 +1,40 @@ +require 'spec_helper' + +describe Travis::API::V3::Services::Lint::Lint do + let(:content) { "foo: bar" } + let(:parsed_body) { JSON.load(last_response.body) } + + describe "accepts content in parameter" do + before { post("v3/lint", content: content ) } + example { expect(last_response).to be_ok } + example { expect(parsed_body).to be == { + "@warnings" => [{ + "@type" => "warning", + "message" => "query parameter foo: bar not whitelisted, ignored", + "warning_type" => "ignored_parameter", "parameter"=>"foo: bar"}], + "@type" => "lint", + "warnings" => [{ + "key" => [], + "message" => "unexpected key \"foo\", dropping"}, { + "key" => [], + "message" => "missing key \"language\", defaulting to \"ruby\""}]} + } + end + + describe "accepts content as body" do + before { post("/v3/lint", content) } + example { expect(last_response).to be_ok } + example { expect(parsed_body).to be == { + "@warnings" => [{ + "@type" => "warning", + "message" => "query parameter foo: bar not whitelisted, ignored", + "warning_type" => "ignored_parameter", "parameter"=>"foo: bar"}], + "@type" => "lint", + "warnings" => [{ + "key" => [], + "message" => "unexpected key \"foo\", dropping"}, { + "key" => [], + "message" => "missing key \"language\", defaulting to \"ruby\""}]} + } + end +end From 6b145e6f0673133aba63970be97b2e4fd39522e7 Mon Sep 17 00:00:00 2001 From: carlad Date: Mon, 21 Mar 2016 15:39:14 +0100 Subject: [PATCH 9/9] update lint service, update spec --- lib/travis/api/v3/services/lint/lint.rb | 6 +++--- spec/v3/services/lint/lint_spec.rb | 12 +++--------- 2 files changed, 6 insertions(+), 12 deletions(-) diff --git a/lib/travis/api/v3/services/lint/lint.rb b/lib/travis/api/v3/services/lint/lint.rb index e3e5cf2f..3ee9f665 100644 --- a/lib/travis/api/v3/services/lint/lint.rb +++ b/lib/travis/api/v3/services/lint/lint.rb @@ -2,11 +2,11 @@ require 'travis/yaml' module Travis::API::V3 class Services::Lint::Lint < Service - params "content" + params 'content' def run! request_body.rewind - content = params[:content] || request_body.read - parsed = Travis::Yaml.parse(content) + content = params['content'.freeze] || request_body.read + Travis::Yaml.parse(content) end end end diff --git a/spec/v3/services/lint/lint_spec.rb b/spec/v3/services/lint/lint_spec.rb index e111f33a..affa8f14 100644 --- a/spec/v3/services/lint/lint_spec.rb +++ b/spec/v3/services/lint/lint_spec.rb @@ -3,15 +3,13 @@ require 'spec_helper' describe Travis::API::V3::Services::Lint::Lint do let(:content) { "foo: bar" } let(:parsed_body) { JSON.load(last_response.body) } + let(:headers) {{ 'CONTENT_TYPE' => 'text/yaml'}} + describe "accepts content in parameter" do before { post("v3/lint", content: content ) } example { expect(last_response).to be_ok } example { expect(parsed_body).to be == { - "@warnings" => [{ - "@type" => "warning", - "message" => "query parameter foo: bar not whitelisted, ignored", - "warning_type" => "ignored_parameter", "parameter"=>"foo: bar"}], "@type" => "lint", "warnings" => [{ "key" => [], @@ -22,13 +20,9 @@ describe Travis::API::V3::Services::Lint::Lint do end describe "accepts content as body" do - before { post("/v3/lint", content) } + before { post("/v3/lint", content, headers) } example { expect(last_response).to be_ok } example { expect(parsed_body).to be == { - "@warnings" => [{ - "@type" => "warning", - "message" => "query parameter foo: bar not whitelisted, ignored", - "warning_type" => "ignored_parameter", "parameter"=>"foo: bar"}], "@type" => "lint", "warnings" => [{ "key" => [],