akki 0.0.5 → 0.0.6

Sign up to get free protection for your applications and to get access to all the features.
@@ -19,9 +19,9 @@ Feature: Archives
19
19
  title: Article 1
20
20
  date: 2008/04/23
21
21
  """
22
- And I have the page "archives.haml":
22
+ And I have the page "archives.haml" with the contents
23
23
  """
24
- - articles.each do |article|
24
+ - context.articles.each do |article|
25
25
  %p= article.title
26
26
  """
27
27
  When I visit "/archives"
@@ -1,7 +1,11 @@
1
1
  Feature: Article Page
2
2
  In order to display articles
3
3
  As a user
4
- I want to be able to view an article
4
+ I want to be able to view an article and it's relevant information
5
+
6
+ Scenario: Article url that does not exist
7
+ When I visit "/1983/11/11/article-that-does-not-exist"
8
+ Then I should see a 404 html status code
5
9
 
6
10
  Scenario: Simple Article
7
11
  Given I have the article file "1983-05-23-simple-article.txt"
@@ -11,12 +15,64 @@ Feature: Article Page
11
15
 
12
16
  %p article content
13
17
  """
14
- And the article view:
18
+ And I have the page "article.haml" with the contents
19
+ """
20
+ %div.title= context.article.title
21
+ %div.content= render_article(context.article)
22
+ %a{:href => context.article.path}
23
+ """
24
+ When I visit "/1983/05/23/simple-article"
25
+ Then I should see:
26
+ """
27
+ <div class='title'>Simple Article</div>
28
+ <div class='content'><p>article content</p></div>
29
+ <a href='/1983/05/23/simple-article'></a>
30
+ """
31
+
32
+ Scenario: Article referencing settings object
33
+ Given I have the article file "1983-05-23-simple-article.txt"
34
+ """
35
+ title: Simple Article
36
+ date: 1983/05/23
37
+
38
+ = settings.title
39
+ = context.article.title
40
+ """
41
+ And the application setting "title" with the value "The Blog Title"
42
+ And I have the page "article.haml" with the contents
43
+ """
44
+ = render_article(context.article)
45
+ """
46
+ And the application setting "title" with the value "The Blog Title"
47
+ When I visit "/1983/05/23/simple-article"
48
+ Then I should see:
49
+ """
50
+ The Blog Title
51
+ Simple Article
52
+ """
53
+
54
+ Scenario: Article does not get rendered with the layout
55
+ Given I have the article file "1983-05-23-simple-article.txt"
56
+ """
57
+ title: Simple Article
58
+ date: 1983/05/23
59
+
60
+ article content
61
+ """
62
+ And I have the view "layout.haml" with the contents
63
+ """
64
+ Layout
65
+ = yield
66
+ """
67
+ And I have the page "article.haml" with the contents
15
68
  """
16
- %div.article= article.render
69
+ Article
70
+ = render_article(context.article)
17
71
  """
18
72
  When I visit "/1983/05/23/simple-article"
19
73
  Then I should see:
20
74
  """
21
- <div class='article'><p>article content</p></div>
75
+ Layout
76
+ Article
77
+ article content
22
78
  """
@@ -0,0 +1,45 @@
1
+ Feature: Feeds
2
+ In order to notify users when there are new blog entries
3
+ As a blogger
4
+ I want to be able to expose my rss feeds
5
+
6
+ Scenario: Feed content type
7
+ Given I have the page "index.xml.haml" with the contents
8
+ """
9
+ !!! XML
10
+ """
11
+ When I visit "/index.xml"
12
+ Then the content type should be "application/atom+xml"
13
+
14
+ Scenario: Index page
15
+ Given I have the page "index.xml.haml" with the contents
16
+ """
17
+ !!! XML
18
+ %feed{:xmlns => "http://www.w3.org/2005/Atom"}
19
+ %title
20
+ = settings.title
21
+ %id http://example.org
22
+ %updated
23
+ = context.articles.first.date.iso8601
24
+ """
25
+ And I have the article file "1983-05-23-simple-article.txt"
26
+ """
27
+ title: Simple Article
28
+ date: 1983/05/23
29
+
30
+ %p article content
31
+ """
32
+ When I visit "/index.xml"
33
+ Then I should see:
34
+ """
35
+ <?xml version='1.0' encoding='utf-8' ?>
36
+ <feed xmlns='http://www.w3.org/2005/Atom'>
37
+ <title>
38
+ The Blog Title
39
+ </title>
40
+ <id>http://example.org</id>
41
+ <updated>
42
+ 1983-05-23
43
+ </updated>
44
+ </feed>
45
+ """
@@ -0,0 +1,15 @@
1
+ Feature: Home Page
2
+ In order to display a main page
3
+ As a blogger
4
+ I want to be able to render a home page view
5
+
6
+ Scenario: Simple home page
7
+ Given I have the page "index.haml" with the contents
8
+ """
9
+ Welcome to my blog
10
+ """
11
+ When I visit "/"
12
+ Then I should see:
13
+ """
14
+ Welcome to my blog
15
+ """
@@ -4,7 +4,7 @@ Feature: Pages
4
4
  I want to display custom pages
5
5
 
6
6
  Scenario: Page
7
- Given I have the page "example-page.haml":
7
+ Given I have the page "example-page.haml" with the contents
8
8
  """
9
9
  %p This is the example page
10
10
  """
@@ -17,3 +17,30 @@ Feature: Pages
17
17
  Scenario: Page that doesn't exist
18
18
  When I visit "/page-that-does-not-exist/"
19
19
  Then I should see a 404 html status code
20
+
21
+ Scenario: Arbitrary articles can be rendered on a page
22
+ Given I have the article file "1983-05-23-simple-article.txt"
23
+ """
24
+ title: Simple Article
25
+ date: 1983/05/23
26
+
27
+ %p article content
28
+ """
29
+ And I have the article file "1982-04-01-arbitrary-article.txt"
30
+ """
31
+ title: Arbitrary Article
32
+ date: 1982/04/01
33
+
34
+ %p arbitrary article content
35
+ """
36
+ And I have the page "article.haml" with the contents
37
+ """
38
+ Article
39
+ = render_article(context.articles.last)
40
+ """
41
+ When I visit "/1983/05/23/simple-article"
42
+ Then I should see:
43
+ """
44
+ Article
45
+ <p>arbitrary article content</p>
46
+ """
@@ -8,3 +8,20 @@ require 'fileutils'
8
8
 
9
9
  Capybara.app = Akki::Application
10
10
  Akki::Application.set :environment, :test
11
+ Akki::Application.set :reload_templates, true
12
+
13
+ Before do
14
+ Akki::Article.reload_articles
15
+ end
16
+
17
+ module Akki
18
+ class Article
19
+ class << self
20
+ def reload_articles
21
+ if defined? @articles
22
+ remove_instance_variable :@articles
23
+ end
24
+ end
25
+ end
26
+ end
27
+ end
@@ -5,7 +5,6 @@ Before do
5
5
  FileUtils.mkdir_p(@articles_path)
6
6
  FileUtils.mkdir_p(@views_path)
7
7
  FileUtils.mkdir_p(@pages_path)
8
- Akki::Application.set :reload_templates, true
9
8
  end
10
9
 
11
10
  After do
@@ -19,13 +18,13 @@ Given /^I have the article file "([^"]*)"$/ do |article_file, article_contents|
19
18
  end
20
19
  end
21
20
 
22
- Given /^the article view:$/ do |contents|
23
- File.open(File.join(@views_path, "article.haml"), 'w') do |file|
21
+ Given /^I have the view "([^"]*)" with the contents$/ do |view, contents|
22
+ File.open(File.join(@views_path, view), 'w') do |file|
24
23
  file.write(contents)
25
24
  end
26
25
  end
27
26
 
28
- Given /^I have the page "([^"]*)":$/ do |page, contents|
27
+ Given /^I have the page "([^"]*)" with the contents$/ do |page, contents|
29
28
  File.open(File.join(@pages_path, page), 'w') do |file|
30
29
  file.write(contents)
31
30
  end
@@ -37,10 +36,18 @@ Given /^I visit "([^"]*)"$/ do |url|
37
36
  visit url
38
37
  end
39
38
 
39
+ Given /^the application setting "([^"]*)" with the value "([^"]*)"$/ do |name, value|
40
+ Akki::Application.set name, value
41
+ end
42
+
40
43
  Then /^I should see:$/ do |content|
41
- page.source.should include content
44
+ page.source.chomp.should == content
42
45
  end
43
46
 
44
47
  Then /^I should see a (\d+) html status code$/ do |status_code|
45
48
  page.status_code.should == status_code.to_i
46
49
  end
50
+
51
+ Then /^the content type should be "([^"]*)"$/ do |content_type|
52
+ page.response_headers['Content-Type'].should == content_type
53
+ end
@@ -1,14 +1,30 @@
1
1
  require 'sinatra/base'
2
2
  require 'akki/article'
3
+ require 'akki/context'
3
4
 
4
5
  module Akki
5
6
  class Application < Sinatra::Base
6
7
  set :root, File.join(File.dirname(__FILE__), '..', '..')
7
8
 
9
+ attr_reader :context
10
+
11
+ def create_default_context
12
+ @context = Context.new
13
+ @context.articles = Article.all
14
+ end
15
+
16
+ before do
17
+ create_default_context
18
+ end
19
+
20
+ get '/?' do
21
+ render_page :index
22
+ end
23
+
8
24
  get '/:page_name/?' do
9
25
  page_name = params[:page_name].to_sym
10
26
  pass unless settings.pages.include? page_name
11
- haml :"pages/#{page_name}", :locals => { :articles => Article.all }
27
+ render_page page_name
12
28
  end
13
29
 
14
30
  get "/:year/:month/:day/:slug/?" do
@@ -17,7 +33,23 @@ module Akki
17
33
  day = params[:day].to_i
18
34
  slug = params[:slug]
19
35
  article = Article::find(year, month, day, slug)
20
- haml :article, :locals => { :article => article }
36
+ pass unless article
37
+
38
+ @context.article = article
39
+ render_page :article
40
+ end
41
+
42
+ def render_page page = :index
43
+ if page.to_s.end_with? ".xml"
44
+ content_type :atom
45
+ haml :"pages/#{page}", :layout => false
46
+ else
47
+ haml :"pages/#{page}"
48
+ end
49
+ end
50
+
51
+ def render_article article
52
+ haml article.content, :layout => false
21
53
  end
22
54
  end
23
55
  end
@@ -4,40 +4,53 @@ module Akki
4
4
  class Article
5
5
  attr_accessor :title, :slug, :date, :content
6
6
 
7
- def initialize(title, date, content, slug)
8
- @title = title
9
- @date = date
10
- @content = content
11
- @slug = slug
7
+ def initialize(params)
8
+ @title = params[:title]
9
+ @date = params[:date]
10
+ @content = params[:content]
11
+ @slug = params[:slug]
12
12
  end
13
13
 
14
- def self.find year, month, day, slug
15
- article = all.select { |article|
16
- article.date.year == year &&
17
- article.date.month == month &&
18
- article.date.day == day &&
19
- article.slug == slug
20
- }.first
14
+ def path
15
+ date.strftime("/%Y/%m/%d/") + slug
21
16
  end
22
17
 
23
- def self.all
24
- articles = Dir.glob("articles/*").map do |path|
25
- parts = File.read(path).split("\n\n", 2)
26
- yaml = YAML.load(parts[0])
27
- content = parts[1]
28
- title = yaml['title']
29
- date = Date.strptime(yaml['date'], '%Y/%m/%d')
30
- slug = File.basename(path).split("-", 4).last.gsub(".txt", "")
31
- Article.new(title, date, content, slug)
18
+ class << self
19
+ def all
20
+ unless defined? @articles
21
+ @articles = get_all_articles
22
+ end
23
+ @articles
32
24
  end
33
25
 
34
- articles = articles.sort do |a, b|
35
- a.date <=> b.date
36
- end.reverse
37
- end
26
+ def find year, month, day, slug
27
+ article = all.select { |article|
28
+ article.date.year == year &&
29
+ article.date.month == month &&
30
+ article.date.day == day &&
31
+ article.slug == slug
32
+ }.first
33
+ end
34
+
35
+ private
38
36
 
39
- def render
40
- Haml::Engine.new(content).render
37
+ def get_all_articles
38
+ Dir.glob("articles/*").map { |path|
39
+ get_article path
40
+ }.sort { |a, b| a.date <=> b.date }.reverse
41
+ end
42
+
43
+ def get_article path
44
+ parts = File.read(path).split("\n\n", 2)
45
+ yaml = YAML.load(parts[0])
46
+ params = {
47
+ :content => parts[1],
48
+ :title => yaml['title'],
49
+ :date => Date.strptime(yaml['date'], '%Y/%m/%d'),
50
+ :slug => File.basename(path).split("-", 4).last.gsub(".txt", "")
51
+ }
52
+ Article.new(params)
53
+ end
41
54
  end
42
55
  end
43
56
  end
@@ -0,0 +1,5 @@
1
+ require 'ostruct'
2
+ module Akki
3
+ class Context < OpenStruct
4
+ end
5
+ end
@@ -1,3 +1,3 @@
1
1
  module Akki
2
- VERSION = "0.0.5"
2
+ VERSION = "0.0.6"
3
3
  end
@@ -17,9 +17,6 @@ module Akki
17
17
  FileUtils.mkdir_p @views_path
18
18
  FileUtils.mkdir_p @public_path
19
19
  FileUtils.mkdir_p @pages_path
20
-
21
- @pages = mock :pages
22
- @pages.stub!(:all).and_return []
23
20
  end
24
21
 
25
22
  after do
@@ -27,48 +24,113 @@ module Akki
27
24
  FileUtils.rm_rf @public_path
28
25
  end
29
26
 
30
- def create_view name, contents
31
- File.open(File.join(@views_path, name), 'w') do |file|
27
+ def write_file path, contents
28
+ File.open(path, 'w') do |file|
32
29
  file.write(contents)
33
30
  end
34
31
  end
35
32
 
33
+ def create_view name, contents
34
+ write_file(File.join(@views_path, name), contents)
35
+ end
36
+
36
37
  def create_public name, contents
37
- File.open(File.join(@public_path, name), 'w') do |file|
38
- file.write(contents)
39
- end
38
+ write_file(File.join(@public_path, name), contents)
40
39
  end
41
40
 
42
41
  def create_page name, contents
43
- File.open(File.join(@pages_path, name), 'w') do |file|
44
- file.write(contents)
42
+ write_file(File.join(@pages_path, name), contents)
43
+ end
44
+
45
+ def mock_context(value = "the context value")
46
+ context = Context.new
47
+ context.value = value
48
+ Context.stub!(:new).and_return(context)
49
+ context
50
+ end
51
+
52
+ describe "GET /" do
53
+ it "renders the index view" do
54
+ create_page "index.haml", "Home Page"
55
+ get "/"
56
+ last_response.body.should include "Home Page"
57
+ end
58
+
59
+ it "passes the context object through to the index view" do
60
+ mock_context
61
+ create_page "index.haml", "= context.value"
62
+ get "/"
63
+ last_response.body.should == "the context value\n"
64
+ end
65
+
66
+ it "adds the articles to the context object" do
67
+ context = mock_context
68
+ articles = mock(:articles).as_null_object
69
+ Article.stub!(:all).and_return(articles)
70
+ create_page 'index.haml', 'this is my page!'
71
+ context.should_receive(:articles=).with(articles)
72
+ get "/"
45
73
  end
46
74
  end
47
75
 
48
76
  describe "GET /23/10/2011/simple-article" do
49
77
  before do
50
78
  @article = mock :article
51
- @article.stub!(:render).and_return 'article content'
52
79
  @article.stub!(:title).and_return 'article title'
80
+ @article.stub!(:content).and_return 'article content'
81
+ create_page "article.haml", "= render_article(context.article)"
82
+ Article.stub!(:all).and_return([@article])
53
83
  Article.stub!(:find).and_return @article
54
84
  end
55
85
 
86
+ it "passes the context object through to the article view" do
87
+ mock_context
88
+ create_page("article.haml", "= context.value")
89
+ get '/2011/10/23/simple-article'
90
+ last_response.body.should == "the context value\n"
91
+ end
92
+
93
+ it "passes the context object through to the article" do
94
+ mock_context
95
+ @article.stub!(:content).and_return("= context")
96
+ get '/2011/10/23/simple-article'
97
+ last_response.body.should include "the context value"
98
+ end
99
+
100
+ it "adds the article to the context object" do
101
+ context = mock_context
102
+ context.article = @article
103
+ context.should_receive(:article=).with(@article)
104
+ get '/2011/10/23/simple-article'
105
+ end
106
+
107
+ it "adds the articles to the context object" do
108
+ context = mock_context
109
+ articles = mock(:articles).as_null_object
110
+ Article.stub!(:all).and_return(articles)
111
+ create_page 'page_name.haml', 'this is my page!'
112
+ context.should_receive(:articles=).with(articles)
113
+ get '/2011/10/23/simple-article'
114
+ end
115
+
56
116
  it "loads an article" do
57
- create_view "article.haml", ""
117
+ create_page "article.haml", ""
58
118
  Article.should_receive(:find).with(2011, 10, 23, "simple-article")
59
119
  get '/2011/10/23/simple-article'
60
120
  end
61
121
 
62
- it "passes the article through to the view" do
63
- create_view "article.haml", "= article.render"
122
+ it "does not render the layout when rendering the article content" do
123
+ create_view "layout.haml", "Layout\n= yield"
124
+ create_page "article.haml", "Article\n= render_article(context.article)"
64
125
  get '/2011/10/23/simple-article'
65
- last_response.body.should include "article content"
126
+ last_response.body.should_not include "Layout\nArticle\nLayout\narticle content"
66
127
  end
128
+ end
67
129
 
68
- it "renders the article" do
69
- create_view 'article.haml', '= article.render'
70
- get '/2011/10/23/simple-article'
71
- last_response.body.should include "article content"
130
+ describe "GET /2011/10/01/article-that-does-not-exist" do
131
+ it "should 404" do
132
+ get '/2011/10/01/article-that-does-not-exist'
133
+ last_response.should be_not_found
72
134
  end
73
135
  end
74
136
 
@@ -80,26 +142,43 @@ module Akki
80
142
  get '/page_name'
81
143
  last_response.body.should include 'this is my page!'
82
144
  end
83
- end
84
145
 
85
- describe "GET a page that lists articles" do
86
- it "lists all articles" do
87
- Article.stub!(:all).and_return([
88
- Article.new("article 1", nil, "article 1 content", "article1"),
89
- Article.new("article 2", nil, "article 2 content", "article2")
90
- ])
91
-
92
- @pages.stub!(:all).and_return ["archives"]
93
- Application.set :pages, [:archives]
94
- create_page 'archives.haml', "- articles.each do |a|\n %p= a.title"
95
- Application.set :pages => [:archives]
96
- get '/archives'
97
- last_response.body.should include "article 1"
98
- last_response.body.should include "article 2"
146
+ it "passes the context object through to the page view" do
147
+ mock_context
148
+ Application.set :pages, [:page_name]
149
+ create_page "page_name.haml", "= context.value"
150
+ get '/page_name'
151
+ last_response.body.should == "the context value\n"
152
+ end
153
+
154
+ it "adds the articles to the context object" do
155
+ articles = mock(:articles).as_null_object
156
+ mock_context.should_receive(:articles=).with(articles)
157
+ Article.stub!(:all).and_return(articles)
158
+ create_page 'page_name.haml', 'this is my page!'
159
+ get '/page_name'
160
+ end
161
+
162
+ context "template name ending in .xml" do
163
+ before do
164
+ create_page "index.xml.haml", "!!! XML"
165
+ Application.set :pages, [:"index.xml"]
166
+ end
167
+
168
+ it "sets the content type to xml" do
169
+ get "/index.xml"
170
+ last_response.content_type.should == "application/atom+xml"
171
+ end
172
+
173
+ it "does not render the layout" do
174
+ create_view "layout.haml", "Layout"
175
+ get "/index.xml"
176
+ last_response.body.should_not include "Layout"
177
+ end
99
178
  end
100
179
  end
101
180
 
102
- describe "GET page-that-does-not-exist" do
181
+ describe "GET page that doesn't exist" do
103
182
  it "404s" do
104
183
  get '/page-that-does-not-exist'
105
184
  last_response.should be_not_found
@@ -3,11 +3,6 @@ require 'akki/article'
3
3
 
4
4
  module Akki
5
5
  describe Article do
6
- it "renders the content" do
7
- article = Article.new("an article", Date.new(2011, 10, 10), "%p article content", "an-article")
8
- article.render.should include '<p>article content</p>'
9
- end
10
-
11
6
  def article_should_match article, title, date, content, slug
12
7
  article.title.should == title
13
8
  article.date.should == date
@@ -28,6 +23,18 @@ module Akki
28
23
  article_should_match(Article.all.last, "article 2", Date.new(2011, 11, 25), "article 2 content", "article2")
29
24
  end
30
25
 
26
+ it "only loads articles once" do
27
+ articles = [
28
+ "articles/2012-10-23-article1.txt",
29
+ "articles/2011-11-25-article2.txt"
30
+ ]
31
+ Dir.should_receive(:glob).once.and_return(articles)
32
+ File.should_receive(:read).once.and_return("title: article 1\ndate: 2012/10/23\n\narticle 1 content")
33
+ File.should_receive(:read).once.and_return("title: article 2\ndate: 2011/11/25\n\narticle 2 content")
34
+ Article.all
35
+ Article.all
36
+ end
37
+
31
38
  it "sorts articles by date" do
32
39
  articles = [
33
40
  "articles/2009-10-23-article1.txt",
@@ -36,17 +43,23 @@ module Akki
36
43
  Dir.stub!(:glob).with("articles/*").and_return(articles)
37
44
  File.stub!(:read).with(articles.first).and_return("title: article 1\ndate: 2009/10/23\n\narticle 1 content")
38
45
  File.stub!(:read).with(articles.last).and_return("title: article 2\ndate: 2011/11/25\n\narticle 2 content")
46
+
39
47
  Article.all.first.title.should == "article 2"
40
48
  Article.all.last.title.should == "article 1"
41
49
  end
42
50
 
43
51
  it "finds an article" do
44
52
  articles = [
45
- Article.new("an article", Date.new(2011, 10, 10), "article 1 content", "an-article"),
46
- Article.new("Some Article", Date.new(2033, 4, 3), "article 2 content", "some-article")
53
+ Article.new({:title => "an article", :date => Date.new(2011, 10, 10), :slug => "an-article"}),
54
+ Article.new({:title => "Some Article", :date => Date.new(2033, 4, 3), :slug => "some-article"})
47
55
  ]
48
56
  Article.stub!(:all).and_return(articles)
49
57
  Article.find(2033, 4, 3, "some-article").should == articles.last
50
58
  end
59
+
60
+ it "knows it's path" do
61
+ article = Article.new(:date => Date.new(1220, 5, 3), :slug => "the-article-slug")
62
+ article.path.should == "/1220/05/03/the-article-slug"
63
+ end
51
64
  end
52
65
  end
@@ -0,0 +1,11 @@
1
+ require 'akki/context'
2
+
3
+ module Akki
4
+ describe Context do
5
+ it "stores arbitrary values" do
6
+ context = Context.new
7
+ context.value = "hello"
8
+ context.value.should == "hello"
9
+ end
10
+ end
11
+ end
@@ -3,3 +3,21 @@ require 'akki'
3
3
  require 'rack/test'
4
4
 
5
5
  Akki::Application::set :environment, :test
6
+
7
+ RSpec.configure do |config|
8
+ config.before do
9
+ Akki::Article.reload_articles
10
+ end
11
+ end
12
+
13
+ module Akki
14
+ class Article
15
+ class << self
16
+ def reload_articles
17
+ if defined? @articles
18
+ remove_instance_variable :@articles
19
+ end
20
+ end
21
+ end
22
+ end
23
+ end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: akki
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.5
4
+ version: 0.0.6
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -9,12 +9,11 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2011-08-20 00:00:00.000000000 +01:00
13
- default_executable:
12
+ date: 2011-09-13 00:00:00.000000000Z
14
13
  dependencies:
15
14
  - !ruby/object:Gem::Dependency
16
15
  name: sinatra
17
- requirement: &70187564151800 !ruby/object:Gem::Requirement
16
+ requirement: &70275643805780 !ruby/object:Gem::Requirement
18
17
  none: false
19
18
  requirements:
20
19
  - - ! '>='
@@ -22,10 +21,10 @@ dependencies:
22
21
  version: '0'
23
22
  type: :runtime
24
23
  prerelease: false
25
- version_requirements: *70187564151800
24
+ version_requirements: *70275643805780
26
25
  - !ruby/object:Gem::Dependency
27
26
  name: haml
28
- requirement: &70187564150840 !ruby/object:Gem::Requirement
27
+ requirement: &70275643805140 !ruby/object:Gem::Requirement
29
28
  none: false
30
29
  requirements:
31
30
  - - ! '>='
@@ -33,10 +32,10 @@ dependencies:
33
32
  version: '0'
34
33
  type: :runtime
35
34
  prerelease: false
36
- version_requirements: *70187564150840
35
+ version_requirements: *70275643805140
37
36
  - !ruby/object:Gem::Dependency
38
37
  name: rake
39
- requirement: &70187564149840 !ruby/object:Gem::Requirement
38
+ requirement: &70275643804460 !ruby/object:Gem::Requirement
40
39
  none: false
41
40
  requirements:
42
41
  - - ! '>='
@@ -44,10 +43,10 @@ dependencies:
44
43
  version: '0'
45
44
  type: :development
46
45
  prerelease: false
47
- version_requirements: *70187564149840
46
+ version_requirements: *70275643804460
48
47
  - !ruby/object:Gem::Dependency
49
48
  name: rspec
50
- requirement: &70187564148700 !ruby/object:Gem::Requirement
49
+ requirement: &70275643803780 !ruby/object:Gem::Requirement
51
50
  none: false
52
51
  requirements:
53
52
  - - ! '>='
@@ -55,10 +54,10 @@ dependencies:
55
54
  version: '0'
56
55
  type: :development
57
56
  prerelease: false
58
- version_requirements: *70187564148700
57
+ version_requirements: *70275643803780
59
58
  - !ruby/object:Gem::Dependency
60
59
  name: cucumber
61
- requirement: &70187564147380 !ruby/object:Gem::Requirement
60
+ requirement: &70275643791240 !ruby/object:Gem::Requirement
62
61
  none: false
63
62
  requirements:
64
63
  - - ! '>='
@@ -66,10 +65,10 @@ dependencies:
66
65
  version: '0'
67
66
  type: :development
68
67
  prerelease: false
69
- version_requirements: *70187564147380
68
+ version_requirements: *70275643791240
70
69
  - !ruby/object:Gem::Dependency
71
70
  name: capybara
72
- requirement: &70187564146080 !ruby/object:Gem::Requirement
71
+ requirement: &70275643790500 !ruby/object:Gem::Requirement
73
72
  none: false
74
73
  requirements:
75
74
  - - ! '>='
@@ -77,7 +76,7 @@ dependencies:
77
76
  version: '0'
78
77
  type: :development
79
78
  prerelease: false
80
- version_requirements: *70187564146080
79
+ version_requirements: *70275643790500
81
80
  description: ''
82
81
  email:
83
82
  - andrew.vos@gmail.com
@@ -94,17 +93,20 @@ files:
94
93
  - config.ru
95
94
  - features/archives.feature
96
95
  - features/articles.feature
96
+ - features/feeds.feature
97
+ - features/home_page.feature
97
98
  - features/pages.feature
98
99
  - features/step_definitions/env.rb
99
100
  - features/step_definitions/steps.rb
100
101
  - lib/akki.rb
101
102
  - lib/akki/application.rb
102
103
  - lib/akki/article.rb
104
+ - lib/akki/context.rb
103
105
  - lib/akki/version.rb
104
106
  - spec/application_spec.rb
105
107
  - spec/article_spec.rb
108
+ - spec/context_spec.rb
106
109
  - spec/spec_helper.rb
107
- has_rdoc: true
108
110
  homepage: ''
109
111
  licenses: []
110
112
  post_install_message:
@@ -119,7 +121,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
119
121
  version: '0'
120
122
  segments:
121
123
  - 0
122
- hash: 4232723760955487062
124
+ hash: 3090500227323535787
123
125
  required_rubygems_version: !ruby/object:Gem::Requirement
124
126
  none: false
125
127
  requirements:
@@ -128,19 +130,22 @@ required_rubygems_version: !ruby/object:Gem::Requirement
128
130
  version: '0'
129
131
  segments:
130
132
  - 0
131
- hash: 4232723760955487062
133
+ hash: 3090500227323535787
132
134
  requirements: []
133
135
  rubyforge_project: akki
134
- rubygems_version: 1.6.2
136
+ rubygems_version: 1.8.10
135
137
  signing_key:
136
138
  specification_version: 3
137
139
  summary: ''
138
140
  test_files:
139
141
  - features/archives.feature
140
142
  - features/articles.feature
143
+ - features/feeds.feature
144
+ - features/home_page.feature
141
145
  - features/pages.feature
142
146
  - features/step_definitions/env.rb
143
147
  - features/step_definitions/steps.rb
144
148
  - spec/application_spec.rb
145
149
  - spec/article_spec.rb
150
+ - spec/context_spec.rb
146
151
  - spec/spec_helper.rb