/
app.rb
88 lines (68 loc) · 2.35 KB
/
app.rb
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
require 'rubygems'
require 'bundler'
Bundler.require
require 'faker'
module AssetHelpers
def asset_path(source)
"/assets/" + settings.sprockets.find_asset(source).digest_path
end
end
require "#{ File.expand_path('../', __FILE__) }/lib/sprockets/luca_template.rb"
require "#{ File.expand_path('../', __FILE__) }/lib/luca/code_browser.rb"
class App < Sinatra::Base
set :root, File.expand_path('../', __FILE__)
set :sprockets, Sprockets::Environment.new(root)
set :precompile, [ /\w+\.(?!js|css).+/, /application.(css|js)$/ ]
set :assets_prefix, 'assets'
set :assets_path, File.join(root, 'public', assets_prefix)
sprockets.register_engine '.luca', Sprockets::LucaTemplate
configure do
sprockets.append_path(File.join(root, 'assets', 'stylesheets'))
sprockets.append_path(File.join(root, 'assets', 'javascripts'))
sprockets.append_path(File.join(root, 'vendor', 'assets', 'javascripts'))
sprockets.append_path(File.join(root, 'vendor', 'assets', 'stylesheets'))
sprockets.append_path(File.join(root, 'assets', 'images'))
sprockets.append_path(File.join(root, 'vendor', 'assets', 'images'))
sprockets.context_class.instance_eval do
include AssetHelpers
end
end
helpers do
include AssetHelpers
end
get "/" do
erb :index
end
get "/jasmine" do
erb :jasmine
end
Luca::CodeBrowser.look_for_source_in( File.join(File.expand_path('../', __FILE__),'src') )
get "/source-map.js" do
source_map = {}
files = (["src/**/*.coffee","assets/javascripts/sandbox/**/*.coffee"]).map do |location|
Dir.glob("#{ App.root }/#{ location }")
end
files.flatten.each do |file|
definitions = IO.read(file).lines.to_a.grep /_\.def/
definitions.each do |definition|
component = definition.match(/_\.def\(['"](.+)['"]\)\./)
if component and component[1]
componentId = component[1].gsub(/['"].*$/,'')
if componentId
source_map[ componentId ] = {className:componentId,file:file,source:IO.read(file)}
end
end
end
end
JSON.generate source_map.values
end
get "/components" do
if params[:component]
component = params[:component]
source = Luca::CodeBrowser.get_source_for( component )
{className:component, source:source}.to_json
else
Luca::CodeBrowser.map_source
end
end
end