saucy 0.3.2 → 0.3.3
Sign up to get free protection for your applications and to get access to all the features.
- data/README.md +5 -0
- data/app/helpers/limits_helper.rb +13 -0
- data/app/models/limit.rb +6 -2
- data/app/views/accounts/edit.html.erb +4 -0
- data/app/views/limits/_meter.html.erb +13 -0
- data/lib/generators/saucy/features/templates/features/manage_plan.feature +18 -0
- data/lib/generators/saucy/install/templates/create_saucy_tables.rb +1 -1
- data/lib/saucy/engine.rb +3 -0
- data/spec/models/limit_spec.rb +5 -0
- metadata +6 -4
data/README.md
CHANGED
@@ -90,6 +90,11 @@ To extend the ProjectsController:
|
|
90
90
|
end
|
91
91
|
end
|
92
92
|
|
93
|
+
To define additional limit meters, or override existing limit meters, create the
|
94
|
+
partials:
|
95
|
+
|
96
|
+
app/views/limits/_#{limitname}_meter.html.erb
|
97
|
+
|
93
98
|
## Gotchas
|
94
99
|
|
95
100
|
Make sure you don't do this in ApplicationController:
|
@@ -0,0 +1,13 @@
|
|
1
|
+
module LimitsHelper
|
2
|
+
def current_percentage(limit, account)
|
3
|
+
number_to_percentage((limit.current_count(account).to_f / limit.value) * 100)
|
4
|
+
end
|
5
|
+
|
6
|
+
def render_limit_meter(limit)
|
7
|
+
if FileTest.exist?(File.join(Rails.root, 'app', 'views', 'limits' , "_#{limit.name}_meter.html.erb"))
|
8
|
+
render "limits/#{limit.name}_meter", :limit => limit
|
9
|
+
else
|
10
|
+
render "limits/meter", :limit => limit
|
11
|
+
end
|
12
|
+
end
|
13
|
+
end
|
data/app/models/limit.rb
CHANGED
@@ -36,10 +36,14 @@ class Limit < ActiveRecord::Base
|
|
36
36
|
end
|
37
37
|
|
38
38
|
def within?(account)
|
39
|
-
account
|
39
|
+
current_count(account) <= value
|
40
40
|
end
|
41
41
|
|
42
42
|
def can_add_one?(account)
|
43
|
-
(account
|
43
|
+
(current_count(account) + 1) <= value
|
44
|
+
end
|
45
|
+
|
46
|
+
def current_count(account)
|
47
|
+
account.send(:"#{name}_count")
|
44
48
|
end
|
45
49
|
end
|
@@ -8,6 +8,10 @@
|
|
8
8
|
<h3>Your Plan</h3>
|
9
9
|
<%= render @account.plan %>
|
10
10
|
<%= link_to "Upgrade", edit_account_plan_path(current_account), :id => "upgrade-account" %>
|
11
|
+
|
12
|
+
<% @account.plan.limits.numbered.each do |limit| -%>
|
13
|
+
<%= render_limit_meter(limit) %>
|
14
|
+
<% end -%>
|
11
15
|
</div>
|
12
16
|
|
13
17
|
<%= content_tag_for :div, @account do -%>
|
@@ -0,0 +1,13 @@
|
|
1
|
+
<%= content_tag_for :div, limit, :class => "#{limit.name} meter" do %>
|
2
|
+
<span class="numbers">
|
3
|
+
<em><%= limit.current_count(current_account) %></em><span>/<%= limit.value %></span>
|
4
|
+
</span>
|
5
|
+
<span class="label">
|
6
|
+
<%= limit.name %>
|
7
|
+
</span>
|
8
|
+
<div class="bar">
|
9
|
+
<span style="width: <%= current_percentage(limit, current_account) %>;">
|
10
|
+
<%= current_percentage(limit, current_account) %>
|
11
|
+
</span>
|
12
|
+
</div>
|
13
|
+
<% end %>
|
@@ -123,3 +123,21 @@ Feature: Manage Plan
|
|
123
123
|
And I should see "5 projects" within ".basic"
|
124
124
|
And I should see "ssl" within ".basic"
|
125
125
|
And I should not see "ssl" within ".free"
|
126
|
+
|
127
|
+
Scenario: Viewing current usage
|
128
|
+
Given a paid plan exists with a name of "Basic"
|
129
|
+
And the following account exists:
|
130
|
+
| name | keyword | plan | cardholder_name | billing_email | card_number | verification_code | expiration_month | expiration_year |
|
131
|
+
| Test | test | name: Basic | Joe Smith | jsmith@example.com | 4111111111115555 | 122 | 01 | 2015 |
|
132
|
+
And the following limits exist:
|
133
|
+
| plan | name | value | value_type |
|
134
|
+
| name: Basic | users | 1 | number |
|
135
|
+
| name: Basic | projects | 5 | number |
|
136
|
+
| name: Basic | ssl | 1 | boolean |
|
137
|
+
And I have signed in with "joe@example.com/test"
|
138
|
+
And "joe@example.com" is an admin of the "Test" account
|
139
|
+
When I go to the settings page for the "Test" account
|
140
|
+
Then I should see "1/1" within ".users.meter"
|
141
|
+
And I should see "100.000%" within ".users.meter"
|
142
|
+
And I should see "0/5" within ".projects.meter"
|
143
|
+
And I should see "0.000%" within ".projects.meter"
|
@@ -81,7 +81,7 @@ class CreateSaucyTables < ActiveRecord::Migration
|
|
81
81
|
create_table :limits do |t|
|
82
82
|
t.belongs_to :plan
|
83
83
|
t.string :name
|
84
|
-
t.
|
84
|
+
t.column :value, 'BIGINT UNSIGNED', :null => false, :default => 0
|
85
85
|
t.string :value_type, :null => false, :default => "number"
|
86
86
|
|
87
87
|
t.timestamps
|
data/lib/saucy/engine.rb
CHANGED
data/spec/models/limit_spec.rb
CHANGED
@@ -45,6 +45,11 @@ describe Limit, "with account and limits" do
|
|
45
45
|
subject.within?(@account)
|
46
46
|
end
|
47
47
|
|
48
|
+
it "gives the current count for the account of the limit" do
|
49
|
+
@account.stubs(:users_count => 99)
|
50
|
+
subject.current_count(@account).should == 99
|
51
|
+
end
|
52
|
+
|
48
53
|
it "can query whether the given account is below the specified limit" do
|
49
54
|
Limit.within?("users", @account)
|
50
55
|
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:
|
4
|
+
hash: 21
|
5
5
|
prerelease: false
|
6
6
|
segments:
|
7
7
|
- 0
|
8
8
|
- 3
|
9
|
-
-
|
10
|
-
version: 0.3.
|
9
|
+
- 3
|
10
|
+
version: 0.3.3
|
11
11
|
platform: ruby
|
12
12
|
authors:
|
13
13
|
- thoughtbot, inc.
|
@@ -18,7 +18,7 @@ autorequire:
|
|
18
18
|
bindir: bin
|
19
19
|
cert_chain: []
|
20
20
|
|
21
|
-
date: 2011-03-
|
21
|
+
date: 2011-03-22 00:00:00 -04:00
|
22
22
|
default_executable:
|
23
23
|
dependencies:
|
24
24
|
- !ruby/object:Gem::Dependency
|
@@ -137,6 +137,7 @@ files:
|
|
137
137
|
- app/controllers/memberships_controller.rb
|
138
138
|
- app/controllers/plans_controller.rb
|
139
139
|
- app/controllers/profiles_controller.rb
|
140
|
+
- app/helpers/limits_helper.rb
|
140
141
|
- app/mailers/billing_mailer.rb
|
141
142
|
- app/mailers/invitation_mailer.rb
|
142
143
|
- app/models/invitation.rb
|
@@ -164,6 +165,7 @@ files:
|
|
164
165
|
- app/views/invitations/new.html.erb
|
165
166
|
- app/views/invitations/show.html.erb
|
166
167
|
- app/views/layouts/saucy.html.erb
|
168
|
+
- app/views/limits/_meter.html.erb
|
167
169
|
- app/views/memberships/edit.html.erb
|
168
170
|
- app/views/memberships/index.html.erb
|
169
171
|
- app/views/plans/_plan.html.erb
|