saucy 0.12.5 → 0.13.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.
- data/CHANGELOG.md +12 -0
 - data/Rakefile +3 -0
 - data/app/models/canceled_account.rb +18 -0
 - data/app/models/signup.rb +1 -0
 - data/app/views/plans/edit.html.erb +8 -0
 - data/lib/generators/saucy/features/templates/features/manage_plan.feature +1 -0
 - data/lib/generators/saucy/features/templates/features/trial_plans.feature +9 -0
 - data/lib/generators/saucy/install/install_generator.rb +4 -0
 - data/lib/saucy/account.rb +8 -0
 - data/spec/environment.rb +2 -0
 - data/spec/models/account_spec.rb +13 -0
 - data/spec/models/canceled_account_spec.rb +47 -0
 - data/spec/models/signup_spec.rb +10 -0
 - metadata +7 -5
 
    
        data/CHANGELOG.md
    CHANGED
    
    | 
         @@ -1,3 +1,15 @@ 
     | 
|
| 
      
 1 
     | 
    
         
            +
            0.13.0
         
     | 
| 
      
 2 
     | 
    
         
            +
             
     | 
| 
      
 3 
     | 
    
         
            +
            * Populate braintree customer email with admin email its not set
         
     | 
| 
      
 4 
     | 
    
         
            +
            * Keep track of canceled accounts, this is a non-backwards compatible change and when upgrading saucy you will need to run the following:
         
     | 
| 
      
 5 
     | 
    
         
            +
             
     | 
| 
      
 6 
     | 
    
         
            +
                bundle exec rake saucy_engine:install:migrations db:migrate
         
     | 
| 
      
 7 
     | 
    
         
            +
             
     | 
| 
      
 8 
     | 
    
         
            +
            * Allow users in an expired trial to delete their account
         
     | 
| 
      
 9 
     | 
    
         
            +
             
     | 
| 
      
 10 
     | 
    
         
            +
            With this release you will also want to regenerate the saucy features (`rails g saucy:features`), or look at the commit diffs and
         
     | 
| 
      
 11 
     | 
    
         
            +
            introduce the above two changes yourself.
         
     | 
| 
      
 12 
     | 
    
         
            +
             
     | 
| 
       1 
13 
     | 
    
         
             
            0.12.5
         
     | 
| 
       2 
14 
     | 
    
         | 
| 
       3 
15 
     | 
    
         
             
            * 0.12.3 and 0.12.14 were built using the wrong version of ruby/rubygems
         
     | 
    
        data/Rakefile
    CHANGED
    
    | 
         @@ -5,6 +5,9 @@ require 'rubygems/package_task' 
     | 
|
| 
       5 
5 
     | 
    
         
             
            require 'cucumber/rake/task'
         
     | 
| 
       6 
6 
     | 
    
         
             
            require 'rspec/core/rake_task'
         
     | 
| 
       7 
7 
     | 
    
         | 
| 
      
 8 
     | 
    
         
            +
            APP_RAKEFILE = File.expand_path("../tmp/aruba/testapp/Rakefile", __FILE__)
         
     | 
| 
      
 9 
     | 
    
         
            +
            load 'rails/tasks/engine.rake'
         
     | 
| 
      
 10 
     | 
    
         
            +
             
     | 
| 
       8 
11 
     | 
    
         
             
            desc 'Default: run all tests'
         
     | 
| 
       9 
12 
     | 
    
         
             
            task :default => [:spec, :cucumber]
         
     | 
| 
       10 
13 
     | 
    
         | 
| 
         @@ -0,0 +1,18 @@ 
     | 
|
| 
      
 1 
     | 
    
         
            +
            class CanceledAccount < ActiveRecord::Base
         
     | 
| 
      
 2 
     | 
    
         
            +
              attr_accessor :account
         
     | 
| 
      
 3 
     | 
    
         
            +
             
     | 
| 
      
 4 
     | 
    
         
            +
              belongs_to :plan
         
     | 
| 
      
 5 
     | 
    
         
            +
             
     | 
| 
      
 6 
     | 
    
         
            +
              before_validation :populate_from_account, :on => :create, :if => :account
         
     | 
| 
      
 7 
     | 
    
         
            +
             
     | 
| 
      
 8 
     | 
    
         
            +
              private
         
     | 
| 
      
 9 
     | 
    
         
            +
             
     | 
| 
      
 10 
     | 
    
         
            +
              def populate_from_account
         
     | 
| 
      
 11 
     | 
    
         
            +
                self.name          = account.name
         
     | 
| 
      
 12 
     | 
    
         
            +
                self.keyword       = account.keyword
         
     | 
| 
      
 13 
     | 
    
         
            +
                self.billing_email = account.customer.email
         
     | 
| 
      
 14 
     | 
    
         
            +
                self.memberships   = account.memberships.to_json(:include => { :user => { :only => [:email, :name, :created_at]}}, :only => [:admin, :created_at])
         
     | 
| 
      
 15 
     | 
    
         
            +
                self.plan          = account.plan
         
     | 
| 
      
 16 
     | 
    
         
            +
                self.started_at    = account.created_at
         
     | 
| 
      
 17 
     | 
    
         
            +
              end
         
     | 
| 
      
 18 
     | 
    
         
            +
            end
         
     | 
    
        data/app/models/signup.rb
    CHANGED
    
    
| 
         @@ -27,6 +27,14 @@ 
     | 
|
| 
       27 
27 
     | 
    
         | 
| 
       28 
28 
     | 
    
         
             
              <%= form.buttons do %>
         
     | 
| 
       29 
29 
     | 
    
         
             
                <%= form.commit_button "Upgrade" %>
         
     | 
| 
      
 30 
     | 
    
         
            +
                <% if @account.expired? %>
         
     | 
| 
      
 31 
     | 
    
         
            +
                  <li>
         
     | 
| 
      
 32 
     | 
    
         
            +
                    <%= link_to t(".delete.expired", :default => "No thanks, just delete my account"),
         
     | 
| 
      
 33 
     | 
    
         
            +
                                  @account,
         
     | 
| 
      
 34 
     | 
    
         
            +
                                  :method  => :delete,
         
     | 
| 
      
 35 
     | 
    
         
            +
                                  :confirm => "Are you sure? All data will be irreversibly deleted." %>
         
     | 
| 
      
 36 
     | 
    
         
            +
                  </li>
         
     | 
| 
      
 37 
     | 
    
         
            +
                <% end %>
         
     | 
| 
       30 
38 
     | 
    
         
             
              <% end %>
         
     | 
| 
       31 
39 
     | 
    
         
             
            <% end %>
         
     | 
| 
       32 
40 
     | 
    
         | 
| 
         @@ -37,6 +37,7 @@ Feature: Manage Plan 
     | 
|
| 
       37 
37 
     | 
    
         
             
                Then I should see "Upgrade Your Plan"
         
     | 
| 
       38 
38 
     | 
    
         
             
                When I choose the "Basic" plan
         
     | 
| 
       39 
39 
     | 
    
         
             
                Then I should see "Billing Information"
         
     | 
| 
      
 40 
     | 
    
         
            +
                And I should not see "No thanks, just delete my account"
         
     | 
| 
       40 
41 
     | 
    
         
             
                And I fill in "Cardholder name" with "Ralph Robot"
         
     | 
| 
       41 
42 
     | 
    
         
             
                And I fill in "Billing email" with "accounting@example.com"
         
     | 
| 
       42 
43 
     | 
    
         
             
                And I fill in "Card number" with "4111111111111111"
         
     | 
| 
         @@ -37,6 +37,15 @@ Feature: Trial plans 
     | 
|
| 
       37 
37 
     | 
    
         
             
                And I should see "expired"
         
     | 
| 
       38 
38 
     | 
    
         
             
                And the "Temp" plan should be disabled
         
     | 
| 
       39 
39 
     | 
    
         | 
| 
      
 40 
     | 
    
         
            +
              Scenario: Delete an account with an expired plan
         
     | 
| 
      
 41 
     | 
    
         
            +
                Given a "Temp" account exists with a name of "Test" created 30 days ago
         
     | 
| 
      
 42 
     | 
    
         
            +
                And I am signed in as an admin of the "Test" account
         
     | 
| 
      
 43 
     | 
    
         
            +
                When I go to the projects page for the "Test" account
         
     | 
| 
      
 44 
     | 
    
         
            +
                Then I should be on the upgrade plan page for the "Test" account
         
     | 
| 
      
 45 
     | 
    
         
            +
                And I should see "expired"
         
     | 
| 
      
 46 
     | 
    
         
            +
                When I follow "No thanks, just delete my account"
         
     | 
| 
      
 47 
     | 
    
         
            +
                Then I should see "Your account has been deleted"
         
     | 
| 
      
 48 
     | 
    
         
            +
             
     | 
| 
       40 
49 
     | 
    
         
             
              Scenario: Sign up for a non-trial plan
         
     | 
| 
       41 
50 
     | 
    
         
             
                When I go to the list of plans page
         
     | 
| 
       42 
51 
     | 
    
         
             
                And I follow "Eternal"
         
     | 
    
        data/lib/saucy/account.rb
    CHANGED
    
    | 
         @@ -33,6 +33,8 @@ module Saucy 
     | 
|
| 
       33 
33 
     | 
    
         | 
| 
       34 
34 
     | 
    
         
             
                  before_create :set_trial_expiration
         
     | 
| 
       35 
35 
     | 
    
         
             
                  after_save :record_new_activations
         
     | 
| 
      
 36 
     | 
    
         
            +
             
     | 
| 
      
 37 
     | 
    
         
            +
                  before_destroy :create_canceled_account
         
     | 
| 
       36 
38 
     | 
    
         
             
                end
         
     | 
| 
       37 
39 
     | 
    
         | 
| 
       38 
40 
     | 
    
         
             
                module InstanceMethods
         
     | 
| 
         @@ -94,6 +96,12 @@ module Saucy 
     | 
|
| 
       94 
96 
     | 
    
         
             
                  def projects_count
         
     | 
| 
       95 
97 
     | 
    
         
             
                    projects.active.count
         
     | 
| 
       96 
98 
     | 
    
         
             
                  end
         
     | 
| 
      
 99 
     | 
    
         
            +
             
     | 
| 
      
 100 
     | 
    
         
            +
                  private
         
     | 
| 
      
 101 
     | 
    
         
            +
             
     | 
| 
      
 102 
     | 
    
         
            +
                  def create_canceled_account
         
     | 
| 
      
 103 
     | 
    
         
            +
                    CanceledAccount.create(:account => self)
         
     | 
| 
      
 104 
     | 
    
         
            +
                  end
         
     | 
| 
       97 
105 
     | 
    
         
             
                end
         
     | 
| 
       98 
106 
     | 
    
         | 
| 
       99 
107 
     | 
    
         
             
                module ClassMethods
         
     | 
    
        data/spec/environment.rb
    CHANGED
    
    | 
         @@ -52,6 +52,7 @@ ActionController::Base.send :include, Rails.application.routes.url_helpers 
     | 
|
| 
       52 
52 
     | 
    
         | 
| 
       53 
53 
     | 
    
         
             
            require "./lib/generators/saucy/features/templates/factories"
         
     | 
| 
       54 
54 
     | 
    
         
             
            require "./lib/generators/saucy/install/templates/create_saucy_tables"
         
     | 
| 
      
 55 
     | 
    
         
            +
            #Dir["./db/migrate/*.rb"].each {|file| require file }
         
     | 
| 
       55 
56 
     | 
    
         | 
| 
       56 
57 
     | 
    
         
             
            class ClearanceCreateUsers < ActiveRecord::Migration
         
     | 
| 
       57 
58 
     | 
    
         
             
              def self.up
         
     | 
| 
         @@ -94,3 +95,4 @@ end 
     | 
|
| 
       94 
95 
     | 
    
         | 
| 
       95 
96 
     | 
    
         
             
            ClearanceCreateUsers.suppress_messages { ClearanceCreateUsers.migrate(:up) }
         
     | 
| 
       96 
97 
     | 
    
         
             
            CreateSaucyTables.suppress_messages { CreateSaucyTables.migrate(:up) }
         
     | 
| 
      
 98 
     | 
    
         
            +
            ActiveRecord::Migrator.up(ActiveRecord::Migrator.migrations_paths)
         
     | 
    
        data/spec/models/account_spec.rb
    CHANGED
    
    | 
         @@ -344,3 +344,16 @@ describe Account, "with coupon" do 
     | 
|
| 
       344 
344 
     | 
    
         
             
                subject.reload.trial_expires_at.to_s.should == (free_months * 30).days.from_now.to_s
         
     | 
| 
       345 
345 
     | 
    
         
             
              end
         
     | 
| 
       346 
346 
     | 
    
         
             
            end
         
     | 
| 
      
 347 
     | 
    
         
            +
             
     | 
| 
      
 348 
     | 
    
         
            +
            describe Account, "when destroyed" do
         
     | 
| 
      
 349 
     | 
    
         
            +
              subject { Factory(:account) }
         
     | 
| 
      
 350 
     | 
    
         
            +
             
     | 
| 
      
 351 
     | 
    
         
            +
              before do
         
     | 
| 
      
 352 
     | 
    
         
            +
                CanceledAccount.stubs(:create)
         
     | 
| 
      
 353 
     | 
    
         
            +
              end
         
     | 
| 
      
 354 
     | 
    
         
            +
             
     | 
| 
      
 355 
     | 
    
         
            +
              it "creates a canceled account record" do
         
     | 
| 
      
 356 
     | 
    
         
            +
                subject.destroy
         
     | 
| 
      
 357 
     | 
    
         
            +
                CanceledAccount.should have_received(:create).with(:account => subject)
         
     | 
| 
      
 358 
     | 
    
         
            +
              end
         
     | 
| 
      
 359 
     | 
    
         
            +
            end
         
     | 
| 
         @@ -0,0 +1,47 @@ 
     | 
|
| 
      
 1 
     | 
    
         
            +
            require 'spec_helper'
         
     | 
| 
      
 2 
     | 
    
         
            +
             
     | 
| 
      
 3 
     | 
    
         
            +
            describe CanceledAccount do
         
     | 
| 
      
 4 
     | 
    
         
            +
              subject { CanceledAccount.create() }
         
     | 
| 
      
 5 
     | 
    
         
            +
             
     | 
| 
      
 6 
     | 
    
         
            +
              it { should belong_to(:plan) }
         
     | 
| 
      
 7 
     | 
    
         
            +
             
     | 
| 
      
 8 
     | 
    
         
            +
              it "doesn't populate anything" do
         
     | 
| 
      
 9 
     | 
    
         
            +
                subject.name.should be_nil
         
     | 
| 
      
 10 
     | 
    
         
            +
                subject.keyword.should be_nil
         
     | 
| 
      
 11 
     | 
    
         
            +
              end
         
     | 
| 
      
 12 
     | 
    
         
            +
            end
         
     | 
| 
      
 13 
     | 
    
         
            +
             
     | 
| 
      
 14 
     | 
    
         
            +
            describe CanceledAccount, "given an account" do
         
     | 
| 
      
 15 
     | 
    
         
            +
              let(:account) { Factory(:account, :billing_email => "billing@example.com") }
         
     | 
| 
      
 16 
     | 
    
         
            +
             
     | 
| 
      
 17 
     | 
    
         
            +
              before do
         
     | 
| 
      
 18 
     | 
    
         
            +
                Factory(:membership, :account => account)
         
     | 
| 
      
 19 
     | 
    
         
            +
              end
         
     | 
| 
      
 20 
     | 
    
         
            +
             
     | 
| 
      
 21 
     | 
    
         
            +
              subject { CanceledAccount.create(:account => account) }
         
     | 
| 
      
 22 
     | 
    
         
            +
             
     | 
| 
      
 23 
     | 
    
         
            +
              it "populates its name and keyword from the given account" do
         
     | 
| 
      
 24 
     | 
    
         
            +
                subject.name.should == account.name
         
     | 
| 
      
 25 
     | 
    
         
            +
                subject.keyword.should == account.keyword
         
     | 
| 
      
 26 
     | 
    
         
            +
              end
         
     | 
| 
      
 27 
     | 
    
         
            +
             
     | 
| 
      
 28 
     | 
    
         
            +
              it "populates the billing_email from the customer's email from the given account" do
         
     | 
| 
      
 29 
     | 
    
         
            +
                subject.billing_email.should_not be_nil
         
     | 
| 
      
 30 
     | 
    
         
            +
                subject.billing_email.should == account.customer.email
         
     | 
| 
      
 31 
     | 
    
         
            +
              end
         
     | 
| 
      
 32 
     | 
    
         
            +
             
     | 
| 
      
 33 
     | 
    
         
            +
              it "saves the memberships and users as json from the given account" do
         
     | 
| 
      
 34 
     | 
    
         
            +
                memberships_json = account.memberships.to_json(:include => { :user => { :only => [:email, :name, :created_at]}}, :only => [:admin, :created_at])
         
     | 
| 
      
 35 
     | 
    
         
            +
                subject.memberships.should == memberships_json
         
     | 
| 
      
 36 
     | 
    
         
            +
                JSON.parse(subject.memberships).should be
         
     | 
| 
      
 37 
     | 
    
         
            +
              end
         
     | 
| 
      
 38 
     | 
    
         
            +
             
     | 
| 
      
 39 
     | 
    
         
            +
              it "populates the plan from the given account" do
         
     | 
| 
      
 40 
     | 
    
         
            +
                subject.plan_id.should == account.plan_id
         
     | 
| 
      
 41 
     | 
    
         
            +
                subject.plan.should == account.plan
         
     | 
| 
      
 42 
     | 
    
         
            +
              end
         
     | 
| 
      
 43 
     | 
    
         
            +
             
     | 
| 
      
 44 
     | 
    
         
            +
              it "populates the started_at from the given account's creation date" do
         
     | 
| 
      
 45 
     | 
    
         
            +
                subject.started_at.should == account.created_at
         
     | 
| 
      
 46 
     | 
    
         
            +
              end
         
     | 
| 
      
 47 
     | 
    
         
            +
            end
         
     | 
    
        data/spec/models/signup_spec.rb
    CHANGED
    
    | 
         @@ -89,6 +89,16 @@ describe Signup, "with a valid user and account" do 
     | 
|
| 
       89 
89 
     | 
    
         
             
              it "gives it's user a name that is the first part of it's email" do
         
     | 
| 
       90 
90 
     | 
    
         
             
                subject.user.name.should == "user"
         
     | 
| 
       91 
91 
     | 
    
         
             
              end
         
     | 
| 
      
 92 
     | 
    
         
            +
             
     | 
| 
      
 93 
     | 
    
         
            +
              it "uses the user's email as it's billing_email" do
         
     | 
| 
      
 94 
     | 
    
         
            +
                subject.account.customer.email.should == email
         
     | 
| 
      
 95 
     | 
    
         
            +
              end
         
     | 
| 
      
 96 
     | 
    
         
            +
             
     | 
| 
      
 97 
     | 
    
         
            +
              it "uses doesn't override billing_email if one is supplied" do
         
     | 
| 
      
 98 
     | 
    
         
            +
                new_signup = Factory.build(:signup, :email => email, :billing_email => "billing@example.com")
         
     | 
| 
      
 99 
     | 
    
         
            +
                new_signup.save
         
     | 
| 
      
 100 
     | 
    
         
            +
                new_signup.account.customer.email.should == "billing@example.com"
         
     | 
| 
      
 101 
     | 
    
         
            +
              end
         
     | 
| 
       92 
102 
     | 
    
         
             
            end
         
     | 
| 
       93 
103 
     | 
    
         | 
| 
       94 
104 
     | 
    
         
             
            describe Signup, "with an email with symbols in it" do
         
     | 
    
        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: 43
         
     | 
| 
       5 
5 
     | 
    
         
             
              prerelease: 
         
     | 
| 
       6 
6 
     | 
    
         
             
              segments: 
         
     | 
| 
       7 
7 
     | 
    
         
             
              - 0
         
     | 
| 
       8 
     | 
    
         
            -
              -  
     | 
| 
       9 
     | 
    
         
            -
              -  
     | 
| 
       10 
     | 
    
         
            -
              version: 0. 
     | 
| 
      
 8 
     | 
    
         
            +
              - 13
         
     | 
| 
      
 9 
     | 
    
         
            +
              - 0
         
     | 
| 
      
 10 
     | 
    
         
            +
              version: 0.13.0
         
     | 
| 
       11 
11 
     | 
    
         
             
            platform: ruby
         
     | 
| 
       12 
12 
     | 
    
         
             
            authors: 
         
     | 
| 
       13 
13 
     | 
    
         
             
            - thoughtbot, inc.
         
     | 
| 
         @@ -20,7 +20,7 @@ autorequire: 
     | 
|
| 
       20 
20 
     | 
    
         
             
            bindir: bin
         
     | 
| 
       21 
21 
     | 
    
         
             
            cert_chain: []
         
     | 
| 
       22 
22 
     | 
    
         | 
| 
       23 
     | 
    
         
            -
            date: 2011-10- 
     | 
| 
      
 23 
     | 
    
         
            +
            date: 2011-10-14 00:00:00 Z
         
     | 
| 
       24 
24 
     | 
    
         
             
            dependencies: 
         
     | 
| 
       25 
25 
     | 
    
         
             
            - !ruby/object:Gem::Dependency 
         
     | 
| 
       26 
26 
     | 
    
         
             
              name: clearance
         
     | 
| 
         @@ -179,6 +179,7 @@ files: 
     | 
|
| 
       179 
179 
     | 
    
         
             
            - app/helpers/limits_helper.rb
         
     | 
| 
       180 
180 
     | 
    
         
             
            - app/mailers/billing_mailer.rb
         
     | 
| 
       181 
181 
     | 
    
         
             
            - app/mailers/invitation_mailer.rb
         
     | 
| 
      
 182 
     | 
    
         
            +
            - app/models/canceled_account.rb
         
     | 
| 
       182 
183 
     | 
    
         
             
            - app/models/coupon.rb
         
     | 
| 
       183 
184 
     | 
    
         
             
            - app/models/invitation.rb
         
     | 
| 
       184 
185 
     | 
    
         
             
            - app/models/limit.rb
         
     | 
| 
         @@ -308,6 +309,7 @@ files: 
     | 
|
| 
       308 
309 
     | 
    
         
             
            - spec/mailers/billing_mailer_spec.rb
         
     | 
| 
       309 
310 
     | 
    
         
             
            - spec/mailers/invitiation_mailer_spec.rb
         
     | 
| 
       310 
311 
     | 
    
         
             
            - spec/models/account_spec.rb
         
     | 
| 
      
 312 
     | 
    
         
            +
            - spec/models/canceled_account_spec.rb
         
     | 
| 
       311 
313 
     | 
    
         
             
            - spec/models/coupon_spec.rb
         
     | 
| 
       312 
314 
     | 
    
         
             
            - spec/models/invitation_spec.rb
         
     | 
| 
       313 
315 
     | 
    
         
             
            - spec/models/limit_spec.rb
         
     |