stasis 0.1.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.
Files changed (69) hide show
  1. data/.gitignore +10 -0
  2. data/LICENSE +18 -0
  3. data/README.md +287 -0
  4. data/Rakefile +109 -0
  5. data/bin/stasis +30 -0
  6. data/config/gemsets.yml +9 -0
  7. data/config/gemspec.yml +17 -0
  8. data/lib/stasis.rb +291 -0
  9. data/lib/stasis/dev_mode.rb +55 -0
  10. data/lib/stasis/gems.rb +154 -0
  11. data/lib/stasis/plugin.rb +76 -0
  12. data/lib/stasis/plugins/before.rb +50 -0
  13. data/lib/stasis/plugins/helpers.rb +29 -0
  14. data/lib/stasis/plugins/ignore.rb +35 -0
  15. data/lib/stasis/plugins/instead.rb +15 -0
  16. data/lib/stasis/plugins/layout.rb +51 -0
  17. data/lib/stasis/plugins/priority.rb +41 -0
  18. data/lib/stasis/plugins/render.rb +71 -0
  19. data/lib/stasis/scope.rb +54 -0
  20. data/lib/stasis/scope/action.rb +25 -0
  21. data/lib/stasis/scope/controller.rb +62 -0
  22. data/lib/stasis/server.rb +90 -0
  23. data/site/arrow.png +0 -0
  24. data/site/controller.rb +72 -0
  25. data/site/github.png +0 -0
  26. data/site/index.html.haml +24 -0
  27. data/site/jquery-1.6.2.js +8982 -0
  28. data/site/stasis.css.scss +226 -0
  29. data/site/stasis.js.coffee +42 -0
  30. data/site/stasis.png +0 -0
  31. data/spec/fixtures/gemsets.yml +9 -0
  32. data/spec/fixtures/gemspec.yml +15 -0
  33. data/spec/fixtures/project/_partial.html.haml +1 -0
  34. data/spec/fixtures/project/before_render_partial.html.haml +1 -0
  35. data/spec/fixtures/project/before_render_text.html.haml +1 -0
  36. data/spec/fixtures/project/controller.rb +83 -0
  37. data/spec/fixtures/project/index.html.haml +16 -0
  38. data/spec/fixtures/project/layout.html.haml +3 -0
  39. data/spec/fixtures/project/layout_action.html.haml +1 -0
  40. data/spec/fixtures/project/layout_action_from_subdirectory.html.haml +1 -0
  41. data/spec/fixtures/project/layout_controller.html.haml +1 -0
  42. data/spec/fixtures/project/layout_controller_from_subdirectory.html.haml +1 -0
  43. data/spec/fixtures/project/no_controller/index.html.haml +12 -0
  44. data/spec/fixtures/project/not_dynamic.html +1 -0
  45. data/spec/fixtures/project/plugin.rb +16 -0
  46. data/spec/fixtures/project/subdirectory/_partial.html.haml +1 -0
  47. data/spec/fixtures/project/subdirectory/before_render_partial.html.haml +1 -0
  48. data/spec/fixtures/project/subdirectory/before_render_text.html.haml +1 -0
  49. data/spec/fixtures/project/subdirectory/controller.rb +66 -0
  50. data/spec/fixtures/project/subdirectory/ignore.html.haml +0 -0
  51. data/spec/fixtures/project/subdirectory/index.html.haml +14 -0
  52. data/spec/fixtures/project/subdirectory/layout.html.haml +3 -0
  53. data/spec/fixtures/project/subdirectory/layout_action.html.haml +1 -0
  54. data/spec/fixtures/project/subdirectory/layout_action_from_root.html.haml +1 -0
  55. data/spec/fixtures/project/subdirectory/layout_controller.html.haml +1 -0
  56. data/spec/fixtures/project/subdirectory/layout_controller_from_root.html.haml +1 -0
  57. data/spec/fixtures/project/time.html.haml +2 -0
  58. data/spec/spec_helper.rb +28 -0
  59. data/spec/stasis/gems_spec.rb +249 -0
  60. data/spec/stasis/plugins/before_spec.rb +53 -0
  61. data/spec/stasis/plugins/helpers_spec.rb +16 -0
  62. data/spec/stasis/plugins/ignore_spec.rb +17 -0
  63. data/spec/stasis/plugins/layout_spec.rb +22 -0
  64. data/spec/stasis/plugins/priority_spec.rb +22 -0
  65. data/spec/stasis/plugins/render_spec.rb +23 -0
  66. data/spec/stasis/server_spec.rb +29 -0
  67. data/spec/stasis_spec.rb +46 -0
  68. data/stasis.gemspec +32 -0
  69. metadata +227 -0
@@ -0,0 +1,16 @@
1
+ class Plugin < Stasis::Plugin
2
+
3
+ before_all :plugin
4
+
5
+ def initialize(stasis)
6
+ @stasis = stasis
7
+ end
8
+
9
+ def plugin
10
+ @stasis.controller.before("custom_plugin.html") do
11
+ instead "pass"
12
+ end
13
+ end
14
+ end
15
+
16
+ Stasis.register(Plugin)
@@ -0,0 +1 @@
1
+ subdirectory
@@ -0,0 +1,66 @@
1
+ # Subdirectory controller
2
+ # -----------------------
3
+
4
+ # Before
5
+
6
+ before 'index.html.haml' do
7
+ @before_index_literal = :subdirectory
8
+ end
9
+
10
+ before /index\.html/ do
11
+ @before_index_regexp = :subdirectory
12
+ end
13
+
14
+ before do
15
+ @before_all = :subdirectory
16
+ end
17
+
18
+ before 'fail' do
19
+ @fail = true
20
+ end
21
+
22
+ before /fail/ do
23
+ @fail = true
24
+ end
25
+
26
+ before 'before_render_text.html.haml' do
27
+ instead render(:text => 'subdirectory')
28
+ end
29
+
30
+ before 'before_render_partial.html.haml', 'before_non_existent.html' do
31
+ instead render(:path => '_partial.html.haml')
32
+ end
33
+
34
+ # Helpers
35
+
36
+ helpers do
37
+ def helper
38
+ :subdirectory
39
+ end
40
+ end
41
+
42
+ # Ignore
43
+
44
+ ignore 'ignore.html.haml'
45
+
46
+ # Layout
47
+
48
+ layout(
49
+ 'layout_controller.html.haml' => 'layout.html.haml',
50
+ 'layout_controller_from_root.html.haml' => '/layout.html.haml'
51
+ )
52
+
53
+ before 'layout_action.html.haml' do
54
+ layout 'layout.html.haml'
55
+ end
56
+
57
+ before 'layout_action_from_root.html.haml' do
58
+ layout '/layout.html.haml'
59
+ end
60
+
61
+ # Priority
62
+
63
+ priority(
64
+ '/before_render_partial.html.haml' => 1,
65
+ 'index.html.haml' => -1
66
+ )
@@ -0,0 +1,14 @@
1
+ @before_index_literal
2
+ = @before_index_literal
3
+ @before_index_regexp
4
+ = @before_index_regexp
5
+ @before_all
6
+ = @before_all
7
+ @fail
8
+ = !@fail.nil?
9
+ helpers
10
+ = helper
11
+ render from root
12
+ = render '/_partial.html.haml'
13
+ render from subdirectory
14
+ = render '_partial.html.haml'
@@ -0,0 +1,3 @@
1
+ layout
2
+ subdirectory
3
+ = yield
@@ -0,0 +1,2 @@
1
+ time
2
+ = Time.now.to_f
@@ -0,0 +1,28 @@
1
+ require 'pp'
2
+
3
+ $root = File.expand_path('../../', __FILE__)
4
+ require "#{$root}/lib/stasis/gems"
5
+
6
+ Stasis::Gems.activate :rspec
7
+
8
+ require "#{$root}/lib/stasis"
9
+
10
+ def generate(options={})
11
+ $files = nil if options[:reload]
12
+ $fixture = "#{$root}/spec/fixtures/project"
13
+ unless $files
14
+ $stasis ||= Stasis.new($fixture)
15
+ $stasis.render(*options[:only])
16
+ generate_files
17
+ end
18
+ end
19
+
20
+ def generate_files
21
+ pub = "#{$fixture}/public"
22
+ $files = Dir["#{pub}/**/*"].inject({}) do |hash, path|
23
+ if File.file?(path)
24
+ hash[path[pub.length+1..-1]] = File.read(path)
25
+ end
26
+ hash
27
+ end
28
+ end
@@ -0,0 +1,249 @@
1
+ require 'spec_helper'
2
+
3
+ describe Stasis::Gems do
4
+
5
+ before(:each) do
6
+ @old_config = Stasis::Gems.config
7
+
8
+ Stasis::Gems.config.gemspec = "#{$root}/spec/fixtures/gemspec.yml"
9
+ Stasis::Gems.config.gemsets = [
10
+ "#{$root}/spec/fixtures/gemsets.yml"
11
+ ]
12
+ Stasis::Gems.config.warn = true
13
+
14
+ Stasis::Gems.gemspec true
15
+ Stasis::Gems.gemset = nil
16
+ end
17
+
18
+ after(:each) do
19
+ Stasis::Gems.config = @old_config
20
+ end
21
+
22
+ describe :activate do
23
+ it "should activate gems" do
24
+ Stasis::Gems.stub!(:gem)
25
+ Stasis::Gems.should_receive(:gem).with('rspec', '=1.3.1')
26
+ Stasis::Gems.should_receive(:gem).with('rake', '=0.8.7')
27
+ Stasis::Gems.activate :rspec, 'rake'
28
+ end
29
+ end
30
+
31
+ describe :gemset= do
32
+ before(:each) do
33
+ Stasis::Gems.config.gemsets = [
34
+ {
35
+ :name => {
36
+ :rake => '>0.8.6',
37
+ :default => {
38
+ :externals => '=1.0.2'
39
+ }
40
+ }
41
+ },
42
+ "#{$root}/spec/fixtures/gemsets.yml"
43
+ ]
44
+ end
45
+
46
+ describe :default do
47
+ before(:each) do
48
+ Stasis::Gems.gemset = :default
49
+ end
50
+
51
+ it "should set @gemset" do
52
+ Stasis::Gems.gemset.should == :default
53
+ end
54
+
55
+ it "should set @gemsets" do
56
+ Stasis::Gems.gemsets.should == {
57
+ :name => {
58
+ :rake => ">0.8.6",
59
+ :default => {
60
+ :externals => '=1.0.2',
61
+ :mysql => "=2.8.1",
62
+ :rspec => "=1.3.1"
63
+ },
64
+ :rspec2 => {
65
+ :mysql2 => "=0.2.6",
66
+ :rspec => "=2.3.0"
67
+ },
68
+ :solo => nil
69
+ }
70
+ }
71
+ end
72
+
73
+ it "should set Gems.versions" do
74
+ Stasis::Gems.versions.should == {
75
+ :externals => "=1.0.2",
76
+ :mysql => "=2.8.1",
77
+ :rake => ">0.8.6",
78
+ :rspec => "=1.3.1"
79
+ }
80
+ end
81
+
82
+ it "should return proper values for Gems.dependencies" do
83
+ Stasis::Gems.dependencies.should == [ :rake, :mysql ]
84
+ Stasis::Gems.development_dependencies.should == []
85
+ end
86
+
87
+ it "should return proper values for Gems.gemset_names" do
88
+ Stasis::Gems.gemset_names.should == [ :default, :rspec2, :solo ]
89
+ end
90
+ end
91
+
92
+ describe :rspec2 do
93
+ before(:each) do
94
+ Stasis::Gems.gemset = "rspec2"
95
+ end
96
+
97
+ it "should set @gemset" do
98
+ Stasis::Gems.gemset.should == :rspec2
99
+ end
100
+
101
+ it "should set @gemsets" do
102
+ Stasis::Gems.gemsets.should == {
103
+ :name => {
104
+ :rake => ">0.8.6",
105
+ :default => {
106
+ :externals => '=1.0.2',
107
+ :mysql => "=2.8.1",
108
+ :rspec => "=1.3.1"
109
+ },
110
+ :rspec2 => {
111
+ :mysql2=>"=0.2.6",
112
+ :rspec => "=2.3.0"
113
+ },
114
+ :solo => nil
115
+ }
116
+ }
117
+ end
118
+
119
+ it "should set Gems.versions" do
120
+ Stasis::Gems.versions.should == {
121
+ :mysql2 => "=0.2.6",
122
+ :rake => ">0.8.6",
123
+ :rspec => "=2.3.0"
124
+ }
125
+ end
126
+
127
+ it "should return proper values for Gems.dependencies" do
128
+ Stasis::Gems.dependencies.should == [ :rake, :mysql2 ]
129
+ Stasis::Gems.development_dependencies.should == []
130
+ end
131
+
132
+ it "should return proper values for Gems.gemset_names" do
133
+ Stasis::Gems.gemset_names.should == [ :default, :rspec2, :solo ]
134
+ end
135
+ end
136
+
137
+ describe :solo do
138
+ before(:each) do
139
+ Stasis::Gems.gemset = :solo
140
+ end
141
+
142
+ it "should set @gemset" do
143
+ Stasis::Gems.gemset.should == :solo
144
+ end
145
+
146
+ it "should set @gemsets" do
147
+ Stasis::Gems.gemsets.should == {
148
+ :name => {
149
+ :rake => ">0.8.6",
150
+ :default => {
151
+ :externals => '=1.0.2',
152
+ :mysql => "=2.8.1",
153
+ :rspec => "=1.3.1"
154
+ },
155
+ :rspec2 => {
156
+ :mysql2=>"=0.2.6",
157
+ :rspec => "=2.3.0"
158
+ },
159
+ :solo => nil
160
+ }
161
+ }
162
+ end
163
+
164
+ it "should set Gems.versions" do
165
+ Stasis::Gems.versions.should == {:rake=>">0.8.6"}
166
+ end
167
+
168
+ it "should return proper values for Gems.dependencies" do
169
+ Stasis::Gems.dependencies.should == [:rake]
170
+ Stasis::Gems.development_dependencies.should == []
171
+ end
172
+
173
+ it "should return proper values for Gems.gemset_names" do
174
+ Stasis::Gems.gemset_names.should == [ :default, :rspec2, :solo ]
175
+ end
176
+ end
177
+
178
+ describe :nil do
179
+ before(:each) do
180
+ Stasis::Gems.gemset = nil
181
+ end
182
+
183
+ it "should set everything to nil" do
184
+ Stasis::Gems.gemset.should == nil
185
+ Stasis::Gems.gemsets.should == nil
186
+ Stasis::Gems.versions.should == nil
187
+ end
188
+ end
189
+ end
190
+
191
+ describe :gemset_from_loaded_specs do
192
+ before(:each) do
193
+ Gem.stub!(:loaded_specs)
194
+ end
195
+
196
+ it "should return the correct gemset for name gem" do
197
+ Gem.should_receive(:loaded_specs).and_return({ "name" => nil })
198
+ Stasis::Gems.send(:gemset_from_loaded_specs).should == :default
199
+ end
200
+
201
+ it "should return the correct gemset for name-rspec gem" do
202
+ Gem.should_receive(:loaded_specs).and_return({ "name-rspec2" => nil })
203
+ Stasis::Gems.send(:gemset_from_loaded_specs).should == :rspec2
204
+ end
205
+ end
206
+
207
+ describe :reload_gemspec do
208
+ it "should populate @gemspec" do
209
+ Stasis::Gems.gemspec.hash.should == {
210
+ "name" => "name",
211
+ "version" => "0.1.0",
212
+ "authors" => ["Author"],
213
+ "email" => "email@email.com",
214
+ "homepage" => "http://github.com/author/name",
215
+ "summary" => "Summary",
216
+ "description" => "Description",
217
+ "dependencies" => [
218
+ "rake",
219
+ { "default" => [ "mysql" ] },
220
+ { "rspec2" => [ "mysql2" ] }
221
+ ],
222
+ "development_dependencies" => nil
223
+ }
224
+ end
225
+
226
+ it "should create methods from keys of @gemspec" do
227
+ Stasis::Gems.gemspec.name.should == "name"
228
+ Stasis::Gems.gemspec.version.should == "0.1.0"
229
+ Stasis::Gems.gemspec.authors.should == ["Author"]
230
+ Stasis::Gems.gemspec.email.should == "email@email.com"
231
+ Stasis::Gems.gemspec.homepage.should == "http://github.com/author/name"
232
+ Stasis::Gems.gemspec.summary.should == "Summary"
233
+ Stasis::Gems.gemspec.description.should == "Description"
234
+ Stasis::Gems.gemspec.dependencies.should == [
235
+ "rake",
236
+ { "default" => ["mysql"] },
237
+ { "rspec2" => [ "mysql2" ] }
238
+ ]
239
+ Stasis::Gems.gemspec.development_dependencies.should == nil
240
+ end
241
+
242
+ it "should produce a valid gemspec" do
243
+ Stasis::Gems.gemset = :default
244
+ gemspec = File.expand_path("../../../stasis.gemspec", __FILE__)
245
+ gemspec = eval(File.read(gemspec), binding, gemspec)
246
+ gemspec.validate.should == true
247
+ end
248
+ end
249
+ end
@@ -0,0 +1,53 @@
1
+ require 'spec_helper'
2
+
3
+ describe Stasis::Before do
4
+
5
+ before(:all) do
6
+ generate
7
+ end
8
+
9
+ it "should set class variables for index.html" do
10
+ $files['index.html'].should =~ /@before_index_literal\nroot/
11
+ $files['index.html'].should =~ /@before_index_regexp\nroot/
12
+ $files['index.html'].should =~ /@before_all\nroot/
13
+ $files['index.html'].should =~ /@fail\nfalse/
14
+ end
15
+
16
+ it "should set class variables for subdirectory/index.html" do
17
+ $files['subdirectory/index.html'].should =~ /@before_index_literal\nsubdirectory/
18
+ $files['subdirectory/index.html'].should =~ /@before_index_regexp\nsubdirectory/
19
+ $files['subdirectory/index.html'].should =~ /@before_all\nsubdirectory/
20
+ $files['subdirectory/index.html'].should =~ /@fail\nfalse/
21
+ end
22
+
23
+ it "should set class variables for no_controller/index.html" do
24
+ $files['no_controller/index.html'].should =~ /@before_index_literal\nno_controller/
25
+ $files['no_controller/index.html'].should =~ /@before_index_regexp\nroot/
26
+ $files['no_controller/index.html'].should =~ /@before_all\nroot/
27
+ $files['no_controller/index.html'].should =~ /@fail\nfalse/
28
+ end
29
+
30
+ it "should render text to before_render_text.html" do
31
+ $files['before_render_text.html'].should =~ /root/
32
+ end
33
+
34
+ it "should render text to subdirectory/before_render_text.html" do
35
+ $files['subdirectory/before_render_text.html'].should =~ /subdirectory/
36
+ end
37
+
38
+ it "should render partial to before_render_text.html" do
39
+ $files['before_render_partial.html'].should =~ /root/
40
+ end
41
+
42
+ it "should render partial to subdirectory/before_render_text.html" do
43
+ $files['subdirectory/before_render_partial.html'].should =~ /subdirectory/
44
+ end
45
+
46
+ it "should render partial to before_non_existent.html" do
47
+ $files['before_non_existent.html'].should =~ /root/
48
+ end
49
+
50
+ it "should render partial to subdirectory/before_non_existent.html" do
51
+ $files['subdirectory/before_non_existent.html'].should =~ /subdirectory/
52
+ end
53
+ end