op_cart 0.3.1 → 0.3.2
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.
- checksums.yaml +4 -4
- data/app/models/op_cart/plan.rb +53 -0
- data/db/migrate/20150201033629_create_op_cart_plans.rb +19 -0
- data/lib/op_cart.rb +1 -0
- data/lib/op_cart/unchangeable_validator.rb +9 -0
- data/lib/op_cart/version.rb +1 -1
- metadata +4 -1
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 39966542011d55c929999e9579b07ae23f6026a0
|
4
|
+
data.tar.gz: 6d9934377f63d12b8e08c8378d489ac4c4f8f369
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 585762254b5f9536f437adb23ddc5bcbb58248e706a281ac93ffcb6aca2cdfcd45452f6964cbeaf0a638d73831f4c7391500e2cc77d33baffdc63f38322d15cf
|
7
|
+
data.tar.gz: 75e659902be830d751e14fb5ce7cc75cbefdf6a03ff79ceb6e025973e3ca4315eeb970fb4fb3c7027072f6948914694cf2692e25ddb5fa7400e595cd1325d8a5
|
@@ -0,0 +1,53 @@
|
|
1
|
+
module OpCart
|
2
|
+
class Plan < ActiveRecord::Base
|
3
|
+
belongs_to :user
|
4
|
+
|
5
|
+
before_validation -> { self.interval_count = 1 }, unless: :interval_count?
|
6
|
+
before_create :create_plan
|
7
|
+
before_update :update_plan
|
8
|
+
|
9
|
+
validates :processor_token, uniqueness: true, presence: true
|
10
|
+
validates :name, :interval, presence: true
|
11
|
+
validates :price, :interval_count,
|
12
|
+
numericality: { only_integer: true, greater_than_or_equal_to: 0 }
|
13
|
+
validates :user, presence: true
|
14
|
+
|
15
|
+
validates :processor_token, :price, :interval_count, :interval,
|
16
|
+
unchangeable: true, on: :update
|
17
|
+
|
18
|
+
scope :purchasable, -> { where allow_purchases: true }
|
19
|
+
|
20
|
+
def processor_object
|
21
|
+
@processor_object ||= Stripe::Plan.retrieve processor_token
|
22
|
+
end
|
23
|
+
|
24
|
+
private
|
25
|
+
|
26
|
+
def create_plan
|
27
|
+
Stripe::Plan.create id: processor_token, name: name, amount: price,
|
28
|
+
currency: 'usd', interval: interval, interval_count: interval_count,
|
29
|
+
trial_period_days: trial_period_days, metadata: {
|
30
|
+
description: description, image_url: image_url, creator: user.email }
|
31
|
+
rescue Stripe::InvalidRequestError => e
|
32
|
+
if e.param
|
33
|
+
self.errors.add e.param, e.message
|
34
|
+
else
|
35
|
+
self.errors.add :base, e.message
|
36
|
+
end
|
37
|
+
false
|
38
|
+
end
|
39
|
+
|
40
|
+
def update_plan
|
41
|
+
processor_object.metadata = { description: description,
|
42
|
+
image_url: image_url, creator: user.email }
|
43
|
+
processor_object.save name: name
|
44
|
+
rescue Stripe::InvalidRequestError => e
|
45
|
+
if e.param
|
46
|
+
self.errors.add e.param, e.message
|
47
|
+
else
|
48
|
+
self.errors.add :base, e.message
|
49
|
+
end
|
50
|
+
false
|
51
|
+
end
|
52
|
+
end
|
53
|
+
end
|
@@ -0,0 +1,19 @@
|
|
1
|
+
class CreateOpCartPlans < ActiveRecord::Migration
|
2
|
+
def change
|
3
|
+
create_table :op_cart_plans do |t|
|
4
|
+
t.string :processor_token
|
5
|
+
t.string :name, null: false
|
6
|
+
t.string :description
|
7
|
+
t.string :image_url
|
8
|
+
t.integer :price
|
9
|
+
t.integer :interval_count
|
10
|
+
t.string :interval
|
11
|
+
t.integer :trial_period_days
|
12
|
+
t.boolean :allow_purchases, default: false
|
13
|
+
t.references :user, index: true
|
14
|
+
|
15
|
+
t.timestamps null: false
|
16
|
+
end
|
17
|
+
add_foreign_key :op_cart_plans, :users
|
18
|
+
end
|
19
|
+
end
|
data/lib/op_cart.rb
CHANGED
@@ -0,0 +1,9 @@
|
|
1
|
+
class UnchangeableValidator < ActiveModel::EachValidator
|
2
|
+
def validate_each(record, attribute, value)
|
3
|
+
if !record.new_record? && value.present?
|
4
|
+
if record.changes.include?(attribute) && record.changes[attribute].any?
|
5
|
+
record.errors[attribute] << "cannot be changed once assigned"
|
6
|
+
end
|
7
|
+
end
|
8
|
+
end
|
9
|
+
end
|
data/lib/op_cart/version.rb
CHANGED
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: op_cart
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.3.
|
4
|
+
version: 0.3.2
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Eric Boehs
|
@@ -82,6 +82,7 @@ files:
|
|
82
82
|
- app/models/op_cart/customer.rb
|
83
83
|
- app/models/op_cart/line_item.rb
|
84
84
|
- app/models/op_cart/order.rb
|
85
|
+
- app/models/op_cart/plan.rb
|
85
86
|
- app/models/op_cart/product.rb
|
86
87
|
- app/models/op_cart/shipping_address.rb
|
87
88
|
- config/initializers/stripe.rb
|
@@ -93,9 +94,11 @@ files:
|
|
93
94
|
- db/migrate/20150125000000_create_op_cart_shipping_addresses.rb
|
94
95
|
- db/migrate/20150131000000_create_op_cart_customers.rb
|
95
96
|
- db/migrate/20150131000001_create_op_cart_cards.rb
|
97
|
+
- db/migrate/20150201033629_create_op_cart_plans.rb
|
96
98
|
- db/seeds.rb
|
97
99
|
- lib/op_cart.rb
|
98
100
|
- lib/op_cart/engine.rb
|
101
|
+
- lib/op_cart/unchangeable_validator.rb
|
99
102
|
- lib/op_cart/version.rb
|
100
103
|
- lib/tasks/op_cart_tasks.rake
|
101
104
|
- test/dummy/README.rdoc
|