spree_category_bullets 0.0.1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (35) hide show
  1. data/.gitignore +10 -0
  2. data/.rspec +1 -0
  3. data/Gemfile +14 -0
  4. data/Gemfile.lock +213 -0
  5. data/LICENSE +26 -0
  6. data/README.md +46 -0
  7. data/Rakefile +29 -0
  8. data/Versionfile +11 -0
  9. data/app/assets/javascripts/admin/spree_category_bullets.js +1 -0
  10. data/app/assets/javascripts/store/spree_category_bullets.js +1 -0
  11. data/app/assets/stylesheets/admin/spree_category_bullets.css +3 -0
  12. data/app/assets/stylesheets/store/spree_category_bullets.css +3 -0
  13. data/app/controllers/spree/admin/bullets_controller.rb +53 -0
  14. data/app/models/spree/bullet.rb +14 -0
  15. data/app/models/spree/taxon_decorator.rb +4 -0
  16. data/app/overrides/add_bullets_to_taxons_configurations_menu.rb +12 -0
  17. data/app/views/spree/admin/bullets/_form.html.erb +24 -0
  18. data/app/views/spree/admin/bullets/edit.html.erb +10 -0
  19. data/app/views/spree/admin/bullets/index.html.erb +41 -0
  20. data/app/views/spree/admin/bullets/new.html.erb +9 -0
  21. data/app/views/spree/admin/taxons/_to_bullets_index.html.erb +1 -0
  22. data/app/views/spree/products/_bullets.html.erb +15 -0
  23. data/app/views/spree/products/_custom_bullets.html.erb +17 -0
  24. data/config/locales/en.yml +11 -0
  25. data/config/routes.rb +18 -0
  26. data/db/migrate/20120424085004_create_category_bullets.rb +21 -0
  27. data/lib/generators/spree_category_bullets/install/install_generator.rb +29 -0
  28. data/lib/spree_category_bullets/engine.rb +20 -0
  29. data/lib/spree_category_bullets.rb +2 -0
  30. data/script/rails +5 -0
  31. data/spec/spec_helper.rb +32 -0
  32. data/spree_category_bullets.gemspec +24 -0
  33. data/vendor/assets/images/admin/icons/16x16/2.png +0 -0
  34. data/vendor/assets/images/admin/icons/16x16/4.png +0 -0
  35. metadata +162 -0
data/.gitignore ADDED
@@ -0,0 +1,10 @@
1
+ \#*
2
+ *~
3
+ .#*
4
+ .DS_Store
5
+ .idea
6
+ .project
7
+ tmp
8
+ nbproject
9
+ *.swp
10
+ spec/dummy
data/.rspec ADDED
@@ -0,0 +1 @@
1
+ --colour
data/Gemfile ADDED
@@ -0,0 +1,14 @@
1
+ source 'http://rubygems.org'
2
+
3
+ group :test do
4
+ gem 'ffaker'
5
+ gem 'rspec-rails'
6
+ end
7
+
8
+ if RUBY_VERSION < "1.9"
9
+ gem "ruby-debug"
10
+ else
11
+ gem "ruby-debug19"
12
+ end
13
+
14
+ gemspec
data/Gemfile.lock ADDED
@@ -0,0 +1,213 @@
1
+ PATH
2
+ remote: .
3
+ specs:
4
+ spree-category-bullets (1.0.0)
5
+ spree_core (~> 1.1.0.rc2)
6
+
7
+ GEM
8
+ remote: http://rubygems.org/
9
+ specs:
10
+ actionmailer (3.2.3)
11
+ actionpack (= 3.2.3)
12
+ mail (~> 2.4.4)
13
+ actionpack (3.2.3)
14
+ activemodel (= 3.2.3)
15
+ activesupport (= 3.2.3)
16
+ builder (~> 3.0.0)
17
+ erubis (~> 2.7.0)
18
+ journey (~> 1.0.1)
19
+ rack (~> 1.4.0)
20
+ rack-cache (~> 1.2)
21
+ rack-test (~> 0.6.1)
22
+ sprockets (~> 2.1.2)
23
+ active_utils (1.0.3)
24
+ activesupport (>= 2.3.11)
25
+ i18n
26
+ activemerchant (1.20.4)
27
+ active_utils (>= 1.0.2)
28
+ activesupport (>= 2.3.11)
29
+ braintree (>= 2.0.0)
30
+ builder (>= 2.0.0)
31
+ i18n
32
+ json (>= 1.5.1)
33
+ money (<= 3.7.1)
34
+ activemodel (3.2.3)
35
+ activesupport (= 3.2.3)
36
+ builder (~> 3.0.0)
37
+ activerecord (3.2.3)
38
+ activemodel (= 3.2.3)
39
+ activesupport (= 3.2.3)
40
+ arel (~> 3.0.2)
41
+ tzinfo (~> 0.3.29)
42
+ activeresource (3.2.3)
43
+ activemodel (= 3.2.3)
44
+ activesupport (= 3.2.3)
45
+ activesupport (3.2.3)
46
+ i18n (~> 0.6)
47
+ multi_json (~> 1.0)
48
+ acts_as_list (0.1.4)
49
+ addressable (2.2.7)
50
+ arel (3.0.2)
51
+ aws-sdk (1.3.9)
52
+ httparty (~> 0.7)
53
+ json (~> 1.4)
54
+ nokogiri (>= 1.4.4)
55
+ uuidtools (~> 2.1)
56
+ braintree (2.16.0)
57
+ builder (>= 2.0.0)
58
+ builder (3.0.0)
59
+ capybara (1.0.1)
60
+ mime-types (>= 1.16)
61
+ nokogiri (>= 1.3.3)
62
+ rack (>= 1.0.0)
63
+ rack-test (>= 0.5.4)
64
+ selenium-webdriver (~> 2.0)
65
+ xpath (~> 0.1.4)
66
+ childprocess (0.3.2)
67
+ ffi (~> 1.0.6)
68
+ cocaine (0.2.1)
69
+ columnize (0.3.6)
70
+ deface (0.8.0)
71
+ nokogiri (~> 1.5.0)
72
+ rails (>= 3.0.9)
73
+ diff-lcs (1.1.3)
74
+ erubis (2.7.0)
75
+ ffaker (1.12.1)
76
+ ffi (1.0.11)
77
+ highline (1.6.11)
78
+ hike (1.2.1)
79
+ httparty (0.8.3)
80
+ multi_json (~> 1.0)
81
+ multi_xml
82
+ i18n (0.6.0)
83
+ journey (1.0.3)
84
+ jquery-rails (2.0.2)
85
+ railties (>= 3.2.0, < 5.0)
86
+ thor (~> 0.14)
87
+ json (1.6.6)
88
+ kaminari (0.13.0)
89
+ actionpack (>= 3.0.0)
90
+ activesupport (>= 3.0.0)
91
+ railties (>= 3.0.0)
92
+ libwebsocket (0.1.3)
93
+ addressable
94
+ linecache (0.46)
95
+ rbx-require-relative (> 0.0.4)
96
+ mail (2.4.4)
97
+ i18n (>= 0.4.0)
98
+ mime-types (~> 1.16)
99
+ treetop (~> 1.4.8)
100
+ mime-types (1.18)
101
+ money (3.7.1)
102
+ i18n (~> 0.4)
103
+ multi_json (1.3.2)
104
+ multi_xml (0.4.4)
105
+ nested_set (1.7.0)
106
+ activerecord (>= 3.0.0)
107
+ railties (>= 3.0.0)
108
+ nokogiri (1.5.2)
109
+ paperclip (2.7.0)
110
+ activerecord (>= 2.3.0)
111
+ activesupport (>= 2.3.2)
112
+ cocaine (>= 0.0.2)
113
+ mime-types
114
+ polyamorous (0.5.0)
115
+ activerecord (~> 3.0)
116
+ polyglot (0.3.3)
117
+ rack (1.4.1)
118
+ rack-cache (1.2)
119
+ rack (>= 0.4)
120
+ rack-ssl (1.3.2)
121
+ rack
122
+ rack-test (0.6.1)
123
+ rack (>= 1.0)
124
+ rails (3.2.3)
125
+ actionmailer (= 3.2.3)
126
+ actionpack (= 3.2.3)
127
+ activerecord (= 3.2.3)
128
+ activeresource (= 3.2.3)
129
+ activesupport (= 3.2.3)
130
+ bundler (~> 1.0)
131
+ railties (= 3.2.3)
132
+ railties (3.2.3)
133
+ actionpack (= 3.2.3)
134
+ activesupport (= 3.2.3)
135
+ rack-ssl (~> 1.3.2)
136
+ rake (>= 0.8.7)
137
+ rdoc (~> 3.4)
138
+ thor (~> 0.14.6)
139
+ rake (0.9.2.2)
140
+ ransack (0.6.0)
141
+ actionpack (~> 3.0)
142
+ activerecord (~> 3.0)
143
+ polyamorous (~> 0.5.0)
144
+ rbx-require-relative (0.0.9)
145
+ rdoc (3.12)
146
+ json (~> 1.4)
147
+ rspec (2.9.0)
148
+ rspec-core (~> 2.9.0)
149
+ rspec-expectations (~> 2.9.0)
150
+ rspec-mocks (~> 2.9.0)
151
+ rspec-core (2.9.0)
152
+ rspec-expectations (2.9.1)
153
+ diff-lcs (~> 1.1.3)
154
+ rspec-mocks (2.9.0)
155
+ rspec-rails (2.9.0)
156
+ actionpack (>= 3.0)
157
+ activesupport (>= 3.0)
158
+ railties (>= 3.0)
159
+ rspec (~> 2.9.0)
160
+ ruby-debug (0.10.4)
161
+ columnize (>= 0.1)
162
+ ruby-debug-base (~> 0.10.4.0)
163
+ ruby-debug-base (0.10.4)
164
+ linecache (>= 0.3)
165
+ rubyzip (0.9.7)
166
+ selenium-webdriver (2.21.2)
167
+ childprocess (>= 0.2.5)
168
+ ffi (~> 1.0)
169
+ libwebsocket (~> 0.1.3)
170
+ multi_json (~> 1.0)
171
+ rubyzip
172
+ spree_core (1.1.0.rc2)
173
+ activemerchant (= 1.20.4)
174
+ acts_as_list (= 0.1.4)
175
+ aws-sdk (~> 1.3.4)
176
+ deface (>= 0.8.0)
177
+ ffaker (~> 1.12.0)
178
+ highline (= 1.6.11)
179
+ jquery-rails (~> 2.0.0)
180
+ kaminari (>= 0.13.0)
181
+ nested_set (= 1.7.0)
182
+ paperclip (~> 2.7)
183
+ rails (>= 3.2.2, <= 3.2.3)
184
+ ransack (~> 0.6.0)
185
+ state_machine (= 1.1.2)
186
+ stringex (~> 1.3.2)
187
+ sprockets (2.1.2)
188
+ hike (~> 1.2)
189
+ rack (~> 1.0)
190
+ tilt (~> 1.1, != 1.3.0)
191
+ sqlite3 (1.3.6)
192
+ state_machine (1.1.2)
193
+ stringex (1.3.3)
194
+ thor (0.14.6)
195
+ tilt (1.3.3)
196
+ treetop (1.4.10)
197
+ polyglot
198
+ polyglot (>= 0.3.1)
199
+ tzinfo (0.3.33)
200
+ uuidtools (2.1.2)
201
+ xpath (0.1.4)
202
+ nokogiri (~> 1.3)
203
+
204
+ PLATFORMS
205
+ ruby
206
+
207
+ DEPENDENCIES
208
+ capybara (= 1.0.1)
209
+ ffaker
210
+ rspec-rails
211
+ ruby-debug
212
+ spree-category-bullets!
213
+ sqlite3
data/LICENSE ADDED
@@ -0,0 +1,26 @@
1
+ Copyright (c) 2012 [name of plugin creator]
2
+ All rights reserved.
3
+
4
+ Redistribution and use in source and binary forms, with or without modification,
5
+ are permitted provided that the following conditions are met:
6
+
7
+ * Redistributions of source code must retain the above copyright notice,
8
+ this list of conditions and the following disclaimer.
9
+ * Redistributions in binary form must reproduce the above copyright notice,
10
+ this list of conditions and the following disclaimer in the documentation
11
+ and/or other materials provided with the distribution.
12
+ * Neither the name Spree nor the names of its contributors may be used to
13
+ endorse or promote products derived from this software without specific
14
+ prior written permission.
15
+
16
+ THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
17
+ "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
18
+ LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
19
+ A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
20
+ CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
21
+ EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
22
+ PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
23
+ PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
24
+ LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
25
+ NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
26
+ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
data/README.md ADDED
@@ -0,0 +1,46 @@
1
+ Spree Category Bullets
2
+ ====================
3
+
4
+ With this extension you can attach bullets (text chunks) on the categories.
5
+ Then all the products in this category will have those bullets displayed in the single item view.
6
+
7
+ Every bullet will have sort order, active flag and description.
8
+
9
+ One special case is when you have close products in the same category which differs by some of the bullets.
10
+ Then you can use the image_code to group the simillar bullets in the category.
11
+
12
+ To make this work you have to add a property 'image_code' in the products.
13
+
14
+ Here is an example of the most complicated usage of the bullets
15
+
16
+
17
+ Important!!!
18
+ If one product belongs to multiple taxon's this extension uses the bullets attached to the first taxon.
19
+ The attributes from the parent taxons are not displayed!
20
+
21
+
22
+ Installation
23
+ ------------
24
+
25
+ Add to `Gemfile`:
26
+
27
+ gem 'spree_category_bullets', :git => 'git://github.com/gudata/spree_category_bullets.git'
28
+
29
+ Run:
30
+
31
+ $ bundle
32
+ $ bundle exec rails g spree_category_bullets:install
33
+
34
+
35
+ Testing
36
+ -------
37
+
38
+ No need for tests right now.
39
+
40
+ Be sure to bundle your dependencies and then create a dummy test app for the specs to run against.
41
+
42
+ $ bundle
43
+ $ bundle exec rake test_app
44
+ $ bundle exec rspec spec
45
+
46
+ Copyright (c) 2012 Gudasoft, released under the New BSD License
data/Rakefile ADDED
@@ -0,0 +1,29 @@
1
+ require 'rake'
2
+ require 'rake/testtask'
3
+ require 'rake/packagetask'
4
+ require 'rubygems/package_task'
5
+ require 'rspec/core/rake_task'
6
+ require 'spree/core/testing_support/common_rake'
7
+
8
+ RSpec::Core::RakeTask.new
9
+
10
+ task :default => [:spec]
11
+
12
+ spec = eval(File.read('spree_category_bullets.gemspec'))
13
+
14
+ Gem::PackageTask.new(spec) do |p|
15
+ p.gem_spec = spec
16
+ end
17
+
18
+ desc "Release to gemcutter"
19
+ task :release => :package do
20
+ require 'rake/gemcutter'
21
+ Rake::Gemcutter::Tasks.new(spec).define
22
+ Rake::Task['gem:push'].invoke
23
+ end
24
+
25
+ desc "Generates a dummy app for testing"
26
+ task :test_app do
27
+ ENV['LIB_NAME'] = 'spree_category_bullets'
28
+ Rake::Task['common:test_app'].invoke
29
+ end
data/Versionfile ADDED
@@ -0,0 +1,11 @@
1
+ # This file is used to designate compatibilty with different versions of Spree
2
+ # Please see http://spreecommerce.com/documentation/extensions.html#versionfile for details
3
+
4
+
5
+ # Examples
6
+ #
7
+ # "0.70.x" => { :branch => "master"}
8
+ # "0.60.x" => { :branch => "0-60-stable" }
9
+ # "0.0.1" => { :tag => "v1.0.0", :version => "1.0.0" }
10
+
11
+ "0.0.1" => { :branch => "1-1-stable"}
@@ -0,0 +1 @@
1
+ //= require admin/spree_core
@@ -0,0 +1 @@
1
+ //= require store/spree_core
@@ -0,0 +1,3 @@
1
+ /*
2
+ *= require admin/spree_core
3
+ */
@@ -0,0 +1,3 @@
1
+ /*
2
+ *= require store/spree_core
3
+ */
@@ -0,0 +1,53 @@
1
+ class Spree::Admin::BulletsController < Spree::Admin::BaseController
2
+ respond_to :html
3
+
4
+ before_filter :load_parent
5
+
6
+ def index
7
+ @bullets = Spree::Bullet.sorted_by_image_code.where(:taxon_id => @taxon.id)
8
+ respond_with(:admin, @taxonomy, @taxon)
9
+ end
10
+
11
+ def new
12
+ @bullet = Spree::Bullet.new(:taxon_id => @taxon.id, :is_active => true)
13
+ end
14
+
15
+ def create
16
+ @bullet = Spree::Bullet.new(params[:bullet].merge(:taxon_id => @taxon.id))
17
+
18
+ if @bullet.save
19
+ flash[:notice] = t(:successfully_created_bullet)
20
+ redirect_to admin_taxonomy_taxon_bullets_url(@taxonomy, @taxon)
21
+ else
22
+ respond_with(@bullet)
23
+ flash[:error] = t(:error_creating)
24
+ end
25
+
26
+ end
27
+
28
+ def update
29
+ if @bullet.update_attributes(params[:bullet])
30
+ flash.notice = t(:successfully_updated_bullet)
31
+ redirect_to admin_taxonomy_taxon_bullets_url(@taxonomy, @taxon)
32
+ else
33
+ respond_with(@bullet)
34
+ end
35
+ end
36
+
37
+
38
+ def destroy
39
+ if @bullet.destroy
40
+ flash[:notice] = t(:successfully_removed_bullet)
41
+ else
42
+ flash[:error] = t(:error_deleting)
43
+ end
44
+ redirect_to admin_taxonomy_taxon_bullets_url(@taxonomy, @taxon)
45
+ end
46
+
47
+ private
48
+ def load_parent
49
+ @taxonomy = Spree::Taxonomy.find(params[:taxonomy_id])
50
+ @taxon = @taxonomy.taxons.find(params[:taxon_id])
51
+ @bullet = Spree::Bullet.find(params[:id]) if params[:id]
52
+ end
53
+ end
@@ -0,0 +1,14 @@
1
+ class Spree::Bullet < ActiveRecord::Base
2
+ belongs_to :taxon
3
+ has_many :products
4
+
5
+ attr_accessible :taxon, :taxon_id, :image_code, :description, :line_number, :is_active
6
+
7
+ validates :description, :presence => true
8
+
9
+ scope :active, where(:is_active => true)
10
+ scope :sorted, order("line_number asc")
11
+ scope :sorted_by_image_code, order("image_code asc, line_number asc")
12
+ scope :image_code, lambda{|image_code| where(:image_code => image_code)}
13
+
14
+ end
@@ -0,0 +1,4 @@
1
+ Spree::Taxon.class_eval do
2
+ has_many :bullets
3
+
4
+ end
@@ -0,0 +1,12 @@
1
+ Deface::Override.new(:virtual_path => 'spree/admin/taxons/edit',
2
+ :name => 'add bullet editing to taxon edit screen',
3
+ :insert_before => "[data-hook='buttons']",
4
+ :partial => 'spree/admin/taxons/to_bullets_index')
5
+
6
+
7
+
8
+ Deface::Override.new(:virtual_path => 'spree/products/show',
9
+ :name => 'display_bullets',
10
+ :insert_before => "[data-hook='product_properties']",
11
+ :partial => 'spree/products/bullets' # spree/products/custom_bullets if you want the image_code restriction to be active
12
+ )
@@ -0,0 +1,24 @@
1
+ <%= f.field_container :description do %>
2
+ <%= f.label :description, t(:description) %><br />
3
+ <%= f.text_area :description, {:cols => 60, :rows => 4, :class => 'fullwidth'} %>
4
+ <% end %>
5
+
6
+ <%= f.field_container :image_code do %>
7
+ <%= f.label :image_code, t(:image_code) %><br />
8
+ <%= f.text_field :image_code %>
9
+ <p>
10
+ Hint: This could be a property of the product. This way you can 'tie' different bullets to the products based on the image code.
11
+ For example in a category all the products with the same image code will have the same bullets.
12
+ You have to create the image_code propery by your own. And use the right partial in the store (it is included in the extension)
13
+ </p>
14
+ <% end %>
15
+
16
+ <%= f.field_container :line_number do %>
17
+ <%= f.label :line_number, t(:line_number) %><br />
18
+ <%= f.text_field :line_number %>
19
+ <% end %>
20
+
21
+ <%= f.field_container :is_active do %>
22
+ <%= f.label :is_active, t(:active), :for=> 'bullet_is_active_1' %><%= f.radio_button(:is_active, "1") %>
23
+ <%= f.label :is_active, t(:not_active), :for=> 'bullet_is_active_0' %><%= f.radio_button(:is_active, "0") %>
24
+ <% end %>
@@ -0,0 +1,10 @@
1
+ <%= render :partial => 'spree/admin/shared/configuration_menu' %>
2
+
3
+ <h1>Editing Bullet</h1>
4
+
5
+ <%= render 'spree/shared/error_messages', :target => @bullet %>
6
+
7
+ <%= form_for [:admin, @taxonomy, @taxon, @bullet], :html => { :multipart => true } do |f| %>
8
+ <%= render :partial => 'form', :locals => { :f => f } %>
9
+ <p class="form-buttons" data-hook="buttons"><%= button t(:save) %></p>
10
+ <% end %>
@@ -0,0 +1,41 @@
1
+ <%= render :partial => 'spree/admin/shared/configuration_menu' %>
2
+
3
+ <div class="toolbar" data-hook="toolbar">
4
+ <ul class="actions">
5
+ <li>
6
+ <p><%= button_link_to t(:'new'), new_admin_taxonomy_taxon_bullet_url( @taxonomy, @taxon), :icon => 'add' %></p>
7
+ </li>
8
+ </ul>
9
+ <br class="clear" />
10
+ </div>
11
+
12
+ <h1>Bullets</h1>
13
+ <h2><%= @taxonomy.name %> / <%= @taxon.name %></h2>
14
+
15
+ <table class="index" id="listing_bullets" data-hook="table-bullets">
16
+ <thead>
17
+ <tr data-hook="admin_bullets_index_headers">
18
+ <th><%= t(:value) %></th>
19
+ <th><%= t(:image_code) %></th>
20
+ <th><%= t(:sort) %></th>
21
+ <th><%= t(:active) %></th>
22
+ <th data-hook="admin_bullets_index_header_actions"></th>
23
+ </tr>
24
+ </thead>
25
+ <tbody>
26
+ <% @bullets.each do |bullet|%>
27
+ <tr data-hook="admin_bullets_index_rows">
28
+ <td><%= link_to truncate(bullet.description, :length => 100), edit_admin_taxonomy_taxon_bullet_url(@taxonomy, @taxon, bullet), :class => 'edit' %></td>
29
+ <td><%= bullet.image_code %>
30
+ <td><%= bullet.line_number %>
31
+ <td><%= bullet.is_active == 1 ? image_tag('admin/icons/16x16/4.png') : image_tag('admin/icons/16x16/2.png') %>
32
+ <td data-hook="admin_bullets_index_row_actions">
33
+ <%= link_to t('edit'), edit_admin_taxonomy_taxon_bullet_url(@taxonomy, @taxon, bullet), :class => 'edit' %> &nbsp;
34
+ <%= link_to t('delete'), [:admin, @taxonomy, @taxon, bullet], :confirm => "Are you sure?", :method=>:delete %>
35
+ </td>
36
+ </tr>
37
+ <% end %>
38
+ </tbody>
39
+ </table>
40
+
41
+ <p><%= link_to t(:'Back'), edit_admin_taxonomy_url( @taxonomy ) %></p>
@@ -0,0 +1,9 @@
1
+ <%= render :partial => 'spree/admin/shared/configuration_menu' %>
2
+
3
+ <h1>New Bullet</h1>
4
+ <%= render 'spree/shared/error_messages', :target => @bullet %>
5
+
6
+ <%= form_for [:admin, @taxonomy, @taxon, @bullet], :html => { :multipart => true } do |f| %>
7
+ <%= render :partial => 'form', :locals => { :f => f } %>
8
+ <p class="form-buttons" data-hook="buttons"><%= button t(:create) %></p>
9
+ <% end %>
@@ -0,0 +1 @@
1
+ <%= link_to t(:attached_bullets), admin_taxonomy_taxon_bullets_path(@taxonomy, @taxon) %>
@@ -0,0 +1,15 @@
1
+ <%
2
+ show_bullets_for_taxon = @product.taxons.first
3
+
4
+ bullets = show_bullets_for_taxon.bullets.active.sorted
5
+
6
+ unless !(@product or bullets.empty?) %>
7
+ <section id="bullets">
8
+ <ul>
9
+ <%
10
+ bullets.each do |bullet| %>
11
+ <%= content_tag :li, bullet.description %>
12
+ <% end %>
13
+ </ul>
14
+ </section>
15
+ <% end %>
@@ -0,0 +1,17 @@
1
+ <%
2
+ show_bullets_for_taxon = @product.taxons.first
3
+
4
+ image_code_property_id = @product.product_properties.where(:property_id => Gator::Application::PRODUCT_PROPERTIES[:image_code] ).first.value
5
+
6
+ bullets = show_bullets_for_taxon.bullets.image_code(image_code_property_id).active.sorted
7
+
8
+ unless !(@product or bullets.empty?) %>
9
+ <section id="bullets">
10
+ <ul>
11
+ <%
12
+ bullets.each do |bullet| %>
13
+ <%= content_tag :li, bullet.description %>
14
+ <% end %>
15
+ </ul>
16
+ </section>
17
+ <% end %>
@@ -0,0 +1,11 @@
1
+ # Sample localization file for English. Add more files in this directory for other locales.
2
+ # See https://github.com/svenfuchs/rails-i18n/tree/master/rails%2Flocale for starting points.
3
+
4
+ en:
5
+ error_creating: Error creating
6
+ successfully_created_bullet: Successfully Created Bullet
7
+ successfully_removed_bullet: Successfully Removed
8
+ successfully_updated_bullet: Successfully Updated
9
+ active: Active
10
+ not_active: Not Active
11
+ save: Save
data/config/routes.rb ADDED
@@ -0,0 +1,18 @@
1
+ Spree::Core::Engine.routes.draw do
2
+ namespace :admin do
3
+ resources :taxonomies do
4
+ resources :taxons do
5
+ resources :bullets
6
+ end
7
+ end
8
+ end
9
+ end
10
+
11
+ # admin_taxon_bullets GET /admin/taxons/:taxon_id/bullets(.:format) spree/admin/bullets#index
12
+ # POST /admin/taxons/:taxon_id/bullets(.:format) spree/admin/bullets#create
13
+ # new_admin_taxon_bullet GET /admin/taxons/:taxon_id/bullets/new(.:format) spree/admin/bullets#new
14
+ # edit_admin_taxon_bullet GET /admin/taxons/:taxon_id/bullets/:id/edit(.:format) spree/admin/bullets#edit
15
+ # admin_taxon_bullet GET /admin/taxons/:taxon_id/bullets/:id(.:format) spree/admin/bullets#show
16
+ # PUT /admin/taxons/:taxon_id/bullets/:id(.:format) spree/admin/bullets#update
17
+ # DELETE /admin/taxons/:taxon_id/bullets/:id(.:format) spree/admin/bullets#destroy
18
+
@@ -0,0 +1,21 @@
1
+ # This migration comes from spree_category_bullets (originally 20120424085004)
2
+ class CreateCategoryBullets < ActiveRecord::Migration
3
+ def self.up
4
+ create_table :spree_bullets do |t|
5
+ t.references :taxon
6
+ t.integer :image_code
7
+ t.text :description
8
+ t.integer :line_number
9
+ t.integer :is_active
10
+
11
+ t.timestamps
12
+ end
13
+
14
+ add_index :spree_bullets_taxons, [:taxon_id], :name => 'index_bullets_taxon'
15
+ add_index :spree_bullets_taxons, [:taxon_id, :image_code], :name => 'index_bullets_taxon_image_code'
16
+ end
17
+
18
+ def self.down
19
+ drop_table :spree_bullets
20
+ end
21
+ end
@@ -0,0 +1,29 @@
1
+ module SpreeCategoryBullets
2
+ module Generators
3
+ class InstallGenerator < Rails::Generators::Base
4
+
5
+ def add_javascripts
6
+ append_file "app/assets/javascripts/store/all.js", "\n//= require store/spree_category_bullets\n"
7
+ append_file "app/assets/javascripts/admin/all.js", "\n//= require admin/spree_category_bullets\n"
8
+ end
9
+
10
+ def add_stylesheets
11
+ inject_into_file "app/assets/stylesheets/store/all.css", "\n *= require store/spree_category_bullets\n", :before => /\*\//, :verbose => true
12
+ inject_into_file "app/assets/stylesheets/admin/all.css", "\n *= require admin/spree_category_bullets\n", :before => /\*\//, :verbose => true
13
+ end
14
+
15
+ def add_migrations
16
+ run 'bundle exec rake railties:install:migrations FROM=spree_category_bullets'
17
+ end
18
+
19
+ def run_migrations
20
+ res = ask "Would you like to run the migrations now? [Y/n]"
21
+ if res == "" || res.downcase == "y"
22
+ run 'bundle exec rake db:migrate'
23
+ else
24
+ puts "Skiping rake db:migrate, don't forget to run it!"
25
+ end
26
+ end
27
+ end
28
+ end
29
+ end
@@ -0,0 +1,20 @@
1
+ module SpreeCategoryBullets
2
+ class Engine < Rails::Engine
3
+ engine_name 'spree_category_bullets'
4
+
5
+ config.autoload_paths += %W(#{config.root}/lib)
6
+
7
+ # use rspec for tests
8
+ config.generators do |g|
9
+ g.test_framework :rspec
10
+ end
11
+
12
+ def self.activate
13
+ Dir.glob(File.join(File.dirname(__FILE__), "../../app/**/*_decorator*.rb")) do |c|
14
+ Rails.configuration.cache_classes ? require(c) : load(c)
15
+ end
16
+ end
17
+
18
+ config.to_prepare &method(:activate).to_proc
19
+ end
20
+ end
@@ -0,0 +1,2 @@
1
+ require 'spree_core'
2
+ require 'spree_category_bullets/engine'
data/script/rails ADDED
@@ -0,0 +1,5 @@
1
+ # This command will automatically be run when you run "rails" with Rails 3 gems installed from the root of your application.
2
+
3
+ APP_PATH = File.expand_path('../../config/application', __FILE__)
4
+ require File.expand_path('../../config/boot', __FILE__)
5
+ require 'rails/commands'
@@ -0,0 +1,32 @@
1
+ # Configure Rails Environment
2
+ ENV["RAILS_ENV"] = "test"
3
+
4
+ require File.expand_path("../dummy/config/environment.rb", __FILE__)
5
+
6
+ require 'rspec/rails'
7
+
8
+ # Requires supporting ruby files with custom matchers and macros, etc,
9
+ # in spec/support/ and its subdirectories.
10
+ Dir[File.join(File.dirname(__FILE__), "support/**/*.rb")].each {|f| require f }
11
+
12
+ # Requires factories defined in spree_core
13
+ require 'spree/core/testing_support/factories'
14
+
15
+ RSpec.configure do |config|
16
+ # == Mock Framework
17
+ #
18
+ # If you prefer to use mocha, flexmock or RR, uncomment the appropriate line:
19
+ #
20
+ # config.mock_with :mocha
21
+ # config.mock_with :flexmock
22
+ # config.mock_with :rr
23
+ config.mock_with :rspec
24
+
25
+ # Remove this line if you're not using ActiveRecord or ActiveRecord fixtures
26
+ config.fixture_path = "#{::Rails.root}/spec/fixtures"
27
+
28
+ # If you're not using ActiveRecord, or you'd prefer not to run each of your
29
+ # examples within a transaction, remove the following line or assign false
30
+ # instead of true.
31
+ config.use_transactional_fixtures = true
32
+ end
@@ -0,0 +1,24 @@
1
+ # encoding: UTF-8
2
+ Gem::Specification.new do |s|
3
+ s.platform = Gem::Platform::RUBY
4
+ s.name = 'spree_category_bullets'
5
+ s.version = '0.0.1'
6
+ s.summary = 'Add sorted bullets/properties on categories.'
7
+ s.description = 'Each category can have orederd list of properties. Those properties are displayed on all the products'
8
+ s.required_ruby_version = '>= 1.8.7'
9
+
10
+ s.author = 'Gudata'
11
+ s.email = 'i.bardarov@gmail.com'
12
+ s.homepage = 'http://www.gudasoft.com'
13
+
14
+ s.files = `git ls-files`.split("\n")
15
+ s.test_files = `git ls-files -- {test,spec,features}/*`.split("\n")
16
+ s.require_path = 'lib'
17
+ s.requirements << 'none'
18
+
19
+ s.add_dependency 'spree_core', '~> 1.1.0.rc2'
20
+
21
+ s.add_development_dependency 'capybara', '1.0.1'
22
+ s.add_development_dependency 'rspec-rails', '~> 2.7'
23
+ s.add_development_dependency 'sqlite3'
24
+ end
metadata ADDED
@@ -0,0 +1,162 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: spree_category_bullets
3
+ version: !ruby/object:Gem::Version
4
+ hash: 29
5
+ prerelease:
6
+ segments:
7
+ - 0
8
+ - 0
9
+ - 1
10
+ version: 0.0.1
11
+ platform: ruby
12
+ authors:
13
+ - Gudata
14
+ autorequire:
15
+ bindir: bin
16
+ cert_chain: []
17
+
18
+ date: 2012-04-27 00:00:00 Z
19
+ dependencies:
20
+ - !ruby/object:Gem::Dependency
21
+ name: spree_core
22
+ prerelease: false
23
+ requirement: &id001 !ruby/object:Gem::Requirement
24
+ none: false
25
+ requirements:
26
+ - - ~>
27
+ - !ruby/object:Gem::Version
28
+ hash: 15424033
29
+ segments:
30
+ - 1
31
+ - 1
32
+ - 0
33
+ - rc
34
+ - 2
35
+ version: 1.1.0.rc2
36
+ type: :runtime
37
+ version_requirements: *id001
38
+ - !ruby/object:Gem::Dependency
39
+ name: capybara
40
+ prerelease: false
41
+ requirement: &id002 !ruby/object:Gem::Requirement
42
+ none: false
43
+ requirements:
44
+ - - "="
45
+ - !ruby/object:Gem::Version
46
+ hash: 21
47
+ segments:
48
+ - 1
49
+ - 0
50
+ - 1
51
+ version: 1.0.1
52
+ type: :development
53
+ version_requirements: *id002
54
+ - !ruby/object:Gem::Dependency
55
+ name: rspec-rails
56
+ prerelease: false
57
+ requirement: &id003 !ruby/object:Gem::Requirement
58
+ none: false
59
+ requirements:
60
+ - - ~>
61
+ - !ruby/object:Gem::Version
62
+ hash: 13
63
+ segments:
64
+ - 2
65
+ - 7
66
+ version: "2.7"
67
+ type: :development
68
+ version_requirements: *id003
69
+ - !ruby/object:Gem::Dependency
70
+ name: sqlite3
71
+ prerelease: false
72
+ requirement: &id004 !ruby/object:Gem::Requirement
73
+ none: false
74
+ requirements:
75
+ - - ">="
76
+ - !ruby/object:Gem::Version
77
+ hash: 3
78
+ segments:
79
+ - 0
80
+ version: "0"
81
+ type: :development
82
+ version_requirements: *id004
83
+ description: Each category can have orederd list of properties. Those properties are displayed on all the products
84
+ email: i.bardarov@gmail.com
85
+ executables: []
86
+
87
+ extensions: []
88
+
89
+ extra_rdoc_files: []
90
+
91
+ files:
92
+ - .gitignore
93
+ - .rspec
94
+ - Gemfile
95
+ - Gemfile.lock
96
+ - LICENSE
97
+ - README.md
98
+ - Rakefile
99
+ - Versionfile
100
+ - app/assets/javascripts/admin/spree_category_bullets.js
101
+ - app/assets/javascripts/store/spree_category_bullets.js
102
+ - app/assets/stylesheets/admin/spree_category_bullets.css
103
+ - app/assets/stylesheets/store/spree_category_bullets.css
104
+ - app/controllers/spree/admin/bullets_controller.rb
105
+ - app/models/spree/bullet.rb
106
+ - app/models/spree/taxon_decorator.rb
107
+ - app/overrides/add_bullets_to_taxons_configurations_menu.rb
108
+ - app/views/spree/admin/bullets/_form.html.erb
109
+ - app/views/spree/admin/bullets/edit.html.erb
110
+ - app/views/spree/admin/bullets/index.html.erb
111
+ - app/views/spree/admin/bullets/new.html.erb
112
+ - app/views/spree/admin/taxons/_to_bullets_index.html.erb
113
+ - app/views/spree/products/_bullets.html.erb
114
+ - app/views/spree/products/_custom_bullets.html.erb
115
+ - config/locales/en.yml
116
+ - config/routes.rb
117
+ - db/migrate/20120424085004_create_category_bullets.rb
118
+ - lib/generators/spree_category_bullets/install/install_generator.rb
119
+ - lib/spree_category_bullets.rb
120
+ - lib/spree_category_bullets/engine.rb
121
+ - script/rails
122
+ - spec/spec_helper.rb
123
+ - spree_category_bullets.gemspec
124
+ - vendor/assets/images/admin/icons/16x16/2.png
125
+ - vendor/assets/images/admin/icons/16x16/4.png
126
+ homepage: http://www.gudasoft.com
127
+ licenses: []
128
+
129
+ post_install_message:
130
+ rdoc_options: []
131
+
132
+ require_paths:
133
+ - lib
134
+ required_ruby_version: !ruby/object:Gem::Requirement
135
+ none: false
136
+ requirements:
137
+ - - ">="
138
+ - !ruby/object:Gem::Version
139
+ hash: 57
140
+ segments:
141
+ - 1
142
+ - 8
143
+ - 7
144
+ version: 1.8.7
145
+ required_rubygems_version: !ruby/object:Gem::Requirement
146
+ none: false
147
+ requirements:
148
+ - - ">="
149
+ - !ruby/object:Gem::Version
150
+ hash: 3
151
+ segments:
152
+ - 0
153
+ version: "0"
154
+ requirements:
155
+ - none
156
+ rubyforge_project:
157
+ rubygems_version: 1.8.23
158
+ signing_key:
159
+ specification_version: 3
160
+ summary: Add sorted bullets/properties on categories.
161
+ test_files: []
162
+