paid_up 0.2.4 → 0.3.0

Sign up to get free protection for your applications and to get access to all the features.
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