spree_core 0.70.5 → 0.70.6
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.
- 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
|
+
|