koudoku 0.0.9 → 0.0.10
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/README.md +6 -1
- data/app/concerns/koudoku/subscription.rb +2 -6
- data/app/controllers/koudoku/application_controller.rb +1 -0
- data/app/controllers/koudoku/subscriptions_controller.rb +6 -2
- data/app/views/koudoku/subscriptions/_card.html.erb +4 -2
- data/lib/generators/koudoku/install_generator.rb +13 -7
- data/lib/koudoku/version.rb +1 -1
- data/spec/dummy/app/models/coupon.rb +1 -1
- data/spec/dummy/app/models/customer.rb +0 -1
- data/spec/dummy/app/models/plan.rb +0 -1
- data/spec/dummy/app/models/subscription.rb +0 -1
- data/spec/dummy/config/routes.rb +3 -1
- metadata +28 -41
- data/spec/dummy/db/development.sqlite3 +0 -0
- data/spec/dummy/db/test.sqlite3 +0 -0
- data/spec/dummy/log/development.log +0 -931
- data/spec/dummy/log/test.log +0 -2728
data/README.md
CHANGED
@@ -15,6 +15,12 @@ After running `bundle install`, you can run a Rails generator to do the rest. Be
|
|
15
15
|
rails g koudoku:install user
|
16
16
|
rake db:migrate
|
17
17
|
|
18
|
+
Add the following to `app/views/layouts/application.html.erb` before your `<head>` tag closes:
|
19
|
+
|
20
|
+
<%= yield :koudoku %>
|
21
|
+
|
22
|
+
(This allows us to inject a Stripe `<script>` tag in the correct place. If you don't, the payment form will not work.)
|
23
|
+
|
18
24
|
After installing, you'll need to add some subscription plans. (You can see an explanation of each of the attributes in the table below.)
|
19
25
|
|
20
26
|
Plan.create({
|
@@ -23,7 +29,6 @@ After installing, you'll need to add some subscription plans. (You can see an ex
|
|
23
29
|
interval: 'month',
|
24
30
|
stripe_id: '1',
|
25
31
|
features: ['1 Project', '1 Page', '1 User', '1 Organization'].join("\n\n"),
|
26
|
-
interval: 'month',
|
27
32
|
display_order: 1
|
28
33
|
})
|
29
34
|
|
@@ -3,8 +3,6 @@ module Koudoku::Subscription
|
|
3
3
|
|
4
4
|
included do
|
5
5
|
|
6
|
-
attr_accessible :plan_id, :stripe_id, :current_price, :credit_card_token, :card_type, :last_four
|
7
|
-
|
8
6
|
# We don't store these one-time use tokens, but this is what Stripe provides
|
9
7
|
# client-side after storing the credit card information.
|
10
8
|
attr_accessor :credit_card_token
|
@@ -58,7 +56,6 @@ module Koudoku::Subscription
|
|
58
56
|
|
59
57
|
# otherwise
|
60
58
|
else
|
61
|
-
|
62
59
|
# if a new plan has been selected
|
63
60
|
if self.plan.present?
|
64
61
|
|
@@ -94,7 +91,7 @@ module Koudoku::Subscription
|
|
94
91
|
|
95
92
|
# store the customer id.
|
96
93
|
self.stripe_id = customer.id
|
97
|
-
self.last_four = customer.
|
94
|
+
self.last_four = customer.cards.retrieve(customer.default_card).last4
|
98
95
|
|
99
96
|
finalize_new_subscription!
|
100
97
|
finalize_upgrade!
|
@@ -125,8 +122,7 @@ module Koudoku::Subscription
|
|
125
122
|
customer.save
|
126
123
|
|
127
124
|
# update the last four based on this new card.
|
128
|
-
self.last_four = customer.
|
129
|
-
|
125
|
+
self.last_four = customer.cards.retrieve(customer.default_card).last4
|
130
126
|
finalize_card_update!
|
131
127
|
|
132
128
|
end
|
@@ -83,7 +83,7 @@ module Koudoku
|
|
83
83
|
end
|
84
84
|
|
85
85
|
def create
|
86
|
-
@subscription = ::Subscription.new(
|
86
|
+
@subscription = ::Subscription.new(subscription_params)
|
87
87
|
@subscription.user = @owner
|
88
88
|
if @subscription.save
|
89
89
|
flash[:notice] = "You've been successfully upgraded."
|
@@ -108,7 +108,7 @@ module Koudoku
|
|
108
108
|
end
|
109
109
|
|
110
110
|
def update
|
111
|
-
if @subscription.update_attributes(
|
111
|
+
if @subscription.update_attributes(subscription_params)
|
112
112
|
flash[:notice] = "You've successfully updated your subscription."
|
113
113
|
redirect_to owner_subscription_path(@owner, @subscription)
|
114
114
|
else
|
@@ -117,5 +117,9 @@ module Koudoku
|
|
117
117
|
end
|
118
118
|
end
|
119
119
|
|
120
|
+
private
|
121
|
+
def subscription_params
|
122
|
+
params.require(:subscription).permit(:plan_id, :stripe_id, :current_price, :credit_card_token, :card_type, :last_four)
|
123
|
+
end
|
120
124
|
end
|
121
125
|
end
|
@@ -1,4 +1,6 @@
|
|
1
|
+
<% content_for :koudoku do %>
|
1
2
|
<script type="text/javascript" src="https://js.stripe.com/v1/"></script>
|
3
|
+
<% end %>
|
2
4
|
|
3
5
|
<%= form_for @subscription, url: url, html: {id: 'payment-form', class: 'form-horizontal'} do |f| %>
|
4
6
|
|
@@ -52,8 +54,6 @@
|
|
52
54
|
// All this code taken from Stripe's own examples at:
|
53
55
|
// https://stripe.com/docs/tutorials/forms .
|
54
56
|
|
55
|
-
Stripe.setPublishableKey("<%= Koudoku.stripe_publishable_key %>");
|
56
|
-
|
57
57
|
function stripeResponseHandler(status, response) {
|
58
58
|
|
59
59
|
if (response.error) {
|
@@ -73,6 +73,8 @@
|
|
73
73
|
}
|
74
74
|
|
75
75
|
$(document).ready(function() {
|
76
|
+
|
77
|
+
Stripe.setPublishableKey("<%= Koudoku.stripe_publishable_key %>");
|
76
78
|
|
77
79
|
// By default, don't show errors.
|
78
80
|
$(".payment-errors").hide()
|
@@ -38,7 +38,7 @@ RUBY
|
|
38
38
|
end
|
39
39
|
|
40
40
|
# Generate subscription.
|
41
|
-
generate("model", "subscription stripe_id:string plan_id:integer last_four:string coupon_id:integer
|
41
|
+
generate("model", "subscription stripe_id:string plan_id:integer last_four:string coupon_id:integer card_type:string current_price:float #{subscription_owner_model}_id:integer")
|
42
42
|
gsub_file "app/models/subscription.rb", /ActiveRecord::Base/, "ActiveRecord::Base\n include Koudoku::Subscription\n\n belongs_to :#{subscription_owner_model}\n belongs_to :coupon\n"
|
43
43
|
|
44
44
|
# Add the plans.
|
@@ -47,11 +47,8 @@ RUBY
|
|
47
47
|
|
48
48
|
# Add coupons.
|
49
49
|
generate("model coupon code:string free_trial_length:string")
|
50
|
-
gsub_file "app/models/
|
50
|
+
gsub_file "app/models/coupon.rb", /ActiveRecord::Base/, "ActiveRecord::Base\n has_many :subscriptions\n"
|
51
51
|
|
52
|
-
# Update the owner relationship.
|
53
|
-
gsub_file "app/models/#{subscription_owner_model}.rb", /ActiveRecord::Base/, "ActiveRecord::Base\n\n # Added by Koudoku.\n has_one :subscription\n\n"
|
54
|
-
|
55
52
|
# Update the owner relationship.
|
56
53
|
gsub_file "app/models/#{subscription_owner_model}.rb", /ActiveRecord::Base/, "ActiveRecord::Base\n\n # Added by Koudoku.\n has_one :subscription\n\n"
|
57
54
|
|
@@ -61,7 +58,16 @@ RUBY
|
|
61
58
|
end
|
62
59
|
|
63
60
|
# Add webhooks to the route.
|
64
|
-
gsub_file "config/routes.rb", /Application.routes.draw do/,
|
61
|
+
gsub_file "config/routes.rb", /Application.routes.draw do/, <<-RUBY
|
62
|
+
Application.routes.draw do
|
63
|
+
|
64
|
+
# Added by Koudoku.
|
65
|
+
mount Koudoku::Engine, at: 'koudoku'
|
66
|
+
scope module: 'koudoku' do
|
67
|
+
get 'pricing' => 'subscriptions#index', as: 'pricing'
|
68
|
+
end
|
69
|
+
|
70
|
+
RUBY
|
65
71
|
|
66
72
|
# Show the user the API key we generated.
|
67
73
|
say "\nTo enable support for Stripe webhooks, point it to \"/koudoku/webhooks?api_key=#{api_key}\". This API key has been randomly generated, so it's unique to your application.\n\n"
|
@@ -69,4 +75,4 @@ RUBY
|
|
69
75
|
end
|
70
76
|
|
71
77
|
end
|
72
|
-
end
|
78
|
+
end
|
data/lib/koudoku/version.rb
CHANGED
data/spec/dummy/config/routes.rb
CHANGED
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: koudoku
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
4
|
+
version: 0.0.10
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -9,30 +9,30 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2013-
|
12
|
+
date: 2013-08-21 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: rails
|
16
16
|
requirement: !ruby/object:Gem::Requirement
|
17
17
|
none: false
|
18
18
|
requirements:
|
19
|
-
- -
|
19
|
+
- - '>='
|
20
20
|
- !ruby/object:Gem::Version
|
21
|
-
version:
|
21
|
+
version: '0'
|
22
22
|
type: :runtime
|
23
23
|
prerelease: false
|
24
24
|
version_requirements: !ruby/object:Gem::Requirement
|
25
25
|
none: false
|
26
26
|
requirements:
|
27
|
-
- -
|
27
|
+
- - '>='
|
28
28
|
- !ruby/object:Gem::Version
|
29
|
-
version:
|
29
|
+
version: '0'
|
30
30
|
- !ruby/object:Gem::Dependency
|
31
31
|
name: stripe
|
32
32
|
requirement: !ruby/object:Gem::Requirement
|
33
33
|
none: false
|
34
34
|
requirements:
|
35
|
-
- -
|
35
|
+
- - '>='
|
36
36
|
- !ruby/object:Gem::Version
|
37
37
|
version: '0'
|
38
38
|
type: :runtime
|
@@ -40,7 +40,7 @@ dependencies:
|
|
40
40
|
version_requirements: !ruby/object:Gem::Requirement
|
41
41
|
none: false
|
42
42
|
requirements:
|
43
|
-
- -
|
43
|
+
- - '>='
|
44
44
|
- !ruby/object:Gem::Version
|
45
45
|
version: '0'
|
46
46
|
- !ruby/object:Gem::Dependency
|
@@ -48,7 +48,7 @@ dependencies:
|
|
48
48
|
requirement: !ruby/object:Gem::Requirement
|
49
49
|
none: false
|
50
50
|
requirements:
|
51
|
-
- -
|
51
|
+
- - '>='
|
52
52
|
- !ruby/object:Gem::Version
|
53
53
|
version: '0'
|
54
54
|
type: :runtime
|
@@ -56,7 +56,7 @@ dependencies:
|
|
56
56
|
version_requirements: !ruby/object:Gem::Requirement
|
57
57
|
none: false
|
58
58
|
requirements:
|
59
|
-
- -
|
59
|
+
- - '>='
|
60
60
|
- !ruby/object:Gem::Version
|
61
61
|
version: '0'
|
62
62
|
- !ruby/object:Gem::Dependency
|
@@ -64,7 +64,7 @@ dependencies:
|
|
64
64
|
requirement: !ruby/object:Gem::Requirement
|
65
65
|
none: false
|
66
66
|
requirements:
|
67
|
-
- -
|
67
|
+
- - '>='
|
68
68
|
- !ruby/object:Gem::Version
|
69
69
|
version: '0'
|
70
70
|
type: :development
|
@@ -72,7 +72,7 @@ dependencies:
|
|
72
72
|
version_requirements: !ruby/object:Gem::Requirement
|
73
73
|
none: false
|
74
74
|
requirements:
|
75
|
-
- -
|
75
|
+
- - '>='
|
76
76
|
- !ruby/object:Gem::Version
|
77
77
|
version: '0'
|
78
78
|
- !ruby/object:Gem::Dependency
|
@@ -80,7 +80,7 @@ dependencies:
|
|
80
80
|
requirement: !ruby/object:Gem::Requirement
|
81
81
|
none: false
|
82
82
|
requirements:
|
83
|
-
- -
|
83
|
+
- - '>='
|
84
84
|
- !ruby/object:Gem::Version
|
85
85
|
version: '0'
|
86
86
|
type: :development
|
@@ -88,7 +88,7 @@ dependencies:
|
|
88
88
|
version_requirements: !ruby/object:Gem::Requirement
|
89
89
|
none: false
|
90
90
|
requirements:
|
91
|
-
- -
|
91
|
+
- - '>='
|
92
92
|
- !ruby/object:Gem::Version
|
93
93
|
version: '0'
|
94
94
|
- !ruby/object:Gem::Dependency
|
@@ -96,7 +96,7 @@ dependencies:
|
|
96
96
|
requirement: !ruby/object:Gem::Requirement
|
97
97
|
none: false
|
98
98
|
requirements:
|
99
|
-
- -
|
99
|
+
- - '>='
|
100
100
|
- !ruby/object:Gem::Version
|
101
101
|
version: '0'
|
102
102
|
type: :development
|
@@ -104,7 +104,7 @@ dependencies:
|
|
104
104
|
version_requirements: !ruby/object:Gem::Requirement
|
105
105
|
none: false
|
106
106
|
requirements:
|
107
|
-
- -
|
107
|
+
- - '>='
|
108
108
|
- !ruby/object:Gem::Version
|
109
109
|
version: '0'
|
110
110
|
- !ruby/object:Gem::Dependency
|
@@ -112,7 +112,7 @@ dependencies:
|
|
112
112
|
requirement: !ruby/object:Gem::Requirement
|
113
113
|
none: false
|
114
114
|
requirements:
|
115
|
-
- -
|
115
|
+
- - '>='
|
116
116
|
- !ruby/object:Gem::Version
|
117
117
|
version: '0'
|
118
118
|
type: :development
|
@@ -120,7 +120,7 @@ dependencies:
|
|
120
120
|
version_requirements: !ruby/object:Gem::Requirement
|
121
121
|
none: false
|
122
122
|
requirements:
|
123
|
-
- -
|
123
|
+
- - '>='
|
124
124
|
- !ruby/object:Gem::Version
|
125
125
|
version: '0'
|
126
126
|
- !ruby/object:Gem::Dependency
|
@@ -128,7 +128,7 @@ dependencies:
|
|
128
128
|
requirement: !ruby/object:Gem::Requirement
|
129
129
|
none: false
|
130
130
|
requirements:
|
131
|
-
- -
|
131
|
+
- - '>='
|
132
132
|
- !ruby/object:Gem::Version
|
133
133
|
version: '0'
|
134
134
|
type: :development
|
@@ -136,7 +136,7 @@ dependencies:
|
|
136
136
|
version_requirements: !ruby/object:Gem::Requirement
|
137
137
|
none: false
|
138
138
|
requirements:
|
139
|
-
- -
|
139
|
+
- - '>='
|
140
140
|
- !ruby/object:Gem::Version
|
141
141
|
version: '0'
|
142
142
|
- !ruby/object:Gem::Dependency
|
@@ -144,7 +144,7 @@ dependencies:
|
|
144
144
|
requirement: !ruby/object:Gem::Requirement
|
145
145
|
none: false
|
146
146
|
requirements:
|
147
|
-
- -
|
147
|
+
- - '>='
|
148
148
|
- !ruby/object:Gem::Version
|
149
149
|
version: '0'
|
150
150
|
type: :development
|
@@ -152,7 +152,7 @@ dependencies:
|
|
152
152
|
version_requirements: !ruby/object:Gem::Requirement
|
153
153
|
none: false
|
154
154
|
requirements:
|
155
|
-
- -
|
155
|
+
- - '>='
|
156
156
|
- !ruby/object:Gem::Version
|
157
157
|
version: '0'
|
158
158
|
description: Robust subscription support for Rails with Stripe. Provides package levels,
|
@@ -225,16 +225,12 @@ files:
|
|
225
225
|
- spec/dummy/config/locales/en.yml
|
226
226
|
- spec/dummy/config/routes.rb
|
227
227
|
- spec/dummy/config.ru
|
228
|
-
- spec/dummy/db/development.sqlite3
|
229
228
|
- spec/dummy/db/migrate/20130318201927_create_customers.rb
|
230
229
|
- spec/dummy/db/migrate/20130318204455_create_subscriptions.rb
|
231
230
|
- spec/dummy/db/migrate/20130318204458_create_plans.rb
|
232
231
|
- spec/dummy/db/migrate/20130318204502_create_coupons.rb
|
233
232
|
- spec/dummy/db/migrate/20130520163946_add_interval_to_plan.rb
|
234
233
|
- spec/dummy/db/schema.rb
|
235
|
-
- spec/dummy/db/test.sqlite3
|
236
|
-
- spec/dummy/log/development.log
|
237
|
-
- spec/dummy/log/test.log
|
238
234
|
- spec/dummy/public/404.html
|
239
235
|
- spec/dummy/public/422.html
|
240
236
|
- spec/dummy/public/500.html
|
@@ -254,43 +250,38 @@ files:
|
|
254
250
|
- spec/spec_helper.rb
|
255
251
|
homepage: http://github.com/andrewculver/koudoku
|
256
252
|
licenses: []
|
257
|
-
post_install_message:
|
253
|
+
post_install_message: |2+
|
258
254
|
|
259
255
|
Koudoku is still in early development, so if this installation is an upgrade
|
260
|
-
|
261
256
|
from an earlier version, be sure to check the CHANGELOG for any instructions
|
262
|
-
|
263
257
|
you may need to follow to accommodate breaking changes:
|
264
258
|
|
265
|
-
|
266
259
|
https://github.com/andrewculver/koudoku/blob/master/CHANGELOG.md
|
267
260
|
|
268
|
-
|
269
|
-
'
|
270
261
|
rdoc_options: []
|
271
262
|
require_paths:
|
272
263
|
- lib
|
273
264
|
required_ruby_version: !ruby/object:Gem::Requirement
|
274
265
|
none: false
|
275
266
|
requirements:
|
276
|
-
- -
|
267
|
+
- - '>='
|
277
268
|
- !ruby/object:Gem::Version
|
278
269
|
version: '0'
|
279
270
|
segments:
|
280
271
|
- 0
|
281
|
-
hash: -
|
272
|
+
hash: -3013715524796379015
|
282
273
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
283
274
|
none: false
|
284
275
|
requirements:
|
285
|
-
- -
|
276
|
+
- - '>='
|
286
277
|
- !ruby/object:Gem::Version
|
287
278
|
version: '0'
|
288
279
|
segments:
|
289
280
|
- 0
|
290
|
-
hash: -
|
281
|
+
hash: -3013715524796379015
|
291
282
|
requirements: []
|
292
283
|
rubyforge_project:
|
293
|
-
rubygems_version: 1.8.
|
284
|
+
rubygems_version: 1.8.25
|
294
285
|
signing_key:
|
295
286
|
specification_version: 3
|
296
287
|
summary: Robust subscription support for Rails with Stripe.
|
@@ -328,16 +319,12 @@ test_files:
|
|
328
319
|
- spec/dummy/config/locales/en.yml
|
329
320
|
- spec/dummy/config/routes.rb
|
330
321
|
- spec/dummy/config.ru
|
331
|
-
- spec/dummy/db/development.sqlite3
|
332
322
|
- spec/dummy/db/migrate/20130318201927_create_customers.rb
|
333
323
|
- spec/dummy/db/migrate/20130318204455_create_subscriptions.rb
|
334
324
|
- spec/dummy/db/migrate/20130318204458_create_plans.rb
|
335
325
|
- spec/dummy/db/migrate/20130318204502_create_coupons.rb
|
336
326
|
- spec/dummy/db/migrate/20130520163946_add_interval_to_plan.rb
|
337
327
|
- spec/dummy/db/schema.rb
|
338
|
-
- spec/dummy/db/test.sqlite3
|
339
|
-
- spec/dummy/log/development.log
|
340
|
-
- spec/dummy/log/test.log
|
341
328
|
- spec/dummy/public/404.html
|
342
329
|
- spec/dummy/public/422.html
|
343
330
|
- spec/dummy/public/500.html
|