spree_address_book 0.70.0 → 1.0.0
Sign up to get free protection for your applications and to get access to all the features.
- data/.gitignore +1 -2
- data/.rspec +3 -0
- data/Gemfile +6 -0
- data/Gemfile.lock +228 -0
- data/Rakefile +10 -57
- data/Versionfile +1 -0
- data/app/assets/javascripts/store/spree_address_book.js +53 -0
- data/app/assets/stylesheets/store/spree_address_book.scss +12 -0
- data/app/controllers/{addresses_controller.rb → spree/addresses_controller.rb} +1 -1
- data/app/controllers/{checkout_controller_decorator.rb → spree/checkout_controller_decorator.rb} +4 -2
- data/app/helpers/checkout_helper_decorator.rb +4 -4
- data/app/models/address_decorator.rb +4 -4
- data/app/models/order_decorator.rb +7 -7
- data/{lib → app/models/spree}/address_ability.rb +2 -2
- data/app/models/spree/address_book_configuration.rb +8 -0
- data/app/models/user_decorator.rb +1 -1
- data/app/overrides/views_decorator.rb +2 -2
- data/app/views/spree/addresses/_form.html.erb +13 -0
- data/app/views/{addresses → spree/addresses}/destroy.js.erb +0 -0
- data/app/views/{addresses → spree/addresses}/edit.html.erb +1 -1
- data/app/views/spree/checkout/_address.html.erb +45 -0
- data/app/views/spree/users/_addresses.html.erb +22 -0
- data/config/routes.rb +1 -1
- data/db/migrate/20110302102208_add_user_id_and_deleted_at_to_addresses.rb +8 -2
- data/features/support/env.rb +3 -22
- data/lib/generators/spree_address_book/install_generator.rb +8 -0
- data/lib/spree_address_book.rb +17 -11
- data/spec/controllers/spree/checkout_controller_spec.rb +52 -0
- data/spec/models/address_spec.rb +2 -2
- data/spec/models/order_spec.rb +21 -0
- data/spec/spec_helper.rb +15 -10
- data/spree_address_book.gemspec +8 -3
- metadata +85 -20
- data/app/assets/javascripts/store/checkout.js +0 -73
- data/app/views/addresses/_form.html.erb +0 -15
- data/app/views/checkout/_address.html.erb +0 -85
- data/app/views/users/_addresses.html.erb +0 -20
data/spree_address_book.gemspec
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
Gem::Specification.new do |s|
|
2
2
|
s.platform = Gem::Platform::RUBY
|
3
3
|
s.name = 'spree_address_book'
|
4
|
-
s.version = '0.
|
4
|
+
s.version = '1.0.0'
|
5
5
|
s.summary = 'Adds address book for users to Spree'
|
6
6
|
#s.description = 'Add (optional) gem description here'
|
7
7
|
s.required_ruby_version = '>= 1.8.7'
|
@@ -16,6 +16,11 @@ Gem::Specification.new do |s|
|
|
16
16
|
s.require_path = 'lib'
|
17
17
|
s.requirements << 'none'
|
18
18
|
|
19
|
-
s.add_dependency('spree_core', '~> 0.
|
20
|
-
s.add_dependency('spree_auth', '~> 0.
|
19
|
+
s.add_dependency('spree_core', '~> 1.0.0')
|
20
|
+
s.add_dependency('spree_auth', '~> 1.0.0')
|
21
|
+
|
22
|
+
s.add_development_dependency('rspec-rails', '~> 2.7')
|
23
|
+
s.add_development_dependency('sqlite3')
|
24
|
+
s.add_development_dependency('capybara')
|
25
|
+
s.add_development_dependency('factory_girl', '~> 2.6')
|
21
26
|
end
|
metadata
CHANGED
@@ -1,13 +1,13 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: spree_address_book
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
hash:
|
4
|
+
hash: 23
|
5
5
|
prerelease:
|
6
6
|
segments:
|
7
|
+
- 1
|
7
8
|
- 0
|
8
|
-
- 70
|
9
9
|
- 0
|
10
|
-
version: 0.
|
10
|
+
version: 1.0.0
|
11
11
|
platform: ruby
|
12
12
|
authors:
|
13
13
|
- Roman Smirnov
|
@@ -15,7 +15,7 @@ autorequire:
|
|
15
15
|
bindir: bin
|
16
16
|
cert_chain: []
|
17
17
|
|
18
|
-
date: 2012-
|
18
|
+
date: 2012-06-16 00:00:00 Z
|
19
19
|
dependencies:
|
20
20
|
- !ruby/object:Gem::Dependency
|
21
21
|
name: spree_core
|
@@ -25,12 +25,12 @@ dependencies:
|
|
25
25
|
requirements:
|
26
26
|
- - ~>
|
27
27
|
- !ruby/object:Gem::Version
|
28
|
-
hash:
|
28
|
+
hash: 23
|
29
29
|
segments:
|
30
|
+
- 1
|
30
31
|
- 0
|
31
|
-
- 70
|
32
32
|
- 0
|
33
|
-
version: 0.
|
33
|
+
version: 1.0.0
|
34
34
|
type: :runtime
|
35
35
|
version_requirements: *id001
|
36
36
|
- !ruby/object:Gem::Dependency
|
@@ -41,14 +41,72 @@ dependencies:
|
|
41
41
|
requirements:
|
42
42
|
- - ~>
|
43
43
|
- !ruby/object:Gem::Version
|
44
|
-
hash:
|
44
|
+
hash: 23
|
45
45
|
segments:
|
46
|
+
- 1
|
46
47
|
- 0
|
47
|
-
- 70
|
48
48
|
- 0
|
49
|
-
version: 0.
|
49
|
+
version: 1.0.0
|
50
50
|
type: :runtime
|
51
51
|
version_requirements: *id002
|
52
|
+
- !ruby/object:Gem::Dependency
|
53
|
+
name: rspec-rails
|
54
|
+
prerelease: false
|
55
|
+
requirement: &id003 !ruby/object:Gem::Requirement
|
56
|
+
none: false
|
57
|
+
requirements:
|
58
|
+
- - ~>
|
59
|
+
- !ruby/object:Gem::Version
|
60
|
+
hash: 13
|
61
|
+
segments:
|
62
|
+
- 2
|
63
|
+
- 7
|
64
|
+
version: "2.7"
|
65
|
+
type: :development
|
66
|
+
version_requirements: *id003
|
67
|
+
- !ruby/object:Gem::Dependency
|
68
|
+
name: sqlite3
|
69
|
+
prerelease: false
|
70
|
+
requirement: &id004 !ruby/object:Gem::Requirement
|
71
|
+
none: false
|
72
|
+
requirements:
|
73
|
+
- - ">="
|
74
|
+
- !ruby/object:Gem::Version
|
75
|
+
hash: 3
|
76
|
+
segments:
|
77
|
+
- 0
|
78
|
+
version: "0"
|
79
|
+
type: :development
|
80
|
+
version_requirements: *id004
|
81
|
+
- !ruby/object:Gem::Dependency
|
82
|
+
name: capybara
|
83
|
+
prerelease: false
|
84
|
+
requirement: &id005 !ruby/object:Gem::Requirement
|
85
|
+
none: false
|
86
|
+
requirements:
|
87
|
+
- - ">="
|
88
|
+
- !ruby/object:Gem::Version
|
89
|
+
hash: 3
|
90
|
+
segments:
|
91
|
+
- 0
|
92
|
+
version: "0"
|
93
|
+
type: :development
|
94
|
+
version_requirements: *id005
|
95
|
+
- !ruby/object:Gem::Dependency
|
96
|
+
name: factory_girl
|
97
|
+
prerelease: false
|
98
|
+
requirement: &id006 !ruby/object:Gem::Requirement
|
99
|
+
none: false
|
100
|
+
requirements:
|
101
|
+
- - ~>
|
102
|
+
- !ruby/object:Gem::Version
|
103
|
+
hash: 15
|
104
|
+
segments:
|
105
|
+
- 2
|
106
|
+
- 6
|
107
|
+
version: "2.6"
|
108
|
+
type: :development
|
109
|
+
version_requirements: *id006
|
52
110
|
description:
|
53
111
|
email: roman@railsdog.com
|
54
112
|
executables: []
|
@@ -59,23 +117,29 @@ extra_rdoc_files: []
|
|
59
117
|
|
60
118
|
files:
|
61
119
|
- .gitignore
|
120
|
+
- .rspec
|
121
|
+
- Gemfile
|
122
|
+
- Gemfile.lock
|
62
123
|
- LICENSE
|
63
124
|
- README.md
|
64
125
|
- Rakefile
|
65
126
|
- Versionfile
|
66
|
-
- app/assets/javascripts/store/
|
67
|
-
- app/
|
68
|
-
- app/controllers/
|
127
|
+
- app/assets/javascripts/store/spree_address_book.js
|
128
|
+
- app/assets/stylesheets/store/spree_address_book.scss
|
129
|
+
- app/controllers/spree/addresses_controller.rb
|
130
|
+
- app/controllers/spree/checkout_controller_decorator.rb
|
69
131
|
- app/helpers/checkout_helper_decorator.rb
|
70
132
|
- app/models/address_decorator.rb
|
71
133
|
- app/models/order_decorator.rb
|
134
|
+
- app/models/spree/address_ability.rb
|
135
|
+
- app/models/spree/address_book_configuration.rb
|
72
136
|
- app/models/user_decorator.rb
|
73
137
|
- app/overrides/views_decorator.rb
|
74
|
-
- app/views/addresses/_form.html.erb
|
75
|
-
- app/views/addresses/destroy.js.erb
|
76
|
-
- app/views/addresses/edit.html.erb
|
77
|
-
- app/views/checkout/_address.html.erb
|
78
|
-
- app/views/users/_addresses.html.erb
|
138
|
+
- app/views/spree/addresses/_form.html.erb
|
139
|
+
- app/views/spree/addresses/destroy.js.erb
|
140
|
+
- app/views/spree/addresses/edit.html.erb
|
141
|
+
- app/views/spree/checkout/_address.html.erb
|
142
|
+
- app/views/spree/users/_addresses.html.erb
|
79
143
|
- config/initializers/address_fields.rb
|
80
144
|
- config/locales/en.yml
|
81
145
|
- config/locales/ru.yml
|
@@ -85,10 +149,11 @@ files:
|
|
85
149
|
- features/step_definitions/address_book_steps.rb
|
86
150
|
- features/support/env.rb
|
87
151
|
- features/support/paths.rb
|
88
|
-
- lib/address_ability.rb
|
89
152
|
- lib/generators/spree_address_book/install_generator.rb
|
90
153
|
- lib/spree_address_book.rb
|
154
|
+
- spec/controllers/spree/checkout_controller_spec.rb
|
91
155
|
- spec/models/address_spec.rb
|
156
|
+
- spec/models/order_spec.rb
|
92
157
|
- spec/spec_helper.rb
|
93
158
|
- spree_address_book.gemspec
|
94
159
|
homepage: http://github.com/romul/spree_address_book
|
@@ -122,7 +187,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
122
187
|
requirements:
|
123
188
|
- none
|
124
189
|
rubyforge_project:
|
125
|
-
rubygems_version: 1.8.
|
190
|
+
rubygems_version: 1.8.24
|
126
191
|
signing_key:
|
127
192
|
specification_version: 3
|
128
193
|
summary: Adds address book for users to Spree
|
@@ -1,73 +0,0 @@
|
|
1
|
-
(function($){
|
2
|
-
$(document).ready(function(){
|
3
|
-
|
4
|
-
$('#checkout_form_address').validate();
|
5
|
-
|
6
|
-
var get_states = function(region){
|
7
|
-
var country = $('p#' + region + 'country' + ' span#' + region + 'country :only-child').val();
|
8
|
-
return state_mapper[country];
|
9
|
-
}
|
10
|
-
|
11
|
-
var update_state = function(region) {
|
12
|
-
var states = get_states(region);
|
13
|
-
|
14
|
-
var state_select = $('span#' + region + 'state select');
|
15
|
-
var state_input = $('span#' + region + 'state input');
|
16
|
-
|
17
|
-
if(states) {
|
18
|
-
var selected = state_select.val();
|
19
|
-
state_select.html('');
|
20
|
-
var states_with_blank = [["",""]].concat(states);
|
21
|
-
$.each(states_with_blank, function(pos,id_nm) {
|
22
|
-
var opt = $(document.createElement('option'))
|
23
|
-
.attr('value', id_nm[0])
|
24
|
-
.html(id_nm[1]);
|
25
|
-
if(selected==id_nm[0]){
|
26
|
-
opt.attr('selected', 'selected');
|
27
|
-
}
|
28
|
-
state_select.append(opt);
|
29
|
-
});
|
30
|
-
state_select.removeAttr('disabled').show();
|
31
|
-
state_input.hide().attr('disabled', 'disabled');
|
32
|
-
|
33
|
-
} else {
|
34
|
-
state_input.removeAttr('disabled').show();
|
35
|
-
state_select.hide().attr('disabled', 'disabled');
|
36
|
-
}
|
37
|
-
|
38
|
-
};
|
39
|
-
|
40
|
-
// Show fields for the selected payment method
|
41
|
-
$("input[type='radio'][name='order[payments_attributes][][payment_method_id]']").click(function(){
|
42
|
-
$('#payment-methods li').hide();
|
43
|
-
if(this.checked){ $('#payment_method_'+this.value).show(); }
|
44
|
-
}).triggerHandler('click');
|
45
|
-
|
46
|
-
$('p#bcountry span#bcountry select').change(function() { update_state('b'); });
|
47
|
-
$('p#scountry span#scountry select').change(function() { update_state('s'); });
|
48
|
-
update_state('b');
|
49
|
-
update_state('s');
|
50
|
-
|
51
|
-
$('input#order_use_billing').click(function() {
|
52
|
-
if($(this).is(':checked')) {
|
53
|
-
$("#shipping .inner input").attr('disabled', 'disabled');
|
54
|
-
$("#shipping .inner select").attr('disabled', 'disabled');
|
55
|
-
$("#shipping .inner").fadeOut();
|
56
|
-
$("#shipping .select_address").fadeOut();
|
57
|
-
} else {
|
58
|
-
if ($("input[name='order[ship_address_id]']:checked").val() == '0') {
|
59
|
-
$("#shipping .inner input").removeAttr('disabled');
|
60
|
-
$("#shipping .inner select").removeAttr('disabled');
|
61
|
-
$("#shipping .inner").fadeIn();
|
62
|
-
}
|
63
|
-
$("#shipping .select_address").fadeIn();
|
64
|
-
}
|
65
|
-
}).triggerHandler('click');
|
66
|
-
|
67
|
-
$('form.edit_checkout').submit(function() {
|
68
|
-
$(this).find(':submit, :image').attr('disabled', true).removeClass('primary').addClass('disabled');
|
69
|
-
});
|
70
|
-
|
71
|
-
|
72
|
-
});
|
73
|
-
})(jQuery);
|
@@ -1,15 +0,0 @@
|
|
1
|
-
<% ADDRESS_FIELDS.each do |field| %>
|
2
|
-
<p id="<%= [address_name, field].join('_') %>" class="field">
|
3
|
-
<% if field == "country" %>
|
4
|
-
<%= address_form.label :country_id, t(field, :scope => [:activerecord, :attributes, :address]) %><span class="req">*</span><br />
|
5
|
-
<span><%= address_form.collection_select :country_id, available_countries, :id, :name, {}, {:class => 'required'} %></span>
|
6
|
-
<% elsif field == "state" && Spree::Config[:address_requires_state] %>
|
7
|
-
<%= address_field(address_form, :state, address_name) { address_state(address_form, address.country) } %>
|
8
|
-
<% else %>
|
9
|
-
<%= address_field(address_form, field.to_sym, address_name) %>
|
10
|
-
<% end %>
|
11
|
-
</p>
|
12
|
-
<% end %>
|
13
|
-
<% if Spree::Config["alternative_#{address_name}_phone"] %>
|
14
|
-
<%= address_field(address_form, :alternative_phone, address_name) %>
|
15
|
-
<% end %>
|
@@ -1,85 +0,0 @@
|
|
1
|
-
<% @addresses = current_user ? current_user.addresses : [] %>
|
2
|
-
<style>
|
3
|
-
div.inner input[type=text], div.inner select { width: 80%; }
|
4
|
-
.hidden { display: none; }
|
5
|
-
div#checkout #checkout_form_address #billing .select_address label { float:none; }
|
6
|
-
div#checkout #checkout_form_address #shipping .select_address label { float:none; }
|
7
|
-
div#checkout #checkout_form_address #billing input[type=radio] { width: auto; }
|
8
|
-
div#checkout #checkout_form_address #shipping input[type=radio] { width: auto; }
|
9
|
-
</style>
|
10
|
-
|
11
|
-
<% ['billing', 'shipping'].each do |address_type|
|
12
|
-
next if address_type == 'billing' && Spree::Config[:disable_bill_address]
|
13
|
-
address_name = "#{address_type[0...4]}_address" %>
|
14
|
-
<fieldset id="<%= address_type %>">
|
15
|
-
<legend><%= t(address_type + "_address")%></legend>
|
16
|
-
<% if address_type == 'shipping' && !Spree::Config[:disable_bill_address] %>
|
17
|
-
<p class="field checkbox">
|
18
|
-
<label for="order_use_billing" id="use_billing">
|
19
|
-
<%= check_box_tag 'order[use_billing]', '1', (!(@order.bill_address.empty? && @order.ship_address.empty?) && @order.bill_address.eql?(@order.ship_address)) %> <%= t("use_billing_address") %>
|
20
|
-
</label>
|
21
|
-
</p>
|
22
|
-
<% end %>
|
23
|
-
<div class="select_address">
|
24
|
-
<p class="field">
|
25
|
-
<% if @addresses.present? %>
|
26
|
-
<% @addresses.each_with_index do |address, idx| %>
|
27
|
-
<span id="<%= [address_type, dom_id(address)].join('_') %>">
|
28
|
-
<label><%= form.radio_button "#{address_name}_id", address.id, :checked => (idx == 0) %> <%= address %></label> <%= link_to t(:edit), edit_address_path(address) %><br />
|
29
|
-
</span>
|
30
|
-
<% end %>
|
31
|
-
<label><%= form.radio_button "#{address_name}_id", 0 %> <%= t('other_address') %></label>
|
32
|
-
<% end %>
|
33
|
-
</p>
|
34
|
-
</div>
|
35
|
-
<%= form.fields_for address_name do |address_form| %>
|
36
|
-
<div class="inner">
|
37
|
-
<p class="field"> </p>
|
38
|
-
<%= render :partial => 'addresses/form', :locals => {
|
39
|
-
:address_name => address_name,
|
40
|
-
:address_form => address_form,
|
41
|
-
:address => Address.default
|
42
|
-
} %>
|
43
|
-
</div>
|
44
|
-
<% end %>
|
45
|
-
</fieldset>
|
46
|
-
<% end %>
|
47
|
-
|
48
|
-
<hr class="space" />
|
49
|
-
<div class="form-buttons">
|
50
|
-
<input type="submit" class="continue button primary" value="<%=t("save_and_continue") %>" />
|
51
|
-
</div>
|
52
|
-
<% if @addresses.present? %>
|
53
|
-
<%= javascript_tag do %>
|
54
|
-
$(document).ready(function(){
|
55
|
-
$(".inner input").attr('disabled', 'disabled');
|
56
|
-
$(".inner select").attr('disabled', 'disabled');
|
57
|
-
$(".inner").hide();
|
58
|
-
|
59
|
-
$("input[name='order[bill_address_id]']:radio").change(function(){
|
60
|
-
if ($("input[name='order[bill_address_id]']:checked").val() == '0') {
|
61
|
-
$("#billing .inner input").removeAttr('disabled');
|
62
|
-
$("#billing .inner select").removeAttr('disabled');
|
63
|
-
$("#billing .inner").fadeIn();
|
64
|
-
} else {
|
65
|
-
$("#billing .inner input").attr('disabled', 'disabled');
|
66
|
-
$("#billing .inner select").attr('disabled', 'disabled');
|
67
|
-
$("#billing .inner").fadeOut();
|
68
|
-
}
|
69
|
-
});
|
70
|
-
|
71
|
-
$("input[name='order[ship_address_id]']:radio").change(function(){
|
72
|
-
if ($("input[name='order[ship_address_id]']:checked").val() == '0') {
|
73
|
-
$("#shipping .inner input").removeAttr('disabled');
|
74
|
-
$("#shipping .inner select").removeAttr('disabled');
|
75
|
-
$("#shipping .inner").fadeIn();
|
76
|
-
} else {
|
77
|
-
$("#shipping .inner input").attr('disabled', 'disabled');
|
78
|
-
$("#shipping .inner select").attr('disabled', 'disabled');
|
79
|
-
$("#shipping .inner").fadeOut();
|
80
|
-
}
|
81
|
-
});
|
82
|
-
|
83
|
-
});
|
84
|
-
<% end %>
|
85
|
-
<% end %>
|
@@ -1,20 +0,0 @@
|
|
1
|
-
<% if current_user.addresses.present? %>
|
2
|
-
<h2><%= Address.model_name.human(:count => 2) %></h2>
|
3
|
-
<table class="order-summary" width="545">
|
4
|
-
<thead>
|
5
|
-
<tr>
|
6
|
-
<th><%= Address.model_name.human %></th>
|
7
|
-
<th></th>
|
8
|
-
</tr>
|
9
|
-
</thead>
|
10
|
-
<tbody>
|
11
|
-
<% current_user.addresses.each do |address| %>
|
12
|
-
<tr class="<%= cycle('even', 'odd') %>">
|
13
|
-
<td><%= address %></td>
|
14
|
-
<td><%= link_to t(:edit), edit_address_path(address) %></td>
|
15
|
-
<td><%= link_to t(:remove), address_path(address), :method => :delete, :confirm => t(:are_you_sure) %></td>
|
16
|
-
</tr>
|
17
|
-
<% end %>
|
18
|
-
</tbody>
|
19
|
-
</table>
|
20
|
-
<% end %>
|