paid_up 0.2.4 → 0.3.0

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.
Files changed (62) hide show
  1. checksums.yaml +4 -4
  2. data/Gemfile +3 -0
  3. data/README.md +28 -20
  4. data/VERSION +1 -1
  5. data/app/helpers/paid_up/features_helper.rb +3 -3
  6. data/app/models/paid_up/ability.rb +29 -11
  7. data/app/models/paid_up/feature.rb +70 -8
  8. data/app/models/paid_up/features_plan.rb +1 -2
  9. data/app/models/paid_up/plan.rb +9 -13
  10. data/app/models/paid_up/unlimited.rb +15 -0
  11. data/app/views/paid_up/features/_abilities_table.html.haml +13 -4
  12. data/app/views/paid_up/subscriptions/new.html.haml +20 -20
  13. data/bin/rails +8 -1
  14. data/config/locales/en.yml +4 -1
  15. data/coverage/.last_run.json +1 -1
  16. data/coverage/.resultset.json +291 -145
  17. data/db/migrate/20150407105900_create_paid_up_features_plans_table.rb +1 -1
  18. data/lib/generators/paid_up/install/install_generator.rb +6 -0
  19. data/lib/generators/paid_up/install/templates/initializer.rb +21 -1
  20. data/lib/paid_up/{integer.rb → extensions/integer.rb} +2 -4
  21. data/lib/paid_up/{stripe_extensions.rb → extensions/stripe.rb} +3 -6
  22. data/lib/paid_up/mixins/paid_for.rb +24 -0
  23. data/lib/paid_up/{mixins.rb → mixins/subscriber.rb} +28 -22
  24. data/lib/paid_up/validators/rolify_rows.rb +9 -0
  25. data/lib/paid_up/{table_validator.rb → validators/table_rows.rb} +2 -2
  26. data/lib/paid_up.rb +27 -7
  27. data/paid_up.gemspec +26 -16
  28. data/spec/dummy/app/models/ability.rb +0 -1
  29. data/spec/dummy/app/models/doodad.rb +3 -0
  30. data/spec/dummy/app/models/group.rb +1 -1
  31. data/spec/dummy/app/models/role.rb +10 -0
  32. data/spec/dummy/app/models/user.rb +2 -3
  33. data/spec/dummy/bin/rspec +3 -0
  34. data/spec/dummy/config/application.rb +0 -1
  35. data/spec/dummy/config/initializers/paid_up.rb +21 -1
  36. data/spec/dummy/config/initializers/rolify.rb +7 -0
  37. data/spec/dummy/config/routes.rb +10 -0
  38. data/spec/dummy/db/development.sqlite3 +0 -0
  39. data/spec/dummy/db/migrate/20150517175135_create_groups_table.rb +0 -1
  40. data/spec/dummy/db/migrate/20150517175136_create_doodads_table.rb +9 -0
  41. data/spec/dummy/db/migrate/{20150518000915_add_devise_to_users.rb → 20150523010827_add_devise_to_users.rb} +0 -0
  42. data/spec/dummy/db/migrate/20150523010837_rolify_create_roles.rb +19 -0
  43. data/spec/dummy/db/migrate/{20150518000917_create_paid_up_features_plans_table.paid_up.rb → 20150523010838_create_paid_up_features_plans_table.paid_up.rb} +1 -1
  44. data/spec/dummy/db/migrate/{20150518000919_create_paid_up_plans_table.paid_up.rb → 20150523010839_create_paid_up_plans_table.paid_up.rb} +0 -0
  45. data/spec/dummy/db/migrate/{20150519164355_add_stripe_id_column_to_users.paid_up.rb → 20150523010840_add_stripe_id_column_to_users.paid_up.rb} +0 -0
  46. data/spec/dummy/db/schema.rb +29 -15
  47. data/spec/dummy/db/seeds/features_plans.seeds.rb +9 -9
  48. data/spec/dummy/db/test.sqlite3 +0 -0
  49. data/spec/dummy/log/development.log +932 -108863
  50. data/spec/models/paid_up/feature_spec.rb +23 -5
  51. data/spec/models/paid_up/features_plan_spec.rb +2 -1
  52. data/spec/models/paid_up/plan_spec.rb +8 -32
  53. data/spec/models/user_spec.rb +110 -37
  54. data/spec/rails_helper.rb +1 -0
  55. data/spec/support/plans_and_features.rb +16 -62
  56. data/spec/views/paid_up/subscriptions_spec.rb +1 -1
  57. metadata +47 -15
  58. data/db/migrate/20150407110100_create_paid_up_features_table.rb +0 -11
  59. data/lib/paid_up/unlimited.rb +0 -17
  60. data/spec/dummy/db/migrate/20150518000918_create_paid_up_features_table.paid_up.rb +0 -12
  61. data/spec/dummy/db/seeds/features.seeds.rb +0 -19
  62. data/spec/dummy/test/controllers/plans_controller_controller_test.rb +0 -7
@@ -1,8 +1,8 @@
1
1
  class CreatePaidUpFeaturesPlansTable < ActiveRecord::Migration
2
2
  def change
3
3
  create_table :paid_up_features_plans do |t|
4
- t.references :feature, index: true, foreign_key: true
5
4
  t.references :plan, index: true, foreign_key: true
5
+ t.string :feature, index: true, foreign_key: true
6
6
  t.integer :setting
7
7
  end
8
8
  end
@@ -14,6 +14,7 @@ module PaidUp
14
14
 
15
15
  def install_devise
16
16
  output "To start with, Devise is used to authenticate users. No need to install it separately, I'll do that now.", :magenta
17
+ gsub_file "config/routes.rb", /devise_for :users/, ''
17
18
  generate("devise:install")
18
19
  generate("devise User")
19
20
  end
@@ -23,6 +24,11 @@ module PaidUp
23
24
  template "ability.rb", "app/models/ability.rb"
24
25
  end
25
26
 
27
+ def install_rolify
28
+ output "To provide varying roles for Users, we'll use Rolify. Let's set that up now.", :magenta
29
+ generate("rolify", "Role User")
30
+ end
31
+
26
32
  def add_initializer
27
33
  output "Next, you'll need an initializer. This is where you put your configuration options.", :magenta
28
34
  template "initializer.rb", "config/initializers/paid_up.rb"
@@ -2,4 +2,24 @@ PaidUp.configure do |config|
2
2
  config.anonymous_customer_stripe_id = 'anonymous-customer'
3
3
  config.anonymous_plan_stripe_id = 'anonymous-plan'
4
4
  config.free_plan_stripe_id = 'free-plan'
5
- end
5
+ end
6
+
7
+ PaidUp::Feature.new(
8
+ slug: 'ad_free',
9
+ title: 'Ad Free',
10
+ description: 'Are ads removed from the site with this plan?',
11
+ setting_type: 'boolean'
12
+ )
13
+ PaidUp::Feature.new(
14
+ slug: 'groups',
15
+ title: 'Groups',
16
+ description: 'How many groups are allowed with this plan?',
17
+ setting_type: 'table_rows' # Enables table row counting that is enabled by a positive value
18
+ # for the PaidUp::FeaturesPlan.setting associated with this PaidUp::Feature
19
+ )
20
+ PaidUp::Feature.new(
21
+ slug: 'doodads',
22
+ title: 'Doodads',
23
+ description: 'How many doodads included with this plan?',
24
+ setting_type: 'rolify_rows'
25
+ )
@@ -1,9 +1,7 @@
1
- module PaidUp
1
+ module PaidUp::Extensions
2
2
  module Integer
3
3
  def to_date
4
4
  Time.at(self).strftime("%m/%d/%Y")
5
5
  end
6
6
  end
7
- end
8
-
9
- Integer.send(:include, PaidUp::Integer)
7
+ end
@@ -1,5 +1,5 @@
1
- module PaidUp
2
- module StripeExtensions
1
+ module PaidUp::Extensions
2
+ module Stripe
3
3
  extend ActiveSupport::Concern
4
4
  class_methods do
5
5
  def find_or_create_by_id(id, item)
@@ -11,7 +11,4 @@ module PaidUp
11
11
  end
12
12
  end
13
13
  end
14
- end
15
-
16
- Stripe::Customer.send(:include, PaidUp::StripeExtensions)
17
- Stripe::Plan.send(:include, PaidUp::StripeExtensions)
14
+ end
@@ -0,0 +1,24 @@
1
+ module PaidUp::Mixins
2
+ module PaidFor
3
+ extend ActiveSupport::Concern
4
+ class_methods do
5
+ def paid_for
6
+ feature = PaidUp::Feature.find_by_slug(table_name)
7
+ if feature.nil?
8
+ raise :feature_not_found_feature.l feature: table_name
9
+ else
10
+ case feature.setting_type
11
+ when 'boolean'
12
+ # Nothing needs doing
13
+ when 'rolify_rows'
14
+ resourcify
15
+ when 'table_rows'
16
+ belongs_to :user
17
+ else
18
+ raise :value_is_not_a_valid_setting_type.l(value: feature.setting_type)
19
+ end
20
+ end
21
+ end
22
+ end
23
+ end
24
+ end
@@ -1,9 +1,12 @@
1
- module PaidUp
2
- module Mixins
1
+ module PaidUp::Mixins
2
+ module Subscriber
3
3
  extend ActiveSupport::Concern
4
4
  class_methods do
5
5
  def subscriber
6
- attr_reader :stripe_data
6
+ features = PaidUp::Feature.find_all_by_setting_type('table_rows')
7
+ for feature in features
8
+ has_many feature.slug.to_sym
9
+ end
7
10
 
8
11
  after_initialize :set_default_attributes, :load_stripe_data
9
12
  before_save :remove_anonymous_association
@@ -67,10 +70,23 @@ module PaidUp
67
70
  table_rows_allowed(table_name) - table_rows(table_name)
68
71
  }
69
72
  self.send(:define_method, :table_rows_allowed) { |table_name|
70
- plan.feature_setting_by_name table_name
73
+ plan.feature_setting table_name
71
74
  }
72
75
  self.send(:define_method, :table_rows) { |table_name|
73
- send(table_name).count
76
+ send(table_name).size
77
+ }
78
+ self.send(:define_method, :rolify_rows_unlimited?) { |table_name|
79
+ rolify_rows_allowed(table_name) == PaidUp::Unlimited.to_i
80
+ }
81
+ self.send(:define_method, :rolify_rows_remaining) { |table_name|
82
+ rolify_rows_allowed(table_name) - rolify_rows(table_name)
83
+ }
84
+ self.send(:define_method, :rolify_rows_allowed) { |table_name|
85
+ plan.feature_setting table_name
86
+ }
87
+ self.send(:define_method, :rolify_rows) { |table_name|
88
+ records = table_name.classify.constantize.with_role(:owner, self)
89
+ records.size
74
90
  }
75
91
  self.send(:define_method, :plan_stripe_id) {
76
92
  if subscription.nil?
@@ -96,6 +112,12 @@ module PaidUp
96
112
  self.send(:define_method, :using_free_plan?) {
97
113
  plan.stripe_id == PaidUp.configuration.free_plan_stripe_id || stripe_data.delinquent
98
114
  }
115
+ self.send(:define_method, :set_default_attributes) {
116
+ if new_record?
117
+ self.stripe_id = PaidUp.configuration.anonymous_customer_stripe_id
118
+ end
119
+ }
120
+ self.send(:private, :set_default_attributes)
99
121
  self.send(:define_method, :load_stripe_data) {
100
122
  if new_record?
101
123
  working_stripe_id = PaidUp.configuration.anonymous_customer_stripe_id
@@ -111,29 +133,13 @@ module PaidUp
111
133
  end
112
134
  }
113
135
  self.send(:private, :load_stripe_data)
114
- self.send(:define_method, :set_default_attributes) {
115
- if new_record?
116
- self.stripe_id = PaidUp.configuration.anonymous_customer_stripe_id
117
- end
118
- }
119
- self.send(:private, :set_default_attributes)
120
136
  self.send(:define_method, :remove_anonymous_association) {
121
137
  if stripe_id == PaidUp.configuration.anonymous_customer_stripe_id
122
138
  self.stripe_id = nil
123
139
  end
124
140
  }
125
141
  self.send(:private, :remove_anonymous_association)
126
-
127
- PaidUp::Plan.subscribed_to(self)
128
- end
129
-
130
- def subscribed_to(model)
131
- has_many :subscribers, :through => :subscriptions, :source => :subscriber, :source_type => model.model_name
132
142
  end
133
143
  end
134
144
  end
135
- end
136
-
137
-
138
-
139
- ActiveRecord::Base.send(:include, PaidUp::Mixins)
145
+ end
@@ -0,0 +1,9 @@
1
+ module PaidUp::Validators
2
+ class RolifyRows < ActiveModel::Validator
3
+ def validate(record)
4
+ if record.send(options[:field]) == options[:comparison] && !ActiveRecord::Base.connection.table_exists?(record.send(options[:found_in]))
5
+ record.errors[options[:found_in]] << :when_using_rolify_rows_table_must_exist.l
6
+ end
7
+ end
8
+ end
9
+ end
@@ -1,5 +1,5 @@
1
- module PaidUp
2
- class TableValidator < ActiveModel::Validator
1
+ module PaidUp::Validators
2
+ class TableRows < ActiveModel::Validator
3
3
  def validate(record)
4
4
  if record.send(options[:field]) == options[:comparison] && !ActiveRecord::Base.connection.table_exists?(record.send(options[:found_in]))
5
5
  record.errors[options[:found_in]] << :when_using_table_rows_table_must_exist.l
data/lib/paid_up.rb CHANGED
@@ -1,6 +1,14 @@
1
1
  module PaidUp
2
- require 'rails/all'
2
+ # require 'rails/all'
3
+
4
+ require "active_record/railtie"
5
+ require "action_controller/railtie"
6
+ require "action_mailer/railtie"
7
+ require "action_view/railtie"
8
+ require "sprockets/railtie"
9
+
3
10
  require 'rails-i18n'
11
+
4
12
  require 'stripe' # Needs to be required before paid_up/stripe_extensions
5
13
  require 'devise' # Needs to be required before paid_up/mixins
6
14
 
@@ -9,11 +17,15 @@ module PaidUp
9
17
  require 'paid_up/engine'
10
18
  require 'paid_up/localization'
11
19
  require 'paid_up/version'
12
- require 'paid_up/stripe_extensions'
13
- require 'paid_up/unlimited'
14
- require 'paid_up/mixins'
15
- require 'paid_up/integer'
16
- require 'paid_up/table_validator'
20
+
21
+ require 'paid_up/extensions/stripe'
22
+ require 'paid_up/extensions/integer'
23
+
24
+ require 'paid_up/mixins/subscriber'
25
+ require 'paid_up/mixins/paid_for'
26
+
27
+ require 'paid_up/validators/table_rows'
28
+ require 'paid_up/validators/rolify_rows'
17
29
 
18
30
  require 'haml-rails'
19
31
  require 'bootstrap_leather'
@@ -23,4 +35,12 @@ module PaidUp
23
35
 
24
36
  require 'seedbank'
25
37
  require 'chronic'
26
- end
38
+ end
39
+
40
+ Integer.send(:include, PaidUp::Extensions::Integer)
41
+
42
+ Stripe::Customer.send(:include, PaidUp::Extensions::Stripe)
43
+ Stripe::Plan.send(:include, PaidUp::Extensions::Stripe)
44
+
45
+ ActiveRecord::Base.send(:include, PaidUp::Mixins::Subscriber)
46
+ ActiveRecord::Base.send(:include, PaidUp::Mixins::PaidFor)
data/paid_up.gemspec CHANGED
@@ -2,16 +2,16 @@
2
2
  # DO NOT EDIT THIS FILE DIRECTLY
3
3
  # Instead, edit Jeweler::Tasks in Rakefile, and run 'rake gemspec'
4
4
  # -*- encoding: utf-8 -*-
5
- # stub: paid_up 0.2.4 ruby lib
5
+ # stub: paid_up 0.3.0 ruby lib
6
6
 
7
7
  Gem::Specification.new do |s|
8
8
  s.name = "paid_up"
9
- s.version = "0.2.4"
9
+ s.version = "0.3.0"
10
10
 
11
11
  s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
12
12
  s.require_paths = ["lib"]
13
13
  s.authors = ["Karen Lundgren"]
14
- s.date = "2015-05-22"
14
+ s.date = "2015-05-24"
15
15
  s.description = "Allows a model of your choosing (such as users) to subscribe to a plan, which enables features."
16
16
  s.email = "karen.e.lundgren@gmail.com"
17
17
  s.executables = ["rails"]
@@ -39,6 +39,7 @@ Gem::Specification.new do |s|
39
39
  "app/models/paid_up/feature.rb",
40
40
  "app/models/paid_up/features_plan.rb",
41
41
  "app/models/paid_up/plan.rb",
42
+ "app/models/paid_up/unlimited.rb",
42
43
  "app/views/devise/confirmations/new.html.haml",
43
44
  "app/views/devise/passwords/edit.html.haml",
44
45
  "app/views/devise/passwords/new.html.haml",
@@ -62,7 +63,6 @@ Gem::Specification.new do |s|
62
63
  "coverage/.resultset.json",
63
64
  "coverage/.resultset.json.lock",
64
65
  "db/migrate/20150407105900_create_paid_up_features_plans_table.rb",
65
- "db/migrate/20150407110100_create_paid_up_features_table.rb",
66
66
  "db/migrate/20150407110101_create_paid_up_plans_table.rb",
67
67
  "db/migrate/20150519164237_add_stripe_id_column_to_users.rb",
68
68
  "lib/generators/paid_up/install/install_generator.rb",
@@ -72,13 +72,14 @@ Gem::Specification.new do |s|
72
72
  "lib/paid_up.rb",
73
73
  "lib/paid_up/configuration.rb",
74
74
  "lib/paid_up/engine.rb",
75
- "lib/paid_up/integer.rb",
75
+ "lib/paid_up/extensions/integer.rb",
76
+ "lib/paid_up/extensions/stripe.rb",
76
77
  "lib/paid_up/localization.rb",
77
- "lib/paid_up/mixins.rb",
78
+ "lib/paid_up/mixins/paid_for.rb",
79
+ "lib/paid_up/mixins/subscriber.rb",
78
80
  "lib/paid_up/railtie.rb",
79
- "lib/paid_up/stripe_extensions.rb",
80
- "lib/paid_up/table_validator.rb",
81
- "lib/paid_up/unlimited.rb",
81
+ "lib/paid_up/validators/rolify_rows.rb",
82
+ "lib/paid_up/validators/table_rows.rb",
82
83
  "lib/paid_up/version.rb",
83
84
  "paid_up.gemspec",
84
85
  "spec/controllers/paid_up/plans_spec.rb",
@@ -88,13 +89,16 @@ Gem::Specification.new do |s|
88
89
  "spec/dummy/app/assets/stylesheets/application.css.scss",
89
90
  "spec/dummy/app/controllers/application_controller.rb",
90
91
  "spec/dummy/app/models/ability.rb",
92
+ "spec/dummy/app/models/doodad.rb",
91
93
  "spec/dummy/app/models/group.rb",
94
+ "spec/dummy/app/models/role.rb",
92
95
  "spec/dummy/app/models/user.rb",
93
96
  "spec/dummy/app/views/layouts/application.html.haml",
94
97
  "spec/dummy/app/views/pages/index.html.haml",
95
98
  "spec/dummy/bin/bundle",
96
99
  "spec/dummy/bin/rails",
97
100
  "spec/dummy/bin/rake",
101
+ "spec/dummy/bin/rspec",
98
102
  "spec/dummy/bin/setup",
99
103
  "spec/dummy/config.ru",
100
104
  "spec/dummy/config/application.rb",
@@ -113,6 +117,7 @@ Gem::Specification.new do |s|
113
117
  "spec/dummy/config/initializers/inflections.rb",
114
118
  "spec/dummy/config/initializers/mime_types.rb",
115
119
  "spec/dummy/config/initializers/paid_up.rb",
120
+ "spec/dummy/config/initializers/rolify.rb",
116
121
  "spec/dummy/config/initializers/session_store.rb",
117
122
  "spec/dummy/config/initializers/wrap_parameters.rb",
118
123
  "spec/dummy/config/locales/devise.en.yml",
@@ -122,14 +127,14 @@ Gem::Specification.new do |s|
122
127
  "spec/dummy/db/development.sqlite3",
123
128
  "spec/dummy/db/migrate/20150406154440_create_users_table.rb",
124
129
  "spec/dummy/db/migrate/20150517175135_create_groups_table.rb",
125
- "spec/dummy/db/migrate/20150518000915_add_devise_to_users.rb",
126
- "spec/dummy/db/migrate/20150518000917_create_paid_up_features_plans_table.paid_up.rb",
127
- "spec/dummy/db/migrate/20150518000918_create_paid_up_features_table.paid_up.rb",
128
- "spec/dummy/db/migrate/20150518000919_create_paid_up_plans_table.paid_up.rb",
129
- "spec/dummy/db/migrate/20150519164355_add_stripe_id_column_to_users.paid_up.rb",
130
+ "spec/dummy/db/migrate/20150517175136_create_doodads_table.rb",
131
+ "spec/dummy/db/migrate/20150523010827_add_devise_to_users.rb",
132
+ "spec/dummy/db/migrate/20150523010837_rolify_create_roles.rb",
133
+ "spec/dummy/db/migrate/20150523010838_create_paid_up_features_plans_table.paid_up.rb",
134
+ "spec/dummy/db/migrate/20150523010839_create_paid_up_plans_table.paid_up.rb",
135
+ "spec/dummy/db/migrate/20150523010840_add_stripe_id_column_to_users.paid_up.rb",
130
136
  "spec/dummy/db/schema.rb",
131
137
  "spec/dummy/db/seeds.rb",
132
- "spec/dummy/db/seeds/features.seeds.rb",
133
138
  "spec/dummy/db/seeds/features_plans.seeds.rb",
134
139
  "spec/dummy/db/seeds/plans.seeds.rb",
135
140
  "spec/dummy/db/test.sqlite3",
@@ -148,7 +153,6 @@ Gem::Specification.new do |s|
148
153
  "spec/dummy/public/assets/bootstrap/glyphicons-halflings-regular-e395044093757d82afcb138957d06a1ea9361bdcf0b442d06a18a8051af57456.ttf",
149
154
  "spec/dummy/public/assets/bootstrap/glyphicons-halflings-regular-fe185d11a49676890d47bb783312a0cda5a44c4039214094e7957b4c040ef11c.woff2",
150
155
  "spec/dummy/public/favicon.ico",
151
- "spec/dummy/test/controllers/plans_controller_controller_test.rb",
152
156
  "spec/factories/feature.rb",
153
157
  "spec/factories/features_plan.rb",
154
158
  "spec/factories/plan.rb",
@@ -191,11 +195,13 @@ Gem::Specification.new do |s|
191
195
  s.add_runtime_dependency(%q<money>, ["~> 6.5"])
192
196
  s.add_runtime_dependency(%q<devise>, ["~> 3.4"])
193
197
  s.add_runtime_dependency(%q<cancan>, ["~> 1.6"])
198
+ s.add_runtime_dependency(%q<rolify>, ["~> 4"])
194
199
  s.add_runtime_dependency(%q<stripe>, ["~> 1.21"])
195
200
  s.add_development_dependency(%q<sqlite3>, ["~> 1.3"])
196
201
  s.add_development_dependency(%q<forgery>, ["~> 0.6"])
197
202
  s.add_development_dependency(%q<bootstrap-sass>, ["~> 3.3"])
198
203
  s.add_development_dependency(%q<sass-rails>, ["~> 5.0"])
204
+ s.add_development_dependency(%q<high_voltage>, ["~> 2.3"])
199
205
  else
200
206
  s.add_dependency(%q<rails>, ["~> 4"])
201
207
  s.add_dependency(%q<rails-i18n>, ["~> 4"])
@@ -209,11 +215,13 @@ Gem::Specification.new do |s|
209
215
  s.add_dependency(%q<money>, ["~> 6.5"])
210
216
  s.add_dependency(%q<devise>, ["~> 3.4"])
211
217
  s.add_dependency(%q<cancan>, ["~> 1.6"])
218
+ s.add_dependency(%q<rolify>, ["~> 4"])
212
219
  s.add_dependency(%q<stripe>, ["~> 1.21"])
213
220
  s.add_dependency(%q<sqlite3>, ["~> 1.3"])
214
221
  s.add_dependency(%q<forgery>, ["~> 0.6"])
215
222
  s.add_dependency(%q<bootstrap-sass>, ["~> 3.3"])
216
223
  s.add_dependency(%q<sass-rails>, ["~> 5.0"])
224
+ s.add_dependency(%q<high_voltage>, ["~> 2.3"])
217
225
  end
218
226
  else
219
227
  s.add_dependency(%q<rails>, ["~> 4"])
@@ -228,11 +236,13 @@ Gem::Specification.new do |s|
228
236
  s.add_dependency(%q<money>, ["~> 6.5"])
229
237
  s.add_dependency(%q<devise>, ["~> 3.4"])
230
238
  s.add_dependency(%q<cancan>, ["~> 1.6"])
239
+ s.add_dependency(%q<rolify>, ["~> 4"])
231
240
  s.add_dependency(%q<stripe>, ["~> 1.21"])
232
241
  s.add_dependency(%q<sqlite3>, ["~> 1.3"])
233
242
  s.add_dependency(%q<forgery>, ["~> 0.6"])
234
243
  s.add_dependency(%q<bootstrap-sass>, ["~> 3.3"])
235
244
  s.add_dependency(%q<sass-rails>, ["~> 5.0"])
245
+ s.add_dependency(%q<high_voltage>, ["~> 2.3"])
236
246
  end
237
247
  end
238
248
 
@@ -6,7 +6,6 @@ class Ability
6
6
  user ||= User.new # anonymous user (not logged in)
7
7
 
8
8
  # Rails Application's initialization could go here.
9
- can :manage, Group, user: user
10
9
 
11
10
  initialize_paid_up(user)
12
11
  end
@@ -0,0 +1,3 @@
1
+ class Doodad < ActiveRecord::Base
2
+ paid_for
3
+ end
@@ -1,3 +1,3 @@
1
1
  class Group < ActiveRecord::Base
2
- belongs_to :user
2
+ paid_for
3
3
  end
@@ -0,0 +1,10 @@
1
+ class Role < ActiveRecord::Base
2
+ has_and_belongs_to_many :users, :join_table => :users_roles
3
+ belongs_to :resource, :polymorphic => true
4
+
5
+ validates :resource_type,
6
+ :inclusion => { :in => Rolify.resource_types },
7
+ :allow_nil => true
8
+
9
+ scopify
10
+ end
@@ -1,9 +1,8 @@
1
1
  class User < ActiveRecord::Base
2
- subscriber
2
+ rolify
3
3
  # Include default devise modules. Others available are:
4
4
  # :confirmable, :lockable, :timeoutable and :omniauthable
5
5
  devise :database_authenticatable, :registerable,
6
6
  :recoverable, :rememberable, :trackable, :validatable
7
-
8
- has_many :groups
7
+ subscriber
9
8
  end
@@ -0,0 +1,3 @@
1
+ #!/usr/bin/env ruby
2
+ require 'bundler/setup'
3
+ load Gem.bin_path('rspec-core', 'rspec')
@@ -6,7 +6,6 @@ require "action_controller/railtie"
6
6
  require "action_mailer/railtie"
7
7
  require "action_view/railtie"
8
8
  require "sprockets/railtie"
9
- # require "rails/test_unit/railtie"
10
9
 
11
10
  Bundler.require(*Rails.groups)
12
11
  require "paid_up"
@@ -2,4 +2,24 @@ PaidUp.configure do |config|
2
2
  config.anonymous_customer_stripe_id = 'anonymous-customer'
3
3
  config.anonymous_plan_stripe_id = 'anonymous-plan'
4
4
  config.free_plan_stripe_id = 'free-plan'
5
- end
5
+ end
6
+
7
+ PaidUp::Feature.new(
8
+ slug: 'ad_free',
9
+ title: 'Ad Free',
10
+ description: 'Are ads removed from the site with this plan?',
11
+ setting_type: 'boolean'
12
+ )
13
+ PaidUp::Feature.new(
14
+ slug: 'groups',
15
+ title: 'Groups',
16
+ description: 'How many groups are allowed with this plan?',
17
+ setting_type: 'rolify_rows' # Enables table row counting that is enabled by a positive value
18
+ # for the PaidUp::FeaturesPlan.setting associated with this PaidUp::Feature
19
+ )
20
+ PaidUp::Feature.new(
21
+ slug: 'doodads',
22
+ title: 'Doodads',
23
+ description: 'How many doodads included with this plan?',
24
+ setting_type: 'table_rows'
25
+ )
@@ -0,0 +1,7 @@
1
+ Rolify.configure do |config|
2
+ # By default ORM adapter is ActiveRecord. uncomment to use mongoid
3
+ # config.use_mongoid
4
+
5
+ # Dynamic shortcuts for User class (user.is_admin? like methods). Default is: false
6
+ # config.use_dynamic_shortcuts
7
+ end
@@ -1,4 +1,14 @@
1
1
  Rails.application.routes.draw do
2
2
  mount PaidUp::Engine => '/', :as => 'paid_up'
3
3
  devise_for :users
4
+
5
+
6
+
7
+
8
+
9
+
10
+
11
+
12
+
13
+
4
14
  end
Binary file
@@ -1,7 +1,6 @@
1
1
  class CreateGroupsTable < ActiveRecord::Migration
2
2
  def change
3
3
  create_table :groups do |t|
4
- t.string :user_id, index: true
5
4
  t.string :name
6
5
  t.text :description
7
6
 
@@ -0,0 +1,9 @@
1
+ class CreateDoodadsTable < ActiveRecord::Migration
2
+ def change
3
+ create_table :doodads do |t|
4
+ t.string :user_id, index: true
5
+ t.string :name
6
+ t.text :description
7
+ end
8
+ end
9
+ end
@@ -0,0 +1,19 @@
1
+ class RolifyCreateRoles < ActiveRecord::Migration
2
+ def change
3
+ create_table(:roles) do |t|
4
+ t.string :name
5
+ t.references :resource, :polymorphic => true
6
+
7
+ t.timestamps
8
+ end
9
+
10
+ create_table(:users_roles, :id => false) do |t|
11
+ t.references :user
12
+ t.references :role
13
+ end
14
+
15
+ add_index(:roles, :name)
16
+ add_index(:roles, [ :name, :resource_type, :resource_id ])
17
+ add_index(:users_roles, [ :user_id, :role_id ])
18
+ end
19
+ end
@@ -2,8 +2,8 @@
2
2
  class CreatePaidUpFeaturesPlansTable < ActiveRecord::Migration
3
3
  def change
4
4
  create_table :paid_up_features_plans do |t|
5
- t.references :feature, index: true, foreign_key: true
6
5
  t.references :plan, index: true, foreign_key: true
6
+ t.string :feature, index: true, foreign_key: true
7
7
  t.integer :setting
8
8
  end
9
9
  end