spree_frontend 3.6.6 → 3.7.0.rc1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (31) hide show
  1. checksums.yaml +4 -4
  2. data/app/assets/javascripts/spree/frontend.js +8 -0
  3. data/app/assets/javascripts/spree/frontend/api_tokens.js +17 -0
  4. data/app/assets/javascripts/spree/frontend/cart.js +59 -0
  5. data/app/assets/javascripts/spree/frontend/checkout.js +19 -0
  6. data/app/assets/javascripts/spree/frontend/checkout/address.js +102 -0
  7. data/app/assets/javascripts/spree/frontend/checkout/payment.js +57 -0
  8. data/app/assets/javascripts/spree/frontend/checkout/shipment.js +47 -0
  9. data/app/assets/javascripts/spree/frontend/coupon_manager.js +45 -0
  10. data/app/assets/javascripts/spree/frontend/product.js +104 -51
  11. data/app/controllers/spree/checkout_controller.rb +7 -13
  12. data/app/controllers/spree/locale_controller.rb +1 -3
  13. data/app/controllers/spree/orders_controller.rb +25 -10
  14. data/app/controllers/spree/store_controller.rb +12 -0
  15. data/app/helpers/spree/frontend_helper.rb +8 -12
  16. data/app/views/spree/checkout/_payment.html.erb +3 -3
  17. data/app/views/spree/checkout/edit.html.erb +1 -1
  18. data/app/views/spree/orders/edit.html.erb +1 -2
  19. data/app/views/spree/products/_cart_form.html.erb +10 -4
  20. data/app/views/spree/products/_properties.html.erb +1 -1
  21. data/app/views/spree/products/_thumbnails.html.erb +4 -2
  22. data/config/routes.rb +3 -0
  23. data/lib/generators/spree/frontend/copy_views/copy_views_generator.rb +1 -1
  24. data/spree_frontend.gemspec +2 -2
  25. metadata +18 -23
  26. data/app/assets/javascripts/spree/frontend/cart.js.coffee +0 -28
  27. data/app/assets/javascripts/spree/frontend/checkout.js.coffee +0 -16
  28. data/app/assets/javascripts/spree/frontend/checkout/address.js.coffee +0 -81
  29. data/app/assets/javascripts/spree/frontend/checkout/payment.js.coffee +0 -57
  30. data/app/assets/javascripts/spree/frontend/checkout/shipment.js.coffee +0 -41
  31. data/app/assets/javascripts/spree/frontend/coupon_manager.js.coffee +0 -37
@@ -104,9 +104,7 @@ module Spree
104
104
 
105
105
  def set_state_if_present
106
106
  if params[:state]
107
- if @order.can_go_to_state?(params[:state]) && !skip_state_validation?
108
- redirect_to checkout_state_path(@order.state)
109
- end
107
+ redirect_to checkout_state_path(@order.state) if @order.can_go_to_state?(params[:state]) && !skip_state_validation?
110
108
  @order.state = params[:state]
111
109
  end
112
110
  end
@@ -155,18 +153,16 @@ module Spree
155
153
  packages = @order.shipments.map(&:to_package)
156
154
  @differentiator = Spree::Stock::Differentiator.new(@order, packages)
157
155
  @differentiator.missing.each do |variant, quantity|
158
- @order.contents.remove(variant, quantity)
156
+ Spree::Cart::RemoveItem.call(order: @order, variant: variant, quantity: quantity)
159
157
  end
160
158
  end
161
159
 
162
- if try_spree_current_user && try_spree_current_user.respond_to?(:payment_sources)
163
- @payment_sources = try_spree_current_user.payment_sources
164
- end
160
+ @payment_sources = try_spree_current_user.payment_sources if try_spree_current_user&.respond_to?(:payment_sources)
165
161
  end
166
162
 
167
163
  def add_store_credit_payments
168
164
  if params.key?(:apply_store_credit)
169
- @order.add_store_credit_payments
165
+ Spree::Checkout::AddStoreCredit.call(order: @order)
170
166
 
171
167
  # Remove other payment method parameters.
172
168
  params[:order].delete(:payments_attributes)
@@ -174,15 +170,13 @@ module Spree
174
170
  params.delete(:payment_source)
175
171
 
176
172
  # Return to the Payments page if additional payment is needed.
177
- if @order.payments.valid.sum(:amount) < @order.total
178
- redirect_to checkout_state_path(@order.state) and return
179
- end
173
+ redirect_to checkout_state_path(@order.state) and return if @order.payments.valid.sum(:amount) < @order.total
180
174
  end
181
175
  end
182
176
 
183
177
  def remove_store_credit_payments
184
178
  if params.key?(:remove_store_credit)
185
- @order.remove_store_credit_payments
179
+ Spree::Checkout::RemoveStoreCredit.call(order: @order)
186
180
  redirect_to checkout_state_path(@order.state) and return
187
181
  end
188
182
  end
@@ -194,7 +188,7 @@ module Spree
194
188
  end
195
189
 
196
190
  def check_authorization
197
- authorize!(:edit, current_order, cookies.signed[:guest_token])
191
+ authorize!(:edit, current_order, cookies.signed[:token])
198
192
  end
199
193
  end
200
194
  end
@@ -1,9 +1,7 @@
1
1
  module Spree
2
2
  class LocaleController < Spree::StoreController
3
3
  def set
4
- if request.referer && request.referer.starts_with?('http://' + request.host)
5
- session['user_return_to'] = request.referer
6
- end
4
+ session['user_return_to'] = request.referer if request.referer&.starts_with?('http://' + request.host)
7
5
  if params[:locale] && I18n.available_locales.map(&:to_s).include?(params[:locale])
8
6
  session[:locale] = I18n.locale = params[:locale]
9
7
  flash.notice = Spree.t(:locale_changed)
@@ -14,7 +14,7 @@ module Spree
14
14
 
15
15
  def update
16
16
  @variant = Spree::Variant.find(params[:variant_id]) if params[:variant_id]
17
- if @order.contents.update_cart(order_params)
17
+ if Cart::Update.call(order: @order, params: order_params).success?
18
18
  respond_with(@order) do |format|
19
19
  format.html do
20
20
  if params.key?(:checkout)
@@ -34,12 +34,18 @@ module Spree
34
34
  def edit
35
35
  @order = current_order || Order.incomplete.
36
36
  includes(line_items: [variant: [:images, :option_values, :product]]).
37
- find_or_initialize_by(guest_token: cookies.signed[:guest_token])
37
+ find_or_initialize_by(token: cookies.signed[:token])
38
38
  associate_user
39
39
  end
40
40
 
41
41
  # Adds a new item to the order (creating a new order if none already exists)
42
42
  def populate
43
+ ActiveSupport::Deprecation.warn(<<-DEPRECATION, caller)
44
+ OrdersController#populate is deprecated and will be removed in Spree 4.0.
45
+ Please use `/api/v2/storefront/cart/add_item` endpoint instead.
46
+ See documentation: https://github.com/spree/spree/blob/master/api/docs/v2/storefront/index.yaml#L42
47
+ DEPRECATION
48
+
43
49
  order = current_order(create_order_if_necessary: true)
44
50
  variant = Spree::Variant.find(params[:variant_id])
45
51
  quantity = params[:quantity].to_i
@@ -48,10 +54,14 @@ module Spree
48
54
  # 2,147,483,647 is crazy. See issue #2695.
49
55
  if quantity.between?(1, 2_147_483_647)
50
56
  begin
51
- order.contents.add(variant, quantity, options)
52
- order.update_line_item_prices!
53
- order.create_tax_charge!
54
- order.update_with_updater!
57
+ result = Spree::Cart::AddItem.call(order: order, variant: variant, quantity: quantity, options: options)
58
+ if result.failure?
59
+ error = result.value.errors.full_messages.join(', ')
60
+ else
61
+ order.update_line_item_prices!
62
+ order.create_tax_charge!
63
+ order.update_with_updater!
64
+ end
55
65
  rescue ActiveRecord::RecordInvalid => e
56
66
  error = e.record.errors.full_messages.join(', ')
57
67
  end
@@ -70,6 +80,11 @@ module Spree
70
80
  end
71
81
 
72
82
  def populate_redirect
83
+ ActiveSupport::Deprecation.warn(<<-DEPRECATION, caller)
84
+ OrdersController#populate is deprecated and will be removed in Spree 4.0.
85
+ Please use `/api/v2/storefront/cart/add_item` endpoint instead.
86
+ See documentation: https://github.com/spree/spree/blob/master/api/docs/v2/storefront/index.yaml#L42
87
+ DEPRECATION
73
88
  flash[:error] = Spree.t(:populate_get_error)
74
89
  redirect_to cart_path
75
90
  end
@@ -83,7 +98,7 @@ module Spree
83
98
  private
84
99
 
85
100
  def accurate_title
86
- if @order && @order.completed?
101
+ if @order&.completed?
87
102
  Spree.t(:order_number, number: @order.number)
88
103
  else
89
104
  Spree.t(:shopping_cart)
@@ -92,12 +107,12 @@ module Spree
92
107
 
93
108
  def check_authorization
94
109
  order = Spree::Order.find_by(number: params[:id]) if params[:id].present?
95
- order = current_order unless order
110
+ order ||= current_order
96
111
 
97
112
  if order && action_name.to_sym == :show
98
- authorize! :show, order, cookies.signed[:guest_token]
113
+ authorize! :show, order, cookies.signed[:token]
99
114
  elsif order
100
- authorize! :edit, order, cookies.signed[:guest_token]
115
+ authorize! :edit, order, cookies.signed[:token]
101
116
  else
102
117
  authorize! :create, Spree::Order
103
118
  end
@@ -3,6 +3,7 @@ module Spree
3
3
  include Spree::Core::ControllerHelpers::Order
4
4
 
5
5
  skip_before_action :set_current_order, only: :cart_link
6
+ skip_before_action :verify_authenticity_token, only: :ensure_cart
6
7
 
7
8
  def forbidden
8
9
  render 'spree/shared/forbidden', layout: Spree::Config[:layout], status: 403
@@ -17,6 +18,17 @@ module Spree
17
18
  fresh_when(simple_current_order)
18
19
  end
19
20
 
21
+ def api_tokens
22
+ render json: {
23
+ order_token: current_order&.token,
24
+ oauth_token: current_oauth_token&.token
25
+ }
26
+ end
27
+
28
+ def ensure_cart
29
+ render json: current_order(create_order_if_necessary: true) # force creation of order if doesn't exists
30
+ end
31
+
20
32
  protected
21
33
 
22
34
  def config_locale
@@ -7,6 +7,7 @@ module Spree
7
7
 
8
8
  def spree_breadcrumbs(taxon, separator = '&nbsp;')
9
9
  return '' if current_page?('/') || taxon.nil?
10
+
10
11
  separator = raw(separator)
11
12
  crumbs = [content_tag(:li, content_tag(:span, link_to(content_tag(:span, Spree.t(:home), itemprop: 'name'), spree.root_path, itemprop: 'url') + separator, itemprop: 'item'), itemscope: 'itemscope', itemtype: 'https://schema.org/ListItem', itemprop: 'itemListElement')]
12
13
  if taxon
@@ -20,14 +21,6 @@ module Spree
20
21
  content_tag(:nav, crumb_list, id: 'breadcrumbs', class: 'col-md-12')
21
22
  end
22
23
 
23
- def breadcrumbs(taxon, separator = '&nbsp;')
24
- ActiveSupport::Deprecation.warn(<<-EOS, caller)
25
- Spree::FrontendHelper#breadcrumbs was renamed to Spree::FrontendHelper#spree_breadcrumbs
26
- and will be removed in Spree 3.6. Please update your code to avoid problems after update
27
- EOS
28
- spree_breadcrumbs(taxon, separator)
29
- end
30
-
31
24
  def checkout_progress(numbers: false)
32
25
  states = @order.checkout_steps
33
26
  items = states.each_with_index.map do |state, i|
@@ -62,9 +55,7 @@ module Spree
62
55
  ignore_types = ['order_completed'].concat(Array(opts[:ignore_types]).map(&:to_s) || [])
63
56
 
64
57
  flash.each do |msg_type, text|
65
- unless ignore_types.include?(msg_type)
66
- concat(content_tag(:div, text, class: "alert alert-#{msg_type}"))
67
- end
58
+ concat(content_tag(:div, text, class: "alert alert-#{msg_type}")) unless ignore_types.include?(msg_type)
68
59
  end
69
60
  nil
70
61
  end
@@ -86,13 +77,18 @@ module Spree
86
77
 
87
78
  def taxons_tree(root_taxon, current_taxon, max_level = 1)
88
79
  return '' if max_level < 1 || root_taxon.leaf?
80
+
89
81
  content_tag :div, class: 'list-group' do
90
82
  taxons = root_taxon.children.map do |taxon|
91
- css_class = current_taxon && current_taxon.self_and_ancestors.include?(taxon) ? 'list-group-item active' : 'list-group-item'
83
+ css_class = current_taxon&.self_and_ancestors&.include?(taxon) ? 'list-group-item active' : 'list-group-item'
92
84
  link_to(taxon.name, seo_url(taxon), class: css_class) + taxons_tree(taxon, current_taxon, max_level - 1)
93
85
  end
94
86
  safe_join(taxons, "\n")
95
87
  end
96
88
  end
89
+
90
+ def set_image_alt(image, size)
91
+ image.alt.present? ? image.alt : image_alt(main_app.url_for(image.url(size)))
92
+ end
97
93
  end
98
94
  end
@@ -21,12 +21,12 @@
21
21
  <tbody>
22
22
  <% @payment_sources.each do |card| %>
23
23
  <tr id="<%= dom_id(card,'spree')%>" class="<%= cycle('even', 'odd') %>">
24
- <td><%= card.name %></td>
25
- <td><%= card.display_number %></td>
26
- <td><%= card.month %> / <%= card.year %></td>
27
24
  <td>
28
25
  <%= radio_button_tag "order[existing_card]", card.id, (card == @payment_sources.first), { class: "existing-cc-radio" } %>
29
26
  </td>
27
+ <td><%= card.name %></td>
28
+ <td><%= card.display_number %></td>
29
+ <td><%= card.month %> / <%= card.year %></td>
30
30
  </tr>
31
31
  <% end %>
32
32
  </tbody>
@@ -39,5 +39,5 @@
39
39
 
40
40
  <script>
41
41
  Spree.current_order_id = "<%= @order.number %>"
42
- Spree.current_order_token = "<%= @order.guest_token %>"
42
+ Spree.current_order_token = "<%= @order.token %>"
43
43
  </script>
@@ -54,6 +54,5 @@
54
54
  </div>
55
55
 
56
56
  <script>
57
- Spree.current_order_id = "<%= @order.number %>"
58
- Spree.current_order_token = "<%= @order.guest_token %>"
57
+ Spree.current_order_token = "<%= @order.token %>"
59
58
  </script>
@@ -1,4 +1,4 @@
1
- <%= form_for :order, url: populate_orders_path do |f| %>
1
+ <%= form_for :order, html: { id: 'add-to-cart-form' } do |f| %>
2
2
  <div class="row" id="inside-product-cart-form" data-hook="inside_product_cart_form" itemprop="offers" itemscope itemtype="https://schema.org/Offer">
3
3
  <% if @product.variants_and_option_values(current_currency).any? %>
4
4
  <div id="product-variants" class="col-md-6">
@@ -8,11 +8,12 @@
8
8
  <li>
9
9
  <%= radio_button_tag "variant_id", variant.id, index == 0,
10
10
  'data-price' => variant.price_in(current_currency).money,
11
- 'data-in-stock' => variant.can_supply?
11
+ 'data-in-stock' => variant.can_supply?,
12
+ 'data-backordered' => variant.backordered?
12
13
  %>
13
14
  <%= label_tag "variant_id_#{ variant.id }" do %>
14
15
  <span class="variant-description">
15
- <%= variant_options variant %>
16
+ <%= variant.options_text %>
16
17
  </span>
17
18
  <% if variant_price variant %>
18
19
  <span class="price diff"><%= variant_price variant %></span>
@@ -46,6 +47,11 @@
46
47
  <br />
47
48
  <span class="out-of-stock"><%= Spree.t(:out_of_stock) %></span>
48
49
  <% end %>
50
+ <% if @product.backordered? %>
51
+ <div class="alert alert-warning" id="cart-backordered-info">
52
+ <%= Spree.t(:backordered_info) %>
53
+ </div>
54
+ <% end %>
49
55
  </div>
50
56
 
51
57
  <% if @product.can_supply? %>
@@ -54,7 +60,7 @@
54
60
  <div class="input-group">
55
61
  <%= number_field_tag :quantity, 1, class: 'title form-control', min: 1 %>
56
62
  <span class="input-group-btn">
57
- <%= button_tag class: 'btn btn-success', id: 'add-to-cart-button', type: :submit do %>
63
+ <%= button_tag class: 'btn btn-success', id: 'add-to-cart-button', type: :submit, disabled: true do %>
58
64
  <%= Spree.t(:add_to_cart) %>
59
65
  <% end %>
60
66
  </span>
@@ -1,4 +1,4 @@
1
- <% unless @product_properties.empty? %>
1
+ <% unless @product_properties.blank? %>
2
2
  <h3 class="product-section-title"><%= Spree.t('properties')%></h3>
3
3
  <table id="product-properties" class="table table-striped" data-hook>
4
4
  <tbody>
@@ -3,7 +3,8 @@
3
3
  <ul id="product-thumbnails" class="thumbnails list-inline" data-hook>
4
4
  <% @product.images.each do |i| %>
5
5
  <li class='tmb-all tmb-<%= i.viewable.id %>'>
6
- <%= link_to(image_tag(main_app.url_for(i.url(:mini)), class: "thumbnail"), main_app.url_for(i.url(:product))) %>
6
+ <% img_tag = image_tag(main_app.url_for(i.url(:mini)), class: "thumbnail", alt: set_image_alt(i, :mini)) %>
7
+ <%= link_to(img_tag, main_app.url_for(i.url(:product))) %>
7
8
  </li>
8
9
  <% end %>
9
10
 
@@ -11,7 +12,8 @@
11
12
  <% @product.variant_images.each do |i| %>
12
13
  <% next if @product.images.include?(i) %>
13
14
  <li class='vtmb tmb-<%= i.viewable.id %>'>
14
- <%= link_to(image_tag(main_app.url_for(i.url(:mini)), class: "thumbnail"), main_app.url_for(i.url(:product))) %>
15
+ <% img_tag = image_tag(main_app.url_for(i.url(:mini)), class: "thumbnail", alt: set_image_alt(i, :mini)) %>
16
+ <%= link_to(img_tag, main_app.url_for(i.url(:product))) %>
15
17
  </li>
16
18
  <% end %>
17
19
  <% end %>
@@ -27,4 +27,7 @@ Spree::Core::Engine.add_routes do
27
27
  get '/content/cvv', to: 'content#cvv', as: :cvv
28
28
  get '/content/test', to: 'content#test'
29
29
  get '/cart_link', to: 'store#cart_link', as: :cart_link
30
+
31
+ get '/api_tokens', to: 'store#api_tokens'
32
+ post '/ensure_cart', to: 'store#ensure_cart'
30
33
  end
@@ -4,7 +4,7 @@ module Spree
4
4
  desc 'Copies views from spree frontend to your application'
5
5
 
6
6
  def self.source_paths
7
- [File.expand_path('../../../../../../app/', __FILE__)]
7
+ [File.expand_path('../../../../../app', __dir__)]
8
8
  end
9
9
 
10
10
  def copy_views
@@ -8,7 +8,7 @@ Gem::Specification.new do |s|
8
8
  s.summary = 'Frontend e-commerce functionality for the Spree project.'
9
9
  s.description = s.summary
10
10
 
11
- s.required_ruby_version = '>= 2.2.7'
11
+ s.required_ruby_version = '>= 2.3.0'
12
12
 
13
13
  s.author = 'Sean Schofield'
14
14
  s.email = 'sean@spreecommerce.com'
@@ -22,7 +22,7 @@ Gem::Specification.new do |s|
22
22
  s.add_dependency 'spree_api', s.version
23
23
  s.add_dependency 'spree_core', s.version
24
24
 
25
- s.add_dependency 'bootstrap-sass', '>= 3.3.5.1', '< 3.4'
25
+ s.add_dependency 'bootstrap-sass', '~> 3.4'
26
26
  s.add_dependency 'canonical-rails', '~> 0.2.3'
27
27
  s.add_dependency 'jquery-rails', '~> 4.3'
28
28
 
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: spree_frontend
3
3
  version: !ruby/object:Gem::Version
4
- version: 3.6.6
4
+ version: 3.7.0.rc1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Sean Schofield
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2018-12-06 00:00:00.000000000 Z
11
+ date: 2019-01-11 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: spree_api
@@ -16,46 +16,40 @@ dependencies:
16
16
  requirements:
17
17
  - - '='
18
18
  - !ruby/object:Gem::Version
19
- version: 3.6.6
19
+ version: 3.7.0.rc1
20
20
  type: :runtime
21
21
  prerelease: false
22
22
  version_requirements: !ruby/object:Gem::Requirement
23
23
  requirements:
24
24
  - - '='
25
25
  - !ruby/object:Gem::Version
26
- version: 3.6.6
26
+ version: 3.7.0.rc1
27
27
  - !ruby/object:Gem::Dependency
28
28
  name: spree_core
29
29
  requirement: !ruby/object:Gem::Requirement
30
30
  requirements:
31
31
  - - '='
32
32
  - !ruby/object:Gem::Version
33
- version: 3.6.6
33
+ version: 3.7.0.rc1
34
34
  type: :runtime
35
35
  prerelease: false
36
36
  version_requirements: !ruby/object:Gem::Requirement
37
37
  requirements:
38
38
  - - '='
39
39
  - !ruby/object:Gem::Version
40
- version: 3.6.6
40
+ version: 3.7.0.rc1
41
41
  - !ruby/object:Gem::Dependency
42
42
  name: bootstrap-sass
43
43
  requirement: !ruby/object:Gem::Requirement
44
44
  requirements:
45
- - - ">="
46
- - !ruby/object:Gem::Version
47
- version: 3.3.5.1
48
- - - "<"
45
+ - - "~>"
49
46
  - !ruby/object:Gem::Version
50
47
  version: '3.4'
51
48
  type: :runtime
52
49
  prerelease: false
53
50
  version_requirements: !ruby/object:Gem::Requirement
54
51
  requirements:
55
- - - ">="
56
- - !ruby/object:Gem::Version
57
- version: 3.3.5.1
58
- - - "<"
52
+ - - "~>"
59
53
  - !ruby/object:Gem::Version
60
54
  version: '3.4'
61
55
  - !ruby/object:Gem::Dependency
@@ -136,12 +130,13 @@ files:
136
130
  - app/assets/images/favicon.ico
137
131
  - app/assets/images/logo/spree_50.png
138
132
  - app/assets/javascripts/spree/frontend.js
139
- - app/assets/javascripts/spree/frontend/cart.js.coffee
140
- - app/assets/javascripts/spree/frontend/checkout.js.coffee
141
- - app/assets/javascripts/spree/frontend/checkout/address.js.coffee
142
- - app/assets/javascripts/spree/frontend/checkout/payment.js.coffee
143
- - app/assets/javascripts/spree/frontend/checkout/shipment.js.coffee
144
- - app/assets/javascripts/spree/frontend/coupon_manager.js.coffee
133
+ - app/assets/javascripts/spree/frontend/api_tokens.js
134
+ - app/assets/javascripts/spree/frontend/cart.js
135
+ - app/assets/javascripts/spree/frontend/checkout.js
136
+ - app/assets/javascripts/spree/frontend/checkout/address.js
137
+ - app/assets/javascripts/spree/frontend/checkout/payment.js
138
+ - app/assets/javascripts/spree/frontend/checkout/shipment.js
139
+ - app/assets/javascripts/spree/frontend/coupon_manager.js
145
140
  - app/assets/javascripts/spree/frontend/product.js
146
141
  - app/assets/stylesheets/spree/frontend.css
147
142
  - app/assets/stylesheets/spree/frontend/_variables.scss
@@ -239,12 +234,12 @@ required_ruby_version: !ruby/object:Gem::Requirement
239
234
  requirements:
240
235
  - - ">="
241
236
  - !ruby/object:Gem::Version
242
- version: 2.2.7
237
+ version: 2.3.0
243
238
  required_rubygems_version: !ruby/object:Gem::Requirement
244
239
  requirements:
245
- - - ">="
240
+ - - ">"
246
241
  - !ruby/object:Gem::Version
247
- version: '0'
242
+ version: 1.3.1
248
243
  requirements:
249
244
  - none
250
245
  rubyforge_project: