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.
Files changed (37) hide show
  1. data/.gitignore +1 -2
  2. data/.rspec +3 -0
  3. data/Gemfile +6 -0
  4. data/Gemfile.lock +228 -0
  5. data/Rakefile +10 -57
  6. data/Versionfile +1 -0
  7. data/app/assets/javascripts/store/spree_address_book.js +53 -0
  8. data/app/assets/stylesheets/store/spree_address_book.scss +12 -0
  9. data/app/controllers/{addresses_controller.rb → spree/addresses_controller.rb} +1 -1
  10. data/app/controllers/{checkout_controller_decorator.rb → spree/checkout_controller_decorator.rb} +4 -2
  11. data/app/helpers/checkout_helper_decorator.rb +4 -4
  12. data/app/models/address_decorator.rb +4 -4
  13. data/app/models/order_decorator.rb +7 -7
  14. data/{lib → app/models/spree}/address_ability.rb +2 -2
  15. data/app/models/spree/address_book_configuration.rb +8 -0
  16. data/app/models/user_decorator.rb +1 -1
  17. data/app/overrides/views_decorator.rb +2 -2
  18. data/app/views/spree/addresses/_form.html.erb +13 -0
  19. data/app/views/{addresses → spree/addresses}/destroy.js.erb +0 -0
  20. data/app/views/{addresses → spree/addresses}/edit.html.erb +1 -1
  21. data/app/views/spree/checkout/_address.html.erb +45 -0
  22. data/app/views/spree/users/_addresses.html.erb +22 -0
  23. data/config/routes.rb +1 -1
  24. data/db/migrate/20110302102208_add_user_id_and_deleted_at_to_addresses.rb +8 -2
  25. data/features/support/env.rb +3 -22
  26. data/lib/generators/spree_address_book/install_generator.rb +8 -0
  27. data/lib/spree_address_book.rb +17 -11
  28. data/spec/controllers/spree/checkout_controller_spec.rb +52 -0
  29. data/spec/models/address_spec.rb +2 -2
  30. data/spec/models/order_spec.rb +21 -0
  31. data/spec/spec_helper.rb +15 -10
  32. data/spree_address_book.gemspec +8 -3
  33. metadata +85 -20
  34. data/app/assets/javascripts/store/checkout.js +0 -73
  35. data/app/views/addresses/_form.html.erb +0 -15
  36. data/app/views/checkout/_address.html.erb +0 -85
  37. data/app/views/users/_addresses.html.erb +0 -20
data/.gitignore CHANGED
@@ -8,5 +8,4 @@ tmp
8
8
  nbproject
9
9
  *.swp
10
10
  *.bak
11
- spec/test_app
12
- Gemfile
11
+ spec/dummy
data/.rspec ADDED
@@ -0,0 +1,3 @@
1
+ --color
2
+ --format
3
+ progress
data/Gemfile ADDED
@@ -0,0 +1,6 @@
1
+ source "http://rubygems.org"
2
+
3
+ gemspec
4
+
5
+ gem 'spree', '~> 1.0.0'
6
+ gem 'sqlite3'
data/Gemfile.lock ADDED
@@ -0,0 +1,228 @@
1
+ PATH
2
+ remote: .
3
+ specs:
4
+ spree_address_book (1.0.0.rc)
5
+ spree_auth (~> 1.0.0)
6
+ spree_core (~> 1.0.0)
7
+
8
+ GEM
9
+ remote: http://rubygems.org/
10
+ specs:
11
+ actionmailer (3.1.4)
12
+ actionpack (= 3.1.4)
13
+ mail (~> 2.3.0)
14
+ actionpack (3.1.4)
15
+ activemodel (= 3.1.4)
16
+ activesupport (= 3.1.4)
17
+ builder (~> 3.0.0)
18
+ erubis (~> 2.7.0)
19
+ i18n (~> 0.6)
20
+ rack (~> 1.3.6)
21
+ rack-cache (~> 1.1)
22
+ rack-mount (~> 0.8.2)
23
+ rack-test (~> 0.6.1)
24
+ sprockets (~> 2.0.3)
25
+ active_utils (1.0.3)
26
+ activesupport (>= 2.3.11)
27
+ i18n
28
+ activemerchant (1.20.1)
29
+ active_utils (>= 1.0.1)
30
+ activesupport (>= 2.3.11)
31
+ braintree (>= 2.0.0)
32
+ builder (>= 2.0.0)
33
+ i18n
34
+ json (>= 1.5.1)
35
+ money (<= 3.7.1)
36
+ activemodel (3.1.4)
37
+ activesupport (= 3.1.4)
38
+ builder (~> 3.0.0)
39
+ i18n (~> 0.6)
40
+ activerecord (3.1.4)
41
+ activemodel (= 3.1.4)
42
+ activesupport (= 3.1.4)
43
+ arel (~> 2.2.3)
44
+ tzinfo (~> 0.3.29)
45
+ activeresource (3.1.4)
46
+ activemodel (= 3.1.4)
47
+ activesupport (= 3.1.4)
48
+ activesupport (3.1.4)
49
+ multi_json (~> 1.0)
50
+ acts_as_list (0.1.4)
51
+ arel (2.2.3)
52
+ bcrypt-ruby (3.0.1)
53
+ braintree (2.15.0)
54
+ builder (>= 2.0.0)
55
+ builder (3.0.0)
56
+ cancan (1.6.7)
57
+ capybara (1.1.2)
58
+ mime-types (>= 1.16)
59
+ nokogiri (>= 1.3.3)
60
+ rack (>= 1.0.0)
61
+ rack-test (>= 0.5.4)
62
+ selenium-webdriver (~> 2.0)
63
+ xpath (~> 0.1.4)
64
+ childprocess (0.3.1)
65
+ ffi (~> 1.0.6)
66
+ cocaine (0.2.1)
67
+ deface (0.8.0)
68
+ nokogiri (~> 1.5.0)
69
+ rails (>= 3.0.9)
70
+ devise (1.4.8)
71
+ bcrypt-ruby (~> 3.0)
72
+ orm_adapter (~> 0.0.3)
73
+ warden (~> 1.0.3)
74
+ diff-lcs (1.1.3)
75
+ erubis (2.7.0)
76
+ factory_girl (2.6.0)
77
+ activesupport (>= 2.3.9)
78
+ ffaker (1.12.1)
79
+ ffi (1.0.11)
80
+ highline (1.6.8)
81
+ hike (1.2.1)
82
+ i18n (0.6.0)
83
+ jquery-rails (1.0.19)
84
+ railties (~> 3.0)
85
+ thor (~> 0.14)
86
+ json (1.6.6)
87
+ json_pure (1.6.5)
88
+ kaminari (0.13.0)
89
+ actionpack (>= 3.0.0)
90
+ activesupport (>= 3.0.0)
91
+ railties (>= 3.0.0)
92
+ mail (2.3.3)
93
+ i18n (>= 0.4.0)
94
+ mime-types (~> 1.16)
95
+ treetop (~> 1.4.8)
96
+ meta_search (1.1.1)
97
+ actionpack (~> 3.1.0)
98
+ activerecord (~> 3.1.0)
99
+ activesupport (~> 3.1.0)
100
+ polyamorous (~> 0.5.0)
101
+ mime-types (1.18)
102
+ money (3.7.1)
103
+ i18n (~> 0.4)
104
+ multi_json (1.2.0)
105
+ nested_set (1.6.8)
106
+ activerecord (>= 3.0.0)
107
+ railties (>= 3.0.0)
108
+ nokogiri (1.5.2)
109
+ orm_adapter (0.0.7)
110
+ paperclip (2.5.0)
111
+ activerecord (>= 2.3.0)
112
+ activesupport (>= 2.3.2)
113
+ cocaine (>= 0.0.2)
114
+ mime-types
115
+ polyamorous (0.5.0)
116
+ activerecord (~> 3.0)
117
+ polyglot (0.3.3)
118
+ rack (1.3.6)
119
+ rack-cache (1.2)
120
+ rack (>= 0.4)
121
+ rack-mount (0.8.3)
122
+ rack (>= 1.0.0)
123
+ rack-ssl (1.3.2)
124
+ rack
125
+ rack-test (0.6.1)
126
+ rack (>= 1.0)
127
+ rails (3.1.4)
128
+ actionmailer (= 3.1.4)
129
+ actionpack (= 3.1.4)
130
+ activerecord (= 3.1.4)
131
+ activeresource (= 3.1.4)
132
+ activesupport (= 3.1.4)
133
+ bundler (~> 1.0)
134
+ railties (= 3.1.4)
135
+ railties (3.1.4)
136
+ actionpack (= 3.1.4)
137
+ activesupport (= 3.1.4)
138
+ rack-ssl (~> 1.3.2)
139
+ rake (>= 0.8.7)
140
+ rdoc (~> 3.4)
141
+ thor (~> 0.14.6)
142
+ rake (0.9.2.2)
143
+ rdoc (3.12)
144
+ json (~> 1.4)
145
+ rspec (2.8.0)
146
+ rspec-core (~> 2.8.0)
147
+ rspec-expectations (~> 2.8.0)
148
+ rspec-mocks (~> 2.8.0)
149
+ rspec-core (2.8.0)
150
+ rspec-expectations (2.8.0)
151
+ diff-lcs (~> 1.1.2)
152
+ rspec-mocks (2.8.0)
153
+ rspec-rails (2.8.1)
154
+ actionpack (>= 3.0)
155
+ activesupport (>= 3.0)
156
+ railties (>= 3.0)
157
+ rspec (~> 2.8.0)
158
+ rubyzip (0.9.6.1)
159
+ selenium-webdriver (2.12.2)
160
+ childprocess (>= 0.2.1)
161
+ ffi (~> 1.0.9)
162
+ json_pure
163
+ rubyzip
164
+ spree (1.0.3)
165
+ spree_api (= 1.0.3)
166
+ spree_auth (= 1.0.3)
167
+ spree_cmd (= 1.0.3)
168
+ spree_core (= 1.0.3)
169
+ spree_dash (= 1.0.3)
170
+ spree_promo (= 1.0.3)
171
+ spree_sample (= 1.0.3)
172
+ spree_api (1.0.3)
173
+ spree_auth (= 1.0.3)
174
+ spree_core (= 1.0.3)
175
+ spree_auth (1.0.3)
176
+ cancan (= 1.6.7)
177
+ devise (= 1.4.8)
178
+ spree_core (= 1.0.3)
179
+ spree_cmd (1.0.3)
180
+ spree_core (1.0.3)
181
+ activemerchant (= 1.20.1)
182
+ acts_as_list (= 0.1.4)
183
+ deface (>= 0.7.2)
184
+ ffaker (~> 1.12.0)
185
+ highline (= 1.6.8)
186
+ jquery-rails (>= 1.0.18, <= 1.0.19)
187
+ kaminari (>= 0.13.0)
188
+ meta_search (= 1.1.1)
189
+ nested_set (= 1.6.8)
190
+ paperclip (= 2.5.0)
191
+ rails (>= 3.1.1, <= 3.1.4)
192
+ state_machine (= 1.1.1)
193
+ stringex (~> 1.3.0)
194
+ spree_dash (1.0.3)
195
+ spree_core (= 1.0.3)
196
+ spree_promo (1.0.3)
197
+ spree_auth (= 1.0.3)
198
+ spree_core (= 1.0.3)
199
+ spree_sample (1.0.3)
200
+ spree_core (= 1.0.3)
201
+ sprockets (2.0.3)
202
+ hike (~> 1.2)
203
+ rack (~> 1.0)
204
+ tilt (~> 1.1, != 1.3.0)
205
+ sqlite3 (1.3.5)
206
+ state_machine (1.1.1)
207
+ stringex (1.3.2)
208
+ thor (0.14.6)
209
+ tilt (1.3.3)
210
+ treetop (1.4.10)
211
+ polyglot
212
+ polyglot (>= 0.3.1)
213
+ tzinfo (0.3.33)
214
+ warden (1.0.6)
215
+ rack (>= 1.0)
216
+ xpath (0.1.4)
217
+ nokogiri (~> 1.3)
218
+
219
+ PLATFORMS
220
+ ruby
221
+
222
+ DEPENDENCIES
223
+ capybara
224
+ factory_girl (~> 2.6)
225
+ rspec-rails (~> 2.7)
226
+ spree (~> 1.0.0)
227
+ spree_address_book!
228
+ sqlite3
data/Rakefile CHANGED
@@ -1,31 +1,18 @@
1
- require 'rubygems'
1
+ # encoding: utf-8
2
2
  require 'rake'
3
3
  require 'rake/testtask'
4
4
  require 'rake/packagetask'
5
- require 'rake/gempackagetask'
5
+ require 'rubygems/package_task'
6
+ require 'rspec/core/rake_task'
7
+ require 'spree/core/testing_support/common_rake'
6
8
 
7
- gemfile = File.expand_path('../spec/test_app/Gemfile', __FILE__)
8
- if File.exists?(gemfile) && (%w(spec cucumber).include?(ARGV.first.to_s) || ARGV.size == 0)
9
- require 'bundler'
10
- ENV['BUNDLE_GEMFILE'] = gemfile
11
- Bundler.setup
9
+ RSpec::Core::RakeTask.new
12
10
 
13
- require 'rspec'
14
- require 'rspec/core/rake_task'
15
- RSpec::Core::RakeTask.new
16
-
17
- require 'cucumber/rake/task'
18
- Cucumber::Rake::Task.new do |t|
19
- t.cucumber_opts = %w{--format progress}
20
- end
21
- end
22
-
23
- desc "Default Task"
24
- task :default => [:spec, :cucumber ]
11
+ task :default => [:spec]
25
12
 
26
13
  spec = eval(File.read('spree_address_book.gemspec'))
27
14
 
28
- Rake::GemPackageTask.new(spec) do |p|
15
+ Gem::PackageTask.new(spec) do |p|
29
16
  p.gem_spec = spec
30
17
  end
31
18
 
@@ -36,42 +23,8 @@ task :release => :package do
36
23
  Rake::Task['gem:push'].invoke
37
24
  end
38
25
 
39
- desc "Default Task"
40
- task :default => [ :spec ]
41
-
42
- desc "Regenerates a rails 3 app for testing"
26
+ desc "Generates a dummy app for testing"
43
27
  task :test_app do
44
- require '../spree/lib/generators/spree/test_app_generator'
45
- class AddressBookTestAppGenerator < Spree::Generators::TestAppGenerator
46
-
47
- def install_gems
48
- inside "test_app" do
49
- run 'rake spree_core:install'
50
- run 'rake spree_auth:install'
51
- run 'rake spree_address_book:install'
52
- end
53
- end
54
-
55
- def migrate_db
56
- run_migrations
57
- end
58
-
59
- protected
60
- def full_path_for_local_gems
61
- <<-gems
62
- gem 'spree_core', :path => \'#{File.join(File.dirname(__FILE__), "../spree/", "core")}\'
63
- gem 'spree_auth', :path => \'#{File.join(File.dirname(__FILE__), "../spree/", "auth")}\'
64
- gem 'spree_address_book', :path => \'#{File.dirname(__FILE__)}\'
65
- gems
66
- end
67
-
68
- end
69
- AddressBookTestAppGenerator.start
70
- end
71
-
72
- namespace :test_app do
73
- desc 'Rebuild test and cucumber databases'
74
- task :rebuild_dbs do
75
- system("cd spec/test_app && rake db:drop db:migrate RAILS_ENV=test && rake db:drop db:migrate RAILS_ENV=cucumber")
76
- end
28
+ ENV['LIB_NAME'] = 'spree_address_book'
29
+ Rake::Task['common:test_app'].invoke
77
30
  end
data/Versionfile CHANGED
@@ -2,3 +2,4 @@
2
2
  "0.50.x" => { :version => "0.50.2" }
3
3
  "0.60.x" => { :version => "0.50.2" }
4
4
  "0.70.x" => { :version => "0.70.0" }
5
+ "1.0.x" => { :version => "1.0.0" }
@@ -0,0 +1,53 @@
1
+ (function($) {
2
+ $(document).ready(function(){
3
+ if ($(".select_address").length) {
4
+ $('input#order_use_billing').unbind("click");
5
+ $(".inner").hide();
6
+ $(".inner input").prop("disabled", true);
7
+ $(".inner select").prop("disabled", true);
8
+ if ($('input#order_use_billing').is(':checked')) {
9
+ $("#shipping .select_address").hide();
10
+ }
11
+
12
+ $('input#order_use_billing').click(function() {
13
+ if ($(this).is(':checked')) {
14
+ $("#shipping .select_address").hide();
15
+ hide_address_form('shipping');
16
+ } else {
17
+ $("#shipping .select_address").show();
18
+ if ($("input[name='order[ship_address_id]']:checked").val() == '0') {
19
+ show_address_form('shipping');
20
+ }
21
+ }
22
+ });
23
+
24
+ $("input[name='order[bill_address_id]']:radio").change(function(){
25
+ if ($("input[name='order[bill_address_id]']:checked").val() == '0') {
26
+ show_address_form('billing');
27
+ } else {
28
+ hide_address_form('billing');
29
+ }
30
+ });
31
+
32
+ $("input[name='order[ship_address_id]']:radio").change(function(){
33
+ if ($("input[name='order[ship_address_id]']:checked").val() == '0') {
34
+ show_address_form('shipping');
35
+ } else {
36
+ hide_address_form('shipping');
37
+ }
38
+ });
39
+ }
40
+ });
41
+
42
+ function hide_address_form(address_type){
43
+ $("#" + address_type + " .inner").hide();
44
+ $("#" + address_type + " .inner input").prop("disabled", true);
45
+ $("#" + address_type + " .inner select").prop("disabled", true);
46
+ }
47
+
48
+ function show_address_form(address_type){
49
+ $("#" + address_type + " .inner").show();
50
+ $("#" + address_type + " .inner input").prop("disabled", false);
51
+ $("#" + address_type + " .inner select").prop("disabled", false);
52
+ }
53
+ })(jQuery);
@@ -0,0 +1,12 @@
1
+ div.inner {
2
+ input[type=text], select { width: 80%; }
3
+ }
4
+
5
+ div#checkout #checkout_form_address {
6
+ #billing, #shipping {
7
+ .select_address label { float: none; }
8
+ input[type=radio] { width: auto; }
9
+ }
10
+ }
11
+
12
+ .hidden { display: none; }
@@ -1,4 +1,4 @@
1
- class AddressesController < Spree::BaseController
1
+ class Spree::AddressesController < Spree::BaseController
2
2
  rescue_from ActiveRecord::RecordNotFound, :with => :render_404
3
3
  load_and_authorize_resource
4
4
 
@@ -1,4 +1,4 @@
1
- CheckoutController.class_eval do
1
+ Spree::CheckoutController.class_eval do
2
2
  after_filter :normalize_addresses, :only => :update
3
3
  before_filter :set_addresses, :only => :update
4
4
 
@@ -6,7 +6,7 @@ CheckoutController.class_eval do
6
6
 
7
7
  def set_addresses
8
8
  return unless params[:order] && params[:state] == "address"
9
-
9
+
10
10
  if params[:order][:ship_address_id].to_i > 0
11
11
  params[:order].delete(:ship_address_attributes)
12
12
  else
@@ -18,12 +18,14 @@ CheckoutController.class_eval do
18
18
  else
19
19
  params[:order].delete(:bill_address_id)
20
20
  end
21
+
21
22
  end
22
23
 
23
24
  def normalize_addresses
24
25
  return unless params[:state] == "address" && @order.bill_address_id && @order.ship_address_id
25
26
  @order.bill_address.reload
26
27
  @order.ship_address.reload
28
+
27
29
  # ensure that there is no validation errors and addresses was saved
28
30
  return unless @order.bill_address && @order.ship_address
29
31
 
@@ -1,10 +1,10 @@
1
- CheckoutHelper.module_eval do
1
+ Spree::CheckoutHelper.module_eval do
2
2
  def address_field(form, method, id_prefix = "b", &handler)
3
- content_tag :p, :id => [id_prefix, method].join, :class => "field" do
3
+ content_tag :p, :id => [id_prefix, method].join('_'), :class => "field" do
4
4
  if handler
5
5
  handler.call
6
6
  else
7
- is_required = Address.required_fields.include?(method)
7
+ is_required = Spree::Address.required_fields.include?(method)
8
8
  separator = is_required ? '<span class="req">*</span><br />' : '<br />'
9
9
  form.label(method) + separator.html_safe +
10
10
  form.text_field(method, :class => is_required ? 'required' : nil)
@@ -13,7 +13,7 @@ CheckoutHelper.module_eval do
13
13
  end
14
14
 
15
15
  def address_state(form, country)
16
- country ||= Country.find(Spree::Config[:default_country_id])
16
+ country ||= Spree::Country.find(Spree::Config[:default_country_id])
17
17
  have_states = !country.states.empty?
18
18
  state_elements = [
19
19
  form.collection_select(:state_id, country.states.order(:name),