spree_essential_blog 0.1.0.rc1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (86) hide show
  1. data/.gitignore +7 -0
  2. data/.travis.yml +12 -0
  3. data/Gemfile +2 -0
  4. data/LICENSE +27 -0
  5. data/README.md +126 -0
  6. data/Rakefile +21 -0
  7. data/Versionfile +5 -0
  8. data/app/controllers/blog/admin/disqus_settings_controller.rb +22 -0
  9. data/app/controllers/blog/admin/post_categories_controller.rb +20 -0
  10. data/app/controllers/blog/admin/post_images_controller.rb +37 -0
  11. data/app/controllers/blog/admin/post_products_controller.rb +25 -0
  12. data/app/controllers/blog/admin/posts_controller.rb +32 -0
  13. data/app/controllers/blog/post_categories_controller.rb +23 -0
  14. data/app/controllers/blog/posts_controller.rb +60 -0
  15. data/app/controllers/pages_controller_decorator.rb +5 -0
  16. data/app/helpers/blog/posts_helper.rb +24 -0
  17. data/app/models/blog_configuration.rb +10 -0
  18. data/app/models/post.rb +87 -0
  19. data/app/models/post_category.rb +33 -0
  20. data/app/models/post_image.rb +45 -0
  21. data/app/models/post_product.rb +9 -0
  22. data/app/overrides/spree_essential_blog.rb +5 -0
  23. data/app/validators/datetime_validator.rb +6 -0
  24. data/app/views/blog/admin/configurations/_disqus_config.html.erb +4 -0
  25. data/app/views/blog/admin/disqus_settings/edit.html.erb +16 -0
  26. data/app/views/blog/admin/disqus_settings/show.html.erb +14 -0
  27. data/app/views/blog/admin/post_categories/_form.html.erb +8 -0
  28. data/app/views/blog/admin/post_categories/edit.html.erb +11 -0
  29. data/app/views/blog/admin/post_categories/index.html.erb +45 -0
  30. data/app/views/blog/admin/post_categories/new.html.erb +10 -0
  31. data/app/views/blog/admin/post_images/_form.html.erb +8 -0
  32. data/app/views/blog/admin/post_images/edit.html.erb +17 -0
  33. data/app/views/blog/admin/post_images/index.html.erb +40 -0
  34. data/app/views/blog/admin/post_images/new.html.erb +19 -0
  35. data/app/views/blog/admin/post_products/_form.html.erb +8 -0
  36. data/app/views/blog/admin/post_products/_related_products_table.html.erb +18 -0
  37. data/app/views/blog/admin/post_products/edit.html.erb +18 -0
  38. data/app/views/blog/admin/post_products/index.html.erb +50 -0
  39. data/app/views/blog/admin/post_products/new.html.erb +21 -0
  40. data/app/views/blog/admin/posts/_form.html.erb +40 -0
  41. data/app/views/blog/admin/posts/edit.html.erb +12 -0
  42. data/app/views/blog/admin/posts/index.html.erb +54 -0
  43. data/app/views/blog/admin/posts/new.html.erb +14 -0
  44. data/app/views/blog/admin/posts/show.html.erb +17 -0
  45. data/app/views/blog/admin/shared/_post_tabs.html.erb +26 -0
  46. data/app/views/blog/post_categories/show.html.erb +12 -0
  47. data/app/views/blog/posts/archive.html.erb +13 -0
  48. data/app/views/blog/posts/index.html.erb +16 -0
  49. data/app/views/blog/posts/index.rss.builder +17 -0
  50. data/app/views/blog/posts/show.html.erb +37 -0
  51. data/app/views/blog/shared/_archive.html.erb +31 -0
  52. data/app/views/blog/shared/_disqus_comments.html.erb +20 -0
  53. data/app/views/blog/shared/_preview.html.erb +18 -0
  54. data/app/views/blog/shared/_sidebar.html.erb +26 -0
  55. data/config/locales/en.yml +77 -0
  56. data/config/routes.rb +38 -0
  57. data/lib/generators/spree_essentials/blog_generator.rb +20 -0
  58. data/lib/generators/templates/db/migrate/acts_as_taggable_on_posts.rb +32 -0
  59. data/lib/generators/templates/db/migrate/create_post_categories.rb +13 -0
  60. data/lib/generators/templates/db/migrate/create_post_categories_posts.rb +12 -0
  61. data/lib/generators/templates/db/migrate/create_post_products.rb +13 -0
  62. data/lib/generators/templates/db/migrate/create_posts.rb +18 -0
  63. data/lib/spree_essential_blog/version.rb +3 -0
  64. data/lib/spree_essential_blog.rb +34 -0
  65. data/lib/tasks/sample/sailing.jpg +0 -0
  66. data/lib/tasks/sample/sailing2.jpg +0 -0
  67. data/lib/tasks/sample/sailing3.jpg +0 -0
  68. data/lib/tasks/sample.rake +41 -0
  69. data/public/stylesheets/posts.css +65 -0
  70. data/spree_essential_blog.gemspec +32 -0
  71. data/test/dummy_hooks/after_migrate.rb.sample +1 -0
  72. data/test/dummy_hooks/before_migrate.rb +13 -0
  73. data/test/dummy_hooks/templates/admin/all.css +3 -0
  74. data/test/dummy_hooks/templates/admin/all.js +1 -0
  75. data/test/dummy_hooks/templates/store/all.css +3 -0
  76. data/test/dummy_hooks/templates/store/all.js +1 -0
  77. data/test/integration/admin/disqus_integration_test.rb +25 -0
  78. data/test/integration/admin/post_category_integration_test.rb +131 -0
  79. data/test/integration/admin/post_integration_test.rb +80 -0
  80. data/test/integration/post_category_integration_test.rb +43 -0
  81. data/test/integration/post_integration_test.rb +240 -0
  82. data/test/support/factories.rb +15 -0
  83. data/test/test_helper.rb +7 -0
  84. data/test/unit/post_category_test.rb +24 -0
  85. data/test/unit/post_test.rb +33 -0
  86. metadata +236 -0
@@ -0,0 +1,80 @@
1
+ #! /usr/bin/env ruby
2
+ # encoding: UTF-8
3
+
4
+ require 'test_helper'
5
+
6
+ class Admin::PostIntegrationTest < ActiveSupport::IntegrationCase
7
+
8
+ setup do
9
+ Post.destroy_all
10
+ @labels = %(Title, Posted At, Body, Tags).split(', ')
11
+ @values = %(Just a post, #{Time.now}, #{Faker::Lorem.paragraphs(1 + rand(4)).join("\n\n")}, one tag).split(', ')
12
+ end
13
+
14
+ should "have a link to new post" do
15
+ visit admin_posts_path
16
+ btn = find(".actions a.button").native
17
+ assert_match /#{new_admin_post_path}$/, btn.attribute('href')
18
+ assert_equal "New Post", btn.text
19
+ end
20
+
21
+ should "get new post" do
22
+ visit new_admin_post_path
23
+ assert has_content?("New Post")
24
+ within "#new_post" do
25
+ @labels.each do |f|
26
+ assert has_field?(f)
27
+ end
28
+ end
29
+ end
30
+
31
+ should "validate post" do
32
+ visit new_admin_post_path
33
+ click_button "Create"
34
+ within "#errorExplanation" do
35
+ assert_seen "3 errors prohibited this record from being saved:"
36
+ assert_seen "Title can't be blank"
37
+ assert_seen "Body can't be blank"
38
+ assert_seen "Posted at is an invalid date."
39
+ end
40
+ end
41
+
42
+ should "create a post" do
43
+ visit new_admin_post_path
44
+ within "#new_post" do
45
+ @labels.each_with_index do |label, index|
46
+ fill_in label, :with => @values[index]
47
+ end
48
+ end
49
+ click_button "Create"
50
+ assert_flash :notice, %(Post "Just a post" has been successfully created!)
51
+ end
52
+
53
+ context "an existing post" do
54
+ setup do
55
+ @post = Factory.create(:post)
56
+ end
57
+
58
+ should "edit and update" do
59
+ visit edit_admin_post_path(@post)
60
+
61
+ within "#edit_post_#{@post.id}" do
62
+ @labels.each_with_index do |label, index|
63
+ next if label == 'Posted At'
64
+ fill_in label, :with => @values[index].reverse
65
+ end
66
+ end
67
+ click_button "Update"
68
+ assert_equal admin_post_path(@post.reload), current_path
69
+ assert_flash :notice, %(Post "tsop a tsuJ" has been successfully updated!)
70
+ end
71
+
72
+ should "get destroyed" do
73
+ visit admin_posts_path
74
+ find("a[href='#']").click
75
+ assert find_by_id("popup_ok").click
76
+ end
77
+
78
+ end
79
+
80
+ end
@@ -0,0 +1,43 @@
1
+ #! /usr/bin/env ruby
2
+ # encoding: UTF-8
3
+
4
+ require 'test_helper'
5
+
6
+ class Blog::PostCategoryIntegrationTest < ActiveSupport::IntegrationCase
7
+
8
+ include Blog::PostsHelper
9
+
10
+ def setup
11
+ Post.destroy_all
12
+ PostCategory.destroy_all
13
+ @categories = %w(Jellies Peanuts Butters).map{ |i| Factory.create(:post_category, :name => i) }
14
+ 3.times{|i|
15
+ post = Factory.create(:post, :title => "Capy post #{i}", :posted_at => Time.now - i.days)
16
+ post.categories = [@categories.slice(i)]
17
+ post.save
18
+ }
19
+ @posts = Post.order(:id).all
20
+ end
21
+
22
+ should "get the blog page" do
23
+ visit posts_path
24
+ within ".post-sidebar .post-categories" do
25
+ assert_seen "Categories"
26
+ @categories.each do |i|
27
+ assert has_link?(i.name, :href => post_category_path(i))
28
+ end
29
+ end
30
+ end
31
+
32
+ should "only have the first post in the first category" do
33
+ @post = @posts.shift
34
+ visit post_category_path(@categories.first)
35
+ assert_seen @post.title, :within => ".post-title h2"
36
+ within "#content .posts" do
37
+ @posts.each do |i|
38
+ assert !has_content?(i.title)
39
+ end
40
+ end
41
+ end
42
+
43
+ end
@@ -0,0 +1,240 @@
1
+ #! /usr/bin/env ruby
2
+ # encoding: UTF-8
3
+
4
+ require 'test_helper'
5
+
6
+
7
+ class Blog::PostIntegrationTest < ActiveSupport::IntegrationCase
8
+
9
+
10
+ include Blog::PostsHelper
11
+
12
+ def setup
13
+ Post.destroy_all
14
+ end
15
+
16
+
17
+ def assert_no_post(post)
18
+ within "#sidebar .post-archive" do
19
+ assert !has_link?(post.title)
20
+ end
21
+ within "#content .posts" do
22
+ assert !has_link?(post.title)
23
+ end
24
+ within ".tag-cloud ul.tags" do
25
+ post.tags.each do |tag|
26
+ assert !has_link?(tag.name)
27
+ end
28
+ end
29
+ end
30
+
31
+ def assert_has_post(post)
32
+ within "#sidebar .post-archive" do
33
+ assert has_link?(post.title)
34
+ end
35
+ within "#content .posts" do
36
+ assert has_link?(post.title)
37
+ end
38
+ within ".tag-cloud ul.tags" do
39
+ post.tags.each do |tag|
40
+ assert has_link?(tag.name)
41
+ end
42
+ end
43
+ end
44
+
45
+
46
+
47
+ context "with some posts" do
48
+
49
+ setup do
50
+ 11.times{ |i| Factory.create(:post, :title => "Capy post #{i}", :posted_at => Time.now - i.days) }
51
+ assert_equal 11, Post.count
52
+ end
53
+
54
+ should "get the blog page" do
55
+ visit posts_path
56
+ # first post
57
+ assert has_link?("Capy post 1")
58
+ # last post
59
+ assert has_link?("Capy post 9")
60
+ # archive link
61
+ assert has_link?("View Full Archive")
62
+ # tag link
63
+ assert has_link?("peanut butter")
64
+ # page two
65
+ assert has_link?("2")
66
+ assert has_link?("Next ›")
67
+ end
68
+
69
+ should "get a blog post" do
70
+ @post = Post.first
71
+ visit full_post_path(@post.year, @post.month, @post.day, @post)
72
+ within('h1') do
73
+ assert has_content?(@post.title)
74
+ end
75
+ end
76
+
77
+ should "get the archive" do
78
+ visit archive_posts_path
79
+ assert has_link?("Capy post 1")
80
+ assert has_link?("Shop the Store")
81
+ end
82
+
83
+ end
84
+
85
+
86
+ context "with a specific post" do
87
+
88
+ setup do
89
+ @post = Factory.create(:post, :posted_at => DateTime.parse("2011/2/17"), :tag_list => "gruyere, emmentaler, fondue")
90
+ assert_equal 1, Post.count
91
+ end
92
+
93
+ should "find by seo path" do
94
+ visit post_seo_path(@post)
95
+ assert_seen "Peanut Butter Jelly Time", :within => ".post-title h1"
96
+ assert_seen "Thursday February 17, 2011", :within => ".post-title h5"
97
+ within ".post-tags" do
98
+ assert has_link?("gruyere")
99
+ assert has_link?("emmentaler")
100
+ assert has_link?("fondue")
101
+ end
102
+ end
103
+
104
+ should "not find by tags" do
105
+ visit search_posts_path(:query => "some crazy random query")
106
+ assert_seen "No posts found!", :within => ".posts h1"
107
+ end
108
+
109
+ should "find by tags" do
110
+ visit search_posts_path(:query => "emmentaler")
111
+ assert has_link?("Peanut Butter Jelly Time", :href => post_seo_path(@post))
112
+ assert has_link?("Read More", :href => post_seo_path(@post))
113
+ end
114
+
115
+ end
116
+
117
+
118
+ context "unpublished posts" do
119
+
120
+ setup do
121
+ @tags = %(totally, not published).split(", ")
122
+ @post = Factory.create(:post, :title => "Unpublished Post", :tag_list => @tags.join(", "), :live => false)
123
+ assert_equal 1, Post.count
124
+ end
125
+
126
+ should "not include post in index" do
127
+ visit posts_path
128
+ assert_no_post(@post)
129
+ end
130
+
131
+ should "not include post in day specific index" do
132
+ visit post_date_path(:year => @post.year, :month => @post.month, :day => @post.day)
133
+ assert_no_post(@post)
134
+ end
135
+
136
+ should "not include post in month specific index" do
137
+ visit post_date_path(:year => @post.year, :month => @post.month)
138
+ assert_no_post(@post)
139
+ end
140
+
141
+ should "not include post in year specific index" do
142
+ visit post_date_path(:year => @post.year)
143
+ assert_no_post(@post)
144
+ end
145
+
146
+ should "not include post in search results" do
147
+ @tags.each do |tag|
148
+ visit search_posts_path(tag)
149
+ assert_no_post(@post)
150
+ end
151
+ end
152
+
153
+ end
154
+
155
+
156
+ context "published posts" do
157
+
158
+ setup do
159
+ @tags = %(totally, published).split(", ")
160
+ @post = Factory.create(:post, :title => "Published Post", :tag_list => @tags.join(", "), :live => true)
161
+ assert_equal 1, Post.count
162
+ end
163
+
164
+ should "not include post in index" do
165
+ visit posts_path
166
+ assert_has_post(@post)
167
+ end
168
+
169
+ should "not include post in day specific index" do
170
+ visit post_date_path(:year => @post.year, :month => @post.month, :day => @post.day)
171
+ assert_has_post(@post)
172
+ end
173
+
174
+ should "not include post in month specific index" do
175
+ visit post_date_path(:year => @post.year, :month => @post.month)
176
+ assert_has_post(@post)
177
+ end
178
+
179
+ should "not include post in year specific index" do
180
+ visit post_date_path(:year => @post.year)
181
+ assert_has_post(@post)
182
+ end
183
+
184
+ should "not include post in search results" do
185
+ @tags.each do |tag|
186
+ visit search_posts_path(tag)
187
+ assert_has_post(@post)
188
+ end
189
+ end
190
+
191
+ end
192
+
193
+ end
194
+
195
+
196
+
197
+
198
+ # [todo] make these capy tests
199
+ #
200
+ #context "published, dated posts" do
201
+ #
202
+ # setup do
203
+ # @date = DateTime.parse("2011/3/20 16:00")
204
+ # @post = Factory.create(:post, :posted_at => @date)
205
+ # 10.times {|i| Factory.create(:post, :title => "Today's Sample Post #{i}", :posted_at => @date) }
206
+ # 10.times {|i| Factory.create(:post, :title => "Last Weeks's Sample Post #{i}", :posted_at => @date - 1.week) }
207
+ # 10.times {|i| Factory.create(:post, :title => "Last Month's Sample Post #{i}", :posted_at => @date - 1.month) }
208
+ # 10.times {|i| Factory.create(:post, :title => "Last Years's Sample Post #{i}", :posted_at => @date - 1.year) }
209
+ # end
210
+ #
211
+ # should "assert proper post count" do
212
+ # assert_equal 41, Post.count
213
+ # end
214
+ #
215
+ # should "paginate posts by day" do
216
+ # get :index, :year => @post.year, :month => @post.month, :day => @post.day
217
+ # assert_equal 10, assigns(:posts).length
218
+ # assert_equal 11, assigns(:posts).total_entries
219
+ # assert_equal 2, assigns(:posts).total_pages
220
+ # assert_response :success
221
+ # end
222
+ #
223
+ # should "get posts by month" do
224
+ # get :index, :year => @post.year, :month => @post.month
225
+ # assert_equal 10, assigns(:posts).length
226
+ # assert_equal 21, assigns(:posts).total_entries
227
+ # assert_equal 3, assigns(:posts).total_pages
228
+ # assert_response :success
229
+ # end
230
+ #
231
+ # should "get posts by year" do
232
+ # get :index, :year => @post.year
233
+ # assert_not_nil assigns(:posts)
234
+ # assert_equal 10, assigns(:posts).length
235
+ # assert_equal 31, assigns(:posts).total_entries
236
+ # assert_equal 4, assigns(:posts).total_pages
237
+ # assert_response :success
238
+ # end
239
+ #
240
+ #end
@@ -0,0 +1,15 @@
1
+ FactoryGirl.define do
2
+
3
+ factory :post do
4
+ title "Peanut Butter Jelly Time"
5
+ posted_at { Time.now + rand(10000) }
6
+ body "Vivamus rutrum nunc non neque consectetur quis placerat neque lobortis. Nam vestibulum, arcu sodales feugiat consectetur, nisl orci bibendum elit, eu euismod magna sapien ut nibh. Donec semper quam scelerisque tortor dictum gravida. In hac habitasse platea dictumst. Nam pulvinar, odio sed rhoncus suscipit, sem diam ultrices mauris, eu consequat purus metus eu velit. Proin metus odio, aliquam eget molestie nec, gravida ut sapien. Phasellus quis est sed turpis sollicitudin venenatis sed eu odio. Praesent eget neque eu eros interdum malesuada non vel leo. Sed fringilla porta ligula egestas tincidunt. Nullam risus magna, ornare vitae varius eget, scelerisque a libero."
7
+ tag_list "peanut butter, jelly, sandwich, lunch"
8
+ live true
9
+ end
10
+
11
+ factory :post_category do
12
+ name "Jellies"
13
+ end
14
+
15
+ end
@@ -0,0 +1,7 @@
1
+ # Configure Rails Envinronment
2
+ ENV["RAILS_ENV"] = "test"
3
+
4
+ require File.expand_path("../dummy/config/environment.rb", __FILE__)
5
+ require 'spree_essentials/test_helper'
6
+
7
+ Dir["#{File.dirname(__FILE__)}/support/**/*.rb"].each { |f| require f }
@@ -0,0 +1,24 @@
1
+ require 'test_helper'
2
+
3
+ class PostCategoryTest < Test::Unit::TestCase
4
+
5
+ def setup
6
+ PostCategory.destroy_all
7
+ end
8
+
9
+ subject { PostCategory.new }
10
+
11
+ should validate_presence_of(:name)
12
+
13
+ should "automatically set path" do
14
+ @category = Factory.create(:post_category, :name => "This should parameterize")
15
+ assert_equal "this-should-parameterize", @category.permalink
16
+ end
17
+
18
+ should "not duplicate path" do
19
+ @category1 = Factory.create(:post_category)
20
+ @category2 = Factory.create(:post_category)
21
+ assert @category1.permalink != @category2.permalink
22
+ end
23
+
24
+ end
@@ -0,0 +1,33 @@
1
+ require 'test_helper'
2
+
3
+ class PostTest < Test::Unit::TestCase
4
+
5
+ def setup
6
+ Post.destroy_all
7
+ end
8
+
9
+ subject { Post.new }
10
+
11
+ should validate_presence_of(:title)
12
+ should validate_presence_of(:body)
13
+
14
+ should "automatically set path" do
15
+ @post = Factory.create(:post, :title => "This should parameterize")
16
+ assert_equal "this-should-parameterize", @post.path
17
+ end
18
+
19
+ should "validate date time" do
20
+ @post = Factory.build(:post)
21
+ @post.posted_at = "testing"
22
+ assert !@post.valid?
23
+ end
24
+
25
+ should "parse date time" do
26
+ date = DateTime.parse("2011/4/1 16:15")
27
+ @post = Factory.build(:post)
28
+ @post.posted_at = "april 1 2011 - 4:15 pm"
29
+ assert @post.valid?
30
+ assert_equal date, @post.posted_at
31
+ end
32
+
33
+ end
metadata ADDED
@@ -0,0 +1,236 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: spree_essential_blog
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.1.0.rc1
5
+ prerelease: 6
6
+ platform: ruby
7
+ authors:
8
+ - Spencer Steffen
9
+ autorequire:
10
+ bindir: bin
11
+ cert_chain: []
12
+ date: 2011-12-15 00:00:00.000000000Z
13
+ dependencies:
14
+ - !ruby/object:Gem::Dependency
15
+ name: spree_essentials
16
+ requirement: &70245698437120 !ruby/object:Gem::Requirement
17
+ none: false
18
+ requirements:
19
+ - - ! '>='
20
+ - !ruby/object:Gem::Version
21
+ version: 0.3.1
22
+ type: :runtime
23
+ prerelease: false
24
+ version_requirements: *70245698437120
25
+ - !ruby/object:Gem::Dependency
26
+ name: acts-as-taggable-on
27
+ requirement: &70245698435560 !ruby/object:Gem::Requirement
28
+ none: false
29
+ requirements:
30
+ - - ! '>='
31
+ - !ruby/object:Gem::Version
32
+ version: 2.2.0
33
+ type: :runtime
34
+ prerelease: false
35
+ version_requirements: *70245698435560
36
+ - !ruby/object:Gem::Dependency
37
+ name: shoulda
38
+ requirement: &70245698434360 !ruby/object:Gem::Requirement
39
+ none: false
40
+ requirements:
41
+ - - ! '>='
42
+ - !ruby/object:Gem::Version
43
+ version: 3.0.0.beta2
44
+ type: :development
45
+ prerelease: false
46
+ version_requirements: *70245698434360
47
+ - !ruby/object:Gem::Dependency
48
+ name: dummier
49
+ requirement: &70245698433260 !ruby/object:Gem::Requirement
50
+ none: false
51
+ requirements:
52
+ - - ! '>='
53
+ - !ruby/object:Gem::Version
54
+ version: 0.2.4
55
+ type: :development
56
+ prerelease: false
57
+ version_requirements: *70245698433260
58
+ - !ruby/object:Gem::Dependency
59
+ name: factory_girl
60
+ requirement: &70245698432520 !ruby/object:Gem::Requirement
61
+ none: false
62
+ requirements:
63
+ - - ! '>='
64
+ - !ruby/object:Gem::Version
65
+ version: 2.3.2
66
+ type: :development
67
+ prerelease: false
68
+ version_requirements: *70245698432520
69
+ - !ruby/object:Gem::Dependency
70
+ name: capybara
71
+ requirement: &70245698431640 !ruby/object:Gem::Requirement
72
+ none: false
73
+ requirements:
74
+ - - ! '>='
75
+ - !ruby/object:Gem::Version
76
+ version: 1.1.2
77
+ type: :development
78
+ prerelease: false
79
+ version_requirements: *70245698431640
80
+ - !ruby/object:Gem::Dependency
81
+ name: selenium-webdriver
82
+ requirement: &70245698431120 !ruby/object:Gem::Requirement
83
+ none: false
84
+ requirements:
85
+ - - ! '>='
86
+ - !ruby/object:Gem::Version
87
+ version: 2.15.0
88
+ type: :development
89
+ prerelease: false
90
+ version_requirements: *70245698431120
91
+ - !ruby/object:Gem::Dependency
92
+ name: sqlite3
93
+ requirement: &70245698430460 !ruby/object:Gem::Requirement
94
+ none: false
95
+ requirements:
96
+ - - ! '>='
97
+ - !ruby/object:Gem::Version
98
+ version: 1.3.5
99
+ type: :development
100
+ prerelease: false
101
+ version_requirements: *70245698430460
102
+ description: Spree Essential Blog is a blog plugin for Spree sites equipped with spree_essentials.
103
+ email:
104
+ - spencer@citrusme.com
105
+ executables: []
106
+ extensions: []
107
+ extra_rdoc_files: []
108
+ files:
109
+ - .gitignore
110
+ - .travis.yml
111
+ - Gemfile
112
+ - LICENSE
113
+ - README.md
114
+ - Rakefile
115
+ - Versionfile
116
+ - app/controllers/blog/admin/disqus_settings_controller.rb
117
+ - app/controllers/blog/admin/post_categories_controller.rb
118
+ - app/controllers/blog/admin/post_images_controller.rb
119
+ - app/controllers/blog/admin/post_products_controller.rb
120
+ - app/controllers/blog/admin/posts_controller.rb
121
+ - app/controllers/blog/post_categories_controller.rb
122
+ - app/controllers/blog/posts_controller.rb
123
+ - app/controllers/pages_controller_decorator.rb
124
+ - app/helpers/blog/posts_helper.rb
125
+ - app/models/blog_configuration.rb
126
+ - app/models/post.rb
127
+ - app/models/post_category.rb
128
+ - app/models/post_image.rb
129
+ - app/models/post_product.rb
130
+ - app/overrides/spree_essential_blog.rb
131
+ - app/validators/datetime_validator.rb
132
+ - app/views/blog/admin/configurations/_disqus_config.html.erb
133
+ - app/views/blog/admin/disqus_settings/edit.html.erb
134
+ - app/views/blog/admin/disqus_settings/show.html.erb
135
+ - app/views/blog/admin/post_categories/_form.html.erb
136
+ - app/views/blog/admin/post_categories/edit.html.erb
137
+ - app/views/blog/admin/post_categories/index.html.erb
138
+ - app/views/blog/admin/post_categories/new.html.erb
139
+ - app/views/blog/admin/post_images/_form.html.erb
140
+ - app/views/blog/admin/post_images/edit.html.erb
141
+ - app/views/blog/admin/post_images/index.html.erb
142
+ - app/views/blog/admin/post_images/new.html.erb
143
+ - app/views/blog/admin/post_products/_form.html.erb
144
+ - app/views/blog/admin/post_products/_related_products_table.html.erb
145
+ - app/views/blog/admin/post_products/edit.html.erb
146
+ - app/views/blog/admin/post_products/index.html.erb
147
+ - app/views/blog/admin/post_products/new.html.erb
148
+ - app/views/blog/admin/posts/_form.html.erb
149
+ - app/views/blog/admin/posts/edit.html.erb
150
+ - app/views/blog/admin/posts/index.html.erb
151
+ - app/views/blog/admin/posts/new.html.erb
152
+ - app/views/blog/admin/posts/show.html.erb
153
+ - app/views/blog/admin/shared/_post_tabs.html.erb
154
+ - app/views/blog/post_categories/show.html.erb
155
+ - app/views/blog/posts/archive.html.erb
156
+ - app/views/blog/posts/index.html.erb
157
+ - app/views/blog/posts/index.rss.builder
158
+ - app/views/blog/posts/show.html.erb
159
+ - app/views/blog/shared/_archive.html.erb
160
+ - app/views/blog/shared/_disqus_comments.html.erb
161
+ - app/views/blog/shared/_preview.html.erb
162
+ - app/views/blog/shared/_sidebar.html.erb
163
+ - config/locales/en.yml
164
+ - config/routes.rb
165
+ - lib/generators/spree_essentials/blog_generator.rb
166
+ - lib/generators/templates/db/migrate/acts_as_taggable_on_posts.rb
167
+ - lib/generators/templates/db/migrate/create_post_categories.rb
168
+ - lib/generators/templates/db/migrate/create_post_categories_posts.rb
169
+ - lib/generators/templates/db/migrate/create_post_products.rb
170
+ - lib/generators/templates/db/migrate/create_posts.rb
171
+ - lib/spree_essential_blog.rb
172
+ - lib/spree_essential_blog/version.rb
173
+ - lib/tasks/sample.rake
174
+ - lib/tasks/sample/sailing.jpg
175
+ - lib/tasks/sample/sailing2.jpg
176
+ - lib/tasks/sample/sailing3.jpg
177
+ - public/stylesheets/posts.css
178
+ - spree_essential_blog.gemspec
179
+ - test/dummy_hooks/after_migrate.rb.sample
180
+ - test/dummy_hooks/before_migrate.rb
181
+ - test/dummy_hooks/templates/admin/all.css
182
+ - test/dummy_hooks/templates/admin/all.js
183
+ - test/dummy_hooks/templates/store/all.css
184
+ - test/dummy_hooks/templates/store/all.js
185
+ - test/integration/admin/disqus_integration_test.rb
186
+ - test/integration/admin/post_category_integration_test.rb
187
+ - test/integration/admin/post_integration_test.rb
188
+ - test/integration/post_category_integration_test.rb
189
+ - test/integration/post_integration_test.rb
190
+ - test/support/factories.rb
191
+ - test/test_helper.rb
192
+ - test/unit/post_category_test.rb
193
+ - test/unit/post_test.rb
194
+ homepage: https://github.com/citrus/spree_essential_blog
195
+ licenses: []
196
+ post_install_message:
197
+ rdoc_options: []
198
+ require_paths:
199
+ - lib
200
+ required_ruby_version: !ruby/object:Gem::Requirement
201
+ none: false
202
+ requirements:
203
+ - - ! '>='
204
+ - !ruby/object:Gem::Version
205
+ version: '0'
206
+ segments:
207
+ - 0
208
+ hash: -1719567594483908705
209
+ required_rubygems_version: !ruby/object:Gem::Requirement
210
+ none: false
211
+ requirements:
212
+ - - ! '>'
213
+ - !ruby/object:Gem::Version
214
+ version: 1.3.1
215
+ requirements: []
216
+ rubyforge_project:
217
+ rubygems_version: 1.8.10
218
+ signing_key:
219
+ specification_version: 3
220
+ summary: Spree Essential Blog is a blog plugin for Spree sites equipped with spree_essentials.
221
+ test_files:
222
+ - test/dummy_hooks/after_migrate.rb.sample
223
+ - test/dummy_hooks/before_migrate.rb
224
+ - test/dummy_hooks/templates/admin/all.css
225
+ - test/dummy_hooks/templates/admin/all.js
226
+ - test/dummy_hooks/templates/store/all.css
227
+ - test/dummy_hooks/templates/store/all.js
228
+ - test/integration/admin/disqus_integration_test.rb
229
+ - test/integration/admin/post_category_integration_test.rb
230
+ - test/integration/admin/post_integration_test.rb
231
+ - test/integration/post_category_integration_test.rb
232
+ - test/integration/post_integration_test.rb
233
+ - test/support/factories.rb
234
+ - test/test_helper.rb
235
+ - test/unit/post_category_test.rb
236
+ - test/unit/post_test.rb