spree_core 0.70.5 → 0.70.6
Sign up to get free protection for your applications and to get access to all the features.
- data/app/models/product.rb +33 -23
- data/app/models/product_group.rb +8 -4
- data/lib/product_filters.rb +18 -8
- data/lib/scopes/product.rb +70 -74
- data/lib/spree_core/version.rb +1 -1
- metadata +222 -127
data/app/models/product.rb
CHANGED
@@ -71,36 +71,37 @@ class Product < ActiveRecord::Base
|
|
71
71
|
|
72
72
|
alias :options :product_option_types
|
73
73
|
|
74
|
-
|
74
|
+
cattr_accessor :search_scopes do
|
75
|
+
[]
|
76
|
+
end
|
75
77
|
|
76
|
-
|
77
|
-
|
78
|
-
|
79
|
-
|
80
|
-
where(Product.arel_table[:deleted_at].eq(nil))
|
81
|
-
end
|
78
|
+
def self.add_search_scope(name, &block)
|
79
|
+
define_singleton_method name.intern, &block
|
80
|
+
search_scopes << name.intern
|
81
|
+
end
|
82
82
|
|
83
|
-
|
84
|
-
where(Product.arel_table[:available_on].lteq(available_on || Time.zone.now ))
|
85
|
-
end
|
83
|
+
include ::Scopes::Product
|
86
84
|
|
87
|
-
|
88
|
-
|
89
|
-
|
90
|
-
end
|
85
|
+
add_search_scope :not_deleted do
|
86
|
+
where("products.deleted_at is NULL")
|
87
|
+
end
|
91
88
|
|
92
|
-
|
93
|
-
|
94
|
-
|
89
|
+
add_search_scope :available do |*on|
|
90
|
+
where("products.available_on <= ?", on.first || Time.zone.now)
|
91
|
+
end
|
95
92
|
|
96
|
-
|
97
|
-
|
98
|
-
|
93
|
+
add_search_scope :active do
|
94
|
+
not_deleted.available
|
95
|
+
end
|
99
96
|
|
100
|
-
|
101
|
-
|
102
|
-
|
97
|
+
add_search_scope :on_hand do
|
98
|
+
where("products.count_on_hand > 0")
|
99
|
+
end
|
100
|
+
|
101
|
+
add_search_scope :taxons_name_eq do |name|
|
102
|
+
joins(:taxons).where(Taxon.arel_table[:name].eq(name))
|
103
103
|
end
|
104
|
+
|
104
105
|
if (ActiveRecord::Base.connection.adapter_name == 'PostgreSQL')
|
105
106
|
if Product.table_exists?
|
106
107
|
scope :group_by_products_id, { :group => Product.column_names.map{|col_name| "#{Product.table_name}.#{col_name}"} }
|
@@ -108,8 +109,17 @@ class Product < ActiveRecord::Base
|
|
108
109
|
else
|
109
110
|
scope :group_by_products_id, { :group => "#{Product.table_name}.id" }
|
110
111
|
end
|
112
|
+
search_scopes << :group_by_products_id
|
111
113
|
search_methods :group_by_products_id
|
112
114
|
|
115
|
+
add_search_scope :id_equals do |input_id|
|
116
|
+
where("products.id = ?", input_id)
|
117
|
+
end
|
118
|
+
|
119
|
+
add_search_scope :taxons_name_eq do |name|
|
120
|
+
joins(:taxons).where("taxons.name = ?", name)
|
121
|
+
end
|
122
|
+
|
113
123
|
# ----------------------------------------------------------------------------------------------------------
|
114
124
|
#
|
115
125
|
# The following methods are deprecated and will be removed in a future version of Spree
|
data/app/models/product_group.rb
CHANGED
@@ -90,10 +90,14 @@ class ProductGroup < ActiveRecord::Base
|
|
90
90
|
end
|
91
91
|
|
92
92
|
def add_scope(scope_name, arguments=[])
|
93
|
-
|
94
|
-
|
95
|
-
|
96
|
-
|
93
|
+
if Product.search_scopes.include?(scope_name)
|
94
|
+
self.product_scopes << ProductScope.new({
|
95
|
+
:name => scope_name.to_s,
|
96
|
+
:arguments => [*arguments]
|
97
|
+
})
|
98
|
+
else
|
99
|
+
raise ArgumentError.new("'#{scope_name}` can't be used as scope")
|
100
|
+
end
|
97
101
|
self
|
98
102
|
end
|
99
103
|
|
data/lib/product_filters.rb
CHANGED
@@ -58,15 +58,20 @@ module ProductFilters
|
|
58
58
|
Product.scope :price_range_any,
|
59
59
|
lambda {|*opts|
|
60
60
|
conds = opts.map {|o| ProductFilters.price_filter[:conds][o]}.reject {|c| c.nil?}
|
61
|
-
|
61
|
+
scope = conds.shift
|
62
|
+
conds.each do |new_scope|
|
63
|
+
scope = scope.or(new_scope)
|
64
|
+
end
|
65
|
+
Product.scoped(:joins => :master).where(scope)
|
62
66
|
}
|
63
67
|
|
64
68
|
def ProductFilters.price_filter
|
65
|
-
|
66
|
-
|
67
|
-
[ "
|
68
|
-
[ "
|
69
|
-
[ "
|
69
|
+
v = Spree::Variant.arel_table
|
70
|
+
conds = [ [ I18n.t(:under_price, :price => format_price(10)) , v[:price].lteq(10)],
|
71
|
+
[ "#{format_price(10)} - #{format_price(15)}" , v[:price].in(10..15)],
|
72
|
+
[ "#{format_price(15)} - #{format_price(18)}" , v[:price].in(15..18)],
|
73
|
+
[ "#{format_price(18)} - #{format_price(20)}" , v[:price].in(18..20)],
|
74
|
+
[ I18n.t(:or_over_price, :price => format_price(20)) , v[:price].gteq(20)]]
|
70
75
|
{ :name => "Price Range",
|
71
76
|
:scope => :price_range_any,
|
72
77
|
:conds => Hash[*conds.flatten],
|
@@ -92,12 +97,17 @@ module ProductFilters
|
|
92
97
|
Product.scope :brand_any,
|
93
98
|
lambda {|*opts|
|
94
99
|
conds = opts.map {|o| ProductFilters.brand_filter[:conds][o]}.reject {|c| c.nil?}
|
95
|
-
|
100
|
+
scope = conds.shift
|
101
|
+
conds.each do |new_scope|
|
102
|
+
scope = scope.or(new_scope)
|
103
|
+
end
|
104
|
+
Product.with_property("brand").where(scope)
|
96
105
|
}
|
97
106
|
|
98
107
|
def ProductFilters.brand_filter
|
99
108
|
brands = ProductProperty.where(:property_id => @@brand_property).map(&:value).compact.uniq
|
100
|
-
|
109
|
+
pp = Spree::ProductProperty.arel_table
|
110
|
+
conds = Hash[*brands.map {|b| [b, pp.value.eq(b)]}.flatten]
|
101
111
|
{ :name => "Brands",
|
102
112
|
:scope => :brand_any,
|
103
113
|
:conds => conds,
|
data/lib/scopes/product.rb
CHANGED
@@ -48,11 +48,16 @@ module Scopes::Product
|
|
48
48
|
order_text << ((r[1] == 'ascend') ? "asc" : "desc")
|
49
49
|
|
50
50
|
Product.send(:scope, name.to_s, Product.send(:relation).order(order_text) )
|
51
|
+
Product.search_scopes << name.intern
|
51
52
|
end
|
52
53
|
|
53
|
-
::Product.
|
54
|
+
::Product.add_search_scope :ascend_by_master_price do
|
55
|
+
joins(:variants_with_only_master).order('variants.price asc')
|
56
|
+
end
|
54
57
|
|
55
|
-
::Product.
|
58
|
+
::Product.add_search_scope :descend_by_master_price do
|
59
|
+
joins(:variants_with_only_master).order('variants.price desc')
|
60
|
+
end
|
56
61
|
|
57
62
|
ATTRIBUTE_HELPER_METHODS = {
|
58
63
|
:with_ids => :product_picker_field
|
@@ -60,105 +65,99 @@ module Scopes::Product
|
|
60
65
|
|
61
66
|
# Ryan Bates - http://railscasts.com/episodes/112
|
62
67
|
# general merging of conditions, names following the searchlogic pattern
|
63
|
-
::Product.
|
68
|
+
::Product.add_search_scope :conditions do |*args|
|
69
|
+
where(args)
|
70
|
+
end
|
64
71
|
|
65
|
-
|
66
|
-
|
72
|
+
::Product.add_search_scope :conditions_all do |*args|
|
73
|
+
where([args].flatten)
|
74
|
+
end
|
67
75
|
|
68
76
|
# forming the disjunction of a list of conditions (as strings)
|
69
|
-
::Product.
|
77
|
+
::Product.add_search_scope :conditions_any do |*args|
|
70
78
|
args = [args].flatten
|
71
79
|
raise "non-strings in conditions_any" unless args.all? {|s| s.is_a? String}
|
72
|
-
|
73
|
-
|
80
|
+
where(args.map {|c| "(#{c})"}.join(" OR "))
|
81
|
+
end
|
74
82
|
|
75
83
|
|
76
|
-
::Product.
|
77
|
-
|
78
|
-
|
79
|
-
|
80
|
-
::Product.scope :master_price_lte, lambda { |price|
|
81
|
-
{ :joins => :master, :conditions => ["#{Variant.table_name}.price <= ?", price] }
|
82
|
-
}
|
84
|
+
::Product.add_search_scope :price_between do |low, high|
|
85
|
+
joins(:master).where("variants.price" => (low.to_f)..(high.to_f))
|
86
|
+
end
|
83
87
|
|
84
|
-
::Product.
|
85
|
-
|
86
|
-
|
88
|
+
::Product.add_search_scope :master_price_lte do |price|
|
89
|
+
joins(:master).where("variants.price <= ?", price)
|
90
|
+
end
|
87
91
|
|
92
|
+
::Product.add_search_scope :master_price_gte do |price|
|
93
|
+
joins(:master).where("variants.price >= ?", price)
|
94
|
+
end
|
88
95
|
|
89
96
|
# This scope selects products in taxon AND all its descendants
|
90
97
|
# If you need products only within one taxon use
|
91
98
|
#
|
92
99
|
# Product.taxons_id_eq(x)
|
93
100
|
#
|
94
|
-
::Product.
|
95
|
-
|
96
|
-
|
101
|
+
::Product.add_search_scope :in_taxon do |taxon|
|
102
|
+
joins(:taxons).where("taxons.id" => taxon.self_and_descendants.map(&:id))
|
103
|
+
end
|
97
104
|
|
98
105
|
# This scope selects products in all taxons AND all its descendants
|
99
106
|
# If you need products only within one taxon use
|
100
107
|
#
|
101
108
|
# Product.taxons_id_eq([x,y])
|
102
109
|
#
|
103
|
-
Product.
|
110
|
+
::Product.add_search_scope :in_taxons do |*taxons|
|
104
111
|
taxons = get_taxons(taxons)
|
105
|
-
taxons.first ? prepare_taxon_conditions(taxons) :
|
106
|
-
|
112
|
+
taxons.first ? prepare_taxon_conditions(taxons) : scoped
|
113
|
+
end
|
107
114
|
|
108
115
|
# for quick access to products in a group, WITHOUT using the association mechanism
|
109
|
-
Product.
|
110
|
-
|
111
|
-
|
112
|
-
|
113
|
-
}
|
116
|
+
Product.add_search_scope :in_cached_group do |product_group|
|
117
|
+
joins("JOIN product_groups_products ON products.id = product_groups_products.product_id").
|
118
|
+
where(["product_groups_products.product_group_id = ?", product_group])
|
119
|
+
end
|
114
120
|
|
115
121
|
|
116
122
|
# a scope that finds all products having property specified by name, object or id
|
117
|
-
Product.
|
123
|
+
Product.add_search_scope :with_property do |property|
|
118
124
|
conditions = case property
|
119
125
|
when String then ["properties.name = ?", property]
|
120
126
|
when Property then ["properties.id = ?", property.id]
|
121
127
|
else ["properties.id = ?", property.to_i]
|
122
128
|
end
|
123
129
|
|
124
|
-
|
125
|
-
|
126
|
-
|
127
|
-
}
|
128
|
-
}
|
130
|
+
joins(:properties).
|
131
|
+
where(conditions)
|
132
|
+
end
|
129
133
|
|
130
134
|
# a scope that finds all products having an option_type specified by name, object or id
|
131
|
-
Product.
|
135
|
+
Product.add_search_scope :with_option do |option|
|
132
136
|
conditions = case option
|
133
137
|
when String then ["option_types.name = ?", option]
|
134
138
|
when OptionType then ["option_types.id = ?", option.id]
|
135
139
|
else ["option_types.id = ?", option.to_i]
|
136
140
|
end
|
137
141
|
|
138
|
-
|
139
|
-
|
140
|
-
|
141
|
-
}
|
142
|
-
}
|
142
|
+
joins(:option_types).
|
143
|
+
where(conditions)
|
144
|
+
end
|
143
145
|
|
144
146
|
# a simple test for product with a certain property-value pairing
|
145
147
|
# note that it can test for properties with NULL values, but not for absent values
|
146
|
-
Product.
|
148
|
+
Product.add_search_scope :with_property_value do |property, value|
|
147
149
|
conditions = case property
|
148
150
|
when String then ["properties.name = ?", property]
|
149
151
|
when Property then ["properties.id = ?", property.id]
|
150
152
|
else ["properties.id = ?", property.to_i]
|
151
153
|
end
|
152
154
|
conditions = ["product_properties.value = ? AND #{conditions[0]}", value, conditions[1]]
|
153
|
-
|
154
|
-
|
155
|
-
|
156
|
-
:conditions => conditions
|
157
|
-
}
|
158
|
-
}
|
155
|
+
joins(:properties).
|
156
|
+
where(conditions)
|
157
|
+
end
|
159
158
|
|
160
159
|
# a scope that finds all products having an option value specified by name, object or id
|
161
|
-
Product.
|
160
|
+
Product.add_search_scope :with_option_value do |option, value|
|
162
161
|
option_type_id = case option
|
163
162
|
when String
|
164
163
|
option_type = OptionType.find_by_name(option) || option.to_i
|
@@ -172,36 +171,32 @@ module Scopes::Product
|
|
172
171
|
value, option_type_id
|
173
172
|
]
|
174
173
|
|
175
|
-
|
176
|
-
|
177
|
-
|
178
|
-
}
|
179
|
-
}
|
174
|
+
joins(:variants => :option_values).
|
175
|
+
where(conditions)
|
176
|
+
end
|
180
177
|
|
181
178
|
# finds product having option value OR product_property
|
182
|
-
Product.
|
183
|
-
|
184
|
-
|
185
|
-
|
186
|
-
}
|
187
|
-
}
|
179
|
+
Product.add_search_scope :with do |value|
|
180
|
+
joins(:product_properties, :variants => :option_values).
|
181
|
+
where("option_values.name = ? OR product_properties.value = ?", value, value)
|
182
|
+
end
|
188
183
|
|
189
|
-
Product.
|
184
|
+
Product.add_search_scope :in_name do |words|
|
190
185
|
Product.like_any([:name], prepare_words(words))
|
191
|
-
|
186
|
+
end
|
192
187
|
|
193
|
-
Product.
|
188
|
+
Product.add_search_scope :in_name_or_keywords do |words|
|
194
189
|
Product.like_any([:name, :meta_keywords], prepare_words(words))
|
195
|
-
|
190
|
+
end
|
196
191
|
|
197
|
-
Product.
|
192
|
+
Product.add_search_scope :in_name_or_description do |words|
|
198
193
|
Product.like_any([:name, :description, :meta_description, :meta_keywords], prepare_words(words))
|
199
|
-
|
194
|
+
end
|
200
195
|
|
201
|
-
Product.
|
196
|
+
Product.add_search_scope :with_ids do |ids|
|
202
197
|
ids = ids.split(',') if ids.is_a?(String)
|
203
|
-
|
204
|
-
|
198
|
+
where(:id => ids)
|
199
|
+
end
|
205
200
|
|
206
201
|
# Sorts products from most popular (poularity is extracted from how many
|
207
202
|
# times use has put product in cart, not completed orders)
|
@@ -211,7 +206,7 @@ module Scopes::Product
|
|
211
206
|
#
|
212
207
|
# :joins => "LEFT OUTER JOIN (SELECT line_items.variant_id as vid, COUNT(*) as cnt FROM line_items GROUP BY line_items.variant_id) AS popularity_count ON variants.id = vid",
|
213
208
|
# :order => 'COALESCE(cnt, 0) DESC'
|
214
|
-
Product.
|
209
|
+
Product.add_search_scope :descend_by_popularity do
|
215
210
|
{
|
216
211
|
:joins => :master,
|
217
212
|
:order => <<SQL
|
@@ -229,10 +224,11 @@ module Scopes::Product
|
|
229
224
|
), 0) DESC
|
230
225
|
SQL
|
231
226
|
}
|
227
|
+
end
|
232
228
|
|
233
229
|
# Produce an array of keywords for use in scopes.
|
234
230
|
# Always return array with at least an empty string to avoid SQL errors
|
235
|
-
def
|
231
|
+
def Product.prepare_words(words)
|
236
232
|
return [''] if words.blank?
|
237
233
|
a = words.split(/[,\s]/).map(&:strip)
|
238
234
|
a.any? ? a : ['']
|
@@ -244,7 +240,7 @@ SQL
|
|
244
240
|
end
|
245
241
|
end
|
246
242
|
|
247
|
-
def
|
243
|
+
def Product.get_taxons(*ids_or_records_or_names)
|
248
244
|
ids_or_records_or_names.flatten.map { |t|
|
249
245
|
case t
|
250
246
|
when Integer then Taxon.find_by_id(t)
|
@@ -259,8 +255,8 @@ SQL
|
|
259
255
|
end
|
260
256
|
|
261
257
|
# specifically avoid having an order for taxon search (conflicts with main order)
|
262
|
-
def
|
258
|
+
def Product.prepare_taxon_conditions(taxons)
|
263
259
|
ids = taxons.map{|taxon| taxon.self_and_descendants.map(&:id)}.flatten.uniq
|
264
|
-
|
260
|
+
joins(:taxons).where("taxons.id" => ids)
|
265
261
|
end
|
266
262
|
end
|
data/lib/spree_core/version.rb
CHANGED
metadata
CHANGED
@@ -1,190 +1,277 @@
|
|
1
|
-
--- !ruby/object:Gem::Specification
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
2
|
name: spree_core
|
3
|
-
version: !ruby/object:Gem::Version
|
4
|
-
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
hash: 267
|
5
5
|
prerelease:
|
6
|
+
segments:
|
7
|
+
- 0
|
8
|
+
- 70
|
9
|
+
- 6
|
10
|
+
version: 0.70.6
|
6
11
|
platform: ruby
|
7
|
-
authors:
|
12
|
+
authors:
|
8
13
|
- Sean Schofield
|
9
14
|
autorequire:
|
10
15
|
bindir: bin
|
11
16
|
cert_chain: []
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
+
|
18
|
+
date: 2012-07-05 00:00:00 Z
|
19
|
+
dependencies:
|
20
|
+
- !ruby/object:Gem::Dependency
|
21
|
+
version_requirements: &id001 !ruby/object:Gem::Requirement
|
17
22
|
none: false
|
18
|
-
requirements:
|
19
|
-
- - =
|
20
|
-
- !ruby/object:Gem::Version
|
23
|
+
requirements:
|
24
|
+
- - "="
|
25
|
+
- !ruby/object:Gem::Version
|
26
|
+
hash: 19
|
27
|
+
segments:
|
28
|
+
- 0
|
29
|
+
- 1
|
30
|
+
- 4
|
21
31
|
version: 0.1.4
|
32
|
+
requirement: *id001
|
22
33
|
type: :runtime
|
23
34
|
prerelease: false
|
24
|
-
|
25
|
-
- !ruby/object:Gem::Dependency
|
26
|
-
|
27
|
-
requirement: &70367143738880 !ruby/object:Gem::Requirement
|
35
|
+
name: acts_as_list
|
36
|
+
- !ruby/object:Gem::Dependency
|
37
|
+
version_requirements: &id002 !ruby/object:Gem::Requirement
|
28
38
|
none: false
|
29
|
-
requirements:
|
30
|
-
- - =
|
31
|
-
- !ruby/object:Gem::Version
|
39
|
+
requirements:
|
40
|
+
- - "="
|
41
|
+
- !ruby/object:Gem::Version
|
42
|
+
hash: 31
|
43
|
+
segments:
|
44
|
+
- 1
|
45
|
+
- 6
|
46
|
+
- 8
|
32
47
|
version: 1.6.8
|
48
|
+
requirement: *id002
|
33
49
|
type: :runtime
|
34
50
|
prerelease: false
|
35
|
-
|
36
|
-
- !ruby/object:Gem::Dependency
|
37
|
-
|
38
|
-
requirement: &70367143737900 !ruby/object:Gem::Requirement
|
51
|
+
name: nested_set
|
52
|
+
- !ruby/object:Gem::Dependency
|
53
|
+
version_requirements: &id003 !ruby/object:Gem::Requirement
|
39
54
|
none: false
|
40
|
-
requirements:
|
41
|
-
- - =
|
42
|
-
- !ruby/object:Gem::Version
|
55
|
+
requirements:
|
56
|
+
- - "="
|
57
|
+
- !ruby/object:Gem::Version
|
58
|
+
hash: 25
|
59
|
+
segments:
|
60
|
+
- 0
|
61
|
+
- 1
|
62
|
+
- 1
|
43
63
|
version: 0.1.1
|
64
|
+
requirement: *id003
|
44
65
|
type: :runtime
|
45
66
|
prerelease: false
|
46
|
-
|
47
|
-
- !ruby/object:Gem::Dependency
|
48
|
-
|
49
|
-
requirement: &70367143736620 !ruby/object:Gem::Requirement
|
67
|
+
name: rd_find_by_param
|
68
|
+
- !ruby/object:Gem::Dependency
|
69
|
+
version_requirements: &id004 !ruby/object:Gem::Requirement
|
50
70
|
none: false
|
51
|
-
requirements:
|
52
|
-
- -
|
53
|
-
- !ruby/object:Gem::Version
|
71
|
+
requirements:
|
72
|
+
- - ">="
|
73
|
+
- !ruby/object:Gem::Version
|
74
|
+
hash: 11
|
75
|
+
segments:
|
76
|
+
- 1
|
77
|
+
- 0
|
78
|
+
- 14
|
54
79
|
version: 1.0.14
|
80
|
+
requirement: *id004
|
55
81
|
type: :runtime
|
56
82
|
prerelease: false
|
57
|
-
|
58
|
-
- !ruby/object:Gem::Dependency
|
59
|
-
|
60
|
-
requirement: &70367143735040 !ruby/object:Gem::Requirement
|
83
|
+
name: jquery-rails
|
84
|
+
- !ruby/object:Gem::Dependency
|
85
|
+
version_requirements: &id005 !ruby/object:Gem::Requirement
|
61
86
|
none: false
|
62
|
-
requirements:
|
63
|
-
- - =
|
64
|
-
- !ruby/object:Gem::Version
|
87
|
+
requirements:
|
88
|
+
- - "="
|
89
|
+
- !ruby/object:Gem::Version
|
90
|
+
hash: 11
|
91
|
+
segments:
|
92
|
+
- 1
|
93
|
+
- 6
|
94
|
+
- 2
|
65
95
|
version: 1.6.2
|
96
|
+
requirement: *id005
|
66
97
|
type: :runtime
|
67
98
|
prerelease: false
|
68
|
-
|
69
|
-
- !ruby/object:Gem::Dependency
|
70
|
-
|
71
|
-
requirement: &70367143733400 !ruby/object:Gem::Requirement
|
99
|
+
name: highline
|
100
|
+
- !ruby/object:Gem::Dependency
|
101
|
+
version_requirements: &id006 !ruby/object:Gem::Requirement
|
72
102
|
none: false
|
73
|
-
requirements:
|
74
|
-
- - =
|
75
|
-
- !ruby/object:Gem::Version
|
103
|
+
requirements:
|
104
|
+
- - "="
|
105
|
+
- !ruby/object:Gem::Version
|
106
|
+
hash: 27
|
107
|
+
segments:
|
108
|
+
- 1
|
109
|
+
- 3
|
110
|
+
- 0
|
76
111
|
version: 1.3.0
|
112
|
+
requirement: *id006
|
77
113
|
type: :runtime
|
78
114
|
prerelease: false
|
79
|
-
|
80
|
-
- !ruby/object:Gem::Dependency
|
81
|
-
|
82
|
-
requirement: &70367143757160 !ruby/object:Gem::Requirement
|
115
|
+
name: stringex
|
116
|
+
- !ruby/object:Gem::Dependency
|
117
|
+
version_requirements: &id007 !ruby/object:Gem::Requirement
|
83
118
|
none: false
|
84
|
-
requirements:
|
85
|
-
- - =
|
86
|
-
- !ruby/object:Gem::Version
|
119
|
+
requirements:
|
120
|
+
- - "="
|
121
|
+
- !ruby/object:Gem::Version
|
122
|
+
hash: 21
|
123
|
+
segments:
|
124
|
+
- 1
|
125
|
+
- 0
|
126
|
+
- 1
|
87
127
|
version: 1.0.1
|
128
|
+
requirement: *id007
|
88
129
|
type: :runtime
|
89
130
|
prerelease: false
|
90
|
-
|
91
|
-
- !ruby/object:Gem::Dependency
|
92
|
-
|
93
|
-
requirement: &70367143754240 !ruby/object:Gem::Requirement
|
131
|
+
name: state_machine
|
132
|
+
- !ruby/object:Gem::Dependency
|
133
|
+
version_requirements: &id008 !ruby/object:Gem::Requirement
|
94
134
|
none: false
|
95
|
-
requirements:
|
96
|
-
- - =
|
97
|
-
- !ruby/object:Gem::Version
|
135
|
+
requirements:
|
136
|
+
- - "="
|
137
|
+
- !ruby/object:Gem::Version
|
138
|
+
hash: 23
|
139
|
+
segments:
|
140
|
+
- 1
|
141
|
+
- 0
|
142
|
+
- 0
|
98
143
|
version: 1.0.0
|
144
|
+
requirement: *id008
|
99
145
|
type: :runtime
|
100
146
|
prerelease: false
|
101
|
-
|
102
|
-
- !ruby/object:Gem::Dependency
|
103
|
-
|
104
|
-
requirement: &70367143752740 !ruby/object:Gem::Requirement
|
147
|
+
name: faker
|
148
|
+
- !ruby/object:Gem::Dependency
|
149
|
+
version_requirements: &id009 !ruby/object:Gem::Requirement
|
105
150
|
none: false
|
106
|
-
requirements:
|
107
|
-
- - =
|
108
|
-
- !ruby/object:Gem::Version
|
151
|
+
requirements:
|
152
|
+
- - "="
|
153
|
+
- !ruby/object:Gem::Version
|
154
|
+
hash: 27
|
155
|
+
segments:
|
156
|
+
- 2
|
157
|
+
- 5
|
158
|
+
- 0
|
109
159
|
version: 2.5.0
|
160
|
+
requirement: *id009
|
110
161
|
type: :runtime
|
111
162
|
prerelease: false
|
112
|
-
|
113
|
-
- !ruby/object:Gem::Dependency
|
114
|
-
|
115
|
-
requirement: &70367143750960 !ruby/object:Gem::Requirement
|
163
|
+
name: paperclip
|
164
|
+
- !ruby/object:Gem::Dependency
|
165
|
+
version_requirements: &id010 !ruby/object:Gem::Requirement
|
116
166
|
none: false
|
117
|
-
requirements:
|
118
|
-
- -
|
119
|
-
- !ruby/object:Gem::Version
|
120
|
-
|
167
|
+
requirements:
|
168
|
+
- - ">="
|
169
|
+
- !ruby/object:Gem::Version
|
170
|
+
hash: 3
|
171
|
+
segments:
|
172
|
+
- 0
|
173
|
+
version: "0"
|
174
|
+
requirement: *id010
|
121
175
|
type: :runtime
|
122
176
|
prerelease: false
|
123
|
-
|
124
|
-
- !ruby/object:Gem::Dependency
|
125
|
-
|
126
|
-
requirement: &70367143774920 !ruby/object:Gem::Requirement
|
177
|
+
name: rd_resource_controller
|
178
|
+
- !ruby/object:Gem::Dependency
|
179
|
+
version_requirements: &id011 !ruby/object:Gem::Requirement
|
127
180
|
none: false
|
128
|
-
requirements:
|
129
|
-
- - =
|
130
|
-
- !ruby/object:Gem::Version
|
181
|
+
requirements:
|
182
|
+
- - "="
|
183
|
+
- !ruby/object:Gem::Version
|
184
|
+
hash: 17
|
185
|
+
segments:
|
186
|
+
- 1
|
187
|
+
- 1
|
188
|
+
- 1
|
131
189
|
version: 1.1.1
|
190
|
+
requirement: *id011
|
132
191
|
type: :runtime
|
133
192
|
prerelease: false
|
134
|
-
|
135
|
-
- !ruby/object:Gem::Dependency
|
136
|
-
|
137
|
-
requirement: &70367143773260 !ruby/object:Gem::Requirement
|
193
|
+
name: meta_search
|
194
|
+
- !ruby/object:Gem::Dependency
|
195
|
+
version_requirements: &id012 !ruby/object:Gem::Requirement
|
138
196
|
none: false
|
139
|
-
requirements:
|
140
|
-
- - =
|
141
|
-
- !ruby/object:Gem::Version
|
197
|
+
requirements:
|
198
|
+
- - "="
|
199
|
+
- !ruby/object:Gem::Version
|
200
|
+
hash: 83
|
201
|
+
segments:
|
202
|
+
- 1
|
203
|
+
- 17
|
204
|
+
- 0
|
142
205
|
version: 1.17.0
|
206
|
+
requirement: *id012
|
143
207
|
type: :runtime
|
144
208
|
prerelease: false
|
145
|
-
|
146
|
-
- !ruby/object:Gem::Dependency
|
147
|
-
|
148
|
-
requirement: &70367143772420 !ruby/object:Gem::Requirement
|
209
|
+
name: activemerchant
|
210
|
+
- !ruby/object:Gem::Dependency
|
211
|
+
version_requirements: &id013 !ruby/object:Gem::Requirement
|
149
212
|
none: false
|
150
|
-
requirements:
|
151
|
-
- -
|
152
|
-
- !ruby/object:Gem::Version
|
213
|
+
requirements:
|
214
|
+
- - ">="
|
215
|
+
- !ruby/object:Gem::Version
|
216
|
+
hash: 1
|
217
|
+
segments:
|
218
|
+
- 3
|
219
|
+
- 1
|
220
|
+
- 1
|
153
221
|
version: 3.1.1
|
154
222
|
- - <=
|
155
|
-
- !ruby/object:Gem::Version
|
223
|
+
- !ruby/object:Gem::Version
|
224
|
+
hash: 11
|
225
|
+
segments:
|
226
|
+
- 3
|
227
|
+
- 1
|
228
|
+
- 4
|
156
229
|
version: 3.1.4
|
230
|
+
requirement: *id013
|
157
231
|
type: :runtime
|
158
232
|
prerelease: false
|
159
|
-
|
160
|
-
- !ruby/object:Gem::Dependency
|
161
|
-
|
162
|
-
requirement: &70367143770960 !ruby/object:Gem::Requirement
|
233
|
+
name: rails
|
234
|
+
- !ruby/object:Gem::Dependency
|
235
|
+
version_requirements: &id014 !ruby/object:Gem::Requirement
|
163
236
|
none: false
|
164
|
-
requirements:
|
165
|
-
- -
|
166
|
-
- !ruby/object:Gem::Version
|
237
|
+
requirements:
|
238
|
+
- - ">="
|
239
|
+
- !ruby/object:Gem::Version
|
240
|
+
hash: 39
|
241
|
+
segments:
|
242
|
+
- 0
|
243
|
+
- 12
|
244
|
+
- 4
|
167
245
|
version: 0.12.4
|
246
|
+
requirement: *id014
|
168
247
|
type: :runtime
|
169
248
|
prerelease: false
|
170
|
-
|
171
|
-
- !ruby/object:Gem::Dependency
|
172
|
-
|
173
|
-
requirement: &70367143769780 !ruby/object:Gem::Requirement
|
249
|
+
name: kaminari
|
250
|
+
- !ruby/object:Gem::Dependency
|
251
|
+
version_requirements: &id015 !ruby/object:Gem::Requirement
|
174
252
|
none: false
|
175
|
-
requirements:
|
176
|
-
- -
|
177
|
-
- !ruby/object:Gem::Version
|
253
|
+
requirements:
|
254
|
+
- - ">="
|
255
|
+
- !ruby/object:Gem::Version
|
256
|
+
hash: 3
|
257
|
+
segments:
|
258
|
+
- 0
|
259
|
+
- 7
|
260
|
+
- 0
|
178
261
|
version: 0.7.0
|
262
|
+
requirement: *id015
|
179
263
|
type: :runtime
|
180
264
|
prerelease: false
|
181
|
-
|
265
|
+
name: deface
|
182
266
|
description: Required dependency for Spree
|
183
267
|
email: sean@railsdog.com
|
184
268
|
executables: []
|
269
|
+
|
185
270
|
extensions: []
|
271
|
+
|
186
272
|
extra_rdoc_files: []
|
187
|
-
|
273
|
+
|
274
|
+
files:
|
188
275
|
- LICENSE
|
189
276
|
- README.md
|
190
277
|
- app/assets/images/admin/bg/active-tab.png
|
@@ -937,26 +1024,33 @@ files:
|
|
937
1024
|
- vendor/assets/stylesheets/jquery-ui.datepicker.css.erb
|
938
1025
|
homepage: http://spreecommerce.com
|
939
1026
|
licenses: []
|
1027
|
+
|
940
1028
|
post_install_message:
|
941
1029
|
rdoc_options: []
|
942
|
-
|
1030
|
+
|
1031
|
+
require_paths:
|
943
1032
|
- lib
|
944
|
-
required_ruby_version: !ruby/object:Gem::Requirement
|
1033
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
945
1034
|
none: false
|
946
|
-
requirements:
|
947
|
-
- -
|
948
|
-
- !ruby/object:Gem::Version
|
1035
|
+
requirements:
|
1036
|
+
- - ">="
|
1037
|
+
- !ruby/object:Gem::Version
|
1038
|
+
hash: 57
|
1039
|
+
segments:
|
1040
|
+
- 1
|
1041
|
+
- 8
|
1042
|
+
- 7
|
949
1043
|
version: 1.8.7
|
950
|
-
required_rubygems_version: !ruby/object:Gem::Requirement
|
1044
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
951
1045
|
none: false
|
952
|
-
requirements:
|
953
|
-
- -
|
954
|
-
- !ruby/object:Gem::Version
|
955
|
-
|
956
|
-
segments:
|
1046
|
+
requirements:
|
1047
|
+
- - ">="
|
1048
|
+
- !ruby/object:Gem::Version
|
1049
|
+
hash: 3
|
1050
|
+
segments:
|
957
1051
|
- 0
|
958
|
-
|
959
|
-
requirements:
|
1052
|
+
version: "0"
|
1053
|
+
requirements:
|
960
1054
|
- none
|
961
1055
|
rubyforge_project: spree_core
|
962
1056
|
rubygems_version: 1.8.10
|
@@ -964,3 +1058,4 @@ signing_key:
|
|
964
1058
|
specification_version: 3
|
965
1059
|
summary: Core e-commerce functionality for the Spree project.
|
966
1060
|
test_files: []
|
1061
|
+
|