saucy 0.2.0 → 0.2.1

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/app/models/limit.rb CHANGED
@@ -2,4 +2,20 @@ class Limit < ActiveRecord::Base
2
2
  belongs_to :plan
3
3
 
4
4
  validates_presence_of :name, :value
5
+
6
+ def self.numbered
7
+ where(:value_type => :number)
8
+ end
9
+
10
+ def self.boolean
11
+ where(:value_type => :boolean)
12
+ end
13
+
14
+ def self.named(name)
15
+ where(:name => name).first
16
+ end
17
+
18
+ def allowed?
19
+ value != 0
20
+ end
5
21
  end
@@ -1,2 +1,16 @@
1
- <p class="name"><%= plan.name %></p>
1
+ <p class="name"><%= link_to_unless current_account?, plan.name, new_plan_account_path(plan) %></p>
2
2
  <p class="price"><% if plan.billed? %>$<%= plan.price %>/month<% else %>Free<% end %></p>
3
+ <ul class="features">
4
+ <% plan.limits.numbered.each do |limit| %>
5
+ <%= content_tag_for :li, limit, :class => limit.name do %>
6
+ <%= pluralize(limit.value, limit.name.singularize) %>
7
+ <% end %>
8
+ <% end %>
9
+ <% plan.limits.boolean.each do |limit| %>
10
+ <% if limit.allowed? -%>
11
+ <%= content_tag_for :li, limit, :class => limit.name do %>
12
+ <%= limit.name %>
13
+ <% end %>
14
+ <% end -%>
15
+ <% end %>
16
+ </ul>
@@ -5,7 +5,7 @@
5
5
  <%= semantic_form_for @account, :url => account_plan_path(@account) do |form| %>
6
6
  <%= form.inputs :class => "radio optional" do %>
7
7
  <% @plans.each do |plan| -%>
8
- <%= content_tag :li, :class => "#{'disabled' if !@account.can_change_plan_to?(plan)}" do %>
8
+ <%= content_tag_for :li, plan, :class => "#{plan.name.parameterize} #{'disabled' if !@account.can_change_plan_to?(plan)}" do %>
9
9
  <%= form.label :plan_id, render(plan), :value => plan.id %>
10
10
  <%= form.radio_button :plan_id, plan.id, :disabled => !@account.can_change_plan_to?(plan) %>
11
11
  <% end %>
@@ -1,3 +1,7 @@
1
- <% @plans.each do |plan| %>
2
- <%= link_to plan.name, new_plan_account_path(plan) %>
3
- <% end %>
1
+ <ol>
2
+ <% @plans.each do |plan| %>
3
+ <%= content_tag_for :li, plan, :class => plan.name.parameterize do %>
4
+ <%= render(plan) %>
5
+ <% end %>
6
+ <% end %>
7
+ </ol>
@@ -1,7 +1,7 @@
1
- Feature: Manage Projects
1
+ Feature: Manage Billing
2
2
  As a admin user
3
- I want to be able to manage projects
4
- In order to have a project for each of my software applications
3
+ I want to be able to manage my billing information
4
+ So that my account can stay up to date and in good standing
5
5
 
6
6
  Scenario: Update the billing information on an account with a paid plan
7
7
  Given a paid plan exists with a name of "Paid"
@@ -30,90 +30,3 @@ Feature: Manage Projects
30
30
  And I press "Update"
31
31
  Then I should see "updated successfully"
32
32
  Then I should see "card ending in 1111"
33
-
34
- Scenario: Change the plan to another paid plan on an account with a paid plan
35
- Given a paid plan exists with a name of "Basic"
36
- And a paid plan exists with a name of "Premium"
37
- And the following account exists:
38
- | name | keyword | plan | cardholder_name | billing_email | card_number | verification_code | expiration_month | expiration_year |
39
- | Test | test | name: Basic | Joe Smith | jsmith@example.com | 4111111111115555 | 122 | 01 | 2015 |
40
- And I have signed in with "joe@example.com/test"
41
- And "joe@example.com" is an admin of the "Test" account
42
- When I go to the settings page for the "Test" account
43
- Then I should see "Your Plan"
44
- And I should not see "Billing Information"
45
- And I should see "Basic"
46
- And I follow "Upgrade"
47
- Then I should see "Upgrade Your Plan"
48
- When I choose the "Premium" plan
49
- And I press "Upgrade"
50
- Then I should see "Plan changed successfully"
51
- Then I should see "Premium"
52
-
53
- Scenario: Change the plan from free to paid
54
- Given a plan exists with a name of "Free"
55
- And a paid plan exists with a name of "Basic"
56
- And the following account exists:
57
- | name | keyword | plan |
58
- | Test | test | name: Free |
59
- And I have signed in with "joe@example.com/test"
60
- And "joe@example.com" is an admin of the "Test" account
61
- When I go to the settings page for the "Test" account
62
- Then I should not see "Billing" within ".tabs"
63
- Then I should see "Your Plan"
64
- And I follow "Upgrade"
65
- Then I should see "Upgrade Your Plan"
66
- When I choose the "Basic" plan
67
- Then I should see "Billing Information"
68
- And I fill in "Cardholder name" with "Ralph Robot"
69
- And I fill in "Billing email" with "accounting@example.com"
70
- And I fill in "Card number" with "4111111111111111"
71
- And I fill in "Verification code" with "123"
72
- And I select "March" from "Expiration month"
73
- And I select "2020" from "Expiration year"
74
- When I press "Upgrade"
75
- Then I should see "Plan changed successfully"
76
- And I should see "Basic"
77
- And I follow "Billing"
78
- Then I should see "card ending in 1111"
79
-
80
- Scenario: Change the plan to a free on an account with a paid plan
81
- Given a paid plan exists with a name of "Basic"
82
- And a plan exists with a name of "Free"
83
- And the following account exists:
84
- | name | keyword | plan | cardholder_name | billing_email | card_number | verification_code | expiration_month | expiration_year |
85
- | Test | test | name: Basic | Joe Smith | jsmith@example.com | 4111111111115555 | 122 | 01 | 2015 |
86
- And I have signed in with "joe@example.com/test"
87
- And "joe@example.com" is an admin of the "Test" account
88
- When I go to the settings page for the "Test" account
89
- Then I should see "Your Plan"
90
- And I should not see "Billing Information"
91
- And I should see "Basic"
92
- And I follow "Upgrade"
93
- Then I should see "Upgrade Your Plan"
94
- When I choose the "Free" plan
95
- And I press "Upgrade"
96
- Then I should see "Plan changed successfully"
97
- Then I should see "Free"
98
-
99
- Scenario: Attempting to downgrade when beyond the limits
100
- Given a paid plan exists with a name of "Basic"
101
- And a plan exists with a name of "Free"
102
- And the following account exists:
103
- | name | keyword | plan | cardholder_name | billing_email | card_number | verification_code | expiration_month | expiration_year |
104
- | Test | test | name: Basic | Joe Smith | jsmith@example.com | 4111111111115555 | 122 | 01 | 2015 |
105
- And the following limits exist:
106
- | plan | name | value |
107
- | name: Basic | users | 1 |
108
- | name: Free | users | 0 |
109
- | name: Basic | projects | 5 |
110
- | name: Free | projects | 1 |
111
- And I have signed in with "joe@example.com/test"
112
- And "joe@example.com" is an admin of the "Test" account
113
- When I go to the settings page for the "Test" account
114
- Then I should see "Your Plan"
115
- And I should not see "Billing Information"
116
- And I should see "Basic"
117
- And I follow "Upgrade"
118
- Then I should see "Upgrade Your Plan"
119
- And the "Free" plan should be disabled
@@ -0,0 +1,99 @@
1
+ Feature: Manage Plan
2
+ As a admin user
3
+ I want to be able to upgrade and downgrade my account
4
+ So that I can pay what I want and get the features I want
5
+
6
+ Scenario: Change the plan to another paid plan on an account with a paid plan
7
+ Given a paid plan exists with a name of "Basic"
8
+ And a paid plan exists with a name of "Premium"
9
+ And the following account exists:
10
+ | name | keyword | plan | cardholder_name | billing_email | card_number | verification_code | expiration_month | expiration_year |
11
+ | Test | test | name: Basic | Joe Smith | jsmith@example.com | 4111111111115555 | 122 | 01 | 2015 |
12
+ And I have signed in with "joe@example.com/test"
13
+ And "joe@example.com" is an admin of the "Test" account
14
+ When I go to the settings page for the "Test" account
15
+ Then I should see "Your Plan"
16
+ And I should not see "Billing Information"
17
+ And I should see "Basic"
18
+ And I follow "Upgrade"
19
+ Then I should see "Upgrade Your Plan"
20
+ When I choose the "Premium" plan
21
+ And I press "Upgrade"
22
+ Then I should see "Plan changed successfully"
23
+ Then I should see "Premium"
24
+
25
+ Scenario: Change the plan from free to paid
26
+ Given a plan exists with a name of "Free"
27
+ And a paid plan exists with a name of "Basic"
28
+ And the following account exists:
29
+ | name | keyword | plan |
30
+ | Test | test | name: Free |
31
+ And I have signed in with "joe@example.com/test"
32
+ And "joe@example.com" is an admin of the "Test" account
33
+ When I go to the settings page for the "Test" account
34
+ Then I should not see "Billing" within ".tabs"
35
+ Then I should see "Your Plan"
36
+ And I follow "Upgrade"
37
+ Then I should see "Upgrade Your Plan"
38
+ When I choose the "Basic" plan
39
+ Then I should see "Billing Information"
40
+ And I fill in "Cardholder name" with "Ralph Robot"
41
+ And I fill in "Billing email" with "accounting@example.com"
42
+ And I fill in "Card number" with "4111111111111111"
43
+ And I fill in "Verification code" with "123"
44
+ And I select "March" from "Expiration month"
45
+ And I select "2020" from "Expiration year"
46
+ When I press "Upgrade"
47
+ Then I should see "Plan changed successfully"
48
+ And I should see "Basic"
49
+ And I follow "Billing"
50
+ Then I should see "card ending in 1111"
51
+
52
+ Scenario: Change the plan to a free on an account with a paid plan
53
+ Given a paid plan exists with a name of "Basic"
54
+ And a plan exists with a name of "Free"
55
+ And the following account exists:
56
+ | name | keyword | plan | cardholder_name | billing_email | card_number | verification_code | expiration_month | expiration_year |
57
+ | Test | test | name: Basic | Joe Smith | jsmith@example.com | 4111111111115555 | 122 | 01 | 2015 |
58
+ And I have signed in with "joe@example.com/test"
59
+ And "joe@example.com" is an admin of the "Test" account
60
+ When I go to the settings page for the "Test" account
61
+ Then I should see "Your Plan"
62
+ And I should not see "Billing Information"
63
+ And I should see "Basic"
64
+ And I follow "Upgrade"
65
+ Then I should see "Upgrade Your Plan"
66
+ When I choose the "Free" plan
67
+ And I press "Upgrade"
68
+ Then I should see "Plan changed successfully"
69
+ Then I should see "Free"
70
+
71
+ Scenario: Attempting to downgrade when beyond the limits
72
+ Given a paid plan exists with a name of "Basic"
73
+ And a plan exists with a name of "Free"
74
+ And the following account exists:
75
+ | name | keyword | plan | cardholder_name | billing_email | card_number | verification_code | expiration_month | expiration_year |
76
+ | Test | test | name: Basic | Joe Smith | jsmith@example.com | 4111111111115555 | 122 | 01 | 2015 |
77
+ And the following limits exist:
78
+ | plan | name | value | value_type |
79
+ | name: Basic | users | 1 | number |
80
+ | name: Free | users | 0 | number |
81
+ | name: Basic | projects | 5 | number |
82
+ | name: Free | projects | 1 | number |
83
+ | name: Basic | ssl | 1 | boolean |
84
+ | name: Free | ssl | 0 | boolean |
85
+ And I have signed in with "joe@example.com/test"
86
+ And "joe@example.com" is an admin of the "Test" account
87
+ When I go to the settings page for the "Test" account
88
+ Then I should see "Your Plan"
89
+ And I should not see "Billing Information"
90
+ And I should see "Basic"
91
+ And I follow "Upgrade"
92
+ Then I should see "Upgrade Your Plan"
93
+ And the "Free" plan should be disabled
94
+ And I should see "1 user" within ".basic"
95
+ And I should see "0 users" within ".free"
96
+ And I should see "1 project" within ".free"
97
+ And I should see "5 projects" within ".basic"
98
+ And I should see "ssl" within ".basic"
99
+ And I should not see "ssl" within ".free"
@@ -3,7 +3,7 @@ module Saucy
3
3
  extend ActiveSupport::Concern
4
4
 
5
5
  included do
6
- helper_method :current_account, :current_project
6
+ helper_method :current_account, :current_project, :current_account?, :current_project?
7
7
  include InstanceMethods
8
8
  end
9
9
 
@@ -18,6 +18,14 @@ module Saucy
18
18
  ::Project.find_by_keyword!(params[:project_id])
19
19
  end
20
20
 
21
+ def current_project?
22
+ params[:project_id].present?
23
+ end
24
+
25
+ def current_account?
26
+ params[:account_id].present?
27
+ end
28
+
21
29
  def authorize_admin
22
30
  unless current_user.admin_of?(current_account)
23
31
  deny_access("You must be an admin to access that page.")
data/lib/saucy/plan.rb CHANGED
@@ -19,15 +19,15 @@ module Saucy
19
19
  end
20
20
 
21
21
  def can_add_more?(limit, amount)
22
- limits.where(:name => limit, :value_type => :number).first.value > amount
22
+ limits.numbered.named(limit).value > amount
23
23
  end
24
24
 
25
25
  def allows?(limit)
26
- limits.where(:name => limit, :value_type => :boolean).first.value != 0
26
+ limits.boolean.named(limit).allowed?
27
27
  end
28
28
 
29
29
  def limit(limit_name)
30
- limits.where(:name => limit_name).first
30
+ limits.named(limit_name)
31
31
  end
32
32
  end
33
33
  end
@@ -7,3 +7,29 @@ describe Limit do
7
7
  it { should validate_presence_of(:name) }
8
8
  it { should validate_presence_of(:value) }
9
9
  end
10
+
11
+ describe Limit, "various kinds" do
12
+ let!(:users) { Factory(:limit, :name => "users", :value => 1) }
13
+ let!(:ssl) { Factory(:limit, :name => "ssl", :value => 0, :value_type => :boolean) }
14
+ let!(:lighthouse) { Factory(:limit, :name => "lighthouse", :value => 1, :value_type => :boolean) }
15
+
16
+ it "gives the numbered limits" do
17
+ Limit.numbered.should == [users]
18
+ end
19
+
20
+ it "gives the boolean limits" do
21
+ Limit.boolean.should == [ssl, lighthouse]
22
+ end
23
+
24
+ it "gives the limits by name" do
25
+ Limit.named(:users).should == users
26
+ end
27
+
28
+ it "reports true for booleans with 1" do
29
+ lighthouse.allowed?.should be
30
+ end
31
+
32
+ it "reports false for booleans with 0" do
33
+ ssl.allowed?.should_not be
34
+ end
35
+ end
metadata CHANGED
@@ -1,13 +1,13 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: saucy
3
3
  version: !ruby/object:Gem::Version
4
- hash: 23
4
+ hash: 21
5
5
  prerelease: false
6
6
  segments:
7
7
  - 0
8
8
  - 2
9
- - 0
10
- version: 0.2.0
9
+ - 1
10
+ version: 0.2.1
11
11
  platform: ruby
12
12
  authors:
13
13
  - thoughtbot, inc.
@@ -17,7 +17,7 @@ autorequire:
17
17
  bindir: bin
18
18
  cert_chain: []
19
19
 
20
- date: 2011-01-08 00:00:00 -05:00
20
+ date: 2011-01-09 00:00:00 -05:00
21
21
  default_executable:
22
22
  dependencies:
23
23
  - !ruby/object:Gem::Dependency
@@ -211,6 +211,7 @@ files:
211
211
  - lib/generators/saucy/features/templates/features/edit_user_permissions.feature
212
212
  - lib/generators/saucy/features/templates/features/manage_account.feature
213
213
  - lib/generators/saucy/features/templates/features/manage_billing.feature
214
+ - lib/generators/saucy/features/templates/features/manage_plan.feature
214
215
  - lib/generators/saucy/features/templates/features/manage_projects.feature
215
216
  - lib/generators/saucy/features/templates/features/manage_users.feature
216
217
  - lib/generators/saucy/features/templates/features/new_account.feature