spree_category_bullets 0.0.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
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
+