resin 0.2.3 → 0.3.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- data/lib/resin/views/index.haml +1 -1
- data/lib/sinatra/resin.rb +93 -0
- data/lib/sinatra/resin/helpers.rb +171 -0
- metadata +22 -21
- data/lib/resin/app.rb +0 -93
data/lib/resin/views/index.haml
CHANGED
@@ -0,0 +1,93 @@
|
|
1
|
+
require 'sinatra/base'
|
2
|
+
require 'sinatra/resin/helpers'
|
3
|
+
require 'haml'
|
4
|
+
|
5
|
+
module Sinatra
|
6
|
+
module Resin
|
7
|
+
AMBER_PATH = File.expand_path('../../../amber', __FILE__)
|
8
|
+
|
9
|
+
def env
|
10
|
+
ENV['RACK_ENV']
|
11
|
+
end
|
12
|
+
module_function :env
|
13
|
+
|
14
|
+
def development?
|
15
|
+
!(env == 'production')
|
16
|
+
end
|
17
|
+
module_function :development?
|
18
|
+
|
19
|
+
def self.registered(app)
|
20
|
+
app.helpers Sinatra::Resin::Helpers
|
21
|
+
app.set :dump_errors, true
|
22
|
+
app.set :port, ENV['PORT'] || 4567
|
23
|
+
app.set :views, [File.join(Dir.pwd, 'views'), File.expand_path('../../resin/views', __FILE__)]
|
24
|
+
|
25
|
+
app.before do
|
26
|
+
# Make sure to call Sinatra::Resin::Helpers#drops to load all our drops
|
27
|
+
drops
|
28
|
+
end
|
29
|
+
|
30
|
+
app.get '/' do
|
31
|
+
haml :index
|
32
|
+
end
|
33
|
+
|
34
|
+
app.get '/:view/?' do |view|
|
35
|
+
begin
|
36
|
+
haml view.to_sym
|
37
|
+
rescue ::Errno::ENOENT
|
38
|
+
halt 404, 'Not found'
|
39
|
+
end
|
40
|
+
end
|
41
|
+
|
42
|
+
['js', 'css', 'images'].each do |path|
|
43
|
+
app.get "/#{path}/*" do |filename|
|
44
|
+
content_type_for_ext filename
|
45
|
+
data = load_resource(path, filename)
|
46
|
+
if data.nil? and path == 'js'
|
47
|
+
data = load_drop_resource(filename)
|
48
|
+
end
|
49
|
+
|
50
|
+
if data.nil?
|
51
|
+
halt 404, 'Not found'
|
52
|
+
end
|
53
|
+
|
54
|
+
data
|
55
|
+
end
|
56
|
+
end
|
57
|
+
|
58
|
+
if development?
|
59
|
+
app.set :logging, true
|
60
|
+
app.disable :protection
|
61
|
+
|
62
|
+
# Only enable the saving mechanism in test/development
|
63
|
+
app.put '*' do
|
64
|
+
unless request.body.nil?
|
65
|
+
filename = request.path.split('/')[-1]
|
66
|
+
directory = '/st/'
|
67
|
+
if filename.end_with? '.js'
|
68
|
+
directory = '/js/'
|
69
|
+
end
|
70
|
+
|
71
|
+
root_dir = Dir.pwd
|
72
|
+
|
73
|
+
if drops_filemap[filename]
|
74
|
+
drop_name = drops_filemap[filename]
|
75
|
+
root_dir = drops_map[drop_name]
|
76
|
+
end
|
77
|
+
|
78
|
+
path = File.join(root_dir, directory, filename)
|
79
|
+
puts ">> Commiting changes to #{path}"
|
80
|
+
File.open(path, 'w') do |fd|
|
81
|
+
request.body.each do |line|
|
82
|
+
fd.write(line)
|
83
|
+
end
|
84
|
+
end
|
85
|
+
end
|
86
|
+
end
|
87
|
+
end
|
88
|
+
end
|
89
|
+
end
|
90
|
+
|
91
|
+
register Resin
|
92
|
+
|
93
|
+
end
|
@@ -0,0 +1,171 @@
|
|
1
|
+
require 'json'
|
2
|
+
|
3
|
+
module Sinatra
|
4
|
+
module Resin
|
5
|
+
module Helpers
|
6
|
+
def self.append_js_file(filename, to_array)
|
7
|
+
filename = File.basename(filename)
|
8
|
+
|
9
|
+
if Sinatra::Resin.development?
|
10
|
+
unless filename.include? 'deploy'
|
11
|
+
to_array << filename
|
12
|
+
end
|
13
|
+
return
|
14
|
+
end
|
15
|
+
|
16
|
+
if (filename.include? 'deploy') && !(filename.include? '-Tests')
|
17
|
+
to_array << filename
|
18
|
+
end
|
19
|
+
end
|
20
|
+
|
21
|
+
def development?
|
22
|
+
Sinatra::Resin.development?
|
23
|
+
end
|
24
|
+
|
25
|
+
def javascript_files
|
26
|
+
files = []
|
27
|
+
|
28
|
+
# First our project's files take precedence
|
29
|
+
Dir.glob("#{Dir.pwd}/js/*.js") do |filename|
|
30
|
+
Sinatra::Resin::Helpers.append_js_file(filename, files)
|
31
|
+
end
|
32
|
+
|
33
|
+
# Then our drops get loaded
|
34
|
+
drops.each do |drop|
|
35
|
+
unless drop[:meta]
|
36
|
+
next
|
37
|
+
end
|
38
|
+
|
39
|
+
if drop[:js]
|
40
|
+
drop[:js].each do |filename|
|
41
|
+
Sinatra::Resin::Helpers.append_js_file(filename, files)
|
42
|
+
end
|
43
|
+
end
|
44
|
+
end
|
45
|
+
|
46
|
+
files
|
47
|
+
end
|
48
|
+
|
49
|
+
def find_template(views, name, engine, &block)
|
50
|
+
Array(views).each do |view|
|
51
|
+
super(view, name, engine, &block)
|
52
|
+
end
|
53
|
+
end
|
54
|
+
|
55
|
+
def embed_amber(options={})
|
56
|
+
deploy_line = ''
|
57
|
+
unless development?
|
58
|
+
deploy_line = "deploy: true,"
|
59
|
+
end
|
60
|
+
|
61
|
+
on_ready_function = options[:on_ready] || ''
|
62
|
+
|
63
|
+
return <<-END
|
64
|
+
<script type="text/javascript" src="/js/amber.js"></script>
|
65
|
+
<script type="text/javascript">
|
66
|
+
loadAmber({
|
67
|
+
#{deploy_line}
|
68
|
+
files : #{JSON.dump(javascript_files)},
|
69
|
+
prefix : 'js',
|
70
|
+
ready : function() { #{on_ready_function} }
|
71
|
+
});
|
72
|
+
</script>
|
73
|
+
END
|
74
|
+
end
|
75
|
+
|
76
|
+
def load_resource(prefix, filename)
|
77
|
+
# A file in our working directory will take precedence over the
|
78
|
+
# Amber-bundled files. This should allow custom Kernel-Objects.js files
|
79
|
+
# for example.
|
80
|
+
local_file = File.join(Dir.pwd, "#{prefix}/", filename)
|
81
|
+
amber_file = File.join(Sinatra::Resin::AMBER_PATH, "/#{prefix}/", filename)
|
82
|
+
|
83
|
+
if File.exists? local_file
|
84
|
+
File.open(local_file, 'r').read
|
85
|
+
elsif File.exists? amber_file
|
86
|
+
File.open(amber_file, 'r').read
|
87
|
+
else
|
88
|
+
nil
|
89
|
+
end
|
90
|
+
end
|
91
|
+
|
92
|
+
def load_drop_resource(filename)
|
93
|
+
drops.each do |drop|
|
94
|
+
if drop.nil? or drop.empty? or drop[:js].empty?
|
95
|
+
next
|
96
|
+
end
|
97
|
+
|
98
|
+
drop[:js].each do |drop_filepath|
|
99
|
+
drop_filename = File.basename(drop_filepath)
|
100
|
+
if filename == drop_filename
|
101
|
+
return File.open(drop_filepath).read
|
102
|
+
end
|
103
|
+
end
|
104
|
+
end
|
105
|
+
nil
|
106
|
+
end
|
107
|
+
|
108
|
+
def content_type_for_ext(filename)
|
109
|
+
if File.extname(filename) == '.js'
|
110
|
+
content_type 'application/javascript'
|
111
|
+
elsif File.extname(filename) == '.css'
|
112
|
+
content_type 'text/css'
|
113
|
+
else
|
114
|
+
content_type 'text/plain'
|
115
|
+
end
|
116
|
+
end
|
117
|
+
|
118
|
+
def load_drop_file(filepath)
|
119
|
+
YAML::load(File.open(filepath).read)
|
120
|
+
end
|
121
|
+
|
122
|
+
def self.flush_drops
|
123
|
+
@@drops = nil
|
124
|
+
@@drops_map = {}
|
125
|
+
@@drops_filemap = {}
|
126
|
+
end
|
127
|
+
|
128
|
+
def drops_map
|
129
|
+
@@drops_map
|
130
|
+
end
|
131
|
+
|
132
|
+
def drops_filemap
|
133
|
+
@@drops_filemap
|
134
|
+
end
|
135
|
+
|
136
|
+
def drops
|
137
|
+
@@drops ||= begin
|
138
|
+
@@drops_map ||= {}
|
139
|
+
@@drops_filemap ||= {}
|
140
|
+
drops_path = File.join(Dir.pwd, 'drops')
|
141
|
+
loaded = []
|
142
|
+
Dir.glob("#{drops_path}/*/drop.yml") do |filename|
|
143
|
+
drop = load_drop_file(filename)
|
144
|
+
if drop.nil? or drop.empty?
|
145
|
+
next
|
146
|
+
end
|
147
|
+
drop_dir = File.dirname(filename)
|
148
|
+
name = drop['drop']['name']
|
149
|
+
puts ">>> Loading Resin Drop: #{name}"
|
150
|
+
|
151
|
+
data = {:meta => drop['drop'],
|
152
|
+
:js => Dir[File.join(drop_dir, 'js', '*.js')],
|
153
|
+
:st => Dir[File.join(drop_dir, 'st', '*.st')]
|
154
|
+
}
|
155
|
+
loaded << data
|
156
|
+
|
157
|
+
@@drops_map[name] = drop_dir
|
158
|
+
|
159
|
+
data[:js].each do |js|
|
160
|
+
@@drops_filemap[File.basename(js)] = name
|
161
|
+
end
|
162
|
+
data[:st].each do |st|
|
163
|
+
@@drops_filemap[File.basename(st)] = name
|
164
|
+
end
|
165
|
+
end
|
166
|
+
loaded
|
167
|
+
end
|
168
|
+
end
|
169
|
+
end
|
170
|
+
end
|
171
|
+
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: resin
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.3.0
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -9,11 +9,11 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2012-
|
12
|
+
date: 2012-12-01 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: bundler
|
16
|
-
requirement: &
|
16
|
+
requirement: &5027820 !ruby/object:Gem::Requirement
|
17
17
|
none: false
|
18
18
|
requirements:
|
19
19
|
- - ! '>='
|
@@ -21,10 +21,10 @@ dependencies:
|
|
21
21
|
version: 1.0.0
|
22
22
|
type: :development
|
23
23
|
prerelease: false
|
24
|
-
version_requirements: *
|
24
|
+
version_requirements: *5027820
|
25
25
|
- !ruby/object:Gem::Dependency
|
26
26
|
name: rake
|
27
|
-
requirement: &
|
27
|
+
requirement: &5027080 !ruby/object:Gem::Requirement
|
28
28
|
none: false
|
29
29
|
requirements:
|
30
30
|
- - ! '>='
|
@@ -32,10 +32,10 @@ dependencies:
|
|
32
32
|
version: '0'
|
33
33
|
type: :development
|
34
34
|
prerelease: false
|
35
|
-
version_requirements: *
|
35
|
+
version_requirements: *5027080
|
36
36
|
- !ruby/object:Gem::Dependency
|
37
37
|
name: shotgun
|
38
|
-
requirement: &
|
38
|
+
requirement: &5026260 !ruby/object:Gem::Requirement
|
39
39
|
none: false
|
40
40
|
requirements:
|
41
41
|
- - ! '>='
|
@@ -43,10 +43,10 @@ dependencies:
|
|
43
43
|
version: '0'
|
44
44
|
type: :development
|
45
45
|
prerelease: false
|
46
|
-
version_requirements: *
|
46
|
+
version_requirements: *5026260
|
47
47
|
- !ruby/object:Gem::Dependency
|
48
48
|
name: rspec
|
49
|
-
requirement: &
|
49
|
+
requirement: &5025480 !ruby/object:Gem::Requirement
|
50
50
|
none: false
|
51
51
|
requirements:
|
52
52
|
- - ! '>='
|
@@ -54,10 +54,10 @@ dependencies:
|
|
54
54
|
version: '0'
|
55
55
|
type: :development
|
56
56
|
prerelease: false
|
57
|
-
version_requirements: *
|
57
|
+
version_requirements: *5025480
|
58
58
|
- !ruby/object:Gem::Dependency
|
59
59
|
name: rack-test
|
60
|
-
requirement: &
|
60
|
+
requirement: &5024440 !ruby/object:Gem::Requirement
|
61
61
|
none: false
|
62
62
|
requirements:
|
63
63
|
- - ! '>='
|
@@ -65,10 +65,10 @@ dependencies:
|
|
65
65
|
version: '0'
|
66
66
|
type: :development
|
67
67
|
prerelease: false
|
68
|
-
version_requirements: *
|
68
|
+
version_requirements: *5024440
|
69
69
|
- !ruby/object:Gem::Dependency
|
70
70
|
name: haml
|
71
|
-
requirement: &
|
71
|
+
requirement: &5023260 !ruby/object:Gem::Requirement
|
72
72
|
none: false
|
73
73
|
requirements:
|
74
74
|
- - ! '>='
|
@@ -76,10 +76,10 @@ dependencies:
|
|
76
76
|
version: '0'
|
77
77
|
type: :runtime
|
78
78
|
prerelease: false
|
79
|
-
version_requirements: *
|
79
|
+
version_requirements: *5023260
|
80
80
|
- !ruby/object:Gem::Dependency
|
81
81
|
name: sinatra
|
82
|
-
requirement: &
|
82
|
+
requirement: &5038320 !ruby/object:Gem::Requirement
|
83
83
|
none: false
|
84
84
|
requirements:
|
85
85
|
- - ! '>='
|
@@ -87,10 +87,10 @@ dependencies:
|
|
87
87
|
version: '0'
|
88
88
|
type: :runtime
|
89
89
|
prerelease: false
|
90
|
-
version_requirements: *
|
90
|
+
version_requirements: *5038320
|
91
91
|
- !ruby/object:Gem::Dependency
|
92
92
|
name: json
|
93
|
-
requirement: &
|
93
|
+
requirement: &5036780 !ruby/object:Gem::Requirement
|
94
94
|
none: false
|
95
95
|
requirements:
|
96
96
|
- - ! '>='
|
@@ -98,7 +98,7 @@ dependencies:
|
|
98
98
|
version: '0'
|
99
99
|
type: :runtime
|
100
100
|
prerelease: false
|
101
|
-
version_requirements: *
|
101
|
+
version_requirements: *5036780
|
102
102
|
description:
|
103
103
|
email: tyler@linux.com
|
104
104
|
executables:
|
@@ -110,8 +110,9 @@ extra_rdoc_files:
|
|
110
110
|
files:
|
111
111
|
- bin/runresin
|
112
112
|
- bin/resin-compile
|
113
|
+
- lib/sinatra/resin/helpers.rb
|
114
|
+
- lib/sinatra/resin.rb
|
113
115
|
- lib/resin/helpers.rb
|
114
|
-
- lib/resin/app.rb
|
115
116
|
- lib/resin/compiler.rb
|
116
117
|
- lib/resin.rb
|
117
118
|
- lib/resin/views/index.haml
|
@@ -279,7 +280,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
279
280
|
version: '0'
|
280
281
|
segments:
|
281
282
|
- 0
|
282
|
-
hash: -
|
283
|
+
hash: -3056217880712448120
|
283
284
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
284
285
|
none: false
|
285
286
|
requirements:
|
@@ -288,7 +289,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
288
289
|
version: '0'
|
289
290
|
segments:
|
290
291
|
- 0
|
291
|
-
hash: -
|
292
|
+
hash: -3056217880712448120
|
292
293
|
requirements: []
|
293
294
|
rubyforge_project:
|
294
295
|
rubygems_version: 1.8.10
|
data/lib/resin/app.rb
DELETED
@@ -1,93 +0,0 @@
|
|
1
|
-
require 'rubygems'
|
2
|
-
require 'sinatra/base'
|
3
|
-
require 'haml'
|
4
|
-
|
5
|
-
require File.expand_path(File.dirname(__FILE__) + '/helpers.rb')
|
6
|
-
|
7
|
-
AMBER_PATH = File.expand_path('../../../amber', __FILE__)
|
8
|
-
|
9
|
-
module Resin
|
10
|
-
def env
|
11
|
-
ENV['RACK_ENV']
|
12
|
-
end
|
13
|
-
module_function :env
|
14
|
-
|
15
|
-
def development?
|
16
|
-
!(env == 'production')
|
17
|
-
end
|
18
|
-
module_function :development?
|
19
|
-
|
20
|
-
class Server < Sinatra::Base
|
21
|
-
set :dump_errors, true
|
22
|
-
set :port, ENV['PORT'] || 4567
|
23
|
-
set :views, [File.join(Dir.pwd, 'views'), File.expand_path('../views', __FILE__)]
|
24
|
-
|
25
|
-
helpers do
|
26
|
-
include Resin::Helpers
|
27
|
-
end
|
28
|
-
|
29
|
-
before do
|
30
|
-
# Make sure drops are loaded
|
31
|
-
drops
|
32
|
-
end
|
33
|
-
|
34
|
-
get '/' do
|
35
|
-
haml :index
|
36
|
-
end
|
37
|
-
|
38
|
-
get '/:view/?' do |view|
|
39
|
-
begin
|
40
|
-
haml view.to_sym
|
41
|
-
rescue ::Errno::ENOENT
|
42
|
-
halt 404, 'Not found'
|
43
|
-
end
|
44
|
-
end
|
45
|
-
|
46
|
-
['js', 'css', 'images'].each do |path|
|
47
|
-
get "/#{path}/*" do |filename|
|
48
|
-
content_type_for_ext filename
|
49
|
-
data = load_resource(path, filename)
|
50
|
-
if data.nil? and path == 'js'
|
51
|
-
data = load_drop_resource(filename)
|
52
|
-
end
|
53
|
-
|
54
|
-
if data.nil?
|
55
|
-
halt 404, 'Not found'
|
56
|
-
end
|
57
|
-
|
58
|
-
data
|
59
|
-
end
|
60
|
-
end
|
61
|
-
|
62
|
-
if Resin.development?
|
63
|
-
set :logging, true
|
64
|
-
disable :protection
|
65
|
-
|
66
|
-
# Only enable the saving mechanism in test/development
|
67
|
-
put '*' do
|
68
|
-
unless request.body.nil?
|
69
|
-
filename = request.path.split('/')[-1]
|
70
|
-
directory = '/st/'
|
71
|
-
if filename.end_with? '.js'
|
72
|
-
directory = '/js/'
|
73
|
-
end
|
74
|
-
|
75
|
-
root_dir = Dir.pwd
|
76
|
-
|
77
|
-
if drops_filemap[filename]
|
78
|
-
drop_name = drops_filemap[filename]
|
79
|
-
root_dir = drops_map[drop_name]
|
80
|
-
end
|
81
|
-
|
82
|
-
path = File.join(root_dir, directory, filename)
|
83
|
-
puts ">> Commiting changes to #{path}"
|
84
|
-
File.open(path, 'w') do |fd|
|
85
|
-
request.body.each do |line|
|
86
|
-
fd.write(line)
|
87
|
-
end
|
88
|
-
end
|
89
|
-
end
|
90
|
-
end
|
91
|
-
end
|
92
|
-
end
|
93
|
-
end
|