lib/kramdown/service.rb in kramdown-service-0.3.0 vs lib/kramdown/service.rb in kramdown-service-1.0.0

- old
+ new

@@ -23,35 +23,35 @@ require 'kramdown/service/version' # let version always go first module Kramdown - + class Service < Sinatra::Base PUBLIC_FOLDER = "#{KramdownService.root}/lib/kramdown/service/public" VIEWS_FOLDER = "#{KramdownService.root}/lib/kramdown/service/views" puts "[boot] kramdown-service - setting public folder to: #{PUBLIC_FOLDER}" puts "[boot] kramdown-service - setting views folder to: #{VIEWS_FOLDER}" - set :public_folder, PUBLIC_FOLDER # set up the static dir (with images/js/css inside) + set :public_folder, PUBLIC_FOLDER # set up the static dir (with images/js/css inside) set :views, VIEWS_FOLDER # set up the views dir set :static, true # set up static file routing ############################################## # Controllers / Routing / Request Handlers - get %r{/(service|services|srv|s)$} do + get %r{/(service|services|srv|s)} do ## just a "live" docu page erb :service end - get %r{/(editor|edit|ed|e)$} do + get %r{/(editor|edit|ed|e)} do # note: allow optional params e.g. text and opts ## note: for now only html supported on get form/url params text = params.delete('text') || welcome_markdown to = params.delete('to') || 'html' ## optional - default to html opts = params_to_opts( params ) @@ -74,47 +74,47 @@ erb :index end # return hypertext (html) ## allow /markdown or /m - get %r{/(markdown|m)$} do + get %r{/(markdown|m)} do text = params.delete('text') || '' ## if no text param supplied, use empty/blank string to = params.delete('to') || 'html' ## optional - default to html opts = params_to_opts( params ) - + if ['latex','l','tex'].include?( to.downcase ) content_type 'text/latex' ### todo: check if latex content_type exists? text_to_latex( text, opts ) else ## assume html (default) content_type 'text/html' text_to_html( text, opts ) end - + end # return babelmark2/dingus-style json # return html wrapped in json (follows babelmark2 dingus service api) # note: defaults (uses) GFM - github-flavored markdown mode/input # note: only supports html for now (e.g. does NOT support to=html|latex option etc.) get '/babelmark' do text = params.delete('text') || '' ## if no text param supplied, use empty/blank string - + data = { name: 'kramdown', html: Kramdown::Document.new( text, input: 'GFM' ).to_html, version: Kramdown::VERSION } - + json_or_jsonp( data.to_json ) end - get %r{/(options|opts|o)$} do ## for debugging/testing "dump" options + get %r{/(options|opts|o)} do ## for debugging/testing "dump" options content_type 'text/plain' - + opts = preprocess_opts( params_to_opts( params )) doc = Kramdown::Document.new( '', opts ) doc.options.inspect end @@ -133,41 +133,41 @@ text end def params_to_opts( params ) ## convert (web form) params to kramdown (ruby) opts - + puts "params : #{params.class.name}:" pp params - + opts = {} - + ## map true/false strings to boolean params.each do |k,v| puts " k: >#{k}< : #{k.class.name}, v: >#{v}< : #{v.class.name}" - + ## skip "built-in" sinatra "internal" params ## - todo - use splice and whitelist instead - why? why not? next if ['splat', 'captures'].include?( k ) - - if v.is_a?( String ) && ['t', 'true'].include?( v.downcase ) + + if v.is_a?( String ) && ['t', 'true'].include?( v.downcase ) opts[ k ] = true elsif v.is_a?( String ) && ['f', 'false'].include?( v.downcase ) opts[ k ] = false else opts[ k ] = v end - end - + end + opts end def preprocess_opts( opts ) ### special case for input opt ## always default to gfm (github-flavored markdown) for now - + input = opts.delete( 'input' ) || 'GFM' if ['classic', 'std', 'standard', 'kramdown' ].include?( input.downcase ) ## skip; "pseudo" input options map to no (zero) standard/classic input elsif ['gfm'].include?( input.downcase ) @@ -175,11 +175,11 @@ opts[ 'input' ] = 'GFM' ## in gfm mode (auto-)add hard_wrap = false unless set opts['hard_wrap'] = false if opts['hard_wrap'].nil? else opts[ 'input' ] = input - end + end puts "opts (preprocessed/effective):" pp opts opts @@ -217,17 +217,16 @@ response = "#{callback}(#{json})" else content_type :json response = json end - + response end end # class Service end # module Kramdown # say hello puts KramdownService.banner -