mist 0.6.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (147) hide show
  1. data/.gitignore +18 -0
  2. data/.rspec +1 -0
  3. data/.rvmrc +1 -0
  4. data/.travis.yml +13 -0
  5. data/Gemfile +3 -0
  6. data/Gemfile.lock +192 -0
  7. data/README.md +108 -0
  8. data/Rakefile +9 -0
  9. data/app/assets/images/mist/ui-bg_diagonals-thick_18_b81900_40x40.png +0 -0
  10. data/app/assets/images/mist/ui-bg_diagonals-thick_20_666666_40x40.png +0 -0
  11. data/app/assets/images/mist/ui-bg_flat_10_000000_40x100.png +0 -0
  12. data/app/assets/images/mist/ui-bg_glass_100_f6f6f6_1x400.png +0 -0
  13. data/app/assets/images/mist/ui-bg_glass_100_fdf5ce_1x400.png +0 -0
  14. data/app/assets/images/mist/ui-bg_glass_65_ffffff_1x400.png +0 -0
  15. data/app/assets/images/mist/ui-bg_gloss-wave_35_f6a828_500x100.png +0 -0
  16. data/app/assets/images/mist/ui-bg_highlight-soft_100_eeeeee_1x100.png +0 -0
  17. data/app/assets/images/mist/ui-bg_highlight-soft_75_ffe45c_1x100.png +0 -0
  18. data/app/assets/images/mist/ui-icons_222222_256x240.png +0 -0
  19. data/app/assets/images/mist/ui-icons_228ef1_256x240.png +0 -0
  20. data/app/assets/images/mist/ui-icons_ef8c08_256x240.png +0 -0
  21. data/app/assets/images/mist/ui-icons_ffd27a_256x240.png +0 -0
  22. data/app/assets/images/mist/ui-icons_ffffff_256x240.png +0 -0
  23. data/app/assets/javascripts/mist/jquery-ui-1.8.17.custom.min.js +356 -0
  24. data/app/assets/javascripts/mist/posts.js.coffee +3 -0
  25. data/app/assets/javascripts/mist_core.js +3 -0
  26. data/app/assets/stylesheets/mist/posts.css.sass +97 -0
  27. data/app/assets/stylesheets/mist/scaffolds.css.scss +56 -0
  28. data/app/assets/stylesheets/mist/ui-lightness/jquery-ui-1.8.17.custom.css +565 -0
  29. data/app/assets/stylesheets/mist_core.css +4 -0
  30. data/app/controllers/application_controller.rb +3 -0
  31. data/app/controllers/mist/posts_controller.rb +130 -0
  32. data/app/helpers/mist/posts_helper.rb +61 -0
  33. data/app/mailers/.gitkeep +0 -0
  34. data/app/models/.gitkeep +0 -0
  35. data/app/models/mist/post.rb +240 -0
  36. data/app/models/mist/post_sweeper.rb +63 -0
  37. data/app/views/layouts/mist/posts.html.erb +66 -0
  38. data/app/views/mist/posts/_form.html.erb +55 -0
  39. data/app/views/mist/posts/_post.html.erb +19 -0
  40. data/app/views/mist/posts/_sidebar_title.html.erb +5 -0
  41. data/app/views/mist/posts/edit.html.erb +16 -0
  42. data/app/views/mist/posts/feed.atom.builder +17 -0
  43. data/app/views/mist/posts/index.html.erb +31 -0
  44. data/app/views/mist/posts/new.html.erb +15 -0
  45. data/app/views/mist/posts/show.html.erb +3 -0
  46. data/config/cucumber.yml +8 -0
  47. data/config/environment.rb +1 -0
  48. data/config/routes.rb +7 -0
  49. data/features/atom_feed.feature +20 -0
  50. data/features/authorize_create_post.feature +14 -0
  51. data/features/authorize_destroy_post.feature +27 -0
  52. data/features/authorize_update_post.feature +28 -0
  53. data/features/authorize_view_unpublished.feature +22 -0
  54. data/features/create_post.feature +13 -0
  55. data/features/destroy_post.feature +13 -0
  56. data/features/format_with_markdown.feature +13 -0
  57. data/features/popular_posts.feature +35 -0
  58. data/features/recent_posts.feature +28 -0
  59. data/features/similar_posts.feature +43 -0
  60. data/features/step_definitions/authorization_steps.rb +17 -0
  61. data/features/step_definitions/filesystem_steps.rb +13 -0
  62. data/features/step_definitions/page_steps.rb +43 -0
  63. data/features/step_definitions/post_steps.rb +58 -0
  64. data/features/step_definitions/sidebar_steps.rb +21 -0
  65. data/features/support/env.rb +58 -0
  66. data/features/support/setup.rb +15 -0
  67. data/features/update_post.feature +19 -0
  68. data/gemfiles/common +20 -0
  69. data/gemfiles/rails-3.1.3 +4 -0
  70. data/gemfiles/rails-3.1.3.lock +195 -0
  71. data/gemfiles/rails-3.2.0 +4 -0
  72. data/lib/generators/mist/USAGE +13 -0
  73. data/lib/generators/mist/setup_generator.rb +21 -0
  74. data/lib/generators/mist/templates/initializer.rb +17 -0
  75. data/lib/generators/mist/templates/mist.css.scss +2 -0
  76. data/lib/generators/mist/templates/mist.js.coffee +1 -0
  77. data/lib/generators/mist/views_generator.rb +11 -0
  78. data/lib/mist.rb +26 -0
  79. data/lib/mist/code_example_parser.rb +86 -0
  80. data/lib/mist/configuration.rb +68 -0
  81. data/lib/mist/configuration/author.rb +8 -0
  82. data/lib/mist/engine.rb +12 -0
  83. data/lib/mist/git_file_system_history.rb +66 -0
  84. data/lib/mist/git_model.rb +154 -0
  85. data/lib/mist/git_model/attributes.rb +21 -0
  86. data/lib/mist/git_model/class_methods.rb +141 -0
  87. data/lib/mist/permalink.rb +5 -0
  88. data/lib/mist/repository.rb +15 -0
  89. data/lib/mist/version.rb +8 -0
  90. data/mist.gemspec +33 -0
  91. data/spec/controllers/posts_controller_spec.rb +263 -0
  92. data/spec/dummy_rails_app/app/assets/javascripts/mist.js.coffee +1 -0
  93. data/spec/dummy_rails_app/app/assets/stylesheets/mist.css.scss +2 -0
  94. data/spec/dummy_rails_app/app/views/layouts/mist/posts.html.erb +60 -0
  95. data/spec/dummy_rails_app/config.ru +4 -0
  96. data/spec/dummy_rails_app/config/application.rb +48 -0
  97. data/spec/dummy_rails_app/config/boot.rb +7 -0
  98. data/spec/dummy_rails_app/config/database.yml +28 -0
  99. data/spec/dummy_rails_app/config/environment.rb +5 -0
  100. data/spec/dummy_rails_app/config/environments/development.rb +32 -0
  101. data/spec/dummy_rails_app/config/environments/production.rb +60 -0
  102. data/spec/dummy_rails_app/config/environments/test.rb +42 -0
  103. data/spec/dummy_rails_app/config/initializers/active_gist_credentials.rb +8 -0
  104. data/spec/dummy_rails_app/config/initializers/backtrace_silencers.rb +7 -0
  105. data/spec/dummy_rails_app/config/initializers/inflections.rb +10 -0
  106. data/spec/dummy_rails_app/config/initializers/mime_types.rb +5 -0
  107. data/spec/dummy_rails_app/config/initializers/mist.rb +17 -0
  108. data/spec/dummy_rails_app/config/initializers/secret_token.rb +7 -0
  109. data/spec/dummy_rails_app/config/initializers/session_store.rb +8 -0
  110. data/spec/dummy_rails_app/config/initializers/wrap_parameters.rb +14 -0
  111. data/spec/dummy_rails_app/config/locales/en.yml +5 -0
  112. data/spec/dummy_rails_app/config/routes.rb +3 -0
  113. data/spec/dummy_rails_app/db/schema.rb +22 -0
  114. data/spec/dummy_rails_app/db/seeds.rb +7 -0
  115. data/spec/dummy_rails_app/doc/README_FOR_APP +2 -0
  116. data/spec/dummy_rails_app/lib/assets/.gitkeep +0 -0
  117. data/spec/dummy_rails_app/lib/tasks/.gitkeep +0 -0
  118. data/spec/dummy_rails_app/lib/tasks/cucumber.rake +65 -0
  119. data/spec/dummy_rails_app/public/404.html +26 -0
  120. data/spec/dummy_rails_app/public/422.html +26 -0
  121. data/spec/dummy_rails_app/public/500.html +26 -0
  122. data/spec/dummy_rails_app/public/favicon.ico +0 -0
  123. data/spec/dummy_rails_app/public/robots.txt +5 -0
  124. data/spec/dummy_rails_app/script/cucumber +10 -0
  125. data/spec/dummy_rails_app/script/rails +6 -0
  126. data/spec/dummy_rails_app/vendor/assets/stylesheets/.gitkeep +0 -0
  127. data/spec/dummy_rails_app/vendor/plugins/.gitkeep +0 -0
  128. data/spec/factories/posts.rb +8 -0
  129. data/spec/fixtures/gist_404 +6 -0
  130. data/spec/fixtures/gist_with_1_code_example +66 -0
  131. data/spec/helpers/posts_helper_spec.rb +64 -0
  132. data/spec/lib/mist/code_example_parser_spec.rb +135 -0
  133. data/spec/lib/mist/configuration_spec.rb +88 -0
  134. data/spec/lib/mist/permalink_spec.rb +17 -0
  135. data/spec/lib/mist/repository_spec.rb +20 -0
  136. data/spec/models/mist/git_model_spec.rb +260 -0
  137. data/spec/models/mist/post_spec.rb +575 -0
  138. data/spec/requests/posts_caching_spec.rb +152 -0
  139. data/spec/spec_helper.rb +20 -0
  140. data/spec/support/cache_helpers.rb +71 -0
  141. data/spec/support/config.rb +42 -0
  142. data/spec/support/fakeweb.rb +3 -0
  143. data/spec/views/mist/posts/edit.html.erb_spec.rb +11 -0
  144. data/spec/views/mist/posts/index.html.erb_spec.rb +27 -0
  145. data/spec/views/mist/posts/new.html.erb_spec.rb +15 -0
  146. data/spec/views/mist/posts/show.html.erb_spec.rb +11 -0
  147. metadata +371 -0
@@ -0,0 +1,13 @@
1
+ Feature: Create new post
2
+ As a blog owner
3
+ In order to add content and attract users to my blog
4
+ I want to create a post
5
+
6
+ Scenario: Create new post from index
7
+ Given I am on the posts page
8
+ When I follow "New Post"
9
+ And I fill in "Title" with "Post title"
10
+ And I fill in "Content" with "This is post content"
11
+ And I press "Save"
12
+ Then I should see "Post title"
13
+ And I should see "This is post content"
@@ -0,0 +1,13 @@
1
+ Feature: Destroy existing post
2
+ As a blog owner
3
+ In order to remove old content that is no longer useful
4
+ I want to destroy an existing post
5
+
6
+ Background:
7
+ Given I have published a post called "Post title"
8
+ And I am on the posts page
9
+
10
+ Scenario: Update existing post from index
11
+ When I follow "Destroy"
12
+ Then I should be on the posts page
13
+ And I should not see "Post title"
@@ -0,0 +1,13 @@
1
+ Feature: Format posts with markdown
2
+ As a blog maintainer
3
+ In order to make pages easier to read
4
+ I want them to be automatically formatted using Markdown
5
+
6
+ Scenario: format posts
7
+ Given I am on the posts page
8
+ When I follow "New Post"
9
+ And I fill in "Title" with "Post title"
10
+ And I fill in "Content" with "* post text"
11
+ And I press "Save"
12
+ # it's testing content, not code! I swear!
13
+ Then the page source should contain "<li>post text</li>"
@@ -0,0 +1,35 @@
1
+ Feature: Popular Posts
2
+ As a blog owner
3
+ In order to direct viewers to frequently-requested information
4
+ I want the most popular posts to appear in the sidebar
5
+
6
+ Scenario: No posts yet
7
+ When I am on the posts page
8
+ Then I should not see "Popular"
9
+
10
+ Scenario: One post, not viewed
11
+ Given I have published a post called "Post title"
12
+ When I am on the posts page
13
+ Then the "popular posts" sidebar should contain "Post title"
14
+
15
+ Scenario: Ordered posts of varying popularity
16
+ Given I have published these posts:
17
+ | title | popularity |
18
+ | one | 10 |
19
+ | two | 5 |
20
+ | three | 1 |
21
+ | four | 3 |
22
+ | five | 7 |
23
+ | six | 0 |
24
+ | seven | 8 |
25
+ When I am on the posts page
26
+ Then the "popular posts" sidebar should contain:
27
+ | title |
28
+ | one |
29
+ | seven |
30
+ | five |
31
+ | two |
32
+ | four |
33
+ And the "popular posts" sidebar should not contain "three"
34
+ And the "popular posts" sidebar should not contain "six"
35
+
@@ -0,0 +1,28 @@
1
+ Feature: Recent posts
2
+ In order to make up-to-date content more easily accessible
3
+ As a blog owner
4
+ I want to list the most recent posts in the sidebar
5
+
6
+ Scenario: No posts yet
7
+ When I go to the posts page
8
+ Then I should not see "Recent"
9
+
10
+ Scenario: Most recent of 7
11
+ Given I have published these posts:
12
+ | title |
13
+ | one |
14
+ | two |
15
+ | three |
16
+ | four |
17
+ | five |
18
+ | six |
19
+ | seven |
20
+ When I go to the posts page
21
+ Then the "recent posts" sidebar should contain:
22
+ | title |
23
+ | seven |
24
+ | six |
25
+ | five |
26
+ | four |
27
+ | three |
28
+
@@ -0,0 +1,43 @@
1
+ Feature: Similar Posts
2
+ As a blog owner
3
+ In order to persuade visitors to stay longer
4
+ I want to show them other posts similar to the current one
5
+
6
+ Background:
7
+ Given I have published these posts:
8
+ | title | tags |
9
+ | one | t1, t2, t3 |
10
+ | two | t1, t4 |
11
+ | three | t6, t8 |
12
+ | four | t1, t2, t5, t7 |
13
+ | five | |
14
+ | six | t3, t4, t5 |
15
+ | seven | t1, t2, t3, t4 |
16
+
17
+ Scenario: Don't show similar posts on index page, because index is not a post
18
+ When I am on the posts page
19
+ Then I should not see "Similar"
20
+
21
+ Scenario: Show similar posts in order of relevance
22
+ # "relevance" is here defined as "number of matching tags, descending".
23
+ When I look at the "one" post
24
+ Then I should see "Similar"
25
+ And the "similar posts" sidebar should contain:
26
+ | title |
27
+ | seven |
28
+ | four |
29
+ | six |
30
+ | two |
31
+ And the "similar posts" sidebar should not contain:
32
+ | title |
33
+ | one |
34
+ | three |
35
+ | five |
36
+
37
+ Scenario: Don't show similar posts sidebar if there are no similar posts
38
+ When I look at the "three" post
39
+ Then I should not see "Similar"
40
+
41
+ Scenario: Don't show similar posts sidebar if there are no tags
42
+ When I look at the "five" post
43
+ Then I should not see "Similar"
@@ -0,0 +1,17 @@
1
+ Given /^I am not authorized$/ do
2
+ Mist.reset_authorizations!
3
+ end
4
+
5
+ Given /^I am authorized$/ do
6
+ Mist.authorize { |controller| true }
7
+ end
8
+
9
+ Given /^I am authorized to (.*)$/ do |what|
10
+ what = what.gsub(/ /, '_').underscore.to_sym
11
+ Mist.authorize(what) { |controller| true }
12
+ end
13
+
14
+ Given /^I am not authorized to (.*)$/ do |what|
15
+ what = what.gsub(/ /, '_').underscore.to_sym
16
+ Mist.authorize(what) { |controller| false }
17
+ end
@@ -0,0 +1,13 @@
1
+ When /^I run "([^"]*)"$/ do |arg1|
2
+ @execution_results = %x[#{arg1}]
3
+ $?.should be_success
4
+ @execution_results.should_not match(/Could not find generator/)
5
+ end
6
+
7
+ Then /^there should be a directory called "([^"]*)"$/ do |arg1|
8
+ File.should be_directory(arg1)
9
+ end
10
+
11
+ Then /^the "([^"]*)" directory should be a git repository$/ do |arg1|
12
+ step 'there should be a directory called "%s/.git"' % arg1
13
+ end
@@ -0,0 +1,43 @@
1
+ Given /^I am on the (.*?) page$/ do |name|
2
+ visit Mist::Engine.routes.url_helpers.send("#{name.gsub(/ /, '_')}_path")
3
+ end
4
+
5
+ Given /^I am on the (.*?) page in "([^"]*)" format$/ do |name, format|
6
+ visit Mist::Engine.routes.url_helpers.send("#{name.gsub(/ /, '_')}_path", :format => format)
7
+ end
8
+
9
+ When /^I follow "([^"]*)"$/ do |arg1|
10
+ click_link arg1
11
+ end
12
+
13
+ When /^I fill in "([^"]*)" with "([^"]*)"$/ do |arg1, arg2|
14
+ fill_in arg1, :with => arg2
15
+ end
16
+
17
+ When /^I press "([^"]*)"$/ do |arg1|
18
+ click_button arg1
19
+ end
20
+
21
+ Then /^I should be on the (.*?) page$/ do |name|
22
+ page.current_url.should =~ /^http:\/\/www.example.com\/#{name}\/?/
23
+ end
24
+
25
+ Then /^I should see "([^"]*)"$/ do |arg1|
26
+ page.should have_content(arg1)
27
+ end
28
+
29
+ When /^I go to the (.*?) page$/ do |name|
30
+ visit Mist::Engine.routes.url_helpers.send("#{name.gsub(/ /, '_')}_path")
31
+ end
32
+
33
+ Then /^I should not see "([^"]*)"$/ do |content|
34
+ page.should_not have_content(content)
35
+ end
36
+
37
+ Then /^show me the response$/ do
38
+ puts page.body
39
+ end
40
+
41
+ Then /^the page source should contain "([^"]*)"$/ do |src|
42
+ page.body.should match(Regexp.compile(Regexp.escape src))
43
+ end
@@ -0,0 +1,58 @@
1
+ Given /^I have created a post called "([^"]*)"$/ do |title|
2
+ step 'I am on the posts page'
3
+ step 'I follow "New Post"'
4
+ step 'I fill in "Title" with "%s"' % title
5
+ step 'I fill in "Content" with "This is post content"'
6
+ step 'I press "Save"'
7
+ end
8
+
9
+ Given /^I have published a post called "([^"]*)"$/ do |title|
10
+ step 'I am on the posts page'
11
+ step 'I follow "New Post"'
12
+ step 'I fill in "Published at" with "%s"' % Time.now
13
+ step 'I fill in "Title" with "%s"' % title
14
+ step 'I fill in "Content" with "This is post content"'
15
+ step 'I press "Save"'
16
+ end
17
+
18
+ Given /^I have published these posts:$/ do |table|
19
+ hashes = table.hashes
20
+ count = hashes.size
21
+
22
+ table.hashes.each_with_index do |hash, index|
23
+ attributes = hash.reverse_merge({'title' => "post#{index}",
24
+ 'content' => "post#{index} content",
25
+ 'published_at' => (count - index).minutes.ago})
26
+ step 'I am on the posts page'
27
+ step 'I follow "New Post"'
28
+ step 'I fill in "Published at" with "%s"' % attributes['published_at']
29
+ step 'I fill in "Title" with "%s"' % attributes['title']
30
+ step 'I fill in "Content" with "%s"' % attributes['content']
31
+ step 'I fill in "Tags" with "%s"' % attributes['tags']
32
+ step 'I press "Save"'
33
+
34
+ if attributes['popularity']
35
+ p = Mist::Post.last
36
+ p.popularity = attributes['popularity'].to_i
37
+ p.save!
38
+ end
39
+ end
40
+ end
41
+
42
+ When /^I create a post called "([^"]*)"$/ do |title|
43
+ step 'I have created a post called "%s"' % title
44
+ end
45
+
46
+ When /^I publish a post called "([^"]*)"$/ do |title|
47
+ step 'I have published a post called "%s"' % title
48
+ end
49
+
50
+ When /^I edit the "([^"]*)" post$/ do |post_title|
51
+ step 'I look at the "%s" post' % post_title
52
+ step 'I follow "Edit"'
53
+ end
54
+
55
+ When /^I look at the "([^"]*)" post$/ do |post_title|
56
+ step 'I am on the posts page'
57
+ step 'I follow "%s"' % post_title
58
+ end
@@ -0,0 +1,21 @@
1
+ Then /^the "([^"]*)" sidebar should contain:$/ do |which, table|
2
+ table.hashes.each do |hash|
3
+ step 'the "%s" sidebar should contain "%s"' % [which, hash['title']]
4
+ end
5
+ end
6
+
7
+ Then /^the "([^"]*)" sidebar should not contain:$/ do |which, table|
8
+ table.hashes.each do |hash|
9
+ step 'the "%s" sidebar should not contain "%s"' % [which, hash['title']]
10
+ end
11
+ end
12
+
13
+ Then /^the "([^"]*)" sidebar should contain "([^"]*)"$/ do |which, content|
14
+ id = "sidebar-#{which.gsub(/ /, '-')}"
15
+ find('#'+id).should have_content(content)
16
+ end
17
+
18
+ Then /^the "([^"]*)" sidebar should not contain "([^"]*)"$/ do |which, content|
19
+ id = "sidebar-#{which.gsub(/ /, '-')}"
20
+ find('#'+id).should_not have_content(content)
21
+ end
@@ -0,0 +1,58 @@
1
+ # IMPORTANT: This file is generated by cucumber-rails - edit at your own peril.
2
+ # It is recommended to regenerate this file in the future when you upgrade to a
3
+ # newer version of cucumber-rails. Consider adding your own code to a new file
4
+ # instead of editing this one. Cucumber will automatically load all features/**/*.rb
5
+ # files.
6
+
7
+ require File.expand_path('../../spec/dummy_rails_app/config/environment', File.dirname(__FILE__))
8
+ Rails.application.config.cache_classes = true
9
+ require 'cucumber/rails'
10
+
11
+ # Capybara defaults to XPath selectors rather than Webrat's default of CSS3. In
12
+ # order to ease the transition to Capybara we set the default here. If you'd
13
+ # prefer to use XPath just remove this line and adjust any selectors in your
14
+ # steps to use the XPath syntax.
15
+ Capybara.default_selector = :css
16
+
17
+ # By default, any exception happening in your Rails application will bubble up
18
+ # to Cucumber so that your scenario will fail. This is a different from how
19
+ # your application behaves in the production environment, where an error page will
20
+ # be rendered instead.
21
+ #
22
+ # Sometimes we want to override this default behaviour and allow Rails to rescue
23
+ # exceptions and display an error page (just like when the app is running in production).
24
+ # Typical scenarios where you want to do this is when you test your error pages.
25
+ # There are two ways to allow Rails to rescue exceptions:
26
+ #
27
+ # 1) Tag your scenario (or feature) with @allow-rescue
28
+ #
29
+ # 2) Set the value below to true. Beware that doing this globally is not
30
+ # recommended as it will mask a lot of errors for you!
31
+ #
32
+ ActionController::Base.allow_rescue = false
33
+
34
+ # Remove/comment out the lines below if your app doesn't have a database.
35
+ # For some databases (like MongoDB and CouchDB) you may need to use :truncation instead.
36
+ begin
37
+ DatabaseCleaner.strategy = :transaction
38
+ rescue NameError
39
+ raise "You need to add database_cleaner to your Gemfile (in the :test group) if you wish to use it."
40
+ end
41
+
42
+ # You may also want to configure DatabaseCleaner to use different strategies for certain features and scenarios.
43
+ # See the DatabaseCleaner documentation for details. Example:
44
+ #
45
+ # Before('@no-txn,@selenium,@culerity,@celerity,@javascript') do
46
+ # DatabaseCleaner.strategy = :truncation, {:except => %w[widgets]}
47
+ # end
48
+ #
49
+ # Before('~@no-txn', '~@selenium', '~@culerity', '~@celerity', '~@javascript') do
50
+ # DatabaseCleaner.strategy = :transaction
51
+ # end
52
+ #
53
+
54
+ # Possible values are :truncation and :transaction
55
+ # The :transaction strategy is faster, but might give you threading problems.
56
+ # See https://github.com/cucumber/cucumber-rails/blob/master/features/choose_javascript_database_strategy.feature
57
+ Cucumber::Rails::Database.javascript_strategy = :truncation
58
+
@@ -0,0 +1,15 @@
1
+ require 'fakeweb'
2
+
3
+ Before do
4
+ FakeWeb.allow_net_connect = false
5
+ FileUtils.rm_rf Mist.repository_location
6
+ FileUtils.rm_rf Rails.root.join('tmp/cache')
7
+ Mist.reload_repository!
8
+ Mist.reset_authorizations!
9
+ Mist.authorize { |controller| true } # user is an admin by default
10
+
11
+ path = File.expand_path('../../spec/dummy_rails_app/public/posts.html', File.dirname(__FILE__))
12
+ FileUtils.rm path if File.exist?(path)
13
+ path = File.join(File.dirname(path), 'posts')
14
+ FileUtils.rm_rf path
15
+ end
@@ -0,0 +1,19 @@
1
+ Feature: Update existing post
2
+ As a blog owner
3
+ In order to keep content up-to-date so users keep visiting
4
+ I want to update an existing post
5
+
6
+ Background:
7
+ Given I have published a post called "Post title"
8
+
9
+ Scenario: Update existing post from index
10
+ When I edit the "Post title" post
11
+ And I fill in "Title" with "New title"
12
+ And I fill in "Content" with "This is MOAR post content"
13
+ And I press "Save"
14
+ Then I should see "New title"
15
+ And I should see "This is MOAR post content"
16
+
17
+ When I go to the posts page
18
+ Then I should see "New title"
19
+ And I should not see "Post title"
data/gemfiles/common ADDED
@@ -0,0 +1,20 @@
1
+ source 'http://rubygems.org'
2
+
3
+ gem 'sqlite3'
4
+
5
+ # Gems used only for assets and not required
6
+ # in production environments by default.
7
+ group :assets do
8
+ gem 'sass-rails', '>= 3.1.5'
9
+ gem 'coffee-rails', '>= 3.1.1'
10
+ gem 'uglifier', '>= 1.0.3'
11
+ end
12
+
13
+ gem 'jquery-rails'
14
+
15
+ group :test, :development do
16
+ # Pretty printed test output
17
+ gem 'turn', '0.8.2', :require => false
18
+ end
19
+
20
+ gemspec :path => File.expand_path('../', File.dirname(__FILE__))
@@ -0,0 +1,4 @@
1
+ common = File.expand_path('common', File.dirname(__FILE__))
2
+ eval File.read(common), binding, common
3
+
4
+ gem 'rails', '3.1.3'
@@ -0,0 +1,195 @@
1
+ PATH
2
+ remote: /Users/colin/projects/rails/mist
3
+ specs:
4
+ mist (0.6.0)
5
+ activegist (~> 0.6)
6
+ git (~> 1.2)
7
+ github-markup (~> 0.7)
8
+ redcarpet (~> 2.0)
9
+
10
+ GEM
11
+ remote: http://rubygems.org/
12
+ specs:
13
+ actionmailer (3.1.3)
14
+ actionpack (= 3.1.3)
15
+ mail (~> 2.3.0)
16
+ actionpack (3.1.3)
17
+ activemodel (= 3.1.3)
18
+ activesupport (= 3.1.3)
19
+ builder (~> 3.0.0)
20
+ erubis (~> 2.7.0)
21
+ i18n (~> 0.6)
22
+ rack (~> 1.3.5)
23
+ rack-cache (~> 1.1)
24
+ rack-mount (~> 0.8.2)
25
+ rack-test (~> 0.6.1)
26
+ sprockets (~> 2.0.3)
27
+ activegist (0.6.3)
28
+ activemodel (~> 3.1)
29
+ activesupport (~> 3.1)
30
+ rest-client (~> 1.6.7)
31
+ activemodel (3.1.3)
32
+ activesupport (= 3.1.3)
33
+ builder (~> 3.0.0)
34
+ i18n (~> 0.6)
35
+ activerecord (3.1.3)
36
+ activemodel (= 3.1.3)
37
+ activesupport (= 3.1.3)
38
+ arel (~> 2.2.1)
39
+ tzinfo (~> 0.3.29)
40
+ activeresource (3.1.3)
41
+ activemodel (= 3.1.3)
42
+ activesupport (= 3.1.3)
43
+ activesupport (3.1.3)
44
+ multi_json (~> 1.0)
45
+ ansi (1.4.1)
46
+ arel (2.2.1)
47
+ builder (3.0.0)
48
+ capybara (1.1.2)
49
+ mime-types (>= 1.16)
50
+ nokogiri (>= 1.3.3)
51
+ rack (>= 1.0.0)
52
+ rack-test (>= 0.5.4)
53
+ selenium-webdriver (~> 2.0)
54
+ xpath (~> 0.1.4)
55
+ childprocess (0.3.0)
56
+ ffi (~> 1.0.6)
57
+ coffee-rails (3.1.1)
58
+ coffee-script (>= 2.2.0)
59
+ railties (~> 3.1.0)
60
+ coffee-script (2.2.0)
61
+ coffee-script-source
62
+ execjs
63
+ coffee-script-source (1.2.0)
64
+ cucumber (1.1.4)
65
+ builder (>= 2.1.2)
66
+ diff-lcs (>= 1.1.2)
67
+ gherkin (~> 2.7.1)
68
+ json (>= 1.4.6)
69
+ term-ansicolor (>= 1.0.6)
70
+ cucumber-rails (1.2.1)
71
+ capybara (>= 1.1.2)
72
+ cucumber (>= 1.1.3)
73
+ nokogiri (>= 1.5.0)
74
+ database_cleaner (0.7.1)
75
+ diff-lcs (1.1.3)
76
+ erubis (2.7.0)
77
+ execjs (1.3.0)
78
+ multi_json (~> 1.0)
79
+ factory_girl (2.3.2)
80
+ activesupport
81
+ factory_girl_rails (1.4.0)
82
+ factory_girl (~> 2.3.0)
83
+ railties (>= 3.0.0)
84
+ fakeweb (1.3.0)
85
+ ffi (1.0.11)
86
+ gherkin (2.7.4)
87
+ json (>= 1.4.6)
88
+ git (1.2.5)
89
+ github-markup (0.7.0)
90
+ hike (1.2.1)
91
+ i18n (0.6.0)
92
+ jquery-rails (1.0.19)
93
+ railties (~> 3.0)
94
+ thor (~> 0.14)
95
+ json (1.6.5)
96
+ mail (2.3.0)
97
+ i18n (>= 0.4.0)
98
+ mime-types (~> 1.16)
99
+ treetop (~> 1.4.8)
100
+ mime-types (1.17.2)
101
+ multi_json (1.0.4)
102
+ nokogiri (1.5.0)
103
+ polyglot (0.3.3)
104
+ rack (1.3.6)
105
+ rack-cache (1.1)
106
+ rack (>= 0.4)
107
+ rack-mount (0.8.3)
108
+ rack (>= 1.0.0)
109
+ rack-ssl (1.3.2)
110
+ rack
111
+ rack-test (0.6.1)
112
+ rack (>= 1.0)
113
+ rails (3.1.3)
114
+ actionmailer (= 3.1.3)
115
+ actionpack (= 3.1.3)
116
+ activerecord (= 3.1.3)
117
+ activeresource (= 3.1.3)
118
+ activesupport (= 3.1.3)
119
+ bundler (~> 1.0)
120
+ railties (= 3.1.3)
121
+ railties (3.1.3)
122
+ actionpack (= 3.1.3)
123
+ activesupport (= 3.1.3)
124
+ rack-ssl (~> 1.3.2)
125
+ rake (>= 0.8.7)
126
+ rdoc (~> 3.4)
127
+ thor (~> 0.14.6)
128
+ rake (0.9.2.2)
129
+ rdoc (3.12)
130
+ json (~> 1.4)
131
+ redcarpet (2.0.1)
132
+ rest-client (1.6.7)
133
+ mime-types (>= 1.16)
134
+ rspec (2.8.0)
135
+ rspec-core (~> 2.8.0)
136
+ rspec-expectations (~> 2.8.0)
137
+ rspec-mocks (~> 2.8.0)
138
+ rspec-core (2.8.0)
139
+ rspec-expectations (2.8.0)
140
+ diff-lcs (~> 1.1.2)
141
+ rspec-mocks (2.8.0)
142
+ rspec-rails (2.8.1)
143
+ actionpack (>= 3.0)
144
+ activesupport (>= 3.0)
145
+ railties (>= 3.0)
146
+ rspec (~> 2.8.0)
147
+ rubyzip (0.9.5)
148
+ sass (3.1.12)
149
+ sass-rails (3.1.5)
150
+ actionpack (~> 3.1.0)
151
+ railties (~> 3.1.0)
152
+ sass (~> 3.1.10)
153
+ tilt (~> 1.3.2)
154
+ selenium-webdriver (2.17.0)
155
+ childprocess (>= 0.2.5)
156
+ ffi (~> 1.0.9)
157
+ multi_json (~> 1.0.4)
158
+ rubyzip
159
+ sprockets (2.0.3)
160
+ hike (~> 1.2)
161
+ rack (~> 1.0)
162
+ tilt (~> 1.1, != 1.3.0)
163
+ sqlite3 (1.3.5)
164
+ term-ansicolor (1.0.7)
165
+ thor (0.14.6)
166
+ tilt (1.3.3)
167
+ treetop (1.4.10)
168
+ polyglot
169
+ polyglot (>= 0.3.1)
170
+ turn (0.8.2)
171
+ ansi (>= 1.2.2)
172
+ tzinfo (0.3.31)
173
+ uglifier (1.2.2)
174
+ execjs (>= 0.3.0)
175
+ multi_json (>= 1.0.2)
176
+ xpath (0.1.4)
177
+ nokogiri (~> 1.3)
178
+
179
+ PLATFORMS
180
+ ruby
181
+
182
+ DEPENDENCIES
183
+ coffee-rails (>= 3.1.1)
184
+ cucumber-rails (~> 1.2.1)
185
+ database_cleaner (~> 0.7.0)
186
+ factory_girl_rails (= 1.4.0)
187
+ fakeweb (~> 1.3.0)
188
+ jquery-rails
189
+ mist!
190
+ rails (= 3.1.3)
191
+ rspec-rails (~> 2.8.1)
192
+ sass-rails (>= 3.1.5)
193
+ sqlite3
194
+ turn (= 0.8.2)
195
+ uglifier (>= 1.0.3)