spree_core 0.60.0.RC1 → 0.60.0

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 (48) hide show
  1. data/app/controllers/admin/line_items_controller.rb +12 -13
  2. data/app/controllers/admin/orders_controller.rb +11 -3
  3. data/app/controllers/admin/payment_methods_controller.rb +3 -3
  4. data/app/controllers/admin/payments_controller.rb +12 -5
  5. data/app/controllers/admin/product_groups_controller.rb +1 -1
  6. data/app/controllers/admin/product_scopes_controller.rb +12 -8
  7. data/app/controllers/admin/products_controller.rb +7 -7
  8. data/app/controllers/admin/properties_controller.rb +3 -1
  9. data/app/controllers/admin/prototypes_controller.rb +4 -2
  10. data/app/controllers/admin/reports_controller.rb +5 -1
  11. data/app/controllers/admin/resource_controller.rb +40 -31
  12. data/app/controllers/admin/return_authorizations_controller.rb +1 -1
  13. data/app/controllers/admin/shipments_controller.rb +7 -8
  14. data/app/controllers/admin/states_controller.rb +3 -3
  15. data/app/controllers/admin/taxonomies_controller.rb +5 -2
  16. data/app/controllers/admin/taxons_controller.rb +39 -18
  17. data/app/controllers/admin/users_controller.rb +5 -5
  18. data/app/controllers/admin/variants_controller.rb +4 -4
  19. data/app/controllers/admin/zones_controller.rb +3 -2
  20. data/app/controllers/checkout_controller.rb +6 -5
  21. data/app/controllers/content_controller.rb +8 -2
  22. data/app/controllers/orders_controller.rb +8 -5
  23. data/app/controllers/products_controller.rb +9 -5
  24. data/app/controllers/spree/base_controller.rb +1 -0
  25. data/app/controllers/taxons_controller.rb +5 -1
  26. data/app/helpers/admin/taxons_helper.rb +14 -1
  27. data/app/helpers/spree/base_helper.rb +2 -1
  28. data/app/models/app_configuration.rb +1 -0
  29. data/app/models/creditcard.rb +1 -1
  30. data/app/views/admin/orders/history.html.erb +1 -1
  31. data/app/views/admin/reports/index.html.erb +3 -3
  32. data/app/views/admin/taxons/available.js.erb +2 -2
  33. data/app/views/admin/taxons/selected.html.erb +1 -0
  34. data/app/views/orders/show.html.erb +10 -12
  35. data/app/views/products/show.html.erb +1 -1
  36. data/app/views/taxons/show.html.erb +1 -1
  37. data/config/locales/en.yml +1 -3
  38. data/config/routes.rb +1 -0
  39. data/lib/product_filters.rb +2 -2
  40. data/lib/spree_base.rb +1 -0
  41. data/lib/spree_core.rb +6 -0
  42. data/lib/spree_core/ext/hash.rb +75 -0
  43. data/lib/spree_core/spree_custom_responder.rb +29 -0
  44. data/lib/spree_core/spree_respond_with.rb +57 -0
  45. data/lib/spree_core/version.rb +1 -1
  46. data/public/javascripts/taxonomy.js +8 -4
  47. data/public/stylesheets/admin/admin-reset.css +2 -0
  48. metadata +20 -22
@@ -3,47 +3,46 @@ class Admin::LineItemsController < Admin::BaseController
3
3
  before_filter :load_order
4
4
  before_filter :load_line_item, :only => [:destroy, :update]
5
5
 
6
+ respond_to :html
7
+
6
8
  def create
7
9
  variant = Variant.find(params[:line_item][:variant_id])
8
- @order.add_variant(variant, params[:line_item][:quantity].to_i)
10
+ @line_item = @order.add_variant(variant, params[:line_item][:quantity].to_i)
9
11
 
10
12
  if @order.save
11
- respond_to do |format|
12
- format.html do
13
- render :partial => "admin/orders/form", :locals => {:order => @order.reload}, :layout => false
14
- end
13
+ respond_with(@line_item) do |format|
14
+ format.html { render :partial => "admin/orders/form", :locals => {:order => @order.reload}, :layout => false }
15
15
  end
16
16
  else
17
+ #TODO Handle failure gracefully, patches welcome.
17
18
  end
18
19
  end
19
20
 
20
21
  def destroy
21
22
  if @line_item.destroy
22
- respond_to do |format|
23
+ respond_with(@line_item) do |format|
23
24
  format.html { render :partial => "admin/orders/form", :locals => {:order => @order.reload}, :layout => false }
24
25
  end
25
26
  else
26
- respond_to do |format|
27
- format.html do
28
- render :partial => "admin/orders/form", :locals => {:order => @order.reload}, :layout => false
29
- end
27
+ respond_with(@line_item) do |format|
28
+ format.html { render :partial => "admin/orders/form", :locals => {:order => @order.reload}, :layout => false }
30
29
  end
31
30
  end
32
31
  end
33
32
 
34
33
  def new
35
- respond_to do |format|
34
+ respond_with do |format|
36
35
  format.html { render :action => :new, :layout => false }
37
36
  end
38
37
  end
39
38
 
40
39
  def update
41
40
  if @line_item.update_attributes(params[:line_item])
42
- respond_to do |format|
41
+ respond_with(@line_item) do |format|
43
42
  format.html { render :partial => "admin/orders/form", :locals => {:order => @order.reload}, :layout => false}
44
43
  end
45
44
  else
46
- respond_to do |format|
45
+ respond_with(@line_item) do |format|
47
46
  format.html { render :partial => "admin/orders/form", :locals => {:order => @order.reload}, :layout => false}
48
47
  end
49
48
  end
@@ -4,6 +4,8 @@ class Admin::OrdersController < Admin::BaseController
4
4
  before_filter :initialize_order_events
5
5
  before_filter :load_order, :only => [:fire, :resend, :history, :user]
6
6
 
7
+ respond_to :html
8
+
7
9
  def index
8
10
  params[:search] ||= {}
9
11
  params[:search][:completed_at_is_not_null] ||= '1' if Spree::Config[:show_only_complete_orders_by_default]
@@ -29,18 +31,23 @@ class Admin::OrdersController < Admin::BaseController
29
31
  :include => [:user, :shipments, :payments],
30
32
  :per_page => Spree::Config[:orders_per_page],
31
33
  :page => params[:page])
34
+
35
+ respond_with(@orders)
32
36
  end
33
37
 
34
38
  def show
35
39
  load_order
40
+ respond_with(@order)
36
41
  end
37
42
 
38
43
  def new
39
44
  @order = Order.create
45
+ respond_with(@order)
40
46
  end
41
47
 
42
48
  def edit
43
49
  load_order
50
+ respond_with(@order)
44
51
  end
45
52
 
46
53
  def update
@@ -70,7 +77,7 @@ class Admin::OrdersController < Admin::BaseController
70
77
  @order.errors.add(:line_items, t('errors.messages.blank'))
71
78
  end
72
79
 
73
- respond_to do |format|
80
+ respond_with(@order) do |format|
74
81
  format.html do
75
82
  if return_path
76
83
  redirect_to return_path
@@ -94,13 +101,14 @@ class Admin::OrdersController < Admin::BaseController
94
101
  rescue Spree::GatewayError => ge
95
102
  flash[:error] = "#{ge.message}"
96
103
  ensure
97
- redirect_to :back
104
+ respond_with(@order) { |format| format.html { redirect_to :back } }
98
105
  end
99
106
 
100
107
  def resend
101
108
  OrderMailer.confirm_email(@order, true).deliver
102
109
  flash.notice = t('order_email_resent')
103
- redirect_to :back
110
+
111
+ respond_with(@order) { |format| format.html { redirect_to :back } }
104
112
  end
105
113
 
106
114
  def user
@@ -12,7 +12,7 @@ class Admin::PaymentMethodsController < Admin::ResourceController
12
12
  respond_with(@payment_method, :location => edit_admin_payment_method_path(@payment_method))
13
13
  else
14
14
  invoke_callbacks(:create, :fails)
15
- render :new
15
+ respond_with(@payment_method)
16
16
  end
17
17
  end
18
18
 
@@ -24,13 +24,13 @@ class Admin::PaymentMethodsController < Admin::ResourceController
24
24
  @payment_method = PaymentMethod.find(params[:id])
25
25
  end
26
26
  payment_method_params = params[@payment_method.class.name.underscore.gsub("/", "_")] || {}
27
- if @payment_method.update_attributes(params[:payment_method].merge(payment_method_params))
27
+ if @payment_method.update_attributes(params[:payment_method].merge(payment_method_params))
28
28
  invoke_callbacks(:update, :after)
29
29
  flash[:notice] = I18n.t(:successfully_updated, :resource => I18n.t(:payment_method))
30
30
  respond_with(@payment_method, :location => edit_admin_payment_method_path(@payment_method))
31
31
  else
32
32
  invoke_callbacks(:update, :fails)
33
- render :edit
33
+ respond_with(@payment_method)
34
34
  end
35
35
  end
36
36
 
@@ -3,12 +3,17 @@ class Admin::PaymentsController < Admin::BaseController
3
3
  before_filter :load_payment, :except => [:create, :new, :index]
4
4
  before_filter :load_data
5
5
 
6
+ respond_to :html
7
+
6
8
  def index
7
9
  @payments = @order.payments
10
+
11
+ respond_with(@payments)
8
12
  end
9
13
 
10
14
  def new
11
15
  @payment = @order.payments.build
16
+ respond_with(@payment)
12
17
  end
13
18
 
14
19
  def create
@@ -19,26 +24,28 @@ class Admin::PaymentsController < Admin::BaseController
19
24
 
20
25
  begin
21
26
  unless @payment.save
22
- response_for :create_fails
27
+ respond_with(@payment) { |format| format.html { redirect_to admin_order_payments_path(@order) } }
23
28
  return
24
29
  end
25
30
 
26
31
  if @order.completed?
27
32
  @payment.process!
28
33
  flash[:notice] = I18n.t(:successfully_created, :resource => 'payment')
29
- redirect_to admin_order_payments_path(@order)
34
+
35
+ respond_with(@payment) { |format| format.html { redirect_to admin_order_payments_path(@order) } }
30
36
  else
31
37
  #This is the first payment (admin created order)
32
38
  until @order.completed?
33
39
  @order.next!
34
40
  end
35
41
  flash.notice = t('new_order_completed')
36
- redirect_to admin_order_url(@order)
42
+ respond_with(@payment) { |format| format.html { redirect_to admin_order_url(@order) } }
37
43
  end
38
44
 
39
45
  rescue Spree::GatewayError => e
40
46
  flash[:error] = "#{e.message}"
41
- redirect_to new_admin_payment_path(@order)
47
+
48
+ respond_with(@payment) { |format| format.html { redirect_to new_admin_payment_path(@order) } }
42
49
  end
43
50
  end
44
51
 
@@ -53,7 +60,7 @@ class Admin::PaymentsController < Admin::BaseController
53
60
  rescue Spree::GatewayError => ge
54
61
  flash[:error] = "#{ge.message}"
55
62
  ensure
56
- redirect_to admin_order_payments_path(@order)
63
+ respond_with(@payment) { |format| format.html { redirect_to admin_order_payments_path(@order) } }
57
64
  end
58
65
 
59
66
  private
@@ -4,7 +4,7 @@ class Admin::ProductGroupsController < Admin::ResourceController
4
4
  def preview
5
5
  @product_group = ProductGroup.new(params[:product_group])
6
6
  @product_group.name = "for_preview"
7
- render :partial => 'preview', :layout => false
7
+ respond_with(@product_group) { |format| format.html { render :partial => 'preview', :layout => false } }
8
8
  end
9
9
 
10
10
  protected
@@ -1,31 +1,35 @@
1
1
  class Admin::ProductScopesController < Admin::BaseController
2
2
  helper 'admin/product_groups'
3
-
3
+
4
+ respond_to :html, :js
5
+
4
6
  def create
5
7
  @product_group = ProductGroup.find_by_permalink(params[:product_group_id])
6
8
  @product_scope = @product_group.product_scopes.build(params[:product_scope])
7
9
  if @product_scope.save
8
- respond_to do |format|
10
+ respond_with(@product_scope) do |format|
9
11
  format.html { redirect_to edit_admin_product_group_path(@product_group) }
10
12
  format.js { render :layout => false }
11
13
  end
12
14
  else
13
- render :new
15
+ respond_with(@product_scope)
14
16
  end
15
17
  end
16
-
18
+
17
19
  def destroy
18
20
  @product_scope = ProductScope.find(params[:id])
19
21
  if @product_scope.destroy
20
22
  @product_group = @product_scope.product_group
21
23
  @product_group.update_memberships
22
- respond_to do |format|
24
+ respond_with(@product_scope) do |format|
23
25
  format.html { redirect_to edit_admin_product_group_path(@product_group) }
24
26
  format.js { render :layout => false }
25
27
  end
26
28
  else
27
- redirect_to edit_admin_product_group_path(@product_scope.product_group)
29
+ respond_with(@product_scope) do |format|
30
+ format.html { redirect_to edit_admin_product_group_path(@product_scope.product_group) }
31
+ end
28
32
  end
29
- end
30
-
33
+ end
34
+
31
35
  end
@@ -4,7 +4,7 @@ class Admin::ProductsController < Admin::ResourceController
4
4
  update.before :update_before
5
5
 
6
6
  def index
7
- respond_to do |format|
7
+ respond_with(@collection) do |format|
8
8
  format.html
9
9
  format.json { render :json => json_data }
10
10
  end
@@ -27,7 +27,7 @@ class Admin::ProductsController < Admin::ResourceController
27
27
  flash.notice = I18n.t("notice_messages.product_not_deleted")
28
28
  end
29
29
 
30
- respond_to do |format|
30
+ respond_with(@product) do |format|
31
31
  format.html { redirect_to collection_url }
32
32
  format.js { render_js_for_destroy }
33
33
  end
@@ -42,19 +42,19 @@ class Admin::ProductsController < Admin::ResourceController
42
42
  flash.notice = I18n.t("notice_messages.product_not_cloned")
43
43
  end
44
44
 
45
- redirect_to edit_admin_product_url(@new)
45
+ respond_with(@new) { |format| format.html { redirect_to edit_admin_product_url(@new) } }
46
46
  end
47
-
47
+
48
48
  protected
49
-
49
+
50
50
  def find_resource
51
51
  Product.find_by_permalink(params[:id])
52
52
  end
53
-
53
+
54
54
  def location_after_save
55
55
  edit_admin_product_url(@product)
56
56
  end
57
-
57
+
58
58
  # Allow different formats of json data to suit different ajax calls
59
59
  def json_data
60
60
  json_format = params[:json_format] or 'default'
@@ -3,7 +3,9 @@ class Admin::PropertiesController < Admin::ResourceController
3
3
  # Looks like this action is unused
4
4
  def filtered
5
5
  @properties = Property.where('lower(name) LIKE ?', "%#{params[:q].mb_chars.downcase}%").order(:name)
6
- render :template => "admin/properties/filtered.html.erb", :layout => false
6
+ respond_with(@properties) do |format|
7
+ format.html { render :template => "admin/properties/filtered.html.erb", :layout => false }
8
+ end
7
9
  end
8
10
 
9
11
  end
@@ -5,14 +5,16 @@ class Admin::PrototypesController < Admin::ResourceController
5
5
 
6
6
  def available
7
7
  @prototypes = Prototype.order('name asc')
8
- respond_to do |wants|
9
- wants.html { render :layout => !request.xhr? }
8
+ respond_with(@prototypes) do |format|
9
+ format.html { render :layout => !request.xhr? }
10
10
  end
11
11
  end
12
12
 
13
13
  def select
14
14
  @prototype ||= Prototype.find(params[:id])
15
15
  @prototype_properties = @prototype.properties
16
+
17
+ respond_with(@prototypes)
16
18
  end
17
19
 
18
20
  private
@@ -1,12 +1,14 @@
1
1
  class Admin::ReportsController < Admin::BaseController
2
2
  before_filter :load_data
3
+ respond_to :html
3
4
 
4
5
  AVAILABLE_REPORTS = {
5
- :sales_total => {:name => "Sales Total", :description => "Sales Total For All Orders"}
6
+ :sales_total => {:name => I18n.t(:sales_total), :description => I18n.t(:sales_total_description)}
6
7
  }
7
8
 
8
9
  def index
9
10
  @reports = AVAILABLE_REPORTS
11
+ respond_with(@reports)
10
12
  end
11
13
 
12
14
  def sales_total
@@ -36,6 +38,8 @@ class Admin::ReportsController < Admin::BaseController
36
38
  @item_total = @search.sum(:item_total)
37
39
  @adjustment_total = @search.sum(:adjustment_total)
38
40
  @sales_total = @search.sum(:total)
41
+
42
+ respond_with
39
43
  end
40
44
 
41
45
  private
@@ -4,15 +4,22 @@ class Admin::ResourceController < Admin::BaseController
4
4
  before_filter :load_resource
5
5
 
6
6
  respond_to :html
7
-
7
+ respond_to :js, :except => [:show, :index]
8
+
8
9
  def new
9
- render :layout => !request.xhr?
10
+ respond_with(@object) do |format|
11
+ format.html { render :layout => !request.xhr? }
12
+ format.js { render :layout => false }
13
+ end
10
14
  end
11
-
15
+
12
16
  def edit
13
- render :layout => !request.xhr?
17
+ respond_with(@object) do |format|
18
+ format.html { render :layout => !request.xhr? }
19
+ format.js { render :layout => false }
20
+ end
14
21
  end
15
-
22
+
16
23
  def update
17
24
  invoke_callbacks(:update, :before)
18
25
  if @object.update_attributes(params[object_name])
@@ -20,13 +27,13 @@ class Admin::ResourceController < Admin::BaseController
20
27
  resource_desc = I18n.t(object_name)
21
28
  resource_desc += " \"#{@object.name}\"" if @object.respond_to?(:name)
22
29
  flash[:notice] = I18n.t(:successfully_updated, :resource => resource_desc)
23
- respond_to do |format|
30
+ respond_with(@object) do |format|
24
31
  format.html { redirect_to location_after_save }
25
- format.js { render :layout => false }
32
+ format.js { render :layout => false }
26
33
  end
27
34
  else
28
35
  invoke_callbacks(:update, :fails)
29
- render :edit
36
+ respond_with(@object)
30
37
  end
31
38
  end
32
39
 
@@ -37,16 +44,16 @@ class Admin::ResourceController < Admin::BaseController
37
44
  resource_desc = I18n.t(object_name)
38
45
  resource_desc += " \"#{@object.name}\"" if @object.respond_to?(:name)
39
46
  flash[:notice] = I18n.t(:successfully_created, :resource => resource_desc)
40
- respond_to do |format|
47
+ respond_with(@object) do |format|
41
48
  format.html { redirect_to location_after_save }
42
- format.js { render :layout => false }
49
+ format.js { render :layout => false }
43
50
  end
44
51
  else
45
52
  invoke_callbacks(:create, :fails)
46
- render :new
53
+ respond_with(@object)
47
54
  end
48
55
  end
49
-
56
+
50
57
  def destroy
51
58
  invoke_callbacks(:destroy, :before)
52
59
  if @object.destroy
@@ -54,39 +61,41 @@ class Admin::ResourceController < Admin::BaseController
54
61
  resource_desc = I18n.t(object_name)
55
62
  resource_desc += " \"#{@object.name}\"" if @object.respond_to?(:name)
56
63
  flash[:notice] = I18n.t(:successfully_removed, :resource => resource_desc)
57
- respond_to do |format|
64
+ respond_with(@object) do |format|
58
65
  format.html { redirect_to collection_url }
59
66
  format.js { render :partial => "/admin/shared/destroy" }
60
67
  end
61
68
  else
62
69
  invoke_callbacks(:destroy, :fails)
63
- redirect_to collection_url
70
+ respond_with(@object) do |format|
71
+ format.html { redirect_to collection_url }
72
+ end
64
73
  end
65
74
  end
66
-
75
+
67
76
  protected
68
77
 
69
78
  class << self
70
79
  attr_accessor :parent_data
71
80
  attr_accessor :callbacks
72
-
81
+
73
82
  def belongs_to(model_name, options = {})
74
83
  @parent_data ||= {}
75
84
  @parent_data[:model_name] = model_name
76
85
  @parent_data[:model_class] = model_name.to_s.classify.constantize
77
86
  @parent_data[:find_by] = options[:find_by] || :id
78
87
  end
79
-
88
+
80
89
  def create
81
90
  @callbacks ||= {}
82
91
  @callbacks[:create] ||= Spree::ActionCallbacks.new
83
92
  end
84
-
93
+
85
94
  def update
86
95
  @callbacks ||= {}
87
96
  @callbacks[:update] ||= Spree::ActionCallbacks.new
88
97
  end
89
-
98
+
90
99
  def destroy
91
100
  @callbacks ||= {}
92
101
  @callbacks[:destroy] ||= Spree::ActionCallbacks.new
@@ -96,11 +105,11 @@ class Admin::ResourceController < Admin::BaseController
96
105
  def model_class
97
106
  controller_name.classify.constantize
98
107
  end
99
-
108
+
100
109
  def object_name
101
110
  controller_name.singularize
102
111
  end
103
-
112
+
104
113
  def load_resource
105
114
  if member_action?
106
115
  @object ||= load_resource_instance
@@ -110,7 +119,7 @@ class Admin::ResourceController < Admin::BaseController
110
119
  instance_variable_set("@#{controller_name}", @collection)
111
120
  end
112
121
  end
113
-
122
+
114
123
  def load_resource_instance
115
124
  if new_actions.include?(params[:action].to_sym)
116
125
  build_resource
@@ -122,7 +131,7 @@ class Admin::ResourceController < Admin::BaseController
122
131
  def parent_data
123
132
  self.class.parent_data
124
133
  end
125
-
134
+
126
135
  def parent
127
136
  if parent_data.present?
128
137
  @parent ||= parent_data[:model_class].where(parent_data[:find_by] => params["#{parent_data[:model_name]}_id"]).first
@@ -139,7 +148,7 @@ class Admin::ResourceController < Admin::BaseController
139
148
  model_class.find(params[:id])
140
149
  end
141
150
  end
142
-
151
+
143
152
  def build_resource
144
153
  if parent_data.present?
145
154
  parent.send(controller_name).build(params[object_name])
@@ -147,17 +156,17 @@ class Admin::ResourceController < Admin::BaseController
147
156
  model_class.new(params[object_name])
148
157
  end
149
158
  end
150
-
159
+
151
160
  def collection
152
161
  return parent.send(controller_name) if parent_data.present?
153
-
162
+
154
163
  if model_class.respond_to?(:accessible_by) && !current_ability.has_block?(params[:action], model_class)
155
164
  model_class.accessible_by(current_ability)
156
165
  else
157
166
  model_class.scoped
158
167
  end
159
168
  end
160
-
169
+
161
170
  def location_after_save
162
171
  collection_url
163
172
  end
@@ -181,7 +190,7 @@ class Admin::ResourceController < Admin::BaseController
181
190
  new_polymorphic_url([:admin, model_class], options)
182
191
  end
183
192
  end
184
-
193
+
185
194
  def edit_object_url(object, options = {})
186
195
  if parent_data.present?
187
196
  send "edit_admin_#{parent_data[:model_name]}_#{object_name}_url", parent, object, options
@@ -189,7 +198,7 @@ class Admin::ResourceController < Admin::BaseController
189
198
  send "edit_admin_#{object_name}_url", object, options
190
199
  end
191
200
  end
192
-
201
+
193
202
  def object_url(object = nil, options = {})
194
203
  target = object ? object : @object
195
204
  if parent_data.present?
@@ -198,7 +207,7 @@ class Admin::ResourceController < Admin::BaseController
198
207
  send "admin_#{object_name}_url", target, options
199
208
  end
200
209
  end
201
-
210
+
202
211
  def collection_url(options = {})
203
212
  if parent_data.present?
204
213
  polymorphic_url([:admin, parent, model_class], options)
@@ -206,7 +215,7 @@ class Admin::ResourceController < Admin::BaseController
206
215
  polymorphic_url([:admin, model_class], options)
207
216
  end
208
217
  end
209
-
218
+
210
219
  def collection_actions
211
220
  [:index]
212
221
  end