caboose-cms 0.5.15 → 0.5.16

Sign up to get free protection for your applications and to get access to all the features.
Files changed (40) hide show
  1. checksums.yaml +9 -9
  2. data/app/assets/javascripts/caboose/cart2.js +98 -0
  3. data/app/assets/javascripts/caboose/model/index_table.js +82 -30
  4. data/app/assets/javascripts/caboose/model/model_binder.js +4 -4
  5. data/app/assets/stylesheets/caboose/admin.css +1 -0
  6. data/app/assets/stylesheets/caboose/admin_main.css +0 -42
  7. data/app/assets/stylesheets/caboose/cart.scss +41 -0
  8. data/app/assets/stylesheets/caboose/checkout.css.scss +2 -3
  9. data/app/assets/stylesheets/caboose/message_boxes.scss +49 -0
  10. data/app/assets/templates/caboose/cart/add_to_cart.jst.ejs +1 -1
  11. data/app/controllers/caboose/block_types_controller.rb +3 -1
  12. data/app/controllers/caboose/cart_controller.rb +30 -23
  13. data/app/controllers/caboose/checkout_controller.rb +11 -1
  14. data/app/controllers/caboose/products_controller.rb +28 -14
  15. data/app/controllers/caboose/stackable_groups_controller.rb +107 -0
  16. data/app/models/caboose/line_item.rb +20 -6
  17. data/app/models/caboose/order.rb +2 -1
  18. data/app/models/caboose/order_package.rb +103 -0
  19. data/app/models/caboose/product.rb +2 -1
  20. data/app/models/caboose/schema.rb +45 -3
  21. data/app/models/caboose/shipping_calculator.rb +101 -60
  22. data/app/models/caboose/shipping_package.rb +80 -0
  23. data/app/models/caboose/site.rb +3 -1
  24. data/app/models/caboose/stackable_group.rb +17 -0
  25. data/app/models/caboose/tax_calculator.rb +1 -2
  26. data/app/models/caboose/variant.rb +2 -5
  27. data/app/views/caboose/cart/index.html.erb +19 -6
  28. data/app/views/caboose/checkout/_cart.html.erb +49 -52
  29. data/app/views/caboose/checkout/empty.html.erb +9 -2
  30. data/app/views/caboose/checkout/step_one.html.erb +2 -3
  31. data/app/views/caboose/checkout/step_three.html.erb +28 -10
  32. data/app/views/caboose/checkout/step_two.html.erb +2 -4
  33. data/app/views/caboose/pages/admin_edit_content.html.erb +1 -1
  34. data/app/views/caboose/products/admin_index.html.erb +12 -11
  35. data/app/views/caboose/sites/admin_edit.html.erb +33 -6
  36. data/app/views/caboose/stackable_groups/admin_index.html.erb +43 -0
  37. data/config/routes.rb +15 -6
  38. data/lib/caboose/version.rb +1 -1
  39. data/lib/tasks/caboose.rake +7 -1
  40. metadata +36 -14
@@ -1,52 +1,49 @@
1
- <table id="cart">
2
- <tr>
3
- <th>Item</th>
4
- <th>Quantity</th>
5
- <th>Subtotal</th>
6
- </tr>
7
-
8
- <% @order.line_items.each do |line_item| %>
9
- <tr>
10
- <td>
11
- <%= line_item.variant.product.title %> - <%= line_item.variant.title %>
12
-
13
- <% line_item.customizations.each do |customization| %>
14
- <p><%= "- #{customization.variant.product.custom_input}: #{customization.custom_input}"%></p>
15
- <% end %>
16
- </td>
17
- <td align="right"><%= line_item.quantity %></td>
18
- <td align="right"><%= number_to_currency(line_item.subtotal) %></td>
19
- </tr>
20
- <% end %>
21
-
22
- <tr>
23
- <td colspan="2" align="right">Subtotal</td>
24
- <td align="right"><%= number_to_currency(@order.subtotal) %></td>
25
- </tr>
26
-
27
- <% if @order.tax and @order.tax > 0 %>
28
- <tr>
29
- <td colspan="2" align="right">Tax <span class="float: right">+</span></td>
30
- <td align="right"><%= number_to_currency(@order.tax) %></td>
31
- </tr>
32
- <% end %>
33
-
34
- <% if @order.shipping and @order.handling %>
35
- <tr>
36
- <td colspan="2" align="right">Shipping &amp; Handling <span class="float: right">+</span></td>
37
- <td align="right"><%= number_to_currency(@order.shipping + @order.handling) %></td>
38
- </tr>
39
- <% end %>
40
-
41
- <% if @order.discounts.any? %>
42
- <tr>
43
- <td colspan="2" align="right">Gift Card <span class="float: right">-</span></td>
44
- <td align="right"><%= number_to_currency(@order.discounts.first.amount_current) %></td>
45
- </tr>
46
- <% end %>
47
-
48
- <tr>
49
- <td colspan="2" align="right">Total <span class="float: right">=</span></td>
50
- <td align="right"><%= number_to_currency(@order.total) %></td>
51
- </tr>
52
- </table>
1
+
2
+ <div class='constrain'>
3
+ <table id="cart">
4
+ <tr>
5
+ <th>Item</th>
6
+ <th>Quantity</th>
7
+ <th>Subtotal</th>
8
+ </tr>
9
+ <% @order.line_items.each do |line_item| %>
10
+ <tr>
11
+ <td>
12
+ <%= line_item.variant.product.title %> - <%= line_item.variant.title %>
13
+
14
+ <% line_item.customizations.each do |customization| %>
15
+ <p><%= "- #{customization.variant.product.custom_input}: #{customization.custom_input}"%></p>
16
+ <% end %>
17
+ </td>
18
+ <td align="right"><%= line_item.quantity %></td>
19
+ <td align="right"><%= number_to_currency(line_item.subtotal) %></td>
20
+ </tr>
21
+ <% end %>
22
+ <tr>
23
+ <td colspan="2" align="right">Subtotal</td>
24
+ <td align="right"><%= number_to_currency(@order.subtotal) %></td>
25
+ </tr>
26
+ <% if @order.tax and @order.tax > 0 %>
27
+ <tr>
28
+ <td colspan="2" align="right">Tax <span class="float: right">+</span></td>
29
+ <td align="right"><%= number_to_currency(@order.tax) %></td>
30
+ </tr>
31
+ <% end %>
32
+ <% if @order.shipping and @order.handling %>
33
+ <tr>
34
+ <td colspan="2" align="right">Shipping &amp; Handling <span class="float: right">+</span></td>
35
+ <td align="right"><%= number_to_currency(@order.shipping + @order.handling) %></td>
36
+ </tr>
37
+ <% end %>
38
+ <% if @order.discounts.any? %>
39
+ <tr>
40
+ <td colspan="2" align="right">Gift Card <span class="float: right">-</span></td>
41
+ <td align="right"><%= number_to_currency(@order.discounts.first.amount_current) %></td>
42
+ </tr>
43
+ <% end %>
44
+ <tr>
45
+ <td colspan="2" align="right">Total <span class="float: right">=</span></td>
46
+ <td align="right"><%= number_to_currency(@order.total) %></td>
47
+ </tr>
48
+ </table>
49
+ </div>
@@ -1,2 +1,9 @@
1
- <h3>Your cart is empty.</h3>
2
- <p><a href="/">Back to Store</a></p>
1
+
2
+ <div id='checkout' class='constrain'>
3
+ <p>&nbsp;</p>
4
+ <p class='note'>Your cart is empty. <a href="/products">Go back to the store</a></p>
5
+ </div>
6
+
7
+ <% content_for :caboose_css do %>
8
+ <%= stylesheet_link_tag 'caboose/message_boxes' %>
9
+ <% end %>
@@ -1,7 +1,5 @@
1
1
  <div id="checkout">
2
- <h2>Checkout</h2>
3
- <%= raw checkout_nav(1) %>
4
-
2
+
5
3
  <% if @logged_in_user.id == 1 %>
6
4
  <p class='note error'>You are logged in as the admin user. Please <a href='/logout'>logout</a> and complete your order as a different user.</p>
7
5
  <% else %>
@@ -48,5 +46,6 @@
48
46
  <%= javascript_include_tag 'caboose/checkout_step1' %>
49
47
  <% end %>
50
48
  <%= content_for :caboose_css do %>
49
+ <%= stylesheet_link_tag 'caboose/message_boxes' %>
51
50
  <%= stylesheet_link_tag 'caboose/checkout' %>
52
51
  <% end %>
@@ -1,15 +1,32 @@
1
- <div id="checkout">
2
- <h2>Checkout</h2>
3
- <%= raw checkout_nav(3) %>
1
+ <div id="checkout" class='constrain'>
4
2
  <section id="checkout-shipping">
5
- <div class="wrapper">
6
- <p>Please select how you would like your products to be delivered</p>
7
- <% @rates.each do |rate| %>
8
- <button class="blue" data-shipping-code="<%= rate[:service_code] %>" data-shipping-method="<%= rate[:service_name] %>">
9
- <%= number_to_currency(rate[:total_price], :precision => 2) %><br /><%= rate[:service_name] %>
10
- </button>
3
+ <div class="wrapper">
4
+ <% if @rates.count > 1 %>
5
+ <p>Your package must be shipped in multiple packages. Please select
6
+ how you would like each package to be delivered.</p>
7
+ <% end %>
8
+ <table>
9
+ <tr>
10
+ <th>Package</th>
11
+ <th>Shipping Options</th>
12
+ </tr>
13
+ <% @rates.each_with_index do |arr, i| %>
14
+ <% op = arr[0] %>
15
+ <% sp = op.shipping_package %>
16
+ <tr>
17
+ <td valign='top'>
18
+ <ul><% op.line_items.each do |li| %><li><%= li.variant.product.title %> (<%= li.variant.title %>)<% end %></ul>
19
+ </td>
20
+ <td valign='top'>
21
+ <% arr[1].each do |rate| %>
22
+ <button class="blue" data-shipping-code="<%= rate[:service_code] %>" data-shipping-method="<%= rate[:service_name] %>">
23
+ <%= number_to_currency(rate[:total_price], :precision => 2) %><br /><%= rate[:service_name] %>
24
+ </button>
25
+ <% end %>
26
+ </td>
27
+ </tr>
11
28
  <% end %>
12
- </select>
29
+ </table>
13
30
  </div>
14
31
  </section>
15
32
  <section id="checkout-continue">
@@ -22,5 +39,6 @@
22
39
  <%= javascript_include_tag 'caboose/checkout_step3' %>
23
40
  <% end %>
24
41
  <%= content_for :caboose_css do %>
42
+ <%= stylesheet_link_tag 'caboose/message_boxes' %>
25
43
  <%= stylesheet_link_tag 'caboose/checkout' %>
26
44
  <% end %>
@@ -2,10 +2,7 @@
2
2
  sa = @order.shipping_address
3
3
  ba = @order.billing_address
4
4
  %>
5
-
6
- <div id="checkout" class='constrain'>
7
- <h2>Checkout</h2>
8
- <%= raw checkout_nav(2) %>
5
+ <div id="checkout" class='constrain'>
9
6
  <% if @logged_in_user.id == 1 %>
10
7
  <p class='note error'>You are logged in as the admin user. Please <a href='/logout'>logout</a> and complete your order as a different user.</p>
11
8
  <% else %>
@@ -55,6 +52,7 @@ ba = @order.billing_address
55
52
  <%= javascript_include_tag 'caboose/checkout_step2' %>
56
53
  <% end %>
57
54
  <%= content_for :caboose_css do %>
55
+ <%= stylesheet_link_tag 'caboose/message_boxes' %>
58
56
  <%= stylesheet_link_tag 'caboose/checkout' %>
59
57
  <% end %>
60
58
 
@@ -61,7 +61,7 @@ $(document).ready(function() {
61
61
  .attr('id', 'tiny_header')
62
62
  .append($('<a/>').attr('href', '/admin/pages').html("< Back"))
63
63
  .append($('<a/>').attr('href', '/admin/pages/<%= @page.id %>/layout').html("Page Layout"))
64
- .append($('<a/>').attr('href', '/admin/pages/<%= @page.id %>/edit').html("Page Settings"))
64
+ .append($('<a/>').attr('href', '/admin/pages/<%= @page.id %>').html("Page Settings"))
65
65
  );
66
66
  });
67
67
 
@@ -30,17 +30,18 @@ $(document).ready(function() {
30
30
  allow_duplicate: false,
31
31
  allow_advanced_edit: true,
32
32
  fields: [
33
- { show: true , name: 'id' , nice_name: 'ID' , sort: 'id' , type: 'text' , value: function(p) { return p.id }, width: 500, editable: false },
34
- { show: true , name: 'title' , nice_name: 'Title' , sort: 'title' , type: 'text' , value: function(p) { return p.title }, width: 200 },
35
- { show: true , name: 'caption' , nice_name: 'Caption' , sort: 'caption' , type: 'text' , value: function(p) { return p.caption }, width: 200 },
36
- { show: true , name: 'status' , nice_name: 'Status' , sort: 'status' , type: 'select' , value: function(p) { return p.status }, width: 200, options_url: '/admin/products/status-options' },
37
- { show: true , name: 'handle' , nice_name: 'URL Handle' , sort: 'handle' , type: 'text' , value: function(p) { return p.handle }, width: 200 },
38
- { show: true , name: 'seo_title' , nice_name: 'SEO Page Title' , sort: 'seo_title' , type: 'text' , value: function(p) { return p.seo_title }, width: 200 },
39
- { show: false, name: 'seo_description' , nice_name: 'SEO Meta Description' , sort: 'seo_description' , type: 'textarea' , value: function(p) { return p.seo_description }, width: 200, height: 150 },
40
- { show: true , name: 'alternate_id' , nice_name: 'Alternate ID' , sort: 'alternate_id' , type: 'text' , value: function(p) { return p.alternate_id }, width: 200 },
41
- { show: true , name: 'date_available' , nice_name: 'Date Available' , sort: 'date_available' , type: 'date' , value: function(p) { return p.date_available }, width: 200 },
42
- { show: false, name: 'featured' , nice_name: 'Featured' , sort: 'featured' , type: 'checkbox' , value: function(p) { return p.featured }, width: 200 },
43
- { show: false, name: 'category_id' , nice_name: 'Categories' , sort: 'categories.name' , type: 'checkbox-multiple' , value: function(p) { return p.categories ? p.categories.map(function(c) { return c.id }) : []; }, text: function(p) { return p.categories ? p.categories.map(function(c) { return c.name }).join(', ') : ''; }, width: 200, height: 200, options_url: '/admin/categories/options' },
33
+ { show: true , name: 'id' , nice_name: 'ID' , sort: 'id' , type: 'text' , value: function(p) { return p.id }, width: 500, editable: false },
34
+ { show: true , name: 'title' , nice_name: 'Title' , sort: 'title' , type: 'text' , value: function(p) { return p.title }, width: 200 },
35
+ { show: true , name: 'caption' , nice_name: 'Caption' , sort: 'caption' , type: 'text' , value: function(p) { return p.caption }, width: 200 },
36
+ { show: true , name: 'status' , nice_name: 'Status' , sort: 'status' , type: 'select' , value: function(p) { return p.status }, width: 200, options_url: '/admin/products/status-options' },
37
+ { show: true , name: 'handle' , nice_name: 'URL Handle' , sort: 'handle' , type: 'text' , value: function(p) { return p.handle }, width: 200 },
38
+ { show: true , name: 'seo_title' , nice_name: 'SEO Page Title' , sort: 'seo_title' , type: 'text' , value: function(p) { return p.seo_title }, width: 200 },
39
+ { show: false, name: 'seo_description' , nice_name: 'SEO Meta Description' , sort: 'seo_description' , type: 'textarea' , value: function(p) { return p.seo_description }, width: 200, height: 150 },
40
+ { show: true , name: 'alternate_id' , nice_name: 'Alternate ID' , sort: 'alternate_id' , type: 'text' , value: function(p) { return p.alternate_id }, width: 200 },
41
+ { show: true , name: 'date_available' , nice_name: 'Date Available' , sort: 'date_available' , type: 'date' , value: function(p) { return p.date_available }, width: 200 },
42
+ { show: false, name: 'featured' , nice_name: 'Featured' , sort: 'featured' , type: 'checkbox' , value: function(p) { return p.featured }, width: 200 },
43
+ { show: false, name: 'category_id' , nice_name: 'Categories' , sort: 'categories.name' , type: 'checkbox-multiple' , value: function(p) { return p.categories ? p.categories.map(function(c) { return c.id }) : []; }, text: function(p) { return p.categories ? p.categories.map(function(c) { return c.name }).join(', ') : ''; }, width: 200, height: 200, options_url: '/admin/categories/options' },
44
+ { show: true , name: 'stackable_group_id' , nice_name: 'Stackable Group' , sort: 'stackable_group_id' , type: 'select' , value: function(p) { return p.stackable_group_id }, width: 200, options_url: '/admin/stackable-groups/options' },
44
45
  ],
45
46
  new_model_text: 'New Product',
46
47
  new_model_fields: [
@@ -41,16 +41,31 @@ user_ids = [] if user_ids.nil?
41
41
  <table class='data'>
42
42
  <tr><th>User</th><th>None</th><th>User</th><th>Admin</th></tr>
43
43
  <% Caboose::User.reorder('last_name, first_name').all.each do |u| %>
44
- <tr>
45
- <td><%= u.first_name %> <%= u.last_name %> (<%= u.email %>)</td>
46
- <td align='center'><input type='radio' name='user<%= u.id %>' <%= !admin_ids.include?(u.id) && !user_ids.include?(u.id) ? "checked='true'" : '' %> onclick="remove_site_membership(<%= s.id %>, <%= u.id %>);" /></td>
47
- <td align='center'><input type='radio' name='user<%= u.id %>' <%= user_ids.include?(u.id) ? "checked='true'" : '' %> onclick="add_site_membership(<%= s.id %>, <%= u.id %>, 'User');" /></td>
48
- <td align='center'><input type='radio' name='user<%= u.id %>' <%= admin_ids.include?(u.id) ? "checked='true'" : '' %> onclick="add_site_membership(<%= s.id %>, <%= u.id %>, 'Admin');" /></td>
49
- </tr>
44
+ <tr>
45
+ <td><%= u.first_name %> <%= u.last_name %> (<%= u.email %>)</td>
46
+ <td align='center'><input type='radio' name='user<%= u.id %>' <%= !admin_ids.include?(u.id) && !user_ids.include?(u.id) ? "checked='true'" : '' %> onclick="remove_site_membership(<%= s.id %>, <%= u.id %>);" /></td>
47
+ <td align='center'><input type='radio' name='user<%= u.id %>' <%= user_ids.include?(u.id) ? "checked='true'" : '' %> onclick="add_site_membership(<%= s.id %>, <%= u.id %>, 'User');" /></td>
48
+ <td align='center'><input type='radio' name='user<%= u.id %>' <%= admin_ids.include?(u.id) ? "checked='true'" : '' %> onclick="add_site_membership(<%= s.id %>, <%= u.id %>, 'Admin');" /></td>
49
+ </tr>
50
50
  <% end %>
51
51
  </table>
52
52
  </div>
53
53
 
54
+ <h2>Block Types</h2>
55
+ <div id='block_types'>
56
+ <table class='data'>
57
+ <tr><th>&nbsp;</th><th>Name</th><th>Description</th></tr>
58
+ <% bt_ids = @site.block_type_site_memberships.collect{ |bt| bt.block_type_id } %>
59
+ <% Caboose::BlockType.where("parent_id is null").reorder('name').all.each do |bt| %>
60
+ <tr>
61
+ <td align='center'><input type='checkbox' name='block_type_id_<%= bt.id %>' <%= bt_ids.include?(bt.id) ? "checked='true'" : '' %> onclick="toggle_block_type_site_membership(<%= @site.id %>, <%= bt.id %>, $(this).prop('checked'));" /></td>
62
+ <td><%= bt.name %></td>
63
+ <td><%= bt.description %></td>
64
+ </tr>
65
+ <% end %>
66
+ </table><br/>
67
+ </div>
68
+
54
69
  <div id='message'></div>
55
70
  <div id='controls'>
56
71
  <input type='button' value='Back' onclick="window.location='/admin/sites';" />
@@ -134,6 +149,18 @@ function remove_site_membership(site_id, user_id)
134
149
  });
135
150
  }
136
151
 
152
+ function toggle_block_type_site_membership(site_id, block_type_id, checked)
153
+ {
154
+ $.ajax({
155
+ url: '/admin/block-types/' + block_type_id,
156
+ type: 'put',
157
+ data: {
158
+ site_id: [site_id, checked ? 1 : 0]
159
+ },
160
+ succes: function(resp) {}
161
+ });
162
+ }
163
+
137
164
  function add_domain(site_id, domain)
138
165
  {
139
166
  if (!domain)
@@ -0,0 +1,43 @@
1
+ <h1>Stackable Groups</h1>
2
+
3
+ <div id='stackable_groups'></div>
4
+
5
+ <% content_for :caboose_js do %>
6
+ <%= javascript_include_tag 'caboose/model/all' %>
7
+ <script type='text/javascript'>
8
+
9
+ $(document).ready(function() {
10
+ var that = this;
11
+ var table = new IndexTable({
12
+ form_authenticity_token: '<%= form_authenticity_token %>',
13
+ container: 'stackable_groups',
14
+ base_url: '/admin/stackable-groups',
15
+ delete_url: function(sg_id) { '/admin/stackable-groups/' + sg_id; },
16
+ allow_bulk_edit: false,
17
+ allow_bulk_delete: true,
18
+ allow_duplicate: false,
19
+ allow_advanced_edit: true,
20
+ fields: [
21
+ { show: true, name: 'name' , nice_name: 'Name' , sort: 'name' , type: 'text', value: function(sg) { return sg.name }, width: 100 },
22
+ { show: true, name: 'extra_length' , nice_name: 'Extra length (in)' , sort: 'extra_length' , type: 'text', value: function(sg) { return sg.extra_length }, width: 100 },
23
+ { show: true, name: 'extra_width' , nice_name: 'Extra width (in)' , sort: 'extra_width' , type: 'text', value: function(sg) { return sg.extra_width }, width: 100 },
24
+ { show: true, name: 'extra_height' , nice_name: 'Extra height (in)' , sort: 'extra_height' , type: 'text', value: function(sg) { return sg.extra_height }, width: 100 },
25
+ { show: true, name: 'max_length' , nice_name: 'Max length (in)' , sort: 'max_length' , type: 'text', value: function(sg) { return sg.max_length }, width: 100 },
26
+ { show: true, name: 'max_width' , nice_name: 'Max width (in)' , sort: 'max_width' , type: 'text', value: function(sg) { return sg.max_width }, width: 100 },
27
+ { show: true, name: 'max_height' , nice_name: 'Max height (in)' , sort: 'max_height' , type: 'text', value: function(sg) { return sg.max_height }, width: 100 }
28
+ ],
29
+ new_model_text: 'New Stackable Group',
30
+ new_model_fields: [
31
+ { name: 'name', nice_name: 'Name', type: 'text', width: 400 }
32
+ ],
33
+ });
34
+ });
35
+
36
+ </script>
37
+ <% end %>
38
+
39
+ <% content_for :caboose_css do %>
40
+ <style>
41
+
42
+ </style>
43
+ <% end %>
data/config/routes.rb CHANGED
@@ -243,12 +243,12 @@ Caboose::Engine.routes.draw do
243
243
  delete "admin/ab-options/:id" => "ab_options#admin_delete"
244
244
 
245
245
  # Cart
246
- get '/cart' => 'cart#index'
247
- get '/cart/items' => 'cart#list'
248
- get '/cart/item-count' => 'cart#item_count'
249
- post '/cart/items' => 'cart#add'
250
- put '/cart/items/:id' => 'cart#update'
251
- delete '/cart/items/:id' => 'cart#remove'
246
+ get '/cart' => 'cart#index'
247
+ get '/cart/items' => 'cart#list'
248
+ get '/cart/item-count' => 'cart#item_count'
249
+ post '/cart' => 'cart#add'
250
+ put '/cart/:line_item_id' => 'cart#update'
251
+ delete '/cart/:line_item_id' => 'cart#remove'
252
252
 
253
253
  # Checkout
254
254
  get '/checkout' => 'checkout#index'
@@ -341,6 +341,15 @@ Caboose::Engine.routes.draw do
341
341
  post "/admin/products/:id/variants" => "variants#admin_add"
342
342
  delete "/admin/variants/:id" => "variants#admin_delete"
343
343
 
344
+ get "/admin/stackable-groups/options" => "stackable_groups#admin_options"
345
+ get "/admin/stackable-groups/json" => "stackable_groups#admin_json"
346
+ get "/admin/stackable-groups/:id/json" => "stackable_groups#admin_json_single"
347
+ get "/admin/stackable-groups" => "stackable_groups#admin_index"
348
+ put "/admin/stackable-groups/:id" => "stackable_groups#admin_update"
349
+ post "/admin/stackable-groups" => "stackable_groups#admin_add"
350
+ delete "/admin/stackable-groups/bulk" => "stackable_groups#admin_bulk_delete"
351
+ delete "/admin/stackable-groups/:id" => "stackable_groups#admin_delete"
352
+
344
353
  get "/admin/categories" => "categories#admin_index"
345
354
  get "/admin/categories/new" => "categories#admin_new"
346
355
  get "/admin/categories/options" => "categories#admin_options"
@@ -1,3 +1,3 @@
1
1
  module Caboose
2
- VERSION = '0.5.15'
2
+ VERSION = '0.5.16'
3
3
  end
@@ -92,7 +92,13 @@ namespace :caboose do
92
92
  max = rows[0]['max']
93
93
  max = max.to_i if !max.nil?
94
94
 
95
- rows = c.execute("select nextval('#{tbl}_id_seq')")
95
+ rows = nil
96
+ begin
97
+ rows = c.execute("select nextval('#{tbl}_id_seq')")
98
+ rescue
99
+ next
100
+ end
101
+
96
102
  nextval = rows[0]['nextval']
97
103
  nextval = nextval.to_i if !nextval.nil?
98
104
 
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: caboose-cms
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.5.15
4
+ version: 0.5.16
5
5
  platform: ruby
6
6
  authors:
7
7
  - William Barry
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2014-10-16 00:00:00.000000000 Z
11
+ date: 2014-10-23 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rails
@@ -220,6 +220,20 @@ dependencies:
220
220
  - - ! '>='
221
221
  - !ruby/object:Gem::Version
222
222
  version: '0'
223
+ - !ruby/object:Gem::Dependency
224
+ name: box_packer
225
+ requirement: !ruby/object:Gem::Requirement
226
+ requirements:
227
+ - - ! '>='
228
+ - !ruby/object:Gem::Version
229
+ version: '0'
230
+ type: :runtime
231
+ prerelease: false
232
+ version_requirements: !ruby/object:Gem::Requirement
233
+ requirements:
234
+ - - ! '>='
235
+ - !ruby/object:Gem::Version
236
+ version: '0'
223
237
  description: CMS built on rails with love.
224
238
  email:
225
239
  - william@nine.is
@@ -228,6 +242,9 @@ executables:
228
242
  extensions: []
229
243
  extra_rdoc_files: []
230
244
  files:
245
+ - MIT-LICENSE
246
+ - README.md
247
+ - Rakefile
231
248
  - app/assets/fonts/avenir-medium.eot
232
249
  - app/assets/fonts/avenir-medium.ttf
233
250
  - app/assets/fonts/icomoon.eot
@@ -256,6 +273,7 @@ files:
256
273
  - app/assets/javascripts/caboose/admin_products.js
257
274
  - app/assets/javascripts/caboose/application.js
258
275
  - app/assets/javascripts/caboose/cart.js
276
+ - app/assets/javascripts/caboose/cart2.js
259
277
  - app/assets/javascripts/caboose/checkout.js
260
278
  - app/assets/javascripts/caboose/checkout_module.js
261
279
  - app/assets/javascripts/caboose/checkout_step1.js
@@ -270,6 +288,8 @@ files:
270
288
  - app/assets/javascripts/caboose/main.js
271
289
  - app/assets/javascripts/caboose/modal.js
272
290
  - app/assets/javascripts/caboose/modal_integration.js
291
+ - app/assets/javascripts/caboose/model.form.page.js
292
+ - app/assets/javascripts/caboose/model.form.user.js
273
293
  - app/assets/javascripts/caboose/model/all.js
274
294
  - app/assets/javascripts/caboose/model/attribute.js
275
295
  - app/assets/javascripts/caboose/model/bound_checkbox.js
@@ -292,8 +312,6 @@ files:
292
312
  - app/assets/javascripts/caboose/model/model_binder.js
293
313
  - app/assets/javascripts/caboose/model/pager.js
294
314
  - app/assets/javascripts/caboose/model/s3.js
295
- - app/assets/javascripts/caboose/model.form.page.js
296
- - app/assets/javascripts/caboose/model.form.user.js
297
315
  - app/assets/javascripts/caboose/product.js
298
316
  - app/assets/javascripts/caboose/s3upload.js
299
317
  - app/assets/javascripts/caboose/shortcut.js
@@ -309,15 +327,17 @@ files:
309
327
  - app/assets/stylesheets/caboose/application.css
310
328
  - app/assets/stylesheets/caboose/bound_input.css
311
329
  - app/assets/stylesheets/caboose/caboose.css
330
+ - app/assets/stylesheets/caboose/cart.scss
312
331
  - app/assets/stylesheets/caboose/checkout.css.scss
332
+ - app/assets/stylesheets/caboose/fonts.css
313
333
  - app/assets/stylesheets/caboose/fonts/avenir-medium.eot
314
334
  - app/assets/stylesheets/caboose/fonts/avenir-medium.ttf
315
335
  - app/assets/stylesheets/caboose/fonts/big_noodle_titling.ttf
316
336
  - app/assets/stylesheets/caboose/fonts/big_noodle_titling_oblique.ttf
317
- - app/assets/stylesheets/caboose/fonts.css
318
337
  - app/assets/stylesheets/caboose/icomoon_fonts.css
319
338
  - app/assets/stylesheets/caboose/icons.txt
320
339
  - app/assets/stylesheets/caboose/login.css
340
+ - app/assets/stylesheets/caboose/message_boxes.scss
321
341
  - app/assets/stylesheets/caboose/modal.css
322
342
  - app/assets/stylesheets/caboose/model_binder.css
323
343
  - app/assets/stylesheets/caboose/page_bar_generator.css
@@ -374,6 +394,7 @@ files:
374
394
  - app/controllers/caboose/roles_controller.rb
375
395
  - app/controllers/caboose/settings_controller.rb
376
396
  - app/controllers/caboose/sites_controller.rb
397
+ - app/controllers/caboose/stackable_groups_controller.rb
377
398
  - app/controllers/caboose/station_controller.rb
378
399
  - app/controllers/caboose/users_controller.rb
379
400
  - app/controllers/caboose/variants_controller.rb
@@ -421,6 +442,7 @@ files:
421
442
  - app/models/caboose/message.rb
422
443
  - app/models/caboose/order.rb
423
444
  - app/models/caboose/order_discount.rb
445
+ - app/models/caboose/order_package.rb
424
446
  - app/models/caboose/order_pdf.rb
425
447
  - app/models/caboose/page.rb
426
448
  - app/models/caboose/page_bar_generator.rb
@@ -447,9 +469,11 @@ files:
447
469
  - app/models/caboose/search_filter.rb
448
470
  - app/models/caboose/setting.rb
449
471
  - app/models/caboose/shipping_calculator.rb
472
+ - app/models/caboose/shipping_package.rb
450
473
  - app/models/caboose/site.rb
451
474
  - app/models/caboose/site_membership.rb
452
475
  - app/models/caboose/smtp_config.rb
476
+ - app/models/caboose/stackable_group.rb
453
477
  - app/models/caboose/states.rb
454
478
  - app/models/caboose/std_class.rb
455
479
  - app/models/caboose/tax_calculator.rb
@@ -641,6 +665,7 @@ files:
641
665
  - app/views/caboose/sites/admin_edit.html.erb
642
666
  - app/views/caboose/sites/admin_index.html.erb
643
667
  - app/views/caboose/sites/admin_new.html.erb
668
+ - app/views/caboose/stackable_groups/admin_index.html.erb
644
669
  - app/views/caboose/station/index.html.erb
645
670
  - app/views/caboose/users/edit.html.erb
646
671
  - app/views/caboose/users/edit_password.html.erb
@@ -688,10 +713,11 @@ files:
688
713
  - config/routes.rb
689
714
  - config/tinymce.yml
690
715
  - db/migrate/000_add_linked_resources_to_page.rb
716
+ - lib/caboose.rb
691
717
  - lib/caboose/caboose_helper.rb
692
718
  - lib/caboose/engine.rb
693
719
  - lib/caboose/version.rb
694
- - lib/caboose.rb
720
+ - lib/sample_files/Gemfile
695
721
  - lib/sample_files/app/assets/stylesheets/login.css
696
722
  - lib/sample_files/app/controllers/application_controller.rb
697
723
  - lib/sample_files/app/views/layouts/layout_default.html.erb
@@ -706,18 +732,17 @@ files:
706
732
  - lib/sample_files/config/initializers/session_store.rb
707
733
  - lib/sample_files/config/routes.rb
708
734
  - lib/sample_files/config/tinymce.yml
709
- - lib/sample_files/Gemfile
710
735
  - lib/sample_files/timezone_abbreviations.csv
711
736
  - lib/tasks/caboose.rake
712
- - MIT-LICENSE
713
- - Rakefile
714
- - README.md
715
737
  - test/caboose_test.rb
738
+ - test/dummy/README.rdoc
739
+ - test/dummy/Rakefile
716
740
  - test/dummy/app/assets/javascripts/application.js
717
741
  - test/dummy/app/assets/stylesheets/application.css
718
742
  - test/dummy/app/controllers/application_controller.rb
719
743
  - test/dummy/app/helpers/application_helper.rb
720
744
  - test/dummy/app/views/layouts/application.html.erb
745
+ - test/dummy/config.ru
721
746
  - test/dummy/config/application.rb
722
747
  - test/dummy/config/boot.rb
723
748
  - test/dummy/config/database.yml
@@ -733,15 +758,12 @@ files:
733
758
  - test/dummy/config/initializers/wrap_parameters.rb
734
759
  - test/dummy/config/locales/en.yml
735
760
  - test/dummy/config/routes.rb
736
- - test/dummy/config.ru
737
761
  - test/dummy/db/test.sqlite3
738
762
  - test/dummy/log/test.log
739
763
  - test/dummy/public/404.html
740
764
  - test/dummy/public/422.html
741
765
  - test/dummy/public/500.html
742
766
  - test/dummy/public/favicon.ico
743
- - test/dummy/Rakefile
744
- - test/dummy/README.rdoc
745
767
  - test/dummy/script/rails
746
768
  - test/integration/navigation_test.rb
747
769
  - test/test_helper.rb
@@ -764,7 +786,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
764
786
  version: '0'
765
787
  requirements: []
766
788
  rubyforge_project:
767
- rubygems_version: 2.0.6
789
+ rubygems_version: 2.2.2
768
790
  signing_key:
769
791
  specification_version: 4
770
792
  summary: CMS built on rails.