From 9af8eab0ca1a2690cf644bc45ed47f72a805e10f Mon Sep 17 00:00:00 2001 From: Eric Oestrich Date: Tue, 11 Sep 2012 21:16:19 -0400 Subject: [PATCH 1/5] Add starter models for Example, Interaction, and Paramter --- lib/raddocs.rb | 4 ++++ lib/raddocs/app.rb | 2 +- lib/raddocs/example.rb | 13 +++++++++++ lib/raddocs/interaction.rb | 7 ++++++ lib/raddocs/model.rb | 14 +++++++++++ lib/raddocs/parameter.rb | 5 ++++ lib/views/example.haml | 48 +++++++++++++++++++------------------- 7 files changed, 68 insertions(+), 25 deletions(-) create mode 100644 lib/raddocs/example.rb create mode 100644 lib/raddocs/interaction.rb create mode 100644 lib/raddocs/model.rb create mode 100644 lib/raddocs/parameter.rb diff --git a/lib/raddocs.rb b/lib/raddocs.rb index 9e01c5f..a0f35de 100644 --- a/lib/raddocs.rb +++ b/lib/raddocs.rb @@ -1,6 +1,10 @@ require 'sinatra' require 'json' require 'raddocs/configuration' +require 'raddocs/model' +require 'raddocs/parameter' +require 'raddocs/interaction' +require 'raddocs/example' require 'raddocs/app' require 'raddocs/middleware' diff --git a/lib/raddocs/app.rb b/lib/raddocs/app.rb index 26bef61..b0b8fc7 100644 --- a/lib/raddocs/app.rb +++ b/lib/raddocs/app.rb @@ -17,7 +17,7 @@ class App < Sinatra::Base file_content = File.read(file) - example = JSON.parse(file_content) + example = Example.load(file_content) haml :example, :locals => { :example => example } end diff --git a/lib/raddocs/example.rb b/lib/raddocs/example.rb new file mode 100644 index 0000000..021b11a --- /dev/null +++ b/lib/raddocs/example.rb @@ -0,0 +1,13 @@ +module Raddocs + class Example < Model + attr_reader :resource, :description, :explanation, :parameters, :requests + + def parameters + @parameters.map { |param| Parameter.new(param) } + end + + def interactions + @requests.map { |interaction| Interaction.new(interaction) } + end + end +end diff --git a/lib/raddocs/interaction.rb b/lib/raddocs/interaction.rb new file mode 100644 index 0000000..d165a3f --- /dev/null +++ b/lib/raddocs/interaction.rb @@ -0,0 +1,7 @@ +module Raddocs + class Interaction < Model + attr_reader :request_headers, :request_method, :request_path, :request_query_parameters, + :request_body, :request_content_type, :curl, :response_status, :response_headers, + :response_body, :response_content_type + end +end diff --git a/lib/raddocs/model.rb b/lib/raddocs/model.rb new file mode 100644 index 0000000..e575233 --- /dev/null +++ b/lib/raddocs/model.rb @@ -0,0 +1,14 @@ +module Raddocs + class Model + def self.load(json_string) + content = JSON.parse(json_string) + new(content) + end + + def initialize(attrs) + attrs.each do |key, value| + instance_variable_set(:"@#{key}", value) if respond_to?(key) + end + end + end +end diff --git a/lib/raddocs/parameter.rb b/lib/raddocs/parameter.rb new file mode 100644 index 0000000..f6c11fd --- /dev/null +++ b/lib/raddocs/parameter.rb @@ -0,0 +1,5 @@ +module Raddocs + class Parameter < Model + attr_reader :name, :description + end +end diff --git a/lib/views/example.haml b/lib/views/example.haml index aeb2e1d..52b41f4 100644 --- a/lib/views/example.haml +++ b/lib/views/example.haml @@ -24,15 +24,15 @@ }); }); -%h1== #{example["resource"]} API +%h1== #{example.resource} API .article - %h2= example["description"] + %h2= example.description - - if example["explanation"] + - if example.explanation %p.explanation - = example["explanation"] + = example.explanation - - if example["parameters"].count > 0 + - if example.parameters.count > 0 %h3 Parameters %table.parameters %thead @@ -40,14 +40,14 @@ %th Name %th Description %tbody - - example["parameters"].each do |param| + - example.parameters.each do |param| %tr.parameter %td - %span.name= param["name"] + %span.name= param.name %td - %span.description= param["description"] + %span.description= param.description - - example["requests"].each_with_index do |request, index| + - example.interactions.each_with_index do |interaction, index| .request{ :id => "request-#{index}" } %h3 Request @@ -56,7 +56,7 @@ %pre.headers :ruby # There are unwanted indents if this was a simple each and output in haml - headers = request["request_headers"].map do |header, value| + headers = interaction.request_headers.map do |header, value| "#{header}: #{value}" end :preserve @@ -64,28 +64,28 @@ %section.route %h4 Route - %pre.route.highlight== #{request["request_method"]} #{request["request_path"]} + %pre.route.highlight== #{interaction.request_method} #{interaction.request_path} - - if !request["request_query_parameters"].empty? + - if !interaction.request_query_parameters.empty? %section.query-parameters %h4 Query Parameters %pre.query-parameters.highlight - = request["request_query_parameters"].map { |k,v| "#{k}=#{v}" }.join("\n") + = interaction.request_query_parameters.map { |k,v| "#{k}=#{v}" }.join("\n") - - if request["request_body"] + - if interaction.request_body %section.body %h4 Body - .content{ "data-content-type" => request["request_content_type"] } + .content{ "data-content-type" => interaction.request_content_type } %textarea :preserve - #{request["request_body"]} + #{interaction.request_body} - - if request["curl"] + - if interaction.curl %section.curl %h4 cURL - %pre= request["curl"] + %pre= interaction.curl - - if request["response_status"] + - if interaction.response_status .response %h3 Response @@ -94,7 +94,7 @@ %pre.headers :ruby # There are unwanted indents if this was a simple each and output in haml - headers = request["response_headers"].map do |header, value| + headers = interaction.response_headers.map do |header, value| "#{header}: #{value}" end :preserve @@ -102,12 +102,12 @@ %section.status %h4 Status - %pre.status= request["response_status"] + %pre.status= interaction.response_status - - if request["response_body"] + - if interaction.response_body %section.body %h4 Body - .content{ "data-content-type" => request["response_content_type"] } + .content{ "data-content-type" => interaction.response_content_type } %textarea :preserve - #{request["response_body"]} + #{interaction.response_body} From db02e4e372d14a869fb99e715f3091d39e577d24 Mon Sep 17 00:00:00 2001 From: Eric Oestrich Date: Tue, 11 Sep 2012 21:28:55 -0400 Subject: [PATCH 2/5] Add starter models for index page --- lib/raddocs.rb | 2 ++ lib/raddocs/app.rb | 3 ++- lib/raddocs/example.rb | 2 +- lib/raddocs/index.rb | 9 +++++++++ lib/raddocs/resource.rb | 9 +++++++++ lib/views/index.haml | 8 ++++---- 6 files changed, 27 insertions(+), 6 deletions(-) create mode 100644 lib/raddocs/index.rb create mode 100644 lib/raddocs/resource.rb diff --git a/lib/raddocs.rb b/lib/raddocs.rb index a0f35de..7f0827c 100644 --- a/lib/raddocs.rb +++ b/lib/raddocs.rb @@ -5,6 +5,8 @@ require 'raddocs/parameter' require 'raddocs/interaction' require 'raddocs/example' +require 'raddocs/resource' +require 'raddocs/index' require 'raddocs/app' require 'raddocs/middleware' diff --git a/lib/raddocs/app.rb b/lib/raddocs/app.rb index b0b8fc7..265e219 100644 --- a/lib/raddocs/app.rb +++ b/lib/raddocs/app.rb @@ -4,7 +4,8 @@ class App < Sinatra::Base set :root, File.join(File.dirname(__FILE__), "..") get "/" do - index = JSON.parse(File.read("#{docs_dir}/index.json")) + content = File.read("#{docs_dir}/index.json") + index = Index.load(content) haml :index, :locals => { :index => index } end diff --git a/lib/raddocs/example.rb b/lib/raddocs/example.rb index 021b11a..80375e6 100644 --- a/lib/raddocs/example.rb +++ b/lib/raddocs/example.rb @@ -1,6 +1,6 @@ module Raddocs class Example < Model - attr_reader :resource, :description, :explanation, :parameters, :requests + attr_reader :resource, :description, :explanation, :parameters, :requests, :link def parameters @parameters.map { |param| Parameter.new(param) } diff --git a/lib/raddocs/index.rb b/lib/raddocs/index.rb new file mode 100644 index 0000000..862d460 --- /dev/null +++ b/lib/raddocs/index.rb @@ -0,0 +1,9 @@ +module Raddocs + class Index < Model + attr_reader :resources + + def resources + @resources.map { |resource| Resource.new(resource) } + end + end +end diff --git a/lib/raddocs/resource.rb b/lib/raddocs/resource.rb new file mode 100644 index 0000000..bcd1489 --- /dev/null +++ b/lib/raddocs/resource.rb @@ -0,0 +1,9 @@ +module Raddocs + class Resource < Model + attr_reader :name, :examples + + def examples + @examples.map { |example| Example.new(example) } + end + end +end diff --git a/lib/views/index.haml b/lib/views/index.haml index 8be0644..8b8e092 100644 --- a/lib/views/index.haml +++ b/lib/views/index.haml @@ -1,9 +1,9 @@ %h1= api_name -- index["resources"].each do |resource| +- index.resources.each do |resource| .resource - %h2= resource["name"] + %h2= resource.name %ul.examples - - resource["examples"].each do |example| + - resource.examples.each do |example| %li.example - = link_to example["description"], "/#{example["link"].gsub(".json", "")}" + = link_to example.description, "/#{example.link.gsub(".json", "")}" From 35c4c2b3ed8db6a82e024c208698eee1edbfd5f7 Mon Sep 17 00:00:00 2001 From: Eric Oestrich Date: Tue, 11 Sep 2012 21:48:08 -0400 Subject: [PATCH 3/5] Use JSON.load instead of JSON.parse --- lib/raddocs/model.rb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/raddocs/model.rb b/lib/raddocs/model.rb index e575233..b88a35e 100644 --- a/lib/raddocs/model.rb +++ b/lib/raddocs/model.rb @@ -1,7 +1,7 @@ module Raddocs class Model def self.load(json_string) - content = JSON.parse(json_string) + content = JSON.load(json_string) new(content) end From 6049c2b45d86a785ba7151c24f9218bbe35db564 Mon Sep 17 00:00:00 2001 From: Eric Oestrich Date: Wed, 12 Sep 2012 23:14:50 -0400 Subject: [PATCH 4/5] Easy loader for raddocs models --- lib/raddocs.rb | 7 +------ lib/raddocs/models.rb | 6 ++++++ 2 files changed, 7 insertions(+), 6 deletions(-) create mode 100644 lib/raddocs/models.rb diff --git a/lib/raddocs.rb b/lib/raddocs.rb index 7f0827c..6dc4059 100644 --- a/lib/raddocs.rb +++ b/lib/raddocs.rb @@ -1,12 +1,7 @@ require 'sinatra' require 'json' require 'raddocs/configuration' -require 'raddocs/model' -require 'raddocs/parameter' -require 'raddocs/interaction' -require 'raddocs/example' -require 'raddocs/resource' -require 'raddocs/index' +require 'raddocs/models' require 'raddocs/app' require 'raddocs/middleware' diff --git a/lib/raddocs/models.rb b/lib/raddocs/models.rb new file mode 100644 index 0000000..92c54c8 --- /dev/null +++ b/lib/raddocs/models.rb @@ -0,0 +1,6 @@ +require 'raddocs/model' +require 'raddocs/parameter' +require 'raddocs/interaction' +require 'raddocs/example' +require 'raddocs/resource' +require 'raddocs/index' From 1b33b0d3520a8b3580107bf570072918dd61eecc Mon Sep 17 00:00:00 2001 From: Eric Oestrich Date: Wed, 12 Sep 2012 23:24:37 -0400 Subject: [PATCH 5/5] Use attrs.fetch to load the example object --- lib/raddocs/example.rb | 14 +++++++++++--- lib/raddocs/index_example.rb | 5 +++++ lib/raddocs/models.rb | 1 + lib/raddocs/resource.rb | 2 +- 4 files changed, 18 insertions(+), 4 deletions(-) create mode 100644 lib/raddocs/index_example.rb diff --git a/lib/raddocs/example.rb b/lib/raddocs/example.rb index 80375e6..1e8cf0d 100644 --- a/lib/raddocs/example.rb +++ b/lib/raddocs/example.rb @@ -1,13 +1,21 @@ module Raddocs class Example < Model - attr_reader :resource, :description, :explanation, :parameters, :requests, :link + attr_reader :resource, :description, :explanation + + def initialize(attrs) + @resource = attrs.fetch("resource") + @description = attrs.fetch("description") + @explanation = attrs.fetch("explanation", "") + @parameters = attrs.fetch("parameters", []) + @requests = attrs.fetch("requests", []) + end def parameters - @parameters.map { |param| Parameter.new(param) } + @params ||= @parameters.map { |param| Parameter.new(param) } end def interactions - @requests.map { |interaction| Interaction.new(interaction) } + @interactions ||= @requests.map { |interaction| Interaction.new(interaction) } end end end diff --git a/lib/raddocs/index_example.rb b/lib/raddocs/index_example.rb new file mode 100644 index 0000000..f810839 --- /dev/null +++ b/lib/raddocs/index_example.rb @@ -0,0 +1,5 @@ +module Raddocs + class IndexExample < Model + attr_reader :description, :link + end +end diff --git a/lib/raddocs/models.rb b/lib/raddocs/models.rb index 92c54c8..2cddc34 100644 --- a/lib/raddocs/models.rb +++ b/lib/raddocs/models.rb @@ -2,5 +2,6 @@ require 'raddocs/parameter' require 'raddocs/interaction' require 'raddocs/example' +require 'raddocs/index_example' require 'raddocs/resource' require 'raddocs/index' diff --git a/lib/raddocs/resource.rb b/lib/raddocs/resource.rb index bcd1489..2d23c8a 100644 --- a/lib/raddocs/resource.rb +++ b/lib/raddocs/resource.rb @@ -3,7 +3,7 @@ class Resource < Model attr_reader :name, :examples def examples - @examples.map { |example| Example.new(example) } + @examples.map { |example| IndexExample.new(example) } end end end