saasy 0.0.1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (146) hide show
  1. data/CHANGELOG.md +114 -0
  2. data/Gemfile +26 -0
  3. data/README.md +118 -0
  4. data/Rakefile +38 -0
  5. data/app/controllers/accounts_controller.rb +68 -0
  6. data/app/controllers/billings_controller.rb +25 -0
  7. data/app/controllers/invitations_controller.rb +65 -0
  8. data/app/controllers/memberships_controller.rb +45 -0
  9. data/app/controllers/plans_controller.rb +24 -0
  10. data/app/controllers/profiles_controller.rb +19 -0
  11. data/app/helpers/limits_helper.rb +13 -0
  12. data/app/mailers/billing_mailer.rb +53 -0
  13. data/app/mailers/invitation_mailer.rb +18 -0
  14. data/app/models/invitation.rb +113 -0
  15. data/app/models/limit.rb +49 -0
  16. data/app/models/membership.rb +26 -0
  17. data/app/models/permission.rb +19 -0
  18. data/app/models/signup.rb +163 -0
  19. data/app/views/accounts/_account.html.erb +9 -0
  20. data/app/views/accounts/_blank_slate.html.erb +6 -0
  21. data/app/views/accounts/_projects.html.erb +12 -0
  22. data/app/views/accounts/_subnav.html.erb +10 -0
  23. data/app/views/accounts/edit.html.erb +34 -0
  24. data/app/views/accounts/index.html.erb +9 -0
  25. data/app/views/accounts/new.html.erb +36 -0
  26. data/app/views/billing_mailer/completed_trial.text.erb +13 -0
  27. data/app/views/billing_mailer/expiring_trial.text.erb +15 -0
  28. data/app/views/billing_mailer/new_unactivated.text.erb +1 -0
  29. data/app/views/billing_mailer/problem.html.erb +13 -0
  30. data/app/views/billing_mailer/problem.text.erb +14 -0
  31. data/app/views/billing_mailer/receipt.html.erb +41 -0
  32. data/app/views/billing_mailer/receipt.text.erb +25 -0
  33. data/app/views/billings/_form.html.erb +8 -0
  34. data/app/views/billings/edit.html.erb +13 -0
  35. data/app/views/billings/show.html.erb +29 -0
  36. data/app/views/invitation_mailer/invitation.text.erb +6 -0
  37. data/app/views/invitations/new.html.erb +17 -0
  38. data/app/views/invitations/show.html.erb +22 -0
  39. data/app/views/layouts/saucy.html.erb +36 -0
  40. data/app/views/limits/_meter.html.erb +13 -0
  41. data/app/views/memberships/edit.html.erb +21 -0
  42. data/app/views/memberships/index.html.erb +17 -0
  43. data/app/views/plans/_plan.html.erb +32 -0
  44. data/app/views/plans/_terms.html.erb +15 -0
  45. data/app/views/plans/edit.html.erb +33 -0
  46. data/app/views/plans/index.html.erb +12 -0
  47. data/app/views/profiles/_inputs.html.erb +5 -0
  48. data/app/views/profiles/edit.html.erb +36 -0
  49. data/app/views/projects/_form.html.erb +36 -0
  50. data/app/views/projects/edit.html.erb +22 -0
  51. data/app/views/projects/index.html.erb +28 -0
  52. data/app/views/projects/new.html.erb +13 -0
  53. data/app/views/projects/show.html.erb +0 -0
  54. data/app/views/shared/_project_dropdown.html.erb +55 -0
  55. data/app/views/shared/_saucy_javascript.html.erb +33 -0
  56. data/config/locales/en.yml +37 -0
  57. data/config/routes.rb +19 -0
  58. data/features/run_features.feature +83 -0
  59. data/features/step_definitions/clearance_steps.rb +45 -0
  60. data/features/step_definitions/rails_steps.rb +73 -0
  61. data/features/step_definitions/saucy_steps.rb +8 -0
  62. data/features/support/env.rb +4 -0
  63. data/features/support/file.rb +11 -0
  64. data/lib/generators/saucy/base.rb +18 -0
  65. data/lib/generators/saucy/features/features_generator.rb +91 -0
  66. data/lib/generators/saucy/features/templates/README +3 -0
  67. data/lib/generators/saucy/features/templates/factories.rb +71 -0
  68. data/lib/generators/saucy/features/templates/features/edit_profile.feature +9 -0
  69. data/lib/generators/saucy/features/templates/features/edit_project_permissions.feature +37 -0
  70. data/lib/generators/saucy/features/templates/features/edit_user_permissions.feature +47 -0
  71. data/lib/generators/saucy/features/templates/features/manage_account.feature +35 -0
  72. data/lib/generators/saucy/features/templates/features/manage_billing.feature +93 -0
  73. data/lib/generators/saucy/features/templates/features/manage_plan.feature +143 -0
  74. data/lib/generators/saucy/features/templates/features/manage_projects.feature +139 -0
  75. data/lib/generators/saucy/features/templates/features/manage_users.feature +142 -0
  76. data/lib/generators/saucy/features/templates/features/new_account.feature +33 -0
  77. data/lib/generators/saucy/features/templates/features/project_dropdown.feature +77 -0
  78. data/lib/generators/saucy/features/templates/features/sign_up.feature +32 -0
  79. data/lib/generators/saucy/features/templates/features/sign_up_paid.feature +65 -0
  80. data/lib/generators/saucy/features/templates/features/trial_plans.feature +82 -0
  81. data/lib/generators/saucy/features/templates/step_definitions/account_steps.rb +30 -0
  82. data/lib/generators/saucy/features/templates/step_definitions/braintree_steps.rb +25 -0
  83. data/lib/generators/saucy/features/templates/step_definitions/cron_steps.rb +23 -0
  84. data/lib/generators/saucy/features/templates/step_definitions/email_steps.rb +40 -0
  85. data/lib/generators/saucy/features/templates/step_definitions/factory_girl_steps.rb +1 -0
  86. data/lib/generators/saucy/features/templates/step_definitions/html_steps.rb +51 -0
  87. data/lib/generators/saucy/features/templates/step_definitions/plan_steps.rb +16 -0
  88. data/lib/generators/saucy/features/templates/step_definitions/project_steps.rb +4 -0
  89. data/lib/generators/saucy/features/templates/step_definitions/session_steps.rb +37 -0
  90. data/lib/generators/saucy/features/templates/step_definitions/user_steps.rb +100 -0
  91. data/lib/generators/saucy/features/templates/support/braintree.rb +5 -0
  92. data/lib/generators/saucy/install/install_generator.rb +40 -0
  93. data/lib/generators/saucy/install/templates/controllers/projects_controller.rb +3 -0
  94. data/lib/generators/saucy/install/templates/create_saucy_tables.rb +115 -0
  95. data/lib/generators/saucy/install/templates/models/account.rb +3 -0
  96. data/lib/generators/saucy/install/templates/models/plan.rb +3 -0
  97. data/lib/generators/saucy/install/templates/models/project.rb +3 -0
  98. data/lib/generators/saucy/specs/specs_generator.rb +20 -0
  99. data/lib/generators/saucy/specs/templates/support/braintree.rb +5 -0
  100. data/lib/generators/saucy/views/views_generator.rb +23 -0
  101. data/lib/saucy.rb +10 -0
  102. data/lib/saucy/account.rb +132 -0
  103. data/lib/saucy/account_authorization.rb +67 -0
  104. data/lib/saucy/configuration.rb +29 -0
  105. data/lib/saucy/engine.rb +35 -0
  106. data/lib/saucy/fake_braintree.rb +134 -0
  107. data/lib/saucy/layouts.rb +36 -0
  108. data/lib/saucy/plan.rb +54 -0
  109. data/lib/saucy/project.rb +125 -0
  110. data/lib/saucy/projects_controller.rb +94 -0
  111. data/lib/saucy/railties/tasks.rake +28 -0
  112. data/lib/saucy/routing_extensions.rb +121 -0
  113. data/lib/saucy/subscription.rb +237 -0
  114. data/lib/saucy/user.rb +30 -0
  115. data/spec/controllers/accounts_controller_spec.rb +228 -0
  116. data/spec/controllers/application_controller_spec.rb +32 -0
  117. data/spec/controllers/invitations_controller_spec.rb +215 -0
  118. data/spec/controllers/memberships_controller_spec.rb +117 -0
  119. data/spec/controllers/plans_controller_spec.rb +13 -0
  120. data/spec/controllers/profiles_controller_spec.rb +48 -0
  121. data/spec/controllers/projects_controller_spec.rb +216 -0
  122. data/spec/environment.rb +95 -0
  123. data/spec/layouts_spec.rb +21 -0
  124. data/spec/mailers/billing_mailer_spec.rb +68 -0
  125. data/spec/mailers/invitiation_mailer_spec.rb +19 -0
  126. data/spec/models/account_spec.rb +218 -0
  127. data/spec/models/invitation_spec.rb +320 -0
  128. data/spec/models/limit_spec.rb +70 -0
  129. data/spec/models/membership_spec.rb +37 -0
  130. data/spec/models/permission_spec.rb +30 -0
  131. data/spec/models/plan_spec.rb +81 -0
  132. data/spec/models/project_spec.rb +223 -0
  133. data/spec/models/signup_spec.rb +177 -0
  134. data/spec/models/subscription_spec.rb +481 -0
  135. data/spec/models/user_spec.rb +72 -0
  136. data/spec/route_extensions_spec.rb +51 -0
  137. data/spec/saucy_spec.rb +62 -0
  138. data/spec/scaffold/config/routes.rb +5 -0
  139. data/spec/spec_helper.rb +39 -0
  140. data/spec/support/authentication_helpers.rb +81 -0
  141. data/spec/support/authorization_helpers.rb +56 -0
  142. data/spec/support/braintree.rb +7 -0
  143. data/spec/support/clearance_matchers.rb +55 -0
  144. data/spec/support/notifications.rb +57 -0
  145. data/spec/views/accounts/_account.html.erb_spec.rb +37 -0
  146. metadata +325 -0
@@ -0,0 +1,9 @@
1
+ <%= content_tag_for :div, account do -%>
2
+ <div class="account-header">
3
+ <h3><%= account.name %></h3>
4
+ </div>
5
+
6
+ <%= render 'accounts/projects',
7
+ :projects => projects,
8
+ :account => account %>
9
+ <% end -%>
@@ -0,0 +1,6 @@
1
+ <div id="blank_slate_accounts">
2
+ <h6>You don't have any projects yet</h6>
3
+ <%= link_to 'Create a project',
4
+ new_account_project_path(account),
5
+ :class => 'blank_slate_action' %>
6
+ </div>
@@ -0,0 +1,12 @@
1
+ <% if projects.empty? -%>
2
+ <%= render 'accounts/blank_slate', :account => account %>
3
+ <% else -%>
4
+ <ul class="projects">
5
+ <% projects.each do |project| -%>
6
+ <%= content_tag_for :li, project do -%>
7
+ <%= link_to h(project.name), project_path(project) %>
8
+ <% end -%>
9
+ <% end -%>
10
+ </ul>
11
+ <% end -%>
12
+
@@ -0,0 +1,10 @@
1
+ <% content_for :subnav do -%>
2
+ <ul class="subnav">
3
+ <li class="accounts"><%= link_to "Account Info", edit_account_url(current_account) %></li>
4
+ <li class="projects"><%= link_to "Projects", account_projects_url(current_account) %></li>
5
+ <li class="users"><%= link_to "Users", account_memberships_url(current_account) %></li>
6
+ <% if current_account.plan.billed? %>
7
+ <li class="billing"><%= link_to "Billing", account_billing_path(current_account) %></li>
8
+ <% end -%>
9
+ </ul>
10
+ <% end -%>
@@ -0,0 +1,34 @@
1
+ <% content_for :header do -%>
2
+ <h2>Account Settings</h2>
3
+ <% end -%>
4
+
5
+ <%= render :partial => 'subnav' %>
6
+
7
+ <div class="plan current">
8
+ <h3>Your Plan</h3>
9
+ <%= render @account.plan %>
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 -%>
15
+ </div>
16
+
17
+ <%= content_tag_for :div, @account do -%>
18
+ <%= semantic_form_for @account do |form| %>
19
+ <%= form.inputs do %>
20
+ <%= form.input :name, :label => "Account name" %>
21
+ <%= form.input :keyword %>
22
+ <% end %>
23
+
24
+ <%= form.buttons do %>
25
+ <%= form.commit_button "Update" %>
26
+ <li>
27
+ <%= link_to t(".delete", :default => "Delete my account"),
28
+ @account,
29
+ :method => :delete,
30
+ :confirm => "Are you sure? All data will be irreversibly deleted." %>
31
+ </li>
32
+ <% end %>
33
+ <% end %>
34
+ <% end -%>
@@ -0,0 +1,9 @@
1
+ <% content_for :header do -%>
2
+ <h2>Accounts</h2>
3
+ <% end -%>
4
+
5
+ <% @accounts.each do |account| -%>
6
+ <%= render 'account', :account => account,
7
+ :projects => account.projects_visible_to(current_user) %>
8
+ <% end -%>
9
+
@@ -0,0 +1,36 @@
1
+ <% content_for :header do -%>
2
+ <h2>Sign up</h2>
3
+ <% end -%>
4
+
5
+ <%= semantic_form_for @signup, :url => plan_accounts_path(@plan) do |form| %>
6
+ <div class="plan chosen">
7
+ <h3>You're signing up for:</h3>
8
+ <%= render @plan %>
9
+ <%= link_to "Change this plan", plans_path %>
10
+ </div>
11
+
12
+ <% unless signed_in? -%>
13
+ <h5 class="legend">User Information</h5>
14
+ <%= form.inputs do %>
15
+ <%= form.input :email, :required => true %>
16
+ <%= form.input :password, :required => true %>
17
+ <% end -%>
18
+ <% else -%>
19
+ <p id="existing-user-text">Your existing user, <strong><%= current_user.name %></strong>, will be added as the first administrator on this new account.</p>
20
+ <% end -%>
21
+
22
+ <% if @plan.billed? -%>
23
+ <h5 class="legend">Billing Information</h5>
24
+ <%= render :partial => 'billings/form', :locals => { :form => form } %>
25
+ <% end -%>
26
+
27
+ <p id="terms-text">By clicking <strong>Sign up</strong> you agree to our <%= link_to "Terms of Service", "/pages/terms" %>.</p>
28
+
29
+ <%= form.buttons do %>
30
+ <%= form.commit_button "Sign up" %>
31
+ <% end %>
32
+ <% end %>
33
+
34
+ <%= render "plans/terms" %>
35
+
36
+ <%= render :partial => "shared/saucy_javascript" %>
@@ -0,0 +1,13 @@
1
+ <%= t(".greeting") %>
2
+
3
+ <%= t(".notice", :account_name => @account.name, :app_name => t("app_name")) %>
4
+
5
+ <%= edit_account_plan_url(@account) %>
6
+
7
+ <%= t(".contact", :app_name => t("app_name")) %>
8
+
9
+ ============================================================
10
+
11
+ Thanks for your business,
12
+ The <%= t("app_name") %> Team
13
+ <%= t("app_url") %>
@@ -0,0 +1,15 @@
1
+ <%= t(".greeting") %>
2
+
3
+ <%= t(".expiration_notice",
4
+ :account_name => @account.name,
5
+ :app_name => t("app_name")) %>
6
+
7
+ <%= edit_account_plan_url(@account) %>
8
+
9
+ <%= t(".contact", :app_name => t("app_name")) %>
10
+
11
+ ============================================================
12
+
13
+ Thanks for your business,
14
+ The <%= t("app_name") %> Team
15
+ <%= t("app_url") %>
@@ -0,0 +1 @@
1
+ <%= t(".body", :app_name => t("app_name"), :new_project_url => new_account_project_url(@account)) %>
@@ -0,0 +1,13 @@
1
+ <p>Unfortunately there was a problem processing your latest payment for your <%= @account.name -%> account on <%= t("app_name") %>.</p>
2
+
3
+ <p>Some functionality of your <%= @account.name -%> account on <%= t("app_name") %> is now disabled.</p>
4
+
5
+ <p>Please verify and fix the credit card details <%= link_to "here", account_billing_url(@account) %> to restore full access to the account.</p>
6
+
7
+ <p>If you have any questions, please contact us anytime at <%= mail_to t("support_email"), t("support_email") %>.</p>
8
+
9
+ <hr/>
10
+
11
+ <p>Thanks for your business,<br/>
12
+ The <%= t("app_name") %> Team<br/>
13
+ <%= t("app_url") %></p>
@@ -0,0 +1,14 @@
1
+ Unfortunately there was a problem processing your latest payment for your <%= @account.name -%> account on <%= t("app_name") %>.
2
+
3
+ Some functionality of your <%= @account.name -%> account on <%= t("app_name") %> is now disabled.
4
+
5
+ Please verify and fix the credit card details at the following url to restore full access to the account:
6
+ <%= account_billing_url(@account) %>
7
+
8
+ If you have any questions, please contact us anytime at <%= t("support_email") %>.
9
+
10
+ ============================================================
11
+
12
+ Thanks for your business,
13
+ The <%= t("app_name") %> Team
14
+ <%= t("app_url") %>
@@ -0,0 +1,41 @@
1
+ <p><strong>Thanks for your business!</strong></p>
2
+
3
+ <p>The latest payment for your <strong><%= @account.name -%> account on <%= t("app_name") %></strong> has been approved. This is only a receipt, no payment is due. If you have any questions, please contact us anytime at <%= mail_to t("support_email"), t("support_email") %></p>
4
+
5
+ <hr/>
6
+
7
+ <table>
8
+ <tr>
9
+ <td>
10
+ RECEIPT
11
+ </td>
12
+ <td>
13
+ <%= @transaction.created_at.to_s(:short_date) -%>
14
+ </td>
15
+ </tr>
16
+ <tr>
17
+ <td colspan="2">
18
+ Plan: <%= @account.plan.name -%></br>
19
+ Charge: USD <%= number_to_currency @account.plan.price -%>*<br/>
20
+ Credit card: XXXX-XXXX-XXXX-<%= @account.credit_card.last_4 %>
21
+
22
+ <p><small>* EU customers: prices exclude VAT</small></p>
23
+ </td>
24
+ </tr>
25
+ <tr>
26
+ <td>
27
+ <%= t("saucy.billing_address") %>
28
+ </td>
29
+ <td>
30
+ <strong>Bill to:</strong><br/>
31
+ <%= @account.name %><br/>
32
+ <%= @account.credit_card.cardholder_name %>
33
+ </td>
34
+ </tr>
35
+ </table>
36
+
37
+ <hr/>
38
+
39
+ <p>Thanks for your business,<br/>
40
+ The <%= t("app_name") %> Team<br/>
41
+ <%= link_to t("app_url"), t("app_url") %></p>
@@ -0,0 +1,25 @@
1
+ Thanks for your business!
2
+
3
+ The latest payment for your <%= @account.name -%> account on <%= t("app_name") %> has been approved. This is only a receipt, no payment is due. If you have any questions, please contact us anytime at <%= t("support_email") %>.
4
+
5
+ ============================================================
6
+ RECEIPT <%= @transaction.created_at.to_s(:short_date) -%>
7
+
8
+
9
+ Plan: <%= @account.plan.name -%>
10
+ Charge: USD <%= number_to_currency @account.plan.price -%>*
11
+ Credit card: XXXX-XXXX-XXXX-<%= @account.credit_card.last_4 %>
12
+
13
+ <%= t("saucy.billing_address") %>
14
+
15
+ Bill to:
16
+ <%= @account.name %>
17
+ <%= @account.credit_card.cardholder_name %>
18
+
19
+ * EU customers: prices exclude VAT
20
+
21
+ ============================================================
22
+
23
+ Thanks for your business,
24
+ The <%= t("app_name") %> Team
25
+ <%= t("app_url") %>
@@ -0,0 +1,8 @@
1
+ <%= form.inputs do %>
2
+ <%= form.input :cardholder_name, :required => true %>
3
+ <%= form.input :billing_email, :required => true, :hint => "We'll send receipts and billing issues to this address." %>
4
+ <%= form.input :card_number, :required => true, :input_html => { :autocomplete => "off" } %>
5
+ <%= form.input :verification_code, :required => true, :input_html => { :autocomplete => "off" } %>
6
+ <%= form.input :expiration_month, :collection => [['January', '01'], ['February', '02'], ['March', '03'], ['April', '04'], ['May', '05'], ['June', '06'], ['July', '07'], ['August', '08'], ['September', '09'], ['October', '10'], ['November', '11'], ['December', '12']], :required => true %>
7
+ <%= form.input :expiration_year, :collection => (Date.today.year..(Date.today.year+10)).to_a, :required => true %>
8
+ <% end -%>
@@ -0,0 +1,13 @@
1
+ <%= content_for :header do -%>
2
+ <h2>Billing Information</h2>
3
+ <% end -%>
4
+
5
+ <%= render :partial => 'accounts/subnav' %>
6
+
7
+ <%= semantic_form_for @account, :url => account_billing_path(@account) do |form| %>
8
+ <%= render :partial => 'billings/form', :locals => { :form => form } %>
9
+
10
+ <%= form.buttons do %>
11
+ <%= form.commit_button "Update" %>
12
+ <% end %>
13
+ <% end %>
@@ -0,0 +1,29 @@
1
+ <% if current_user.admin_of?(current_account) -%>
2
+ <% content_for :header do -%>
3
+ <h2>Billing Information</h2>
4
+ <% end -%>
5
+
6
+ <%= render :partial => 'accounts/subnav' %>
7
+
8
+ <div class="current_credit_card">
9
+ <p>We're currently charging the credit card ending in <%= current_account.credit_card.last_4 %>. <%= link_to "Change", edit_account_billing_path(current_account) %></p>
10
+ </div>
11
+ <div class="billing_history">
12
+ <h3>Your Invoices</h3>
13
+ <% if current_account.subscription.transactions.any? -%>
14
+ <table>
15
+ <tr>
16
+ <th>Date</th>
17
+ <th>Amount</th>
18
+ </tr>
19
+ <% current_account.subscription.transactions.each do |transaction| -%>
20
+ <tr>
21
+ <td><%= transaction.created_at.to_s(:short_date) %></td> <td><%= number_to_currency transaction.amount %></td>
22
+ </tr>
23
+ <% end -%>
24
+ </table>
25
+ <% else -%>
26
+ <p>There have been no invoices yet.</p>
27
+ <% end -%>
28
+ </div>
29
+ <% end -%>
@@ -0,0 +1,6 @@
1
+ You have been invited to join the <%= @invitation.account_name %> account.
2
+
3
+ Go to the following URL to accept this invitation:
4
+
5
+ <%= invitation_url(@invitation) %>
6
+
@@ -0,0 +1,17 @@
1
+ <% content_for :header do -%>
2
+ <h2>Invite a new User</h2>
3
+ <% end -%>
4
+
5
+ <%= render :partial => 'accounts/subnav' %>
6
+
7
+ <%= semantic_form_for [current_account, @invitation] do |form| -%>
8
+ <%= form.inputs do -%>
9
+ <%= form.input :email %>
10
+ <%= form.input :admin, :label => "Grant administrator privileges" %>
11
+ <%= form.input :projects, :as => :check_boxes, :collection => @projects %>
12
+ <% end -%>
13
+
14
+ <%= form.buttons do -%>
15
+ <%= form.commit_button "Invite User" %>
16
+ <% end -%>
17
+ <% end -%>
@@ -0,0 +1,22 @@
1
+ <% content_for :header do -%>
2
+ <h2>Accept invitation to <%= @invitation.account_name %></h2>
3
+ <% end -%>
4
+
5
+ <%= semantic_form_for @invitation do |form| %>
6
+ <h5 class="legend">I am a new user</h5>
7
+ <%= form.inputs :class => 'new_user' do -%>
8
+ <%= form.input :new_user_email, :label => 'Email' %>
9
+ <%= form.input :new_user_name, :label => 'Name' %>
10
+ <%= form.input :new_user_password, :label => 'Password' %>
11
+ <% end -%>
12
+
13
+ <h5 class="legend">I am an existing user</h5>
14
+ <%= form.inputs :class => 'existing_user' do -%>
15
+ <%= form.input :authenticating_user_email, :label => 'Email' %>
16
+ <%= form.input :authenticating_user_password, :label => 'Password' %>
17
+ <% end -%>
18
+
19
+ <%= form.buttons do %>
20
+ <%= form.commit_button "Accept Invitation" %>
21
+ <% end %>
22
+ <% end %>
@@ -0,0 +1,36 @@
1
+ <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
2
+ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
3
+ <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
4
+ <head>
5
+ <meta http-equiv="Content-type" content="text/html; charset=utf-8" />
6
+ <%= csrf_meta_tag %>
7
+ </head>
8
+
9
+ <body class="saucy">
10
+ <% flash.each do |key, value| -%>
11
+ <%= value %>
12
+ <% end -%>
13
+
14
+ <% if signed_in? -%>
15
+ <%= render :partial => 'shared/project_dropdown' %>
16
+ <% else %>
17
+ <%= link_to root_url do %>
18
+ <h1><%= t("app_name") %></h1>
19
+ <% end %>
20
+ <% end %>
21
+
22
+ <% if signed_in? -%>
23
+ <%= link_to 'Sign out', sign_out_path, :method => :delete %>
24
+ <% else -%>
25
+ <%= link_to 'Sign in', sign_in_path %>
26
+ <% end -%>
27
+
28
+ <%= yield :subnav %>
29
+ <%= yield :header %>
30
+
31
+ <%= yield %>
32
+
33
+ <%= javascript_include_tag 'jquery' %>
34
+ <%= yield :javascript %>
35
+ </body>
36
+ </html>
@@ -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 %>
@@ -0,0 +1,21 @@
1
+ <% content_for :header do -%>
2
+ <h2>Permissions for <span><%= @membership.name %></span> on <%= current_account.name %></h2>
3
+ <% end -%>
4
+
5
+ <div class="actions">
6
+ <%= link_to @membership, :method => :delete, :confirm => "Are you sure?" do %>
7
+ <span class="delete_item">Remove <%= @membership.user.name %> from <%= current_account.name %></span>
8
+ <% end -%>
9
+ </div>
10
+
11
+ <%= render :partial => 'accounts/subnav' %>
12
+
13
+ <%= semantic_form_for @membership do |form| -%>
14
+ <%= form.inputs do -%>
15
+ <%= form.input :admin, :label => "#{@membership.user.name} is an Admin on #{current_account.name}" %>
16
+ <%= form.input :projects, :as => :check_boxes, :collection => @projects, :label => "#{@membership.user.name} belongs to these projects:" %>
17
+ <% end -%>
18
+ <%= form.buttons do -%>
19
+ <%= form.commit_button "Update" %>
20
+ <% end -%>
21
+ <% end -%>
@@ -0,0 +1,17 @@
1
+ <% content_for :header do -%>
2
+ <h2>Users for <span><%= current_account.name %></span></h2>
3
+ <% end -%>
4
+
5
+ <%= render :partial => 'accounts/subnav' %>
6
+
7
+ <ul class="users">
8
+ <% @memberships.each do |membership| -%>
9
+ <%= content_tag_for :li, membership.user do -%>
10
+ <%= link_to [:edit, membership] do %>
11
+ <%= membership.name %> <span>(<%= membership.email %>)</span>
12
+ <% end -%>
13
+ <% end -%>
14
+ <% end -%>
15
+ </ul>
16
+
17
+ <%= link_to 'Invite user', new_account_invitation_path(current_account), :class => "button"%>