semi_static 0.0.2 → 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.
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