spree_address_populator 1.0

Sign up to get free protection for your applications and to get access to all the features.
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA1:
3
+ metadata.gz: 0a4ede8e2ef6be279162c3c5576c208d30b72293
4
+ data.tar.gz: 93d9f073bdd7ab59e41576c2b2c7ae3521bd4685
5
+ SHA512:
6
+ metadata.gz: 16a5b27c75170561c937a29eee08d074b57fc1ddcb65191b739e0c7eb9ea5b2bdc78d332a7f5adb0535efefff18d09762b034deba4b526a452ac081f17c137f1
7
+ data.tar.gz: 9cbecb352980cd92e77efeb6c46f5ebac07ce87b149401eed983690af16351f4448e17fba1c05cfdc3ea92634d47dacfc64fd578d24980c26c5b72b18c5b8474
data/Gemfile ADDED
@@ -0,0 +1,5 @@
1
+ source 'https://rubygems.org'
2
+ gem 'spree', github: 'spree/spree', branch: '2-0-stable'
3
+ gem 'spree_auth_devise', github: 'spree/spree_auth_devise', :branch => '2-0-stable'
4
+ gem 'pry'
5
+ gemspec
@@ -0,0 +1,339 @@
1
+ GIT
2
+ remote: git://github.com/spree/spree.git
3
+ revision: 2d77a602063644051b0233337f72a9eb0f9a3a40
4
+ branch: 2-0-stable
5
+ specs:
6
+ spree (2.0.13.beta)
7
+ spree_api (= 2.0.13.beta)
8
+ spree_backend (= 2.0.13.beta)
9
+ spree_cmd (= 2.0.13.beta)
10
+ spree_core (= 2.0.13.beta)
11
+ spree_frontend (= 2.0.13.beta)
12
+ spree_sample (= 2.0.13.beta)
13
+ spree_api (2.0.13.beta)
14
+ rabl (= 0.9.3)
15
+ spree_core (= 2.0.13.beta)
16
+ versioncake (~> 1.2.0)
17
+ spree_backend (2.0.13.beta)
18
+ jquery-rails (~> 3.0.0)
19
+ jquery-ui-rails (~> 4.0.0)
20
+ select2-rails (~> 3.4.7)
21
+ spree_api (= 2.0.13.beta)
22
+ spree_core (= 2.0.13.beta)
23
+ spree_cmd (2.0.13.beta)
24
+ thor (~> 0.14)
25
+ spree_core (2.0.13.beta)
26
+ activemerchant (~> 1.43.1)
27
+ acts_as_list (= 0.3.0)
28
+ awesome_nested_set (= 2.1.6)
29
+ aws-sdk (= 1.31.3)
30
+ cancan (~> 1.6.10)
31
+ deface (= 1.0.0)
32
+ ffaker (~> 1.22.0)
33
+ highline (~> 1.6.18)
34
+ httparty (~> 0.11)
35
+ json (~> 1.7)
36
+ kaminari (~> 0.15.0)
37
+ monetize
38
+ paperclip (~> 3.4.1)
39
+ paranoia (~> 1.3)
40
+ rails (~> 3.2.18)
41
+ ransack (~> 1.1.0)
42
+ state_machine (= 1.2.0)
43
+ stringex (~> 1.5.1)
44
+ truncate_html (= 0.9.2)
45
+ spree_frontend (2.0.13.beta)
46
+ canonical-rails
47
+ deface (>= 0.9.0)
48
+ jquery-rails (~> 3.0.0)
49
+ rails (~> 3.2.13)
50
+ spree_api (= 2.0.13.beta)
51
+ spree_core (= 2.0.13.beta)
52
+ stringex (~> 1.5.1)
53
+ spree_sample (2.0.13.beta)
54
+ spree_core (= 2.0.13.beta)
55
+
56
+ GIT
57
+ remote: git://github.com/spree/spree_auth_devise.git
58
+ revision: 0181835fb6ac77a05191d26f6f32a0f4a548d851
59
+ branch: 2-0-stable
60
+ specs:
61
+ spree_auth_devise (2.0.0)
62
+ devise (~> 2.2.5)
63
+ devise-encryptable (= 0.1.2)
64
+ spree_backend (~> 2.0.0)
65
+ spree_core (~> 2.0.0)
66
+ spree_frontend (~> 2.0.0)
67
+
68
+ PATH
69
+ remote: .
70
+ specs:
71
+ spree_address_populator (1.0)
72
+ durable_decorator (~> 0.2.0)
73
+ spree_core (>= 2.0)
74
+
75
+ GEM
76
+ remote: https://rubygems.org/
77
+ specs:
78
+ actionmailer (3.2.21)
79
+ actionpack (= 3.2.21)
80
+ mail (~> 2.5.4)
81
+ actionpack (3.2.21)
82
+ activemodel (= 3.2.21)
83
+ activesupport (= 3.2.21)
84
+ builder (~> 3.0.0)
85
+ erubis (~> 2.7.0)
86
+ journey (~> 1.0.4)
87
+ rack (~> 1.4.5)
88
+ rack-cache (~> 1.2)
89
+ rack-test (~> 0.6.1)
90
+ sprockets (~> 2.2.1)
91
+ active_utils (2.2.3)
92
+ activesupport (>= 2.3.11)
93
+ i18n
94
+ activemerchant (1.43.3)
95
+ active_utils (~> 2.0, >= 2.0.1)
96
+ activesupport (>= 2.3.14, < 5.0.0)
97
+ builder (>= 2.1.2, < 4.0.0)
98
+ i18n (~> 0.5)
99
+ json (~> 1.7)
100
+ money (< 7.0.0)
101
+ nokogiri (~> 1.4)
102
+ activemodel (3.2.21)
103
+ activesupport (= 3.2.21)
104
+ builder (~> 3.0.0)
105
+ activerecord (3.2.21)
106
+ activemodel (= 3.2.21)
107
+ activesupport (= 3.2.21)
108
+ arel (~> 3.0.2)
109
+ tzinfo (~> 0.3.29)
110
+ activeresource (3.2.21)
111
+ activemodel (= 3.2.21)
112
+ activesupport (= 3.2.21)
113
+ activesupport (3.2.21)
114
+ i18n (~> 0.6, >= 0.6.4)
115
+ multi_json (~> 1.0)
116
+ acts_as_list (0.3.0)
117
+ activerecord (>= 3.0)
118
+ arel (3.0.3)
119
+ awesome_nested_set (2.1.6)
120
+ activerecord (>= 3.0.0)
121
+ aws-sdk (1.31.3)
122
+ json (~> 1.4)
123
+ nokogiri (>= 1.4.4)
124
+ uuidtools (~> 2.1)
125
+ bcrypt (3.1.9)
126
+ bcrypt-ruby (3.1.5)
127
+ bcrypt (>= 3.1.3)
128
+ builder (3.0.4)
129
+ cancan (1.6.10)
130
+ canonical-rails (0.0.7)
131
+ rails (>= 3.1, < 5.0)
132
+ capybara (2.4.4)
133
+ mime-types (>= 1.16)
134
+ nokogiri (>= 1.3.3)
135
+ rack (>= 1.0.0)
136
+ rack-test (>= 0.5.4)
137
+ xpath (~> 2.0)
138
+ childprocess (0.5.5)
139
+ ffi (~> 1.0, >= 1.0.11)
140
+ climate_control (0.0.3)
141
+ activesupport (>= 3.0)
142
+ cocaine (0.5.4)
143
+ climate_control (>= 0.0.3, < 1.0)
144
+ coderay (1.1.0)
145
+ coffee-rails (3.2.2)
146
+ coffee-script (>= 2.2.0)
147
+ railties (~> 3.2.0)
148
+ coffee-script (2.3.0)
149
+ coffee-script-source
150
+ execjs
151
+ coffee-script-source (1.8.0)
152
+ colorize (0.7.3)
153
+ database_cleaner (1.0.1)
154
+ deface (1.0.0)
155
+ colorize (>= 0.5.8)
156
+ nokogiri (~> 1.6.0)
157
+ rails (>= 3.1)
158
+ devise (2.2.8)
159
+ bcrypt-ruby (~> 3.0)
160
+ orm_adapter (~> 0.1)
161
+ railties (~> 3.1)
162
+ warden (~> 1.2.1)
163
+ devise-encryptable (0.1.2)
164
+ devise (>= 2.1.0)
165
+ diff-lcs (1.2.5)
166
+ docile (1.1.5)
167
+ durable_decorator (0.2.2)
168
+ logging
169
+ method_source
170
+ erubis (2.7.0)
171
+ execjs (2.2.2)
172
+ factory_girl (3.6.2)
173
+ activesupport (>= 3.0.0)
174
+ ffaker (1.22.1)
175
+ ffi (1.9.6)
176
+ highline (1.6.21)
177
+ hike (1.2.3)
178
+ httparty (0.13.3)
179
+ json (~> 1.8)
180
+ multi_xml (>= 0.5.2)
181
+ i18n (0.6.11)
182
+ journey (1.0.4)
183
+ jquery-rails (3.0.4)
184
+ railties (>= 3.0, < 5.0)
185
+ thor (>= 0.14, < 2.0)
186
+ jquery-ui-rails (4.0.5)
187
+ railties (>= 3.1.0)
188
+ json (1.8.1)
189
+ kaminari (0.15.1)
190
+ actionpack (>= 3.0.0)
191
+ activesupport (>= 3.0.0)
192
+ little-plugger (1.1.3)
193
+ logging (1.8.2)
194
+ little-plugger (>= 1.1.3)
195
+ multi_json (>= 1.8.4)
196
+ mail (2.5.4)
197
+ mime-types (~> 1.16)
198
+ treetop (~> 1.4.8)
199
+ method_source (0.8.2)
200
+ mime-types (1.25.1)
201
+ mini_portile (0.6.1)
202
+ monetize (1.0.0)
203
+ money (~> 6.4.0)
204
+ money (6.4.0)
205
+ i18n (>= 0.6.4, <= 0.7.0.beta1)
206
+ multi_json (1.10.1)
207
+ multi_xml (0.5.5)
208
+ nokogiri (1.6.4.1)
209
+ mini_portile (~> 0.6.0)
210
+ orm_adapter (0.5.0)
211
+ paperclip (3.4.2)
212
+ activemodel (>= 3.0.0)
213
+ activerecord (>= 3.0.0)
214
+ activesupport (>= 3.0.0)
215
+ cocaine (~> 0.5.0)
216
+ mime-types
217
+ paranoia (1.3.3)
218
+ activerecord (~> 3.2)
219
+ polyamorous (0.6.4)
220
+ activerecord (>= 3.0)
221
+ polyglot (0.3.5)
222
+ pry (0.10.1)
223
+ coderay (~> 1.1.0)
224
+ method_source (~> 0.8.1)
225
+ slop (~> 3.4)
226
+ rabl (0.9.3)
227
+ activesupport (>= 2.3.14)
228
+ rack (1.4.5)
229
+ rack-cache (1.2)
230
+ rack (>= 0.4)
231
+ rack-ssl (1.3.4)
232
+ rack
233
+ rack-test (0.6.2)
234
+ rack (>= 1.0)
235
+ rails (3.2.21)
236
+ actionmailer (= 3.2.21)
237
+ actionpack (= 3.2.21)
238
+ activerecord (= 3.2.21)
239
+ activeresource (= 3.2.21)
240
+ activesupport (= 3.2.21)
241
+ bundler (~> 1.0)
242
+ railties (= 3.2.21)
243
+ railties (3.2.21)
244
+ actionpack (= 3.2.21)
245
+ activesupport (= 3.2.21)
246
+ rack-ssl (~> 1.3.2)
247
+ rake (>= 0.8.7)
248
+ rdoc (~> 3.4)
249
+ thor (>= 0.14.6, < 2.0)
250
+ rake (10.3.2)
251
+ ransack (1.1.0)
252
+ actionpack (>= 3.0)
253
+ activerecord (>= 3.0)
254
+ polyamorous (~> 0.6.0)
255
+ rdoc (3.12.2)
256
+ json (~> 1.4)
257
+ rspec-collection_matchers (1.1.2)
258
+ rspec-expectations (>= 2.99.0.beta1)
259
+ rspec-core (2.99.2)
260
+ rspec-expectations (2.99.2)
261
+ diff-lcs (>= 1.1.3, < 2.0)
262
+ rspec-mocks (2.99.2)
263
+ rspec-rails (2.99.0)
264
+ actionpack (>= 3.0)
265
+ activemodel (>= 3.0)
266
+ activesupport (>= 3.0)
267
+ railties (>= 3.0)
268
+ rspec-collection_matchers
269
+ rspec-core (~> 2.99.0)
270
+ rspec-expectations (~> 2.99.0)
271
+ rspec-mocks (~> 2.99.0)
272
+ rubyzip (1.1.6)
273
+ sass (3.4.8)
274
+ sass-rails (3.2.6)
275
+ railties (~> 3.2.0)
276
+ sass (>= 3.1.10)
277
+ tilt (~> 1.3)
278
+ select2-rails (3.4.9)
279
+ sass-rails
280
+ thor (~> 0.14)
281
+ selenium-webdriver (2.44.0)
282
+ childprocess (~> 0.5)
283
+ multi_json (~> 1.0)
284
+ rubyzip (~> 1.0)
285
+ websocket (~> 1.0)
286
+ shoulda-matchers (2.7.0)
287
+ activesupport (>= 3.0.0)
288
+ simplecov (0.9.1)
289
+ docile (~> 1.1.0)
290
+ multi_json (~> 1.0)
291
+ simplecov-html (~> 0.8.0)
292
+ simplecov-html (0.8.0)
293
+ slop (3.6.0)
294
+ sprockets (2.2.3)
295
+ hike (~> 1.2)
296
+ multi_json (~> 1.0)
297
+ rack (~> 1.0)
298
+ tilt (~> 1.1, != 1.3.0)
299
+ sqlite3 (1.3.10)
300
+ state_machine (1.2.0)
301
+ stringex (1.5.1)
302
+ thor (0.19.1)
303
+ tilt (1.4.1)
304
+ treetop (1.4.15)
305
+ polyglot
306
+ polyglot (>= 0.3.1)
307
+ truncate_html (0.9.2)
308
+ tzinfo (0.3.42)
309
+ uuidtools (2.1.5)
310
+ versioncake (1.2.0)
311
+ actionpack (>= 3.2)
312
+ activesupport (>= 3.2)
313
+ railties (>= 3.2)
314
+ tzinfo
315
+ warden (1.2.3)
316
+ rack (>= 1.0)
317
+ websocket (1.2.1)
318
+ xpath (2.0.0)
319
+ nokogiri (~> 1.3)
320
+
321
+ PLATFORMS
322
+ ruby
323
+
324
+ DEPENDENCIES
325
+ capybara (~> 2.0)
326
+ coffee-rails
327
+ database_cleaner (~> 1.0.1)
328
+ factory_girl (~> 3.6.2)
329
+ ffaker
330
+ pry
331
+ rspec-rails (~> 2.13)
332
+ sass-rails
333
+ selenium-webdriver
334
+ shoulda-matchers (>= 1.5.4)
335
+ simplecov
336
+ spree!
337
+ spree_address_populator!
338
+ spree_auth_devise!
339
+ sqlite3
data/LICENSE ADDED
@@ -0,0 +1,26 @@
1
+ Copyright (c) 2012 R.S.A.
2
+ All rights reserved.
3
+
4
+ Redistribution and use in source and binary forms, with or without modification,
5
+ are permitted provided that the following conditions are met:
6
+
7
+ * Redistributions of source code must retain the above copyright notice,
8
+ this list of conditions and the following disclaimer.
9
+ * Redistributions in binary form must reproduce the above copyright notice,
10
+ this list of conditions and the following disclaimer in the documentation
11
+ and/or other materials provided with the distribution.
12
+ * Neither the name Spree nor the names of its contributors may be used to
13
+ endorse or promote products derived from this software without specific
14
+ prior written permission.
15
+
16
+ THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
17
+ "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
18
+ LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
19
+ A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
20
+ CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
21
+ EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
22
+ PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
23
+ PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
24
+ LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
25
+ NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
26
+ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
@@ -0,0 +1,25 @@
1
+ Spree Address Populator
2
+ =============
3
+
4
+ This extension is to auto populate the default user ship/bill address or select a previous one into admin section
5
+
6
+ Requirements
7
+ ============
8
+
9
+ * Spree Core 2.0.0 or greater.
10
+ * Ruby 1.9.2 or greater.
11
+
12
+ Installation
13
+ ============
14
+
15
+ 1. Add `gem 'spree_address_populator', github: 'jtapia/spree_address_populator'` to Gemfile
16
+ 2. Run `bundle`
17
+ 3. Add `admin/spree_address_populator` to assets
18
+
19
+ Testing
20
+ =======
21
+
22
+ 1. bundle exec rake test_app
23
+ 2. bundle exec rspec spec
24
+
25
+ Copyright (c) 2012 Jeff Dutil, released under the New BSD License
@@ -0,0 +1,15 @@
1
+ require 'bundler'
2
+ Bundler::GemHelper.install_tasks
3
+
4
+ require 'rspec/core/rake_task'
5
+ require 'spree/testing_support/common_rake'
6
+
7
+ RSpec::Core::RakeTask.new
8
+
9
+ task :default => [:spec]
10
+
11
+ desc 'Generates a dummy app for testing'
12
+ task :test_app do
13
+ ENV['LIB_NAME'] = 'spree_address_populator'
14
+ Rake::Task['common:test_app'].invoke
15
+ end
@@ -0,0 +1 @@
1
+ "2.1.x" => { :branch => "2-1-stable" }
@@ -0,0 +1,139 @@
1
+ $(document).ready ->
2
+ # Initialize a couple empty Select2 before the user is loaded.
3
+ $("#billing_address_select").select2 { data: [] }
4
+ $("#shipping_address_select").select2 { data: [] }
5
+
6
+ # Format the items in the list so that you get the format:
7
+ # <firstname> <lastname>
8
+ # <company>
9
+ # <address one>
10
+ # <address two>
11
+ # <city>, <state>
12
+ # <country>
13
+ formatAddress = (item) ->
14
+ text = ""
15
+ if item.firstname && item.firstname.length > 0 && item.lastname && item.lastname.length > 0
16
+ text += item.firstname + " " + item.lastname + "<br />"
17
+ if item.company && item.company.length > 0
18
+ text += item.company + "<br />"
19
+ if item.address1 && item.address1.length > 0
20
+ text += item.address1 + "<br />"
21
+ if item.address2 && item.address2.length > 0
22
+ text += item.address2 + "<br />"
23
+ if item.city && item.city.length > 0
24
+ text += item.city + ", "
25
+ if item.state_name && item.state_name.length > 0
26
+ text += item.state_name + "<br />"
27
+ if item.country_name && item.country_name.length > 0
28
+ text += item.country_name
29
+ text
30
+
31
+ # Format the address on a single line for when the address is selected.
32
+ formatSingleLineAddress = (item) ->
33
+ text = []
34
+ if item.firstname && item.firstname.length > 0 && item.lastname && item.lastname.length > 0
35
+ text.push item.firstname + " " + item.lastname
36
+ if item.company && item.company.length > 0
37
+ text.push item.company
38
+ if item.address1 && item.address1.length > 0
39
+ text.push item.address1
40
+ if item.address2 && item.address2.length > 0
41
+ text.push item.address2
42
+ if item.city && item.city.length > 0
43
+ text.push item.city
44
+ if item.state_name && item.state_name.length > 0
45
+ text.push item.state_name
46
+ if item.country_name && item.country_name.length > 0
47
+ text.push item.country_name
48
+ text.join ", "
49
+
50
+ populateAddressBox = (address_type, addresses) ->
51
+ data = generateFormat addresses
52
+ $("#" + address_type + "_address_select").select2
53
+ data: { results: data },
54
+ results: (data) -> results: data,
55
+ formatSelection: formatSingleLineAddress,
56
+ formatResult: formatAddress
57
+
58
+ generateFormat = (addresses) ->
59
+ data = []
60
+
61
+ for address, i in addresses
62
+ if address.state && address.state.id
63
+ data.push
64
+ id: i
65
+ firstname: address.firstname,
66
+ lastname: address.lastname,
67
+ company: address.company,
68
+ address1: address.address1,
69
+ address2: address.address2,
70
+ city: address.city,
71
+ zipcode: address.zipcode,
72
+ phone: address.phone,
73
+ country_id: address.country.id,
74
+ country_name: address.country.name,
75
+ state_id: address.state.id,
76
+ state_name: address.state.name
77
+
78
+ return data
79
+
80
+ loadAddresses = (customer_id) ->
81
+ $.get "/admin/search/addresses", { q: customer_id }, (data) ->
82
+ if data.bill_addresses != null && data.bill_addresses.length > 0
83
+ populateAddressBox "billing", data.bill_addresses
84
+ populateFirstTime "bill", data.bill_addresses[0]
85
+ if data.ship_addresses != null && data.ship_addresses.length > 0
86
+ populateAddressBox "shipping", data.ship_addresses
87
+ populateFirstTime "ship", data.ship_addresses[0]
88
+
89
+ populateFirstTime = (address_type, address) ->
90
+ data = [address]
91
+ addressFormat = generateFormat(data)
92
+ populateAddressFields address_type, addressFormat[0]
93
+
94
+ # Modified from update script on the Spree core.
95
+ updateState = (country_id, selected_state_name, selected_state_id, address_type) ->
96
+ $.get Spree.routes.states_search + '?country_id=' + country_id, (data) ->
97
+ states = data.states
98
+ state_select = $("#order_" + address_type + "_address_attributes_state_id")
99
+ state_input = $("#order_" + address_type + "_address_attributes_state_name")
100
+ if states.length > 0
101
+ state_select.html ''
102
+ states_with_blank = [{
103
+ name: '',
104
+ id: ''
105
+ }].concat(states)
106
+ $.each states_with_blank, (pos, state) ->
107
+ opt = $(document.createElement('option'))
108
+ .attr('value', state.id)
109
+ .html(state.name)
110
+ state_select.append(opt)
111
+ state_select.prop('disabled', false).show()
112
+ state_select.select2()
113
+ state_input.hide().prop('disabled', true)
114
+ else
115
+ state_input.prop('disabled', false).show()
116
+ state_select.select2('destroy').hide()
117
+ state_select.select2().select2 "data", { id: selected_state_id, text: selected_state_name }
118
+
119
+ populateAddressFields = (address_type, address_data) ->
120
+ $("#order_" + address_type + "_address_attributes_firstname").val address_data.firstname
121
+ $("#order_" + address_type + "_address_attributes_lastname").val address_data.lastname
122
+ $("#order_" + address_type + "_address_attributes_company").val address_data.company
123
+ $("#order_" + address_type + "_address_attributes_address1").val address_data.address1
124
+ $("#order_" + address_type + "_address_attributes_address2").val address_data.address2
125
+ $("#order_" + address_type + "_address_attributes_city").val address_data.city
126
+ $("#order_" + address_type + "_address_attributes_zipcode").val address_data.zipcode
127
+ $("#order_" + address_type + "_address_attributes_phone").val address_data.phone
128
+ $("#order_" + address_type + "_address_attributes_country_id").select2().select2 "data", { id: address_data.country_id, text: address_data.country_name }
129
+ updateState(address_data.country_id, address_data.state_name, address_data.state_id, address_type)
130
+
131
+ $("#customer_search").change ->
132
+ user_id = $('#user_id').val()
133
+ loadAddresses user_id
134
+
135
+ $("#billing_address_select").change ->
136
+ populateAddressFields "bill", $("#billing_address_select").select2("data")
137
+
138
+ $("#shipping_address_select").change ->
139
+ populateAddressFields "ship", $("#shipping_address_select").select2("data")
@@ -0,0 +1,3 @@
1
+ //= require admin/spree_backend
2
+ //= require_self
3
+ //= require_tree .
@@ -0,0 +1,7 @@
1
+ /*
2
+ *= require admin/spree_backend
3
+ */
4
+
5
+ #s2id_billing_address_select, #s2id_shipping_address_select {
6
+ max-width: 340px;
7
+ }
@@ -0,0 +1,11 @@
1
+ module Spree
2
+ module Admin
3
+ SearchController.class_eval do
4
+ def addresses
5
+ if params[:q]
6
+ @user = Spree::User.find params[:q]
7
+ end
8
+ end
9
+ end
10
+ end
11
+ end
@@ -0,0 +1,29 @@
1
+ Spree::User.class_eval do
2
+
3
+ def available_shipping_addresses(excluding_address = nil)
4
+ available_shipping_addresses = []
5
+ unique_addresses = []
6
+ ship_addresses.each{|address|
7
+ unless (address == excluding_address) || unique_addresses.any?{ |unique_address| unique_address == address }
8
+ available_shipping_addresses << address
9
+ unique_addresses << address
10
+ end
11
+ }
12
+
13
+ available_shipping_addresses.sort_by{ |address| address.id }.reverse.first(3)
14
+ end
15
+
16
+ def available_billing_addresses(excluding_address = nil)
17
+ available_billing_addresses = []
18
+ unique_addresses = []
19
+ bill_addresses.each{ |address|
20
+ unless (address == excluding_address) || unique_addresses.any?{ |unique_address| unique_address == address }
21
+ available_billing_addresses << address
22
+ unique_addresses << address
23
+ end
24
+ }
25
+
26
+ available_billing_addresses.sort_by{ |address| address.id }.reverse.first(3)
27
+ end
28
+
29
+ end
@@ -0,0 +1,8 @@
1
+ <!-- insert_after '[data-hook="bill_address_wrapper"] legend'
2
+ sequence 1
3
+ -->
4
+
5
+ <div class="field billing-row billing_address_selector">
6
+ <label for="billing_address_select"><%= Spree.t(:previous_billing_address) %></label>
7
+ <input type="hidden" class="select2 fullwidth" id="billing_address_select" />
8
+ </div>
@@ -0,0 +1,8 @@
1
+ <!-- insert_after '[data-hook="ship_address_wrapper"] legend'
2
+ sequence 1
3
+ -->
4
+
5
+ <div class="field shipping-row shipping_address_selector">
6
+ <label for="shipping_address_select"><%= Spree.t(:previous_shipping_address) %></label>
7
+ <input type="hidden" class="select2 fullwidth" id="shipping_address_select" />
8
+ </div>
@@ -0,0 +1,32 @@
1
+ object @user
2
+ attributes :id
3
+
4
+ address_fields = [:firstname, :lastname,
5
+ :address1, :address2,
6
+ :city, :zipcode,
7
+ :phone, :state_name,
8
+ :state_id, :country_id,
9
+ :company]
10
+
11
+ child :available_shipping_addresses => :ship_addresses do
12
+ attributes *address_fields
13
+ child :state do
14
+ attributes :name, :id
15
+ end
16
+
17
+ child :country do
18
+ attributes :name, :id
19
+ end
20
+ end
21
+
22
+ child :available_billing_addresses => :bill_addresses do
23
+ attributes :id
24
+ attributes *address_fields
25
+ child :state do
26
+ attributes :name, :id
27
+ end
28
+
29
+ child :country do
30
+ attributes :name, :id
31
+ end
32
+ end
@@ -0,0 +1,4 @@
1
+ en:
2
+ spree:
3
+ previous_billing_address: Previous Billing Addresses
4
+ previous_shipping_address: Previous Shipping Addresses
@@ -0,0 +1,5 @@
1
+ Spree::Core::Engine.routes.draw do
2
+ namespace :admin do
3
+ get '/search/addresses', :to => 'search#addresses', :as => :search_addresses
4
+ end
5
+ end
@@ -0,0 +1,15 @@
1
+ module SpreeAddressPopulator
2
+ module Generators
3
+ class InstallGenerator < Rails::Generators::Base
4
+
5
+ def add_javascripts
6
+ append_file "app/assets/javascripts/admin/all.js", "//= require admin/spree_address_populator\n"
7
+ end
8
+
9
+ def add_stylesheets
10
+ inject_into_file "app/assets/stylesheets/admin/all.css", " *= require admin/spree_address_populator\n", :before => /\*\//, :verbose => true
11
+ end
12
+
13
+ end
14
+ end
15
+ end
@@ -0,0 +1,6 @@
1
+ require 'durable_decorator'
2
+ require 'spree_api'
3
+ require 'spree_backend'
4
+ require 'spree_core'
5
+ require 'spree_frontend'
6
+ require 'spree_address_populator/engine'
@@ -0,0 +1,25 @@
1
+ module SpreeAddressPopulator
2
+ class Engine < Rails::Engine
3
+ require 'spree/core'
4
+ isolate_namespace Spree
5
+ engine_name 'spree_address_populator'
6
+
7
+ config.autoload_paths += %W(#{config.root}/lib)
8
+
9
+ # use rspec for tests
10
+ config.generators do |g|
11
+ g.test_framework :rspec
12
+ end
13
+
14
+ def self.activate
15
+ Dir.glob(File.join(File.dirname(__FILE__), '../../app/**/*_decorator*.rb')) do |c|
16
+ Rails.configuration.cache_classes ? require(c) : load(c)
17
+ end
18
+ Dir.glob(File.join(File.dirname(__FILE__), "../../app/models/spree/calculator/*.rb")) do |c|
19
+ Rails.env.production? ? require(c) : load(c)
20
+ end
21
+ end
22
+
23
+ config.to_prepare &method(:activate).to_proc
24
+ end
25
+ end
@@ -0,0 +1,7 @@
1
+ # This command will automatically be run when you run "rails" with Rails 3 gems installed from the root of your application.
2
+
3
+ ENGINE_ROOT = File.expand_path('../..', __FILE__)
4
+ ENGINE_PATH = File.expand_path('../../lib/spree_address_populator/engine', __FILE__)
5
+
6
+ require 'rails/all'
7
+ require 'rails/engine/commands'
@@ -0,0 +1,35 @@
1
+ # encoding: UTF-8
2
+ Gem::Specification.new do |s|
3
+ s.platform = Gem::Platform::RUBY
4
+ s.name = 'spree_address_populator'
5
+ s.version = '1.0'
6
+ s.summary = 'Spree Address Populator Extension'
7
+ s.description = 'Adds an address selector to admin section'
8
+ s.required_ruby_version = '>= 1.8.7'
9
+
10
+ s.author = 'Jonathan Tapia'
11
+ s.email = 'jonathan.tapia@crowdint.com'
12
+ s.homepage = 'https://github.com/jtapia/spree_address_populator'
13
+
14
+ s.files = `git ls-files`.split("\n")
15
+ s.test_files = `git ls-files -- {test,spec,features}/*`.split("\n")
16
+
17
+ s.require_path = 'lib'
18
+ s.required_ruby_version = '>= 1.9.3'
19
+ s.requirements << 'none'
20
+
21
+ s.add_dependency 'spree_core', '>= 2.0'
22
+ s.add_dependency 'durable_decorator', '~> 0.2.0'
23
+
24
+ s.add_development_dependency 'capybara', '~> 2.0'
25
+ s.add_development_dependency 'coffee-rails'
26
+ s.add_development_dependency 'database_cleaner', '~> 1.0.1'
27
+ s.add_development_dependency 'factory_girl', '~> 3.6.2'
28
+ s.add_development_dependency 'ffaker'
29
+ s.add_development_dependency 'rspec-rails', '~> 2.13'
30
+ s.add_development_dependency 'sass-rails'
31
+ s.add_development_dependency 'selenium-webdriver'
32
+ s.add_development_dependency 'shoulda-matchers', '>= 1.5.4'
33
+ s.add_development_dependency 'simplecov'
34
+ s.add_development_dependency 'sqlite3'
35
+ end
metadata ADDED
@@ -0,0 +1,246 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: spree_address_populator
3
+ version: !ruby/object:Gem::Version
4
+ version: '1.0'
5
+ platform: ruby
6
+ authors:
7
+ - Jonathan Tapia
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2014-12-05 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: spree_core
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - '>='
18
+ - !ruby/object:Gem::Version
19
+ version: '2.0'
20
+ type: :runtime
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - '>='
25
+ - !ruby/object:Gem::Version
26
+ version: '2.0'
27
+ - !ruby/object:Gem::Dependency
28
+ name: durable_decorator
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - ~>
32
+ - !ruby/object:Gem::Version
33
+ version: 0.2.0
34
+ type: :runtime
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - ~>
39
+ - !ruby/object:Gem::Version
40
+ version: 0.2.0
41
+ - !ruby/object:Gem::Dependency
42
+ name: capybara
43
+ requirement: !ruby/object:Gem::Requirement
44
+ requirements:
45
+ - - ~>
46
+ - !ruby/object:Gem::Version
47
+ version: '2.0'
48
+ type: :development
49
+ prerelease: false
50
+ version_requirements: !ruby/object:Gem::Requirement
51
+ requirements:
52
+ - - ~>
53
+ - !ruby/object:Gem::Version
54
+ version: '2.0'
55
+ - !ruby/object:Gem::Dependency
56
+ name: coffee-rails
57
+ requirement: !ruby/object:Gem::Requirement
58
+ requirements:
59
+ - - '>='
60
+ - !ruby/object:Gem::Version
61
+ version: '0'
62
+ type: :development
63
+ prerelease: false
64
+ version_requirements: !ruby/object:Gem::Requirement
65
+ requirements:
66
+ - - '>='
67
+ - !ruby/object:Gem::Version
68
+ version: '0'
69
+ - !ruby/object:Gem::Dependency
70
+ name: database_cleaner
71
+ requirement: !ruby/object:Gem::Requirement
72
+ requirements:
73
+ - - ~>
74
+ - !ruby/object:Gem::Version
75
+ version: 1.0.1
76
+ type: :development
77
+ prerelease: false
78
+ version_requirements: !ruby/object:Gem::Requirement
79
+ requirements:
80
+ - - ~>
81
+ - !ruby/object:Gem::Version
82
+ version: 1.0.1
83
+ - !ruby/object:Gem::Dependency
84
+ name: factory_girl
85
+ requirement: !ruby/object:Gem::Requirement
86
+ requirements:
87
+ - - ~>
88
+ - !ruby/object:Gem::Version
89
+ version: 3.6.2
90
+ type: :development
91
+ prerelease: false
92
+ version_requirements: !ruby/object:Gem::Requirement
93
+ requirements:
94
+ - - ~>
95
+ - !ruby/object:Gem::Version
96
+ version: 3.6.2
97
+ - !ruby/object:Gem::Dependency
98
+ name: ffaker
99
+ requirement: !ruby/object:Gem::Requirement
100
+ requirements:
101
+ - - '>='
102
+ - !ruby/object:Gem::Version
103
+ version: '0'
104
+ type: :development
105
+ prerelease: false
106
+ version_requirements: !ruby/object:Gem::Requirement
107
+ requirements:
108
+ - - '>='
109
+ - !ruby/object:Gem::Version
110
+ version: '0'
111
+ - !ruby/object:Gem::Dependency
112
+ name: rspec-rails
113
+ requirement: !ruby/object:Gem::Requirement
114
+ requirements:
115
+ - - ~>
116
+ - !ruby/object:Gem::Version
117
+ version: '2.13'
118
+ type: :development
119
+ prerelease: false
120
+ version_requirements: !ruby/object:Gem::Requirement
121
+ requirements:
122
+ - - ~>
123
+ - !ruby/object:Gem::Version
124
+ version: '2.13'
125
+ - !ruby/object:Gem::Dependency
126
+ name: sass-rails
127
+ requirement: !ruby/object:Gem::Requirement
128
+ requirements:
129
+ - - '>='
130
+ - !ruby/object:Gem::Version
131
+ version: '0'
132
+ type: :development
133
+ prerelease: false
134
+ version_requirements: !ruby/object:Gem::Requirement
135
+ requirements:
136
+ - - '>='
137
+ - !ruby/object:Gem::Version
138
+ version: '0'
139
+ - !ruby/object:Gem::Dependency
140
+ name: selenium-webdriver
141
+ requirement: !ruby/object:Gem::Requirement
142
+ requirements:
143
+ - - '>='
144
+ - !ruby/object:Gem::Version
145
+ version: '0'
146
+ type: :development
147
+ prerelease: false
148
+ version_requirements: !ruby/object:Gem::Requirement
149
+ requirements:
150
+ - - '>='
151
+ - !ruby/object:Gem::Version
152
+ version: '0'
153
+ - !ruby/object:Gem::Dependency
154
+ name: shoulda-matchers
155
+ requirement: !ruby/object:Gem::Requirement
156
+ requirements:
157
+ - - '>='
158
+ - !ruby/object:Gem::Version
159
+ version: 1.5.4
160
+ type: :development
161
+ prerelease: false
162
+ version_requirements: !ruby/object:Gem::Requirement
163
+ requirements:
164
+ - - '>='
165
+ - !ruby/object:Gem::Version
166
+ version: 1.5.4
167
+ - !ruby/object:Gem::Dependency
168
+ name: simplecov
169
+ requirement: !ruby/object:Gem::Requirement
170
+ requirements:
171
+ - - '>='
172
+ - !ruby/object:Gem::Version
173
+ version: '0'
174
+ type: :development
175
+ prerelease: false
176
+ version_requirements: !ruby/object:Gem::Requirement
177
+ requirements:
178
+ - - '>='
179
+ - !ruby/object:Gem::Version
180
+ version: '0'
181
+ - !ruby/object:Gem::Dependency
182
+ name: sqlite3
183
+ requirement: !ruby/object:Gem::Requirement
184
+ requirements:
185
+ - - '>='
186
+ - !ruby/object:Gem::Version
187
+ version: '0'
188
+ type: :development
189
+ prerelease: false
190
+ version_requirements: !ruby/object:Gem::Requirement
191
+ requirements:
192
+ - - '>='
193
+ - !ruby/object:Gem::Version
194
+ version: '0'
195
+ description: Adds an address selector to admin section
196
+ email: jonathan.tapia@crowdint.com
197
+ executables: []
198
+ extensions: []
199
+ extra_rdoc_files: []
200
+ files:
201
+ - Gemfile
202
+ - Gemfile.lock
203
+ - LICENSE
204
+ - README.md
205
+ - Rakefile
206
+ - Versionfile
207
+ - app/assets/javascripts/admin/load_order_addresses.js.coffee
208
+ - app/assets/javascripts/admin/spree_address_populator.js
209
+ - app/assets/stylesheets/admin/spree_address_populator.css
210
+ - app/controllers/spree/admin/search_controller_decorator.rb
211
+ - app/models/spree/user_decorator.rb
212
+ - app/overrides/spree/admin/orders/customer_details/_form/add_billing_address_dropdown.html.erb.deface
213
+ - app/overrides/spree/admin/orders/customer_details/_form/add_shipping_address_dropdown.html.erb.deface
214
+ - app/views/spree/admin/search/addresses.rabl
215
+ - config/locales/en.yml
216
+ - config/routes.rb
217
+ - lib/generators/spree_address_populator/install_generator.rb
218
+ - lib/spree_address_populator.rb
219
+ - lib/spree_address_populator/engine.rb
220
+ - script/rails.rb
221
+ - spree_address_populator.gemspec
222
+ homepage: https://github.com/jtapia/spree_address_populator
223
+ licenses: []
224
+ metadata: {}
225
+ post_install_message:
226
+ rdoc_options: []
227
+ require_paths:
228
+ - lib
229
+ required_ruby_version: !ruby/object:Gem::Requirement
230
+ requirements:
231
+ - - '>='
232
+ - !ruby/object:Gem::Version
233
+ version: 1.9.3
234
+ required_rubygems_version: !ruby/object:Gem::Requirement
235
+ requirements:
236
+ - - '>='
237
+ - !ruby/object:Gem::Version
238
+ version: '0'
239
+ requirements:
240
+ - none
241
+ rubyforge_project:
242
+ rubygems_version: 2.0.14
243
+ signing_key:
244
+ specification_version: 4
245
+ summary: Spree Address Populator Extension
246
+ test_files: []