engine_of_war 1.6.5 → 2.0.0

Sign up to get free protection for your applications and to get access to all the features.
@@ -0,0 +1,32 @@
1
+ == Engine of War
2
+
3
+ Static(ish) site engine extracted from "thunderboltlabs.com":http://thunderboltlabs.com and "tammersaleh.com":http://tammersaleh.com.
4
+
5
+ === Installation
6
+
7
+ ``` ruby
8
+ # Gemfile
9
+ gem 'engine_of_war'
10
+ ```
11
+
12
+ ``` ruby
13
+ # config.ru
14
+ Encoding.default_external = Encoding::UTF_8
15
+ Encoding.default_internal = Encoding::UTF_8
16
+
17
+ require 'engine_of_war'
18
+
19
+ YAML::ENGINE.yamler = 'syck' # Heroku doesn't support 'psych'
20
+
21
+ EngineOfWar::App.root = File.dirname(__FILE__)
22
+ EngineOfWar::App.github_info = "thunderboltlabs/thunderboltlabs"
23
+ EngineOfWar::App.site_title = "Thunderbolt Labs"
24
+ EngineOfWar::App.google_analytics_key = "UA-xxxxxxxx-1"
25
+ EngineOfWar::App.gauges_key = "xxxxxxxxxxxxxxxxxxxxxxxx"
26
+ EngineOfWar::App.newrelic_key = "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"
27
+
28
+ run EngineOfWar::App
29
+ ```
30
+
31
+ === Layout
32
+
@@ -29,6 +29,7 @@ Gem::Specification.new do |gem|
29
29
  gem.add_dependency "rack-gauges"
30
30
  gem.add_dependency 'rpm_contrib'
31
31
  gem.add_dependency 'newrelic_rpm'
32
+ gem.add_dependency 'deep_struct', ">= 1.1.0"
32
33
 
33
34
  gem.add_development_dependency "yard"
34
35
  gem.add_development_dependency "rake"
@@ -13,6 +13,7 @@ require 'active_support/hash_with_indifferent_access'
13
13
  require 'active_support/core_ext/object/blank'
14
14
  require 'date'
15
15
  require 'json'
16
+ require 'deep_struct'
16
17
 
17
18
  module EngineOfWar; end
18
19
 
@@ -24,6 +25,5 @@ require 'engine_of_war/template_engines/markdown'
24
25
  require 'engine_of_war/layout'
25
26
  require 'engine_of_war/page'
26
27
  require 'engine_of_war/page_collection'
27
- require 'engine_of_war/recommendation'
28
28
  require 'engine_of_war/app'
29
29
 
@@ -13,8 +13,8 @@ class EngineOfWar::App < Sinatra::Base
13
13
  set :github_info, nil
14
14
  set :site_title, nil
15
15
 
16
- set :config do
17
- File.expand_path(root + '/config/')
16
+ set :data_root do
17
+ File.expand_path(root + '/data/')
18
18
  end
19
19
 
20
20
  def self.google_analytics_key=(key)
@@ -64,6 +64,10 @@ class EngineOfWar::App < Sinatra::Base
64
64
  def collection(dir)
65
65
  EngineOfWar::PageCollection.new(dir)
66
66
  end
67
+
68
+ def data(file)
69
+ DeepStruct.from_file(File.join(settings.data_root, file))
70
+ end
67
71
  end
68
72
 
69
73
  error(500) { haml :"500" }
@@ -1,3 +1,3 @@
1
1
  module EngineOfWar
2
- VERSION = "1.6.5"
2
+ VERSION = "2.0.0"
3
3
  end
@@ -0,0 +1,34 @@
1
+ #!/bin/env rspec
2
+
3
+ require "spec_helper"
4
+
5
+ describe "Given a page that uses data" do
6
+ before do
7
+ create_data("people.json", '[{"name": "Bob"}, {"name": "Sue"}]')
8
+
9
+ create_template("layouts/application.html.haml",
10
+ <<-EOF)
11
+ %h1 Application Layout
12
+ = yield
13
+ EOF
14
+
15
+ create_template("people.html.haml",
16
+ <<-EOF)
17
+ - data("people.json").each do |person|
18
+ %h2= person.name
19
+ %h3= data("people.json").sample.name
20
+ EOF
21
+ end
22
+
23
+ context "GET /people" do
24
+ before { visit "/people" }
25
+
26
+ it "renders the first person" do
27
+ page.should have_selector('h2:contains("Bob")')
28
+ end
29
+
30
+ it "renders the second person" do
31
+ page.should have_selector('h2:contains("Sue")')
32
+ end
33
+ end
34
+ end
@@ -7,6 +7,8 @@ require "engine_of_war.rb"
7
7
 
8
8
  Capybara.app = EngineOfWar::App
9
9
  Capybara.app.set :root, "/tmp/engine-#{$$}"
10
+ Capybara.app.enable :raise_errors
11
+ Capybara.app.enable :show_exceptions
10
12
  FakeWeb.allow_net_connect = false
11
13
 
12
14
  def create_template(path, content)
@@ -17,8 +19,8 @@ def create_asset(path, content)
17
19
  create_file "#{Capybara.app.settings.public_folder}/#{path}", content.unindent
18
20
  end
19
21
 
20
- def create_config(path, content)
21
- create_file "#{Capybara.app.settings.config}/#{path}", content.unindent
22
+ def create_data(path, content)
23
+ create_file "#{Capybara.app.settings.data_root}/#{path}", content.unindent
22
24
  end
23
25
 
24
26
  def create_file(path, content)
@@ -35,25 +37,18 @@ end
35
37
  def create_dirs
36
38
  FileUtils.mkdir_p(Capybara.app.settings.views)
37
39
  FileUtils.mkdir_p(Capybara.app.settings.public_folder)
38
- FileUtils.mkdir_p(Capybara.app.settings.config)
39
40
  end
40
41
 
41
42
  def remove_dirs
42
43
  FileUtils.rm_rf(Capybara.app.settings.views)
43
44
  FileUtils.rm_rf(Capybara.app.settings.public_folder)
44
- FileUtils.rm_rf(Capybara.app.settings.config)
45
45
  end
46
46
 
47
47
  RSpec.configure do |config|
48
48
  config.include Capybara::DSL
49
49
 
50
- config.before(:all) do
51
- create_dirs
52
- end
53
-
54
- config.after(:all) do
55
- remove_dirs
56
- end
50
+ config.before(:all) { create_dirs }
51
+ config.after(:all) { remove_dirs }
57
52
 
58
53
  config.before(:each) do
59
54
  remove_dirs
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: engine_of_war
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.6.5
4
+ version: 2.0.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-01-29 00:00:00.000000000 Z
12
+ date: 2012-02-07 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: sinatra
16
- requirement: &70331760499380 !ruby/object:Gem::Requirement
16
+ requirement: &70126019912240 !ruby/object:Gem::Requirement
17
17
  none: false
18
18
  requirements:
19
19
  - - ! '>='
@@ -21,10 +21,10 @@ dependencies:
21
21
  version: '1.3'
22
22
  type: :runtime
23
23
  prerelease: false
24
- version_requirements: *70331760499380
24
+ version_requirements: *70126019912240
25
25
  - !ruby/object:Gem::Dependency
26
26
  name: compass
27
- requirement: &70331760487720 !ruby/object:Gem::Requirement
27
+ requirement: &70126019999780 !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: :runtime
34
34
  prerelease: false
35
- version_requirements: *70331760487720
35
+ version_requirements: *70126019999780
36
36
  - !ruby/object:Gem::Dependency
37
37
  name: padrino
38
- requirement: &70331760490660 !ruby/object:Gem::Requirement
38
+ requirement: &70126019998380 !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: :runtime
45
45
  prerelease: false
46
- version_requirements: *70331760490660
46
+ version_requirements: *70126019998380
47
47
  - !ruby/object:Gem::Dependency
48
48
  name: active_support
49
- requirement: &70331713797620 !ruby/object:Gem::Requirement
49
+ requirement: &70126019997020 !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: :runtime
56
56
  prerelease: false
57
- version_requirements: *70331713797620
57
+ version_requirements: *70126019997020
58
58
  - !ruby/object:Gem::Dependency
59
59
  name: builder
60
- requirement: &70331713278740 !ruby/object:Gem::Requirement
60
+ requirement: &70126019993640 !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: :runtime
67
67
  prerelease: false
68
- version_requirements: *70331713278740
68
+ version_requirements: *70126019993640
69
69
  - !ruby/object:Gem::Dependency
70
70
  name: haml
71
- requirement: &70331713106280 !ruby/object:Gem::Requirement
71
+ requirement: &70126019993040 !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: *70331713106280
79
+ version_requirements: *70126019993040
80
80
  - !ruby/object:Gem::Dependency
81
81
  name: sass
82
- requirement: &70331712742700 !ruby/object:Gem::Requirement
82
+ requirement: &70126019992400 !ruby/object:Gem::Requirement
83
83
  none: false
84
84
  requirements:
85
85
  - - ! '>='
@@ -87,10 +87,10 @@ dependencies:
87
87
  version: 3.1.7
88
88
  type: :runtime
89
89
  prerelease: false
90
- version_requirements: *70331712742700
90
+ version_requirements: *70126019992400
91
91
  - !ruby/object:Gem::Dependency
92
92
  name: RedCloth
93
- requirement: &70331712731840 !ruby/object:Gem::Requirement
93
+ requirement: &70126020025200 !ruby/object:Gem::Requirement
94
94
  none: false
95
95
  requirements:
96
96
  - - ! '>='
@@ -98,10 +98,10 @@ dependencies:
98
98
  version: '0'
99
99
  type: :runtime
100
100
  prerelease: false
101
- version_requirements: *70331712731840
101
+ version_requirements: *70126020025200
102
102
  - !ruby/object:Gem::Dependency
103
103
  name: rdiscount
104
- requirement: &70331712730920 !ruby/object:Gem::Requirement
104
+ requirement: &70126020024260 !ruby/object:Gem::Requirement
105
105
  none: false
106
106
  requirements:
107
107
  - - ! '>='
@@ -109,10 +109,10 @@ dependencies:
109
109
  version: '0'
110
110
  type: :runtime
111
111
  prerelease: false
112
- version_requirements: *70331712730920
112
+ version_requirements: *70126020024260
113
113
  - !ruby/object:Gem::Dependency
114
114
  name: coffee-script
115
- requirement: &70331712730120 !ruby/object:Gem::Requirement
115
+ requirement: &70126020023460 !ruby/object:Gem::Requirement
116
116
  none: false
117
117
  requirements:
118
118
  - - ! '>='
@@ -120,10 +120,10 @@ dependencies:
120
120
  version: '0'
121
121
  type: :runtime
122
122
  prerelease: false
123
- version_requirements: *70331712730120
123
+ version_requirements: *70126020023460
124
124
  - !ruby/object:Gem::Dependency
125
125
  name: rack-google-analytics
126
- requirement: &70331712729240 !ruby/object:Gem::Requirement
126
+ requirement: &70126020054580 !ruby/object:Gem::Requirement
127
127
  none: false
128
128
  requirements:
129
129
  - - ! '>='
@@ -131,10 +131,10 @@ dependencies:
131
131
  version: '0'
132
132
  type: :runtime
133
133
  prerelease: false
134
- version_requirements: *70331712729240
134
+ version_requirements: *70126020054580
135
135
  - !ruby/object:Gem::Dependency
136
136
  name: rack-gauges
137
- requirement: &70331712728120 !ruby/object:Gem::Requirement
137
+ requirement: &70126020053640 !ruby/object:Gem::Requirement
138
138
  none: false
139
139
  requirements:
140
140
  - - ! '>='
@@ -142,10 +142,10 @@ dependencies:
142
142
  version: '0'
143
143
  type: :runtime
144
144
  prerelease: false
145
- version_requirements: *70331712728120
145
+ version_requirements: *70126020053640
146
146
  - !ruby/object:Gem::Dependency
147
147
  name: rpm_contrib
148
- requirement: &70331712727420 !ruby/object:Gem::Requirement
148
+ requirement: &70126020051680 !ruby/object:Gem::Requirement
149
149
  none: false
150
150
  requirements:
151
151
  - - ! '>='
@@ -153,10 +153,10 @@ dependencies:
153
153
  version: '0'
154
154
  type: :runtime
155
155
  prerelease: false
156
- version_requirements: *70331712727420
156
+ version_requirements: *70126020051680
157
157
  - !ruby/object:Gem::Dependency
158
158
  name: newrelic_rpm
159
- requirement: &70331712726660 !ruby/object:Gem::Requirement
159
+ requirement: &70126020050500 !ruby/object:Gem::Requirement
160
160
  none: false
161
161
  requirements:
162
162
  - - ! '>='
@@ -164,10 +164,21 @@ dependencies:
164
164
  version: '0'
165
165
  type: :runtime
166
166
  prerelease: false
167
- version_requirements: *70331712726660
167
+ version_requirements: *70126020050500
168
+ - !ruby/object:Gem::Dependency
169
+ name: deep_struct
170
+ requirement: &70126020049720 !ruby/object:Gem::Requirement
171
+ none: false
172
+ requirements:
173
+ - - ! '>='
174
+ - !ruby/object:Gem::Version
175
+ version: 1.1.0
176
+ type: :runtime
177
+ prerelease: false
178
+ version_requirements: *70126020049720
168
179
  - !ruby/object:Gem::Dependency
169
180
  name: yard
170
- requirement: &70331712742240 !ruby/object:Gem::Requirement
181
+ requirement: &70126020048760 !ruby/object:Gem::Requirement
171
182
  none: false
172
183
  requirements:
173
184
  - - ! '>='
@@ -175,10 +186,10 @@ dependencies:
175
186
  version: '0'
176
187
  type: :development
177
188
  prerelease: false
178
- version_requirements: *70331712742240
189
+ version_requirements: *70126020048760
179
190
  - !ruby/object:Gem::Dependency
180
191
  name: rake
181
- requirement: &70331712741300 !ruby/object:Gem::Requirement
192
+ requirement: &70126020048220 !ruby/object:Gem::Requirement
182
193
  none: false
183
194
  requirements:
184
195
  - - ! '>='
@@ -186,10 +197,10 @@ dependencies:
186
197
  version: '0'
187
198
  type: :development
188
199
  prerelease: false
189
- version_requirements: *70331712741300
200
+ version_requirements: *70126020048220
190
201
  - !ruby/object:Gem::Dependency
191
202
  name: rspec
192
- requirement: &70331712740560 !ruby/object:Gem::Requirement
203
+ requirement: &70126020047580 !ruby/object:Gem::Requirement
193
204
  none: false
194
205
  requirements:
195
206
  - - ! '>='
@@ -197,10 +208,10 @@ dependencies:
197
208
  version: '0'
198
209
  type: :development
199
210
  prerelease: false
200
- version_requirements: *70331712740560
211
+ version_requirements: *70126020047580
201
212
  - !ruby/object:Gem::Dependency
202
213
  name: capybara
203
- requirement: &70331712739860 !ruby/object:Gem::Requirement
214
+ requirement: &70126020076460 !ruby/object:Gem::Requirement
204
215
  none: false
205
216
  requirements:
206
217
  - - ! '>='
@@ -208,10 +219,10 @@ dependencies:
208
219
  version: '0'
209
220
  type: :development
210
221
  prerelease: false
211
- version_requirements: *70331712739860
222
+ version_requirements: *70126020076460
212
223
  - !ruby/object:Gem::Dependency
213
224
  name: fakeweb
214
- requirement: &70331712739060 !ruby/object:Gem::Requirement
225
+ requirement: &70126020074820 !ruby/object:Gem::Requirement
215
226
  none: false
216
227
  requirements:
217
228
  - - ! '>='
@@ -219,10 +230,10 @@ dependencies:
219
230
  version: '0'
220
231
  type: :development
221
232
  prerelease: false
222
- version_requirements: *70331712739060
233
+ version_requirements: *70126020074820
223
234
  - !ruby/object:Gem::Dependency
224
235
  name: guard-rspec
225
- requirement: &70331712738400 !ruby/object:Gem::Requirement
236
+ requirement: &70126020073640 !ruby/object:Gem::Requirement
226
237
  none: false
227
238
  requirements:
228
239
  - - ! '>='
@@ -230,10 +241,10 @@ dependencies:
230
241
  version: '0'
231
242
  type: :development
232
243
  prerelease: false
233
- version_requirements: *70331712738400
244
+ version_requirements: *70126020073640
234
245
  - !ruby/object:Gem::Dependency
235
246
  name: guard-bundler
236
- requirement: &70331712737720 !ruby/object:Gem::Requirement
247
+ requirement: &70126020072660 !ruby/object:Gem::Requirement
237
248
  none: false
238
249
  requirements:
239
250
  - - ! '>='
@@ -241,10 +252,10 @@ dependencies:
241
252
  version: '0'
242
253
  type: :development
243
254
  prerelease: false
244
- version_requirements: *70331712737720
255
+ version_requirements: *70126020072660
245
256
  - !ruby/object:Gem::Dependency
246
257
  name: ruby_gntp
247
- requirement: &70331712736980 !ruby/object:Gem::Requirement
258
+ requirement: &70126020070920 !ruby/object:Gem::Requirement
248
259
  none: false
249
260
  requirements:
250
261
  - - ! '>='
@@ -252,7 +263,7 @@ dependencies:
252
263
  version: '0'
253
264
  type: :development
254
265
  prerelease: false
255
- version_requirements: *70331712736980
266
+ version_requirements: *70126020070920
256
267
  description: Semi-static site engine.
257
268
  email:
258
269
  - us@thunderboltlabs.com
@@ -267,7 +278,7 @@ files:
267
278
  - Gemfile
268
279
  - Guardfile
269
280
  - Rakefile
270
- - Readme.textile
281
+ - Readme.md
271
282
  - engine_of_war.gemspec
272
283
  - lib/engine_of_war.rb
273
284
  - lib/engine_of_war/app.rb
@@ -275,7 +286,6 @@ files:
275
286
  - lib/engine_of_war/layout.rb
276
287
  - lib/engine_of_war/page.rb
277
288
  - lib/engine_of_war/page_collection.rb
278
- - lib/engine_of_war/recommendation.rb
279
289
  - lib/engine_of_war/template_engines/filters.rb
280
290
  - lib/engine_of_war/template_engines/markdown.rb
281
291
  - lib/engine_of_war/template_engines/textile.rb
@@ -284,12 +294,12 @@ files:
284
294
  - spec/atom_spec.rb
285
295
  - spec/blog_spec.rb
286
296
  - spec/code_filter_spec.rb
297
+ - spec/data_spec.rb
287
298
  - spec/error_pages_spec.rb
288
299
  - spec/frontmatter_spec.rb
289
300
  - spec/image_filter_spec.rb
290
301
  - spec/page_collection_spec.rb
291
302
  - spec/page_spec.rb
292
- - spec/recommendations_spec.rb
293
303
  - spec/rendering_spec.rb
294
304
  - spec/root_spec.rb
295
305
  - spec/spec_helper.rb
@@ -307,7 +317,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
307
317
  version: '0'
308
318
  segments:
309
319
  - 0
310
- hash: -4557837987381064239
320
+ hash: 1979107136024520100
311
321
  required_rubygems_version: !ruby/object:Gem::Requirement
312
322
  none: false
313
323
  requirements:
@@ -316,7 +326,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
316
326
  version: '0'
317
327
  segments:
318
328
  - 0
319
- hash: -4557837987381064239
329
+ hash: 1979107136024520100
320
330
  requirements: []
321
331
  rubyforge_project:
322
332
  rubygems_version: 1.8.11
@@ -328,12 +338,12 @@ test_files:
328
338
  - spec/atom_spec.rb
329
339
  - spec/blog_spec.rb
330
340
  - spec/code_filter_spec.rb
341
+ - spec/data_spec.rb
331
342
  - spec/error_pages_spec.rb
332
343
  - spec/frontmatter_spec.rb
333
344
  - spec/image_filter_spec.rb
334
345
  - spec/page_collection_spec.rb
335
346
  - spec/page_spec.rb
336
- - spec/recommendations_spec.rb
337
347
  - spec/rendering_spec.rb
338
348
  - spec/root_spec.rb
339
349
  - spec/spec_helper.rb
File without changes
@@ -1,34 +0,0 @@
1
- class EngineOfWar::Recommendation
2
- def self.random
3
- new(recommendations_data.sample)
4
- end
5
-
6
- def initialize(values = {})
7
- @values = HashWithIndifferentAccess.new(values)
8
- end
9
-
10
- def method_missing(*args, &block)
11
- if key = args.first and @values.has_key?(key)
12
- @values[key]
13
- else
14
- raise NoMethodError.new("#{key} not in #{@values.inspect}")
15
- end
16
- end
17
-
18
- def inspect
19
- "Recommendation: #{@values.inspect}"
20
- end
21
-
22
- def to_s; inspect; end
23
-
24
- private
25
-
26
- def self.recommendations_data
27
- JSON.parse(File.read(json_file))
28
- end
29
-
30
- def self.json_file
31
- File.join(EngineOfWar::App.settings.config, "recommendations.json")
32
- end
33
-
34
- end
@@ -1,44 +0,0 @@
1
- #!/bin/env rspec
2
-
3
- require "spec_helper"
4
-
5
- describe "Recommendation.new(hash)" do
6
- raw = {
7
- :quote => "Great to work with, intelligent feedback, exceptional quality.",
8
- :who => "Matt Todd",
9
- :who_url => "http://www.workingwithrails.com/person/7298-matt-todd",
10
- :where => "Working with Rails",
11
- :where_url => "http://example.com/foo",
12
- :position => "Developer",
13
- :company => "GitHub",
14
- :company_url => "http://github.com/",
15
- :short_quote => "Short"
16
- }
17
-
18
- before { @recommendation = EngineOfWar::Recommendation.new(raw) }
19
- subject { @recommendation }
20
-
21
- raw.each do |k, v|
22
- its(k) { should == v}
23
- end
24
- end
25
-
26
- describe "Recommendation.random" do
27
- before do
28
- create_config("recommendations.json",
29
- <<-EOF)
30
- [{
31
- "quote": "Great to work with, intelligent feedback, exceptional quality.",
32
- "who": "Matt Todd",
33
- "who_url": "http://www.workingwithrails.com/person/7298-matt-todd",
34
- "where_url": "http://www.workingwithrails.com/recommendation/for/person/7844-tammer-saleh",
35
- "position": "",
36
- "company": "GitHub",
37
- "company_url": "http://github.com/"
38
- }]
39
- EOF
40
- @recommendation = EngineOfWar::Recommendation.random
41
- end
42
- subject { @recommendation }
43
- it { should be_a(EngineOfWar::Recommendation) }
44
- end