semi_static 0.0.2 → 0.1.0

Sign up to get free protection for your applications and to get access to all the features.
data/.gitignore CHANGED
@@ -3,3 +3,5 @@
3
3
  Gemfile.lock
4
4
  pkg/*
5
5
  *.log
6
+ .rvmrc
7
+ tmp/
@@ -1,9 +1,3 @@
1
1
  class SemiStatic::NewsController < SemiStatic::PageController
2
- def index
3
- super
4
- respond_to do |f|
5
- f.html
6
- f.atom { render :layout => false }
7
- end
8
- end
2
+ include SemiStatic::Controller::News
9
3
  end
@@ -1,14 +1,3 @@
1
1
  class SemiStatic::PageController < ApplicationController
2
- def index
3
- @articles = resource.all
4
- end
5
-
6
- def show
7
- @article = resource.find(params[:id])
8
- raise ActionController::RoutingError.new(url_for(:id => params[:id], :only_path => true)) unless @article
9
- end
10
-
11
- def resource
12
- env["semi_static.mapping"]
13
- end
2
+ include SemiStatic::Controller::Page
14
3
  end
@@ -11,8 +11,7 @@ class SemiStatic::Backend < SemiStatic::Page
11
11
  @cache[page_type] = Dir.glob(path).map do |f|
12
12
  yaml, body = File.read(f).split("\n...\n", 2)
13
13
  h = YAML.load(yaml)
14
- template = Tilt.new(f) {|template| body }
15
- page_type.new(template, h)
14
+ page_type.new(SemiStatic::TiltWrapper.template(f,body), h)
16
15
  end
17
16
  end
18
17
  @cache[page_type]
@@ -0,0 +1,13 @@
1
+ module SemiStatic::Controller::News
2
+ def self.included(klass)
3
+ klass.send :include, SemiStatic::Controller::Page
4
+ end
5
+
6
+ def index
7
+ super
8
+ respond_to do |f|
9
+ f.html
10
+ f.atom { render :layout => false }
11
+ end
12
+ end
13
+ end
@@ -0,0 +1,16 @@
1
+ module SemiStatic::Controller::Page
2
+ def index
3
+ @articles = resource.all
4
+ end
5
+
6
+ def show
7
+ @article = resource.find(params[:id])
8
+ raise ActionController::RoutingError.new(url_for(:id => params[:id], :only_path => true)) unless @article
9
+ end
10
+
11
+ private
12
+
13
+ def resource
14
+ env["semi_static.mapping"]
15
+ end
16
+ end
@@ -0,0 +1,4 @@
1
+ module SemiStatic::Controller
2
+ autoload :News, "semi_static/controller/news"
3
+ autoload :Page, "semi_static/controller/page"
4
+ end
@@ -0,0 +1,30 @@
1
+ class SemiStatic::TiltWrapper
2
+ class << self
3
+ def template(filename, body)
4
+ wrap Tilt.new(filename) {|t| body }
5
+ end
6
+
7
+ private
8
+
9
+ def wrap(template)
10
+ components = File.basename(template.file).split(".")
11
+ if components.size > 2
12
+ filename = template.file.chomp('.' + components.last)
13
+ wrap new(template, filename)
14
+ else
15
+ template
16
+ end
17
+ end
18
+ end
19
+
20
+ attr_reader :file
21
+
22
+ def initialize(wrapping_template, filename)
23
+ @wrapping_template, @file = wrapping_template, filename
24
+ end
25
+
26
+ def render(scope=Object.new, locals={}, &block)
27
+ template = Tilt.new(@file) {|t| @wrapping_template.render(scope, locals, &block) }
28
+ template.render(scope, locals, &block)
29
+ end
30
+ end
@@ -1,3 +1,3 @@
1
1
  module SemiStatic
2
- VERSION = "0.0.2"
2
+ VERSION = "0.1.0"
3
3
  end
data/lib/semi_static.rb CHANGED
@@ -14,6 +14,8 @@ module SemiStatic
14
14
  autoload :Article, "semi_static/article"
15
15
  autoload :Page, "semi_static/page"
16
16
  autoload :Backend, "semi_static/backend"
17
+ autoload :TiltWrapper, "semi_static/tilt_wrapper"
18
+ autoload :Controller, "semi_static/controller"
17
19
 
18
20
  class << self
19
21
  attr_writer :backend
@@ -0,0 +1,19 @@
1
+ # encoding: UTF-8
2
+ require File.expand_path(File.dirname(__FILE__) + '/acceptance_helper')
3
+
4
+ feature 'custom controllers' do
5
+ scenario "index" do
6
+ visit faqs_path
7
+ find("h1 a").text.should == "チェックイン端末とはなんですか?"
8
+ end
9
+
10
+ scenario "overwritten method" do
11
+ visit faq_path(:id => "管理端末とはなんですか?")
12
+ find("h1").text.should == "チェックイン端末とはなんですか?"
13
+ end
14
+
15
+ scenario "namespaced controller" do
16
+ visit admin_faqs_path
17
+ find("body").text.should == "Namespaced"
18
+ end
19
+ end
@@ -0,0 +1,6 @@
1
+ # encoding: UTF-8
2
+ class Admin::FaqsController < SemiStatic::PageController
3
+ def index
4
+ render :text => "Namespaced"
5
+ end
6
+ end
@@ -0,0 +1,12 @@
1
+ # encoding: UTF-8
2
+ class FaqsController < SemiStatic::PageController
3
+ def show
4
+ case params[:id]
5
+ when "管理端末とはなんですか?"
6
+ redirect_to :id => "チェックイン端末とはなんですか?", :status => 301
7
+ else
8
+ super
9
+ end
10
+ end
11
+
12
+ end
@@ -0,0 +1,3 @@
1
+ # encoding: UTF-8
2
+ class Faq < SemiStatic::Page
3
+ end
@@ -13,5 +13,9 @@ app.initialize!
13
13
  app.routes.draw do
14
14
  semi_static_for :news
15
15
  semi_static_for :event_planning_tips
16
+ semi_static_for :faqs, :controller => :faqs
17
+ namespace :admin do
18
+ semi_static_for :faqs, :controller => :faqs
19
+ end
16
20
  end
17
21
  class ApplicationController < ActionController::Base; end
@@ -0,0 +1,5 @@
1
+ title: ERB Chained
2
+ ...
3
+ ## 1 + 1 = <%= 1 + 1 %>
4
+
5
+ <%= image_tag 'test.jpg' %>
@@ -0,0 +1,3 @@
1
+ title: ERB Test
2
+ ...
3
+ <div class="erb">1 + 1 = <%= 1 + 1 %></div>
@@ -0,0 +1,7 @@
1
+ title: チェックイン端末とはなんですか?
2
+ ...
3
+ チェックイン端末は、チケットをスキャンするために用いられます。携帯電話やスマートフォン、PC付属のウェブカメラなどでご利用になれます。iPhoneをお持ちの方は、[Doorkeeper iPhoneアプリ](http://itunes.apple.com/us/app/doorkeeper/id414643903)を使用すると、より簡単にチェックインが可能です。
4
+
5
+ <b>注記:</b> チケットをスキャンする際には、各イベントごと事前にチェックイン端末の登録が必要です。
6
+
7
+ チェックイン端末の登録につきましては、「[iPhoneでチケットを読み取るには](/how-to/iphone%E3%81%A7%E3%83%81%E3%82%B1%E3%83%83%E3%83%88%E3%82%92%E8%AA%AD%E3%81%BF%E5%8F%96%E3%82%8B%E3%81%AB%E3%81%AF)」を参照ください。
@@ -4,8 +4,8 @@ require File.expand_path(File.dirname(__FILE__) + '/acceptance_helper')
4
4
  feature 'page' do
5
5
  scenario "index" do
6
6
  visit '/event_planning_tips'
7
- page.find("h1 a").text.should == "イベント時に気をつけたいマナー"
8
- page.find("section h2").text.should == "1. 無断に写真や動画の撮影、公開しない"
7
+ page.should have_css("h1 a")
8
+ page.should have_content("イベント時に気をつけたいマナー")
9
9
  end
10
10
 
11
11
  scenario 'show markdown page' do
@@ -14,4 +14,14 @@ feature 'page' do
14
14
  page.find("section h2").text.should == "1. 無断に写真や動画の撮影、公開しない"
15
15
  end
16
16
 
17
+ scenario 'show erb page' do
18
+ visit "/event_planning_tips/erb-test"
19
+ page.find(".erb").text.should == "1 + 1 = 2"
20
+ end
21
+
22
+ scenario 'show erb chained' do
23
+ visit "/event_planning_tips/erb-chained"
24
+ page.find("h2").text.should == "1 + 1 = 2"
25
+ page.should have_css "img"
26
+ end
17
27
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: semi_static
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.2
4
+ version: 0.1.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: 2011-09-21 00:00:00.000000000Z
12
+ date: 2011-12-06 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: rails
16
- requirement: &2152911060 !ruby/object:Gem::Requirement
16
+ requirement: &2156249420 !ruby/object:Gem::Requirement
17
17
  none: false
18
18
  requirements:
19
19
  - - ~>
@@ -21,10 +21,10 @@ dependencies:
21
21
  version: '3.0'
22
22
  type: :runtime
23
23
  prerelease: false
24
- version_requirements: *2152911060
24
+ version_requirements: *2156249420
25
25
  - !ruby/object:Gem::Dependency
26
26
  name: rdiscount
27
- requirement: &2152910640 !ruby/object:Gem::Requirement
27
+ requirement: &2156248400 !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: *2152910640
35
+ version_requirements: *2156248400
36
36
  - !ruby/object:Gem::Dependency
37
37
  name: babosa
38
- requirement: &2152910180 !ruby/object:Gem::Requirement
38
+ requirement: &2156247860 !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: *2152910180
46
+ version_requirements: *2156247860
47
47
  - !ruby/object:Gem::Dependency
48
48
  name: tilt
49
- requirement: &2152909760 !ruby/object:Gem::Requirement
49
+ requirement: &2156247360 !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: *2152909760
57
+ version_requirements: *2156247360
58
58
  - !ruby/object:Gem::Dependency
59
59
  name: rspec
60
- requirement: &2152909260 !ruby/object:Gem::Requirement
60
+ requirement: &2156246380 !ruby/object:Gem::Requirement
61
61
  none: false
62
62
  requirements:
63
63
  - - ~>
@@ -65,10 +65,10 @@ dependencies:
65
65
  version: 2.5.0
66
66
  type: :development
67
67
  prerelease: false
68
- version_requirements: *2152909260
68
+ version_requirements: *2156246380
69
69
  - !ruby/object:Gem::Dependency
70
70
  name: steak
71
- requirement: &2152908840 !ruby/object:Gem::Requirement
71
+ requirement: &2156236320 !ruby/object:Gem::Requirement
72
72
  none: false
73
73
  requirements:
74
74
  - - ! '>='
@@ -76,7 +76,7 @@ dependencies:
76
76
  version: '0'
77
77
  type: :development
78
78
  prerelease: false
79
- version_requirements: *2152908840
79
+ version_requirements: *2156236320
80
80
  description: Easily create content for your Rails apps using just textfiles
81
81
  email:
82
82
  - paul@mobalean.com
@@ -97,19 +97,30 @@ files:
97
97
  - app/views/semi_static/page/show.html.erb
98
98
  - lib/semi_static.rb
99
99
  - lib/semi_static/backend.rb
100
+ - lib/semi_static/controller.rb
101
+ - lib/semi_static/controller/news.rb
102
+ - lib/semi_static/controller/page.rb
100
103
  - lib/semi_static/news.rb
101
104
  - lib/semi_static/page.rb
102
105
  - lib/semi_static/page/with_locale.rb
103
106
  - lib/semi_static/rails.rb
104
107
  - lib/semi_static/rails/routes.rb
108
+ - lib/semi_static/tilt_wrapper.rb
105
109
  - lib/semi_static/version.rb
106
110
  - semi_static.gemspec
107
111
  - spec/acceptance/acceptance_helper.rb
112
+ - spec/acceptance/custom_controllers_spec.rb
108
113
  - spec/acceptance/fake/app.rb
114
+ - spec/acceptance/fake/app/controllers/admin/faqs_controller.rb
115
+ - spec/acceptance/fake/app/controllers/faqs_controller.rb
109
116
  - spec/acceptance/fake/app/models/event_planning_tip.rb
117
+ - spec/acceptance/fake/app/models/faq.rb
110
118
  - spec/acceptance/fake/app/models/news.rb
111
119
  - spec/acceptance/fake/app/views/application.html.erb
120
+ - spec/acceptance/fake/semi_static_pages/event_planning_tips/erb_chained.md.erb
121
+ - spec/acceptance/fake/semi_static_pages/event_planning_tips/erb_page.erb
112
122
  - spec/acceptance/fake/semi_static_pages/event_planning_tips/manner.md
123
+ - spec/acceptance/fake/semi_static_pages/faqs/checkin_devices.md
113
124
  - spec/acceptance/fake/semi_static_pages/news/2011-07-26-replaced-download.md
114
125
  - spec/acceptance/news_spec.rb
115
126
  - spec/acceptance/page_spec.rb
@@ -138,17 +149,24 @@ required_rubygems_version: !ruby/object:Gem::Requirement
138
149
  version: '0'
139
150
  requirements: []
140
151
  rubyforge_project: semi_static
141
- rubygems_version: 1.8.6
152
+ rubygems_version: 1.8.10
142
153
  signing_key:
143
154
  specification_version: 3
144
155
  summary: Text file based CMS for Rails
145
156
  test_files:
146
157
  - spec/acceptance/acceptance_helper.rb
158
+ - spec/acceptance/custom_controllers_spec.rb
147
159
  - spec/acceptance/fake/app.rb
160
+ - spec/acceptance/fake/app/controllers/admin/faqs_controller.rb
161
+ - spec/acceptance/fake/app/controllers/faqs_controller.rb
148
162
  - spec/acceptance/fake/app/models/event_planning_tip.rb
163
+ - spec/acceptance/fake/app/models/faq.rb
149
164
  - spec/acceptance/fake/app/models/news.rb
150
165
  - spec/acceptance/fake/app/views/application.html.erb
166
+ - spec/acceptance/fake/semi_static_pages/event_planning_tips/erb_chained.md.erb
167
+ - spec/acceptance/fake/semi_static_pages/event_planning_tips/erb_page.erb
151
168
  - spec/acceptance/fake/semi_static_pages/event_planning_tips/manner.md
169
+ - spec/acceptance/fake/semi_static_pages/faqs/checkin_devices.md
152
170
  - spec/acceptance/fake/semi_static_pages/news/2011-07-26-replaced-download.md
153
171
  - spec/acceptance/news_spec.rb
154
172
  - spec/acceptance/page_spec.rb