spree_essential_cms 0.2.1 → 0.3.0.rc1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (43) hide show
  1. data/README.md +94 -68
  2. data/app/controllers/{admin → spree/admin}/contents_controller.rb +11 -11
  3. data/app/controllers/{admin → spree/admin}/page_images_controller.rb +3 -3
  4. data/app/controllers/{admin → spree/admin}/pages_controller.rb +10 -10
  5. data/app/controllers/{page_controller.rb → spree/page_controller.rb} +8 -7
  6. data/app/controllers/spree/pages_controller.rb +28 -0
  7. data/app/controllers/{spree_base_controller_decorator.rb → spree/spree_base_controller_decorator.rb} +4 -4
  8. data/app/models/{content.rb → spree/content.rb} +1 -1
  9. data/app/models/{page.rb → spree/page.rb} +3 -3
  10. data/app/models/spree/page_image.rb +31 -0
  11. data/app/views/{admin → spree/admin}/contents/_form.html.erb +0 -0
  12. data/app/views/{admin → spree/admin}/contents/edit.html.erb +3 -3
  13. data/app/views/{admin → spree/admin}/contents/index.html.erb +3 -3
  14. data/app/views/{admin → spree/admin}/contents/new.html.erb +3 -3
  15. data/app/views/spree/admin/contents/show.html.erb +11 -0
  16. data/app/views/{admin → spree/admin}/page_images/_form.html.erb +0 -0
  17. data/app/views/{admin → spree/admin}/page_images/edit.html.erb +3 -3
  18. data/app/views/{admin → spree/admin}/page_images/index.html.erb +2 -2
  19. data/app/views/{admin → spree/admin}/page_images/new.html.erb +1 -1
  20. data/app/views/{admin → spree/admin}/pages/_form.html.erb +1 -1
  21. data/app/views/{admin → spree/admin}/pages/edit.html.erb +3 -3
  22. data/app/views/{admin → spree/admin}/pages/index.html.erb +2 -2
  23. data/app/views/{admin → spree/admin}/pages/new.html.erb +2 -2
  24. data/app/views/{admin → spree/admin}/pages/show.html.erb +2 -2
  25. data/app/views/{admin → spree/admin}/shared/_page_tabs.html.erb +0 -0
  26. data/app/views/spree/pages/home.html.erb +28 -0
  27. data/app/views/spree/pages/show.html.erb +3 -0
  28. data/app/views/{shared → spree/shared}/_content.html.erb +0 -0
  29. data/app/views/{shared → spree/shared}/_main_menu.html.erb +0 -0
  30. data/app/views/{shared → spree/shared}/_slideshow.html.erb +0 -0
  31. data/config/locales/en.yml +30 -28
  32. data/config/routes.rb +9 -9
  33. data/lib/generators/spree_essentials/cms_generator.rb +1 -0
  34. data/lib/generators/templates/db/migrate/add_spree_namespace.rb +11 -0
  35. data/lib/spree_essential_cms.rb +1 -1
  36. data/lib/spree_essential_cms/version.rb +1 -1
  37. data/lib/tasks/sample.rake +1 -1
  38. metadata +49 -51
  39. data/app/controllers/pages_controller.rb +0 -28
  40. data/app/models/page_image.rb +0 -40
  41. data/app/views/admin/contents/show.html.erb +0 -11
  42. data/app/views/pages/home.html.erb +0 -28
  43. data/app/views/pages/show.html.erb +0 -3
data/README.md CHANGED
@@ -1,8 +1,11 @@
1
1
  # Spree Essential CMS [![Build Status](https://secure.travis-ci.org/citrus/spree_essential_cms.png)](http://travis-ci.org/citrus/spree_essential_cms)
2
2
 
3
+ A robust CMS for Spree Commerce.
3
4
 
5
+
6
+ ------------------------------------------------------------------------------
4
7
  Installation
5
- ------------
8
+ ------------------------------------------------------------------------------
6
9
 
7
10
  If you don't already have an existing Spree site, [click here](https://gist.github.com/946719) then come back later... You can also read the Spree docs [here](http://spreecommerce.com/documentation/getting_started.html)...
8
11
 
@@ -10,37 +13,46 @@ Otherwise, follow these steps to get up and running with SpreeEssentialCms:
10
13
 
11
14
  Add spree_essential_cms to your Gemfile:
12
15
 
13
- gem 'spree_essential_cms', '>= 0.2.1'
16
+ ```ruby
17
+ gem 'spree_essential_cms', '>= 0.2.1'
18
+ ```
14
19
 
15
20
  Now, bundle up with:
16
21
 
17
- bundle install
22
+ ```bash
23
+ bundle install
24
+ ```
18
25
 
19
26
  Then run the generators to create the migration files:
20
27
 
21
- rails g spree_essentials:install
22
- rails g spree_essentials:cms
28
+ ```bash
29
+ bundle exec rails g spree_essentials:install
30
+ bundle exec rails g spree_essentials:cms
31
+ ```
23
32
 
24
33
  Now migrate your database:
25
34
 
26
- rake db:migrate
27
-
28
- Boot your server and checkout the admin!
35
+ ```bash
36
+ bundle exec rake db:migrate
37
+ ```
29
38
 
30
- rails s
31
-
39
+ Boot your server and checkout the admin at `localhost:3000/admin`!
32
40
 
41
+ ```bash
42
+ bundle exec rails s
43
+ ```
33
44
 
34
- Usage
35
- -----
36
45
 
37
- [todo] add basic usage stuff here
46
+ ------------------------------------------------------------------------------
47
+ Usage
48
+ ------------------------------------------------------------------------------
38
49
 
50
+ Basic usage of this CMS is trivial. Create pages and add content...
39
51
 
40
- ### Here's some tips for making content really customized...
52
+ Pages also have images so you can create galleries or slideshows.
41
53
 
42
54
 
43
- #### Contexts
55
+ ### Content Contexts
44
56
 
45
57
  Contexts allow you to place different forms of content in various places of a page. A slideshow or a sidebar might be good examples...
46
58
 
@@ -48,70 +60,79 @@ You can set a content's context (say that ten times fast!) under the 'Optional F
48
60
 
49
61
  In your view you'll be able to grab those bits of content like so:
50
62
 
51
-
52
- .slideshow
53
- - if @slides = @page.for_context('slideshow')
54
- = render 'shared/content', :content => @slides
55
-
56
- - if @sidebar = @page.for_context('sidebar').first
57
- - content_for :sidebar do
58
- = render 'shared/your_custom_sidebar', :content => @sidebar
59
-
63
+ ```haml
64
+ .slideshow
65
+ - if @slides = @page.for_context('slideshow')
66
+ = render 'shared/content', :content => @slides
60
67
 
68
+ - if @sidebar = @page.for_context('sidebar').first
69
+ - content_for :sidebar do
70
+ = render 'shared/your_custom_sidebar', :content => @sidebar
71
+ ```
61
72
 
62
73
 
63
- #### Custom image sizes
74
+ ### Custom image sizes
64
75
 
65
76
  Use a content decorator when you want different contexts to have their own image sizes:
66
77
 
67
78
 
68
- Content.class_eval do
69
-
70
- # override default image sizes
71
- def default_attachment_sizes
72
- { :mini => '48x48>', :medium => '427x287>' }
73
- end
74
-
75
- # or set a custom size for each context
76
- def attachment_sizes
77
- case context
78
- when 'slideshow'
79
- sizes = default_attachment_sizes.merge(:slide => '955x476#')
80
- when 'main'
81
- sizes = default_attachment_sizes.merge(:custom => '580x289#')
82
- when 'small-top'
83
- sizes = default_attachment_sizes.merge(:custom => '364x177#')
84
- when 'small-bottom'
85
- sizes = default_attachment_sizes.merge(:custom => '364x109#')
86
- else
87
- sizes = default_attachment_sizes
88
- end
89
- sizes
90
- end
91
-
92
- end
79
+ ```ruby
80
+
81
+ # app/models/content_decorator.rb
82
+
83
+ Content.class_eval do
93
84
 
85
+ # override default image sizes
86
+ def default_attachment_sizes
87
+ { :mini => '48x48>', :medium => '427x287>' }
88
+ end
94
89
 
90
+ # or set a custom size for each context
91
+ def attachment_sizes
92
+ case context
93
+ when 'slideshow'
94
+ sizes = default_attachment_sizes.merge(:slide => '955x476#')
95
+ when 'main'
96
+ sizes = default_attachment_sizes.merge(:custom => '580x289#')
97
+ when 'small-top'
98
+ sizes = default_attachment_sizes.merge(:custom => '364x177#')
99
+ when 'small-bottom'
100
+ sizes = default_attachment_sizes.merge(:custom => '364x109#')
101
+ else
102
+ sizes = default_attachment_sizes
103
+ end
104
+ sizes
105
+ end
95
106
 
107
+ end
108
+ ```
96
109
 
97
110
 
98
-
111
+ ------------------------------------------------------------------------------
99
112
  Demo
100
- ----
113
+ ------------------------------------------------------------------------------
101
114
 
102
115
  You can easily use the test/dummy app as a demo of spree_essential_cms. Just `cd` to where you develop and run:
103
-
104
- git clone git://github.com/citrus/spree_essential_cms.git
105
- cd spree_essential_cms
106
- mv lib/dummy_hooks/after_migrate.rb.sample lib/dummy_hooks/after_migrate.rb
107
- bundle install
108
- bundle exec dummier
109
- cd test/dummy
110
- rails s
111
-
112
116
 
117
+ ```bash
118
+ git clone git://github.com/citrus/spree_essential_cms.git
119
+ cd spree_essential_cms
120
+ cp test/dummy_hooks/after_migrate.rb.sample test/dummy_hooks/after_migrate.rb
121
+ bundle install
122
+ bundle exec dummier
123
+ cd test/dummy
124
+ bundle exec rails s
125
+ ```
126
+
127
+
128
+ ------------------------------------------------------------------------------
113
129
  Change Log
114
- ----------
130
+ ------------------------------------------------------------------------------
131
+
132
+ **2012/1/16**
133
+
134
+ * Add support for Spree 1.0.x
135
+
115
136
 
116
137
  **0.2.1 - 2011/12/15**
117
138
 
@@ -141,8 +162,9 @@ Change Log
141
162
  * Extracted from the Spree Essentials core.
142
163
 
143
164
 
165
+ ------------------------------------------------------------------------------
144
166
  To Do
145
- -----
167
+ ------------------------------------------------------------------------------
146
168
 
147
169
  * more tests... many many more.
148
170
  * optimizations
@@ -150,19 +172,23 @@ To Do
150
172
  * add widgets that you can drop into any page
151
173
  * page and menu caching/sweeping
152
174
  * nested set for pages
153
- * 0.30 and 0.40 compatibility
154
175
  * create wiki pages
155
176
 
156
177
 
178
+ ------------------------------------------------------------------------------
157
179
  Contributors
158
- ------------
180
+ ------------------------------------------------------------------------------
181
+
182
+ * Spencer Steffen ([@citrus](https://github.com/citrus))
183
+ * Kyle West ([@kylewest](https://github.com/kylewest))
184
+ * [@kpitn](https://github.com/kpitn)
159
185
 
160
- So far it's just me; Spencer Steffen.
161
186
 
162
187
  If you'd like to help out feel free to fork and send me pull requests!
163
188
 
164
189
 
190
+ ------------------------------------------------------------------------------
165
191
  License
166
- -------
192
+ ------------------------------------------------------------------------------
167
193
 
168
- Copyright (c) 2011 Spencer Steffen & Citrus, released under the New BSD License All rights reserved.
194
+ Copyright (c) 2011 - 2012 Spencer Steffen & Citrus, released under the New BSD License All rights reserved.
@@ -1,33 +1,33 @@
1
- class ::Admin::ContentsController < ::Admin::ResourceController
1
+ class Spree::Admin::ContentsController < Spree::Admin::ResourceController
2
2
 
3
3
  before_filter :load_resource
4
4
  before_filter :parent, :only => :index
5
-
5
+
6
6
  before_filter :get_pages, :only => [ :new, :edit, :create, :update ]
7
7
 
8
- belongs_to :page
9
-
8
+ belongs_to 'spree/page'
9
+
10
10
  def update_positions
11
11
  @page = parent
12
12
  params[:positions].each do |id, index|
13
13
  @page.contents.update_all(['position=?', index], ['id=?', id])
14
14
  end
15
15
  respond_to do |format|
16
- format.html { redirect_to admin_page_contents_url(@oage) }
16
+ format.html { redirect_to admin_page_contents_url(@page) }
17
17
  format.js { render :text => 'Ok' }
18
18
  end
19
19
  end
20
-
20
+
21
21
  private
22
-
22
+
23
23
  def get_pages
24
- @pages = Page.order(:position).all
24
+ @pages = Spree::Page.order(:position).all
25
25
  end
26
-
26
+
27
27
  def parent
28
- @page ||= Page.find_by_path(params[:page_id])
28
+ @page ||= Spree::Page.find_by_path(params[:page_id])
29
29
  end
30
-
30
+
31
31
  def collection
32
32
  params[:search] ||= {}
33
33
  params[:search][:meta_sort] ||= "page.asc"
@@ -1,4 +1,4 @@
1
- class Admin::PageImagesController < Admin::ResourceController
1
+ class Spree::Admin::PageImagesController < Spree::Admin::ResourceController
2
2
 
3
3
  before_filter :load_data
4
4
 
@@ -8,7 +8,7 @@ class Admin::PageImagesController < Admin::ResourceController
8
8
 
9
9
  def update_positions
10
10
  params[:positions].each do |id, index|
11
- PageImage.update_all(['position=?', index], ['id=?', id])
11
+ Spree::PageImage.update_all(['position=?', index], ['id=?', id])
12
12
  end
13
13
  respond_to do |format|
14
14
  format.js { render :text => 'Ok' }
@@ -22,7 +22,7 @@ class Admin::PageImagesController < Admin::ResourceController
22
22
  end
23
23
 
24
24
  def load_data
25
- @page = Page.find_by_path(params[:page_id])
25
+ @page = Spree::Page.find_by_path(params[:page_id])
26
26
  end
27
27
 
28
28
  def set_viewable
@@ -1,23 +1,23 @@
1
- class ::Admin::PagesController < ::Admin::ResourceController
1
+ class Spree::Admin::PagesController < Spree::Admin::ResourceController
2
2
 
3
3
  before_filter :load_resource
4
-
4
+
5
5
  def index
6
6
  @pages = collection
7
7
  end
8
-
8
+
9
9
  def location_after_save
10
10
  case params[:action]
11
11
  when "create"
12
12
  edit_admin_page_content_path(@page, @page.contents.first)
13
13
  else
14
14
  admin_page_path(@page)
15
- end
15
+ end
16
16
  end
17
17
 
18
18
  def update_positions
19
19
  params[:positions].each do |id, index|
20
- Page.update_all(['position=?', index], ['id=?', id])
20
+ Spree::Page.update_all(['position=?', index], ['id=?', id])
21
21
  end
22
22
  respond_to do |format|
23
23
  format.html { redirect_to admin_pages_path }
@@ -26,16 +26,16 @@ class ::Admin::PagesController < ::Admin::ResourceController
26
26
  end
27
27
 
28
28
  private
29
-
29
+
30
30
  def find_resource
31
- @page ||= Page.find_by_path(params[:id])
31
+ @page ||= ::Spree::Page.find_by_path(params[:id])
32
32
  end
33
-
33
+
34
34
  def collection
35
35
  params[:search] ||= {}
36
36
  params[:search][:meta_sort] ||= "page.asc"
37
- @search = Page.metasearch(params[:search])
37
+ @search = Spree::Page.metasearch(params[:search])
38
38
  @collection = @search.page(params[:page]).per(Spree::Config[:orders_per_page])
39
39
  end
40
40
 
41
- end
41
+ end
@@ -1,19 +1,20 @@
1
- class PageController < Spree::BaseController
1
+ class Spree::PageController < Spree::BaseController
2
2
 
3
3
  before_filter :get_page, :only => :index
4
-
4
+
5
+
5
6
  def show
6
7
  end
7
-
8
+
8
9
  private
9
-
10
+
10
11
  def get_page
11
- @page = Page.active.find_by_path(page_path)
12
+ @page = Spree::Page.active.find_by_path(page_path)
12
13
  return raise ActionController::RoutingError.new(page_path) unless @page
13
14
  end
14
-
15
+
15
16
  def page_path
16
17
  params[:path] || "/"
17
18
  end
18
-
19
+
19
20
  end
@@ -0,0 +1,28 @@
1
+ class Spree::PagesController < Spree::BaseController
2
+
3
+ before_filter :get_page, :only => :show
4
+
5
+ def show
6
+ if @page.root?
7
+ @posts = Spree::Post.live.limit(5) if SpreeEssentials.has?(:blog)
8
+ @articles = Spree::Article.live.limit(5) if SpreeEssentials.has?(:news)
9
+ render :template => 'spree/pages/home'
10
+ end
11
+ end
12
+
13
+ private
14
+
15
+ def get_page
16
+ @page = Spree::Page.includes(:images, :contents).active.find_by_path(page_path) rescue nil
17
+ raise ActionController::RoutingError.new(page_path) if @page.nil?
18
+ end
19
+
20
+ def page_path
21
+ params[:page_path].blank? ? "/" : params[:page_path]
22
+ end
23
+
24
+ def accurate_title
25
+ @page.meta_title
26
+ end
27
+
28
+ end
@@ -1,11 +1,11 @@
1
1
  Spree::BaseController.class_eval do
2
-
2
+
3
3
  before_filter :get_pages
4
-
4
+
5
5
  def get_pages
6
6
  admin = request.path =~ /^\/admin/
7
- @page = Page.find_by_path(request.path) rescue nil unless admin
8
- scope = admin ? Page.scoped : Page.visible
7
+ @page = Spree::Page.find_by_path(request.path) rescue nil unless admin
8
+ scope = admin ? Spree::Page.scoped : Spree::Page.visible
9
9
  @pages = scope.order(:position).all
10
10
  end
11
11
 
@@ -1,4 +1,4 @@
1
- class Content < ActiveRecord::Base
1
+ class Spree::Content < ActiveRecord::Base
2
2
 
3
3
  belongs_to :page
4
4
  validates_associated :page
@@ -1,4 +1,4 @@
1
- class Page < ActiveRecord::Base
1
+ class Spree::Page < ActiveRecord::Base
2
2
 
3
3
  alias_attribute :name, :title
4
4
 
@@ -11,13 +11,13 @@ class Page < ActiveRecord::Base
11
11
  scope :visible, active.where(:visible => true)
12
12
 
13
13
  has_many :contents, :order => :position, :dependent => :destroy
14
- has_many :images, :as => :viewable, :class_name => 'PageImage', :order => :position, :dependent => :destroy
14
+ has_many :images, :as => :viewable, :class_name => 'Spree::PageImage', :order => :position, :dependent => :destroy
15
15
 
16
16
  before_validation :set_defaults
17
17
  after_create :create_default_content
18
18
 
19
19
  def self.find_by_path(_path)
20
- return super('/') if _path == '_home_' && Page.exists?(:path => '/')
20
+ return super('/') if _path == '_home_' && self.exists?(:path => '/')
21
21
  super _path.to_s.sub(/^\/*/, '/').gsub('--', '/')
22
22
  end
23
23
 
@@ -0,0 +1,31 @@
1
+ class Spree::PageImage < Spree::Asset
2
+
3
+ validate :no_attachement_errors
4
+
5
+ has_attached_file :attachment,
6
+ :styles => Proc.new{ |clip| clip.instance.attachment_sizes },
7
+ :default_style => :medium
8
+
9
+ def image_content?
10
+ attachment_content_type.match(/\/(jpeg|png|gif|tiff|x-photoshop)/)
11
+ end
12
+
13
+ def attachment_sizes
14
+ sizes = {}
15
+ if image_content?
16
+ sizes.merge!(:mini => '48x48>', :small => '150x150>', :medium => '420x300>', :large => '900x650>')
17
+ sizes.merge!(:slide => '950x250#') if viewable.respond_to?(:root?) && viewable.root?
18
+ end
19
+ sizes
20
+ end
21
+
22
+ def no_attachement_errors
23
+ unless attachment.errors.empty?
24
+ # uncomment this to get rid of the less-than-useful interrim messages
25
+ errors.clear
26
+ errors.add :attachment, "Paperclip returned errors for file '#{attachment_file_name}' - check ImageMagick installation or image source file."
27
+ false
28
+ end
29
+ end
30
+
31
+ end
@@ -1,9 +1,9 @@
1
- <%= render :partial => 'admin/shared/contents_sub_menu' %>
1
+ <%= render :partial => 'spree/admin/shared/contents_sub_menu' %>
2
2
 
3
- <%= render :partial => 'admin/shared/page_tabs', :locals => {:current => 'Contents'} %>
3
+ <%= render :partial => 'spree/admin/shared/page_tabs', :locals => {:current => 'Contents'} %>
4
4
 
5
5
  <% if @content.try(:errors).present? %>
6
- <%= render 'shared/error_messages', :target => @content %>
6
+ <%= render 'spree/shared/error_messages', :target => @content %>
7
7
  <% end %>
8
8
 
9
9
  <h2><%= t('.edit_content') %></h2>
@@ -1,4 +1,4 @@
1
- <%= render :partial => 'admin/shared/contents_sub_menu' %>
1
+ <%= render :partial => 'spree/admin/shared/contents_sub_menu' %>
2
2
 
3
3
  <div class='toolbar'>
4
4
  <ul class='actions'>
@@ -9,7 +9,7 @@
9
9
  <br class='clear' />
10
10
  </div>
11
11
 
12
- <%= render :partial => 'admin/shared/page_tabs', :locals => {:current => 'Contents'} %>
12
+ <%= render :partial => 'spree/admin/shared/page_tabs', :locals => {:current => 'Contents'} %>
13
13
 
14
14
  <h2><%= t('.listing_contents') %></h2>
15
15
 
@@ -42,7 +42,7 @@
42
42
  <div class="box">
43
43
  <h3><%= t(:search) %></h3>
44
44
 
45
- <% @content = Content.metasearch %>
45
+ <% @content = Spree::Content.metasearch %>
46
46
  <%= form_for [:admin, @page, @content] do |f| %>
47
47
  <p>
48
48
  <label><%= t('content.title') %></label><br />
@@ -1,9 +1,9 @@
1
- <%= render :partial => 'admin/shared/contents_sub_menu' %>
1
+ <%= render :partial => 'spree/admin/shared/contents_sub_menu' %>
2
2
 
3
- <%= render :partial => 'admin/shared/page_tabs', :locals => {:current => 'Contents'} %>
3
+ <%= render :partial => 'spree/admin/shared/page_tabs', :locals => {:current => 'Contents'} %>
4
4
 
5
5
  <% if @content.try(:errors).present? %>
6
- <%= render 'shared/error_messages', :target => @content %>
6
+ <%= render 'spree/shared/error_messages', :target => @content %>
7
7
  <% end %>
8
8
 
9
9
  <h2><%= t('.new_content') %></h2>
@@ -0,0 +1,11 @@
1
+ <%= render :partial => 'spree/admin/shared/contents_sub_menu' %>
2
+ <%= render :partial => 'spree/admin/shared/page_tabs', :locals => {:current => 'Contents'} %>
3
+
4
+ <h2>Content: <%= h @content.title %></h2>
5
+
6
+ <%= RDiscount.new(@content.body).to_html.html_safe %>
7
+
8
+ <p>
9
+ <%= link_to_edit @content %>
10
+ <%= link_to t('back'), collection_url %>
11
+ </p>
@@ -1,9 +1,9 @@
1
- <%= render :partial => 'admin/shared/contents_sub_menu' %>
1
+ <%= render :partial => 'spree/admin/shared/contents_sub_menu' %>
2
2
 
3
- <%= render :partial => 'admin/shared/page_tabs', :locals => {:current => "Images"} %>
3
+ <%= render :partial => 'spree/admin/shared/page_tabs', :locals => {:current => "Images"} %>
4
4
 
5
5
  <% if @page_image.try(:errors).present? %>
6
- <%= render 'shared/error_messages', :target => @page_image %>
6
+ <%= render 'spree/shared/error_messages', :target => @page_image %>
7
7
  <% end %>
8
8
 
9
9
  <%= form_for([:admin, @page.id, @page_image], :url => admin_page_image_url(@page, @page_image), :html => { :multipart => true }) do |f| %>
@@ -1,6 +1,6 @@
1
- <%= render :partial => 'admin/shared/contents_sub_menu' %>
1
+ <%= render :partial => 'spree/admin/shared/contents_sub_menu' %>
2
2
 
3
- <%= render :partial => 'admin/shared/page_tabs', :locals => {:current => "Images"} %>
3
+ <%= render :partial => 'spree/admin/shared/page_tabs', :locals => {:current => "Images"} %>
4
4
 
5
5
  <table class="index sortable">
6
6
  <tr>
@@ -1,6 +1,6 @@
1
1
  <h3><%= t("new_image") %></h3>
2
2
 
3
- <%= render 'shared/error_messages', :target => @page_image %>
3
+ <%= render 'spree/shared/error_messages', :target => @page_image %>
4
4
 
5
5
  <%= form_for(@page_image, :url => admin_page_images_path(@page), :html => { :multipart => true }) do |form| %>
6
6
  <table class="basic-table">
@@ -25,7 +25,7 @@
25
25
  <%= form.field_container :accessible do %>
26
26
  <%= form.check_box :accessible, :class => "text" %> &nbsp;
27
27
  <%= form.label :accessible, t('page.accessible') %>
28
- &ndash; <em><%= t('page.explain_accessible') %></em>
28
+ <em><%= t('page.explain_accessible') %></em>
29
29
  <%= error_message_on :page, :accessible %>
30
30
  <% end %>
31
31
 
@@ -1,9 +1,9 @@
1
- <%= render :partial => 'admin/shared/contents_sub_menu' %>
1
+ <%= render :partial => 'spree/admin/shared/contents_sub_menu' %>
2
2
 
3
- <%= render :partial => 'admin/shared/page_tabs', :locals => {:current => 'Page Details'} %>
3
+ <%= render :partial => 'spree/admin/shared/page_tabs', :locals => {:current => 'Page Details'} %>
4
4
 
5
5
  <% if @page.try(:errors).present? %>
6
- <%= render 'shared/error_messages', :target => @page %>
6
+ <%= render 'spree/shared/error_messages', :target => @page %>
7
7
  <% end %>
8
8
 
9
9
  <%= form_for([:admin, @page]) do |f| %>
@@ -1,4 +1,4 @@
1
- <%= render :partial => 'admin/shared/contents_sub_menu' %>
1
+ <%= render :partial => 'spree/admin/shared/contents_sub_menu' %>
2
2
 
3
3
  <div class='toolbar'>
4
4
  <ul class='actions'>
@@ -45,7 +45,7 @@
45
45
  <div class="box">
46
46
  <h3><%= t(:search) %></h3>
47
47
 
48
- <% @page = Page.metasearch %>
48
+ <% @page = Spree::Page.metasearch %>
49
49
  <%= form_for [:admin, @page] do |f| %>
50
50
  <p>
51
51
  <label><%= t '.title_contains' %></label><br />
@@ -1,7 +1,7 @@
1
- <%= render :partial => 'admin/shared/contents_sub_menu' %>
1
+ <%= render :partial => 'spree/admin/shared/contents_sub_menu' %>
2
2
 
3
3
  <% if @page.try(:errors).present? %>
4
- <%= render 'shared/error_messages', :target => @page %>
4
+ <%= render 'spree/shared/error_messages', :target => @page %>
5
5
  <% end %>
6
6
 
7
7
  <h1><%= t('.new_page') %></h1>
@@ -1,6 +1,6 @@
1
- <%= render :partial => 'admin/shared/contents_sub_menu' %>
1
+ <%= render :partial => 'spree/admin/shared/contents_sub_menu' %>
2
2
 
3
- <%= render :partial => 'admin/shared/page_tabs', :locals => {:current => "Page Details"} %>
3
+ <%= render :partial => 'spree/admin/shared/page_tabs', :locals => {:current => "Page Details"} %>
4
4
 
5
5
  <h3>Meta Data:</h3>
6
6
  <p>
@@ -0,0 +1,28 @@
1
+ <% unless @page.images.empty? %>
2
+ <%= render 'spree/shared/slideshow', :images => @page.images, :size => :slide %>
3
+ <% end %>
4
+
5
+ <% if @page.has_context?('intro') %>
6
+ <div class="intro">
7
+ <%= render 'spree/shared/content', :content => @page.for_context('intro').first %>
8
+ </div>
9
+ <% end %>
10
+
11
+ <div class="left">
12
+ <%= render :partial => 'spree/shared/content', :collection => @page.for_context('main') %>
13
+ </div>
14
+
15
+ <div class="right">
16
+ <% if defined?(Spree::SpreeEssentialBlog) && !@posts.blank? %>
17
+ <div class="home-posts">
18
+ <h1><%= t('blog.home.title') %></h1>
19
+ <%= render :partial => 'spree/blog/shared/preview', :collection => @posts, :as => :post %>
20
+ </div>
21
+ <% end %>
22
+ <% if defined?(Spree::SpreeEssentialNews) && !@articles.blank? %>
23
+ <div class="home-articles">
24
+ <h1><%= t('news.home.title') %></h1>
25
+ <%= render :partial => 'spree/news/articles/preview', :collection => @articles, :as => :article %>
26
+ </div>
27
+ <% end %>
28
+ </div>
@@ -0,0 +1,3 @@
1
+ <div class="for-<%= @page.to_param %>">
2
+ <%= render :partial => 'spree/shared/content', :collection => @page.contents %>
3
+ </div>
@@ -27,31 +27,33 @@ en:
27
27
 
28
28
  pages: Pages
29
29
 
30
- admin:
31
- subnav:
32
- pages: Pages
33
- shared:
34
- contents_tab:
35
- content: Content
36
- page_tabs:
37
- editing_page: Editing Page
38
- page_details: Page Details
39
- contents: Contents
40
- images: Images
41
- pages:
42
- index:
43
- title: Title
44
- listing_pages: Listing Pages
45
- new_page: New Page
46
- title_contains: Title
47
- new:
48
- new_page: New Page
49
-
50
- contents:
51
- index:
52
- new_content: New Content
53
- listing_contents: Listing Contents
54
- new:
55
- new_content: New Content
56
- edit:
57
- edit_content: Edit Content
30
+
31
+ spree:
32
+ admin:
33
+ subnav:
34
+ pages: Pages
35
+ shared:
36
+ contents_tab:
37
+ content: Content
38
+ page_tabs:
39
+ editing_page: Editing Page
40
+ page_details: Page Details
41
+ contents: Contents
42
+ images: Images
43
+ pages:
44
+ index:
45
+ title: Title
46
+ listing_pages: Listing Pages
47
+ new_page: New Page
48
+ title_contains: Title
49
+ new:
50
+ new_page: New Page
51
+
52
+ contents:
53
+ index:
54
+ new_content: New Content
55
+ listing_contents: Listing Contents
56
+ new:
57
+ new_content: New Content
58
+ edit:
59
+ edit_content: Edit Content
data/config/routes.rb CHANGED
@@ -1,37 +1,37 @@
1
- class PossiblePage
1
+ class Spree::PossiblePage
2
2
  def self.matches?(request)
3
3
  path = request.fullpath
4
4
  return if path =~ /(^\/(admin|account|cart|checkout|content|login|pg\/|orders|products|s\/|session|signup|shipments|states|t\/|tax_categories|user)+)/
5
- count = Page.active.where(:path => path).count
5
+ count = Spree::Page.active.where(:path => path.gsub("//","/")).count
6
6
  0 < count
7
7
  end
8
8
  end
9
9
 
10
- Rails.application.routes.draw do
11
-
10
+ Spree::Core::Engine.routes.draw do
11
+
12
12
  namespace :admin do
13
-
13
+
14
14
  resources :pages do
15
15
  collection do
16
16
  post :update_positions
17
17
  end
18
-
18
+
19
19
  resources :contents do
20
20
  collection do
21
21
  post :update_positions
22
22
  end
23
23
  end
24
-
24
+
25
25
  resources :images, :controller => "page_images" do
26
26
  collection do
27
27
  post :update_positions
28
28
  end
29
29
  end
30
30
  end
31
-
31
+
32
32
  end
33
33
 
34
- constraints(PossiblePage) do
34
+ constraints(Spree::PossiblePage) do
35
35
  get '(:page_path)', :to => 'pages#show', :page_path => /.*/, :as => :page
36
36
  end
37
37
 
@@ -10,6 +10,7 @@ module SpreeEssentials
10
10
  def copy_migrations
11
11
  migration_template "create_pages.rb", "db/migrate/create_pages.rb"
12
12
  migration_template "create_contents.rb", "db/migrate/create_contents.rb"
13
+ migration_template "add_spree_namespace.rb", "db/migrate/add_spree_namespace.rb"
13
14
  end
14
15
 
15
16
  end
@@ -0,0 +1,11 @@
1
+ class AddSpreeNamespace < ActiveRecord::Migration
2
+ def up
3
+ rename_table :contents, :spree_contents
4
+ rename_table :pages, :spree_pages
5
+ end
6
+
7
+ def down
8
+ rename_table :spree_contents, :contents
9
+ rename_table :spree_pages, :pages
10
+ end
11
+ end
@@ -16,7 +16,7 @@ module SpreeEssentialCms
16
16
 
17
17
  config.to_prepare do
18
18
  #loads application's model / class decorators
19
- Dir.glob File.expand_path("../../app/**/*_decorator*.rb") do |c|
19
+ Dir.glob File.expand_path("../../app/**/*_decorator.rb", __FILE__) do |c|
20
20
  Rails.configuration.cache_classes ? require(c) : load(c)
21
21
  end
22
22
 
@@ -1,3 +1,3 @@
1
1
  module SpreeEssentialCms
2
- VERSION = "0.2.1"
2
+ VERSION = "0.3.0.rc1"
3
3
  end
@@ -19,7 +19,7 @@ namespace :db do
19
19
  images = Dir[File.expand_path("../sample", __FILE__) + "/*.jpg"]
20
20
 
21
21
  home = Page.create(:title => "Home", :path => "/")
22
- home.contents.first.update_attributes(:body => Faker::Lorem.paragraphs().join("\n\n"), :context => "main")
22
+ home.contents.first.update_attributes(:body => FFaker::Lorem.paragraphs().join("\n\n"), :context => "main")
23
23
  home.contents.create(:title => Faker::Lorem.words(3 + rand(3)).join(" "), :body => Faker::Lorem.sentence, :context => "intro")
24
24
 
25
25
  images.each {|image|
metadata CHANGED
@@ -1,30 +1,30 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: spree_essential_cms
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.2.1
5
- prerelease:
4
+ version: 0.3.0.rc1
5
+ prerelease: 6
6
6
  platform: ruby
7
7
  authors:
8
8
  - Spencer Steffen
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2011-12-16 00:00:00.000000000Z
12
+ date: 2012-01-17 00:00:00.000000000Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: spree_essentials
16
- requirement: &70176218104080 !ruby/object:Gem::Requirement
16
+ requirement: &70176245146400 !ruby/object:Gem::Requirement
17
17
  none: false
18
18
  requirements:
19
19
  - - ! '>='
20
20
  - !ruby/object:Gem::Version
21
- version: 0.3.1
21
+ version: 0.4.0.rc1
22
22
  type: :runtime
23
23
  prerelease: false
24
- version_requirements: *70176218104080
24
+ version_requirements: *70176245146400
25
25
  - !ruby/object:Gem::Dependency
26
26
  name: dummier
27
- requirement: &70176218103340 !ruby/object:Gem::Requirement
27
+ requirement: &70176245145720 !ruby/object:Gem::Requirement
28
28
  none: false
29
29
  requirements:
30
30
  - - ! '>='
@@ -32,10 +32,10 @@ dependencies:
32
32
  version: 0.2.4
33
33
  type: :development
34
34
  prerelease: false
35
- version_requirements: *70176218103340
35
+ version_requirements: *70176245145720
36
36
  - !ruby/object:Gem::Dependency
37
37
  name: shoulda
38
- requirement: &70176218102680 !ruby/object:Gem::Requirement
38
+ requirement: &70176245145160 !ruby/object:Gem::Requirement
39
39
  none: false
40
40
  requirements:
41
41
  - - ! '>='
@@ -43,10 +43,10 @@ dependencies:
43
43
  version: 3.0.0.beta2
44
44
  type: :development
45
45
  prerelease: false
46
- version_requirements: *70176218102680
46
+ version_requirements: *70176245145160
47
47
  - !ruby/object:Gem::Dependency
48
48
  name: factory_girl
49
- requirement: &70176218101960 !ruby/object:Gem::Requirement
49
+ requirement: &70176245144400 !ruby/object:Gem::Requirement
50
50
  none: false
51
51
  requirements:
52
52
  - - ! '>='
@@ -54,10 +54,10 @@ dependencies:
54
54
  version: 2.3.2
55
55
  type: :development
56
56
  prerelease: false
57
- version_requirements: *70176218101960
57
+ version_requirements: *70176245144400
58
58
  - !ruby/object:Gem::Dependency
59
59
  name: capybara
60
- requirement: &70176218101220 !ruby/object:Gem::Requirement
60
+ requirement: &70176245143220 !ruby/object:Gem::Requirement
61
61
  none: false
62
62
  requirements:
63
63
  - - ! '>='
@@ -65,10 +65,10 @@ dependencies:
65
65
  version: 1.1.2
66
66
  type: :development
67
67
  prerelease: false
68
- version_requirements: *70176218101220
68
+ version_requirements: *70176245143220
69
69
  - !ruby/object:Gem::Dependency
70
70
  name: sqlite3
71
- requirement: &70176218100320 !ruby/object:Gem::Requirement
71
+ requirement: &70176245142740 !ruby/object:Gem::Requirement
72
72
  none: false
73
73
  requirements:
74
74
  - - ! '>='
@@ -76,7 +76,7 @@ dependencies:
76
76
  version: 1.3.5
77
77
  type: :development
78
78
  prerelease: false
79
- version_requirements: *70176218100320
79
+ version_requirements: *70176245142740
80
80
  description: SpreeEssentialCms is a full featured content management system for Spree
81
81
  Commerce. It's designed to be used with the spree_essentials base.
82
82
  email:
@@ -90,6 +90,7 @@ files:
90
90
  - config/locales/en.yml
91
91
  - config/routes.rb
92
92
  - lib/generators/spree_essentials/cms_generator.rb
93
+ - lib/generators/templates/db/migrate/add_spree_namespace.rb
93
94
  - lib/generators/templates/db/migrate/create_contents.rb
94
95
  - lib/generators/templates/db/migrate/create_pages.rb
95
96
  - lib/spree_essential_cms/version.rb
@@ -99,35 +100,35 @@ files:
99
100
  - lib/tasks/sample/sailing3.jpg
100
101
  - lib/tasks/sample.rake
101
102
  - app/assets/stylesheets/essentials/cms.css
102
- - app/controllers/admin/contents_controller.rb
103
- - app/controllers/admin/page_images_controller.rb
104
- - app/controllers/admin/pages_controller.rb
105
- - app/controllers/page_controller.rb
106
- - app/controllers/pages_controller.rb
107
- - app/controllers/spree_base_controller_decorator.rb
108
- - app/models/content.rb
109
- - app/models/page.rb
110
- - app/models/page_image.rb
111
- - app/views/admin/contents/_form.html.erb
112
- - app/views/admin/contents/edit.html.erb
113
- - app/views/admin/contents/index.html.erb
114
- - app/views/admin/contents/new.html.erb
115
- - app/views/admin/contents/show.html.erb
116
- - app/views/admin/page_images/_form.html.erb
117
- - app/views/admin/page_images/edit.html.erb
118
- - app/views/admin/page_images/index.html.erb
119
- - app/views/admin/page_images/new.html.erb
120
- - app/views/admin/pages/_form.html.erb
121
- - app/views/admin/pages/edit.html.erb
122
- - app/views/admin/pages/index.html.erb
123
- - app/views/admin/pages/new.html.erb
124
- - app/views/admin/pages/show.html.erb
125
- - app/views/admin/shared/_page_tabs.html.erb
126
- - app/views/pages/home.html.erb
127
- - app/views/pages/show.html.erb
128
- - app/views/shared/_content.html.erb
129
- - app/views/shared/_main_menu.html.erb
130
- - app/views/shared/_slideshow.html.erb
103
+ - app/controllers/spree/admin/contents_controller.rb
104
+ - app/controllers/spree/admin/page_images_controller.rb
105
+ - app/controllers/spree/admin/pages_controller.rb
106
+ - app/controllers/spree/page_controller.rb
107
+ - app/controllers/spree/pages_controller.rb
108
+ - app/controllers/spree/spree_base_controller_decorator.rb
109
+ - app/models/spree/content.rb
110
+ - app/models/spree/page.rb
111
+ - app/models/spree/page_image.rb
112
+ - app/views/spree/admin/contents/_form.html.erb
113
+ - app/views/spree/admin/contents/edit.html.erb
114
+ - app/views/spree/admin/contents/index.html.erb
115
+ - app/views/spree/admin/contents/new.html.erb
116
+ - app/views/spree/admin/contents/show.html.erb
117
+ - app/views/spree/admin/page_images/_form.html.erb
118
+ - app/views/spree/admin/page_images/edit.html.erb
119
+ - app/views/spree/admin/page_images/index.html.erb
120
+ - app/views/spree/admin/page_images/new.html.erb
121
+ - app/views/spree/admin/pages/_form.html.erb
122
+ - app/views/spree/admin/pages/edit.html.erb
123
+ - app/views/spree/admin/pages/index.html.erb
124
+ - app/views/spree/admin/pages/new.html.erb
125
+ - app/views/spree/admin/pages/show.html.erb
126
+ - app/views/spree/admin/shared/_page_tabs.html.erb
127
+ - app/views/spree/pages/home.html.erb
128
+ - app/views/spree/pages/show.html.erb
129
+ - app/views/spree/shared/_content.html.erb
130
+ - app/views/spree/shared/_main_menu.html.erb
131
+ - app/views/spree/shared/_slideshow.html.erb
131
132
  - Rakefile
132
133
  homepage: http://github.com/citrus/spree_essential_cms
133
134
  licenses: []
@@ -143,16 +144,13 @@ required_ruby_version: !ruby/object:Gem::Requirement
143
144
  version: '0'
144
145
  segments:
145
146
  - 0
146
- hash: -927433600182519188
147
+ hash: 1544382525842900464
147
148
  required_rubygems_version: !ruby/object:Gem::Requirement
148
149
  none: false
149
150
  requirements:
150
- - - ! '>='
151
+ - - ! '>'
151
152
  - !ruby/object:Gem::Version
152
- version: '0'
153
- segments:
154
- - 0
155
- hash: -927433600182519188
153
+ version: 1.3.1
156
154
  requirements: []
157
155
  rubyforge_project:
158
156
  rubygems_version: 1.8.10
@@ -1,28 +0,0 @@
1
- class PagesController < Spree::BaseController
2
-
3
- before_filter :get_page, :only => :show
4
-
5
- def show
6
- if @page.root?
7
- @posts = Post.live.limit(5) if SpreeEssentials.has?(:blog)
8
- @articles = Article.live.limit(5) if SpreeEssentials.has?(:news)
9
- render :template => 'pages/home'
10
- end
11
- end
12
-
13
- private
14
-
15
- def get_page
16
- @page = Page.includes(:images, :contents).active.find_by_path(page_path) rescue nil
17
- raise ActionController::RoutingError.new(page_path) if @page.nil?
18
- end
19
-
20
- def page_path
21
- params[:page_path] || "/"
22
- end
23
-
24
- def accurate_title
25
- @page.meta_title
26
- end
27
-
28
- end
@@ -1,40 +0,0 @@
1
- class PageImage < Image
2
-
3
- validate :no_attachement_errors
4
-
5
- if defined?(SpreeHeroku)
6
- has_attached_file :attachment,
7
- :styles => Proc.new{ |clip| clip.instance.attachment_sizes },
8
- :default_style => :medium,
9
- :path => "assets/pages/:id/:style/:basename.:extension",
10
- :storage => "s3",
11
- :s3_credentials => "#{Rails.root}/config/s3.yml"
12
- else
13
- has_attached_file :attachment,
14
- :styles => Proc.new{ |clip| clip.instance.attachment_sizes },
15
- :default_style => :medium,
16
- :url => "/assets/pages/:id/:style/:basename.:extension",
17
- :path => ":rails_root/public/assets/pages/:id/:style/:basename.:extension"
18
- end
19
-
20
- def image_content?
21
- attachment_content_type.match(/\/(jpeg|png|gif|tiff|x-photoshop)/)
22
- end
23
-
24
- def attachment_sizes
25
- sizes = {}
26
- sizes.merge!(:mini => '48x48>', :small => '150x150>', :medium => '420x300>', :large => '900x650>') if image_content?
27
- sizes.merge!(:slide => '950x250#') if viewable.respond_to?(:root?) && viewable.root?
28
- sizes
29
- end
30
-
31
- def no_attachement_errors
32
- unless attachment.errors.empty?
33
- # uncomment this to get rid of the less-than-useful interrim messages
34
- errors.clear
35
- errors.add :attachment, "Paperclip returned errors for file '#{attachment_file_name}' - check ImageMagick installation or image source file."
36
- false
37
- end
38
- end
39
-
40
- end
@@ -1,11 +0,0 @@
1
- <%= render :partial => 'admin/shared/contents_sub_menu' %>
2
- <%= render :partial => 'admin/shared/page_tabs', :locals => {:current => 'Contents'} %>
3
-
4
- <h2><%= h @content.title %></h2>
5
-
6
- <%= RDiscount.new(@content.body).to_html.html_safe %>
7
-
8
- <p>
9
- <%= link_to_edit @user %> &nbsp;
10
- <%= link_to t('back'), collection_url %>
11
- </p>
@@ -1,28 +0,0 @@
1
- <% unless @page.images.empty? %>
2
- <%= render 'shared/slideshow', :images => @page.images, :size => :slide %>
3
- <% end %>
4
-
5
- <% if @page.has_context?('intro') %>
6
- <div class="intro">
7
- <%= render 'shared/content', :content => @page.for_context('intro').first %>
8
- </div>
9
- <% end %>
10
-
11
- <div class="left">
12
- <%= render :partial => 'shared/content', :collection => @page.for_context('main') %>
13
- </div>
14
-
15
- <div class="right">
16
- <% if defined?(SpreeEssentialBlog) && !@posts.blank? %>
17
- <div class="home-posts">
18
- <h1><%= t('blog.home.title') %></h1>
19
- <%= render :partial => 'blog/shared/preview', :collection => @posts, :as => :post %>
20
- </div>
21
- <% end %>
22
- <% if defined?(SpreeEssentialNews) && !@articles.blank? %>
23
- <div class="home-articles">
24
- <h1><%= t('news.home.title') %></h1>
25
- <%= render :partial => 'news/articles/preview', :collection => @articles, :as => :article %>
26
- </div>
27
- <% end %>
28
- </div>
@@ -1,3 +0,0 @@
1
- <div class="for-<%= @page.to_param %>">
2
- <%= render :partial => 'shared/content', :collection => @page.contents %>
3
- </div>