saucy 0.1.1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (86) hide show
  1. data/Gemfile +8 -0
  2. data/Gemfile.lock +106 -0
  3. data/README +9 -0
  4. data/app/controllers/accounts_controller.rb +57 -0
  5. data/app/controllers/invitations_controller.rb +36 -0
  6. data/app/controllers/memberships_controller.rb +9 -0
  7. data/app/controllers/permissions_controller.rb +17 -0
  8. data/app/controllers/plans_controller.rb +7 -0
  9. data/app/controllers/profiles_controller.rb +17 -0
  10. data/app/controllers/projects_controller.rb +56 -0
  11. data/app/models/account_membership.rb +8 -0
  12. data/app/models/invitation.rb +86 -0
  13. data/app/models/project_membership.rb +16 -0
  14. data/app/models/signup.rb +134 -0
  15. data/app/views/accounts/_account.html.erb +12 -0
  16. data/app/views/accounts/_blank_slate.html.erb +6 -0
  17. data/app/views/accounts/_projects.html.erb +12 -0
  18. data/app/views/accounts/_tab_bar.html.erb +8 -0
  19. data/app/views/accounts/edit.html.erb +17 -0
  20. data/app/views/accounts/index.html.erb +3 -0
  21. data/app/views/accounts/new.html.erb +26 -0
  22. data/app/views/invitation_mailer/invitation.text.erb +6 -0
  23. data/app/views/invitations/new.html.erb +11 -0
  24. data/app/views/invitations/show.html.erb +20 -0
  25. data/app/views/memberships/index.html.erb +16 -0
  26. data/app/views/permissions/edit.html.erb +15 -0
  27. data/app/views/plans/index.html.erb +3 -0
  28. data/app/views/profiles/_inputs.html.erb +6 -0
  29. data/app/views/profiles/edit.html.erb +35 -0
  30. data/app/views/projects/_form.html.erb +4 -0
  31. data/app/views/projects/edit.html.erb +18 -0
  32. data/app/views/projects/index.html.erb +13 -0
  33. data/app/views/projects/new.html.erb +11 -0
  34. data/config/routes.rb +18 -0
  35. data/features/run_features.feature +73 -0
  36. data/features/step_definitions/clearance_steps.rb +45 -0
  37. data/features/step_definitions/rails_steps.rb +70 -0
  38. data/features/support/env.rb +4 -0
  39. data/features/support/file.rb +11 -0
  40. data/lib/generators/saucy/base.rb +18 -0
  41. data/lib/generators/saucy/features/features_generator.rb +68 -0
  42. data/lib/generators/saucy/features/templates/factories.rb +55 -0
  43. data/lib/generators/saucy/features/templates/step_definitions/email_steps.rb +13 -0
  44. data/lib/generators/saucy/features/templates/step_definitions/factory_girl_steps.rb +1 -0
  45. data/lib/generators/saucy/features/templates/step_definitions/html_steps.rb +3 -0
  46. data/lib/generators/saucy/features/templates/step_definitions/project_steps.rb +4 -0
  47. data/lib/generators/saucy/features/templates/step_definitions/session_steps.rb +27 -0
  48. data/lib/generators/saucy/features/templates/step_definitions/user_steps.rb +54 -0
  49. data/lib/generators/saucy/install/install_generator.rb +36 -0
  50. data/lib/generators/saucy/install/templates/create_saucy_tables.rb +72 -0
  51. data/lib/generators/saucy/install/templates/models/account.rb +3 -0
  52. data/lib/generators/saucy/install/templates/models/invitation_mailer.rb +9 -0
  53. data/lib/generators/saucy/install/templates/models/plan.rb +3 -0
  54. data/lib/generators/saucy/install/templates/models/project.rb +3 -0
  55. data/lib/generators/saucy/views/views_generator.rb +23 -0
  56. data/lib/saucy.rb +7 -0
  57. data/lib/saucy/account.rb +50 -0
  58. data/lib/saucy/account_authorization.rb +34 -0
  59. data/lib/saucy/configuration.rb +12 -0
  60. data/lib/saucy/engine.rb +9 -0
  61. data/lib/saucy/layouts.rb +36 -0
  62. data/lib/saucy/plan.rb +11 -0
  63. data/lib/saucy/project.rb +39 -0
  64. data/lib/saucy/user.rb +37 -0
  65. data/spec/controllers/accounts_controller_spec.rb +204 -0
  66. data/spec/controllers/application_controller_spec.rb +27 -0
  67. data/spec/controllers/invitations_controller_spec.rb +155 -0
  68. data/spec/controllers/memberships_controller_spec.rb +33 -0
  69. data/spec/controllers/permissions_controller_spec.rb +69 -0
  70. data/spec/controllers/profiles_controller_spec.rb +43 -0
  71. data/spec/controllers/projects_controller_spec.rb +123 -0
  72. data/spec/layouts_spec.rb +21 -0
  73. data/spec/models/account_membership_spec.rb +13 -0
  74. data/spec/models/account_spec.rb +61 -0
  75. data/spec/models/invitation_spec.rb +160 -0
  76. data/spec/models/project_membership_spec.rb +26 -0
  77. data/spec/models/project_spec.rb +80 -0
  78. data/spec/models/signup_spec.rb +175 -0
  79. data/spec/models/user_spec.rb +96 -0
  80. data/spec/saucy_spec.rb +7 -0
  81. data/spec/spec_helper.rb +31 -0
  82. data/spec/support/authentication_helpers.rb +71 -0
  83. data/spec/support/authorization_helpers.rb +56 -0
  84. data/spec/support/clearance_matchers.rb +55 -0
  85. data/spec/views/accounts/_account.html.erb_spec.rb +66 -0
  86. metadata +203 -0
@@ -0,0 +1,96 @@
1
+ require 'spec_helper'
2
+
3
+ describe User, "valid" do
4
+ subject { Factory(:user) }
5
+
6
+ it { should validate_presence_of(:name) }
7
+
8
+ it { should have_many(:account_memberships) }
9
+ it { should have_many(:accounts).through(:account_memberships) }
10
+ it { should have_many(:projects) }
11
+ it { should have_many(:project_memberships) }
12
+
13
+ it "is an admin of an account with an admin membership" do
14
+ account = Factory(:account)
15
+ Factory(:account_membership, :user => subject, :admin => true, :account => account)
16
+ subject.should be_admin_of(account)
17
+ end
18
+
19
+ it "isn't an admin of an account with a non admin membership" do
20
+ account = Factory(:account)
21
+ Factory(:account_membership, :user => subject, :admin => false, :account => account)
22
+ subject.should_not be_admin_of(account)
23
+ end
24
+
25
+ it "isn't an admin of an account without a membership" do
26
+ account = Factory(:account)
27
+ subject.should_not be_admin_of(account)
28
+ end
29
+
30
+ it "is a member with a membership for the given account" do
31
+ account = Factory(:account)
32
+ Factory(:account_membership, :user => subject, :account => account)
33
+ subject.should be_member_of(account)
34
+ end
35
+
36
+ it "isn't a member without a membership for the given account" do
37
+ account = Factory(:account)
38
+ other_account = Factory(:account)
39
+ Factory(:account_membership, :user => subject, :account => other_account)
40
+ subject.should_not be_member_of(account)
41
+ end
42
+
43
+ it "is a member with a membership for the given project" do
44
+ project = Factory(:project)
45
+ Factory(:account_membership, :user => subject, :account => project.account)
46
+ Factory(:project_membership, :user => subject, :project => project)
47
+ subject.should be_member_of(project)
48
+ end
49
+
50
+ it "isn't a member without a membership for the given project" do
51
+ project = Factory(:project)
52
+ other_project = Factory(:project)
53
+ Factory(:account_membership, :user => subject, :account => other_project.account)
54
+ Factory(:project_membership, :user => subject, :project => other_project)
55
+ subject.should_not be_member_of(project)
56
+ end
57
+
58
+ it "returns users by name" do
59
+ Factory(:user, :name => "def")
60
+ Factory(:user, :name => "abc")
61
+ Factory(:user, :name => "ghi")
62
+
63
+ User.by_name.map(&:name).should == %w(abc def ghi)
64
+ end
65
+
66
+ context "updating the permissions for an account" do
67
+ let!(:account) { Factory(:account) }
68
+ let!(:other_account) { Factory(:account) }
69
+ let!(:member_project) { Factory(:project, :account => account) }
70
+ let!(:nonmember_project) { Factory(:project, :account => account) }
71
+ let!(:other_account_project) { Factory(:project, :account => other_account) }
72
+
73
+ before do
74
+ Factory(:account_membership, :account => account, :user => subject)
75
+ Factory(:account_membership, :account => other_account, :user => subject)
76
+ Factory(:project_membership, :project => member_project, :user => subject)
77
+ Factory(:project_membership, :project => other_account_project, :user => subject)
78
+ subject.reload
79
+
80
+ subject.update_permissions_for(account, [nonmember_project.id])
81
+ end
82
+
83
+ it "adds an added project for that account" do
84
+ subject.should be_member_of(nonmember_project)
85
+ end
86
+
87
+ it "removes a removed project for that account" do
88
+ subject.should_not be_member_of(member_project)
89
+ end
90
+
91
+ it "ignores a project for another account" do
92
+ subject.should be_member_of(other_account_project)
93
+ end
94
+ end
95
+ end
96
+
@@ -0,0 +1,7 @@
1
+ require 'spec_helper'
2
+
3
+ describe Saucy::Configuration do
4
+ it "has layouts" do
5
+ subject.layouts.should be_a(Saucy::Layouts)
6
+ end
7
+ end
@@ -0,0 +1,31 @@
1
+ # This file is copied to spec/ when you run 'rails generate rspec:install'
2
+ ENV["RAILS_ENV"] ||= 'test'
3
+ require File.expand_path("../../config/environment", __FILE__)
4
+ require 'rspec/rails'
5
+
6
+ # Requires supporting ruby files with custom matchers and macros, etc,
7
+ # in spec/support/ and its subdirectories.
8
+ Dir[Rails.root.join("spec/support/**/*.rb")].each {|f| require f}
9
+
10
+ RSpec.configure do |config|
11
+ # == Mock Framework
12
+ #
13
+ # If you prefer to use mocha, flexmock or RR, uncomment the appropriate line:
14
+ #
15
+ # config.mock_with :mocha
16
+ # config.mock_with :flexmock
17
+ # config.mock_with :rr
18
+ config.mock_with :mocha
19
+
20
+ # Remove this line if you're not using ActiveRecord or ActiveRecord fixtures
21
+ config.fixture_path = "#{::Rails.root}/spec/fixtures"
22
+
23
+ # If you're not using ActiveRecord, or you'd prefer not to run each of your
24
+ # examples within a transaction, remove the following line or assign false
25
+ # instead of true.
26
+ config.use_transactional_fixtures = true
27
+
28
+ config.backtrace_clean_patterns << %r{gems/}
29
+
30
+ config.include AuthenticationHelpers
31
+ end
@@ -0,0 +1,71 @@
1
+ module AuthenticationHelpers
2
+ def sign_in_as(user)
3
+ controller.current_user = user
4
+ end
5
+
6
+ def sign_in
7
+ sign_in_as(Factory(:user))
8
+ end
9
+
10
+ def sign_out
11
+ controller.current_user = nil
12
+ end
13
+
14
+ def current_user
15
+ controller.current_user
16
+ end
17
+
18
+ def signed_in?
19
+ controller.signed_in?
20
+ end
21
+
22
+ def sign_in_as_admin_of_account(account)
23
+ user = Factory(:user)
24
+ Factory(:account_membership, :user => user, :account => account, :admin => true)
25
+ sign_in_as user
26
+ end
27
+
28
+ def sign_in_as_non_admin_of_account(account)
29
+ user = Factory(:user)
30
+ Factory(:account_membership, :user => user, :account => account, :admin => false)
31
+ sign_in_as user
32
+ end
33
+
34
+ def sign_in_as_non_admin_of_project(project)
35
+ user = sign_in_as_non_admin_of_account(project.account)
36
+ Factory(:project_membership, :user => user, :project => project)
37
+ end
38
+
39
+ def sign_in_as_admin_of_project(project)
40
+ user = sign_in_as_admin_of_account(project.account)
41
+ Factory(:project_membership, :user => user, :project => project)
42
+ end
43
+ end
44
+
45
+ RSpec::Matchers.define :be_signed_in do
46
+ match do |controller|
47
+ @controller = controller
48
+ @controller.signed_in? &&
49
+ (@expected_user.nil? || @expected_user == @controller.current_user)
50
+ end
51
+
52
+ chain :as do |user|
53
+ @expected_user = user
54
+ end
55
+
56
+ failure_message_for_should do
57
+ message = "expected to be signed in"
58
+ message << " as #{@expected_user.inspect}" if @expected_user
59
+ message << " but was "
60
+ if @controller.signed_in?
61
+ message << "signed in as #{@controller.current_user.inspect}"
62
+ else
63
+ message << "not signed in"
64
+ end
65
+ message
66
+ end
67
+
68
+ failure_message_for_should_not do
69
+ "didn't expect to be signed in"
70
+ end
71
+ end
@@ -0,0 +1,56 @@
1
+ module AuthorizationHelpers
2
+ module AccountAdminExampleGroup
3
+ extend ActiveSupport::Concern
4
+ included do
5
+ let(:account) { Factory(:account) }
6
+ before { sign_in_as_admin_of_account(account) }
7
+ end
8
+ end
9
+
10
+ module AccountMemberExampleGroup
11
+ extend ActiveSupport::Concern
12
+ included do
13
+ let(:account) { Factory(:account) }
14
+ before { sign_in_as_non_admin_of_account(account) }
15
+ end
16
+ end
17
+
18
+ module ProjectAdminExampleGroup
19
+ extend ActiveSupport::Concern
20
+ included do
21
+ let(:account) { Factory(:account) }
22
+ let(:project) { Factory(:project, :account => account) }
23
+ before { sign_in_as_admin_of_project(project) }
24
+ end
25
+ end
26
+
27
+ module ProjectMemberExampleGroup
28
+ extend ActiveSupport::Concern
29
+ included do
30
+ let(:account) { Factory(:account) }
31
+ let(:project) { Factory(:project, :account => account) }
32
+ before { sign_in_as_non_admin_of_project(project) }
33
+ end
34
+ end
35
+
36
+ module UserExampleGroup
37
+ extend ActiveSupport::Concern
38
+ included do
39
+ let(:user) { Factory(:email_confirmed_user) }
40
+ before { sign_in_as(user) }
41
+ end
42
+ end
43
+ end
44
+
45
+ RSpec.configure do |config|
46
+ config.include AuthorizationHelpers::AccountAdminExampleGroup,
47
+ :as => :account_admin
48
+ config.include AuthorizationHelpers::AccountMemberExampleGroup,
49
+ :as => :account_member
50
+ config.include AuthorizationHelpers::ProjectAdminExampleGroup,
51
+ :as => :project_admin
52
+ config.include AuthorizationHelpers::ProjectMemberExampleGroup,
53
+ :as => :project_member
54
+ config.include AuthorizationHelpers::UserExampleGroup,
55
+ :as => :user
56
+ end
@@ -0,0 +1,55 @@
1
+ module ClearanceMatchers
2
+ class DenyAccessMatcher
3
+ include Shoulda::ActionController::Matchers
4
+
5
+ def initialize(context)
6
+ @context = context
7
+ end
8
+
9
+ def matches?(controller)
10
+ if @method
11
+ @context.__send__(@method, *@args)
12
+ end
13
+
14
+ begin
15
+ if @flash
16
+ controller.should set_the_flash.to(@flash)
17
+ else
18
+ controller.should_not set_the_flash
19
+ end
20
+
21
+ url = controller.__send__(:sign_in_url)
22
+ controller.should redirect_to(url).in_context(@context)
23
+
24
+ true
25
+ rescue RSpec::Expectations::ExpectationNotMetError => failure
26
+ @failure_message = failure.message
27
+ false
28
+ end
29
+ end
30
+
31
+ def flash(flash)
32
+ @flash = flash
33
+ self
34
+ end
35
+
36
+ def on(method, *args)
37
+ @method = method
38
+ @args = args
39
+ self
40
+ end
41
+
42
+ def failure_message_for_should
43
+ @failure_message
44
+ end
45
+ end
46
+
47
+ def deny_access
48
+ DenyAccessMatcher.new(self)
49
+ end
50
+ end
51
+
52
+
53
+ RSpec.configure do |config|
54
+ config.include ClearanceMatchers
55
+ end
@@ -0,0 +1,66 @@
1
+ require 'spec_helper'
2
+
3
+ describe "/accounts/_account.html.erb" do
4
+ let(:account) { Factory.stub(:account) }
5
+ let(:edit_link) { %{href="#{edit_account_path(account)}"} }
6
+ let(:user) { Factory.stub(:user) }
7
+
8
+ before { view.stubs(:current_user => user) }
9
+
10
+ def render_account
11
+ render :partial => "accounts/account", :locals => { :account => account }
12
+ end
13
+
14
+ context "admin" do
15
+ before do
16
+ user.stubs(:admin_of? => true)
17
+ render_account
18
+ end
19
+
20
+ it "links to edit the account" do
21
+ rendered.should include(edit_link)
22
+ end
23
+ end
24
+
25
+ context "non admin" do
26
+ before do
27
+ user.stubs(:admin_of? => false)
28
+ render_account
29
+ end
30
+
31
+ it "links to edit the account" do
32
+ rendered.should_not include(edit_link)
33
+ end
34
+ end
35
+
36
+ context "with projects" do
37
+ let(:project) { Factory.stub(:project, :name => 'Test Project') }
38
+ before do
39
+ account.stubs(:projects_visible_to => [project])
40
+ render_account
41
+ end
42
+
43
+ it "finds visible projects" do
44
+ account.should have_received(:projects_visible_to).with(user)
45
+ end
46
+
47
+ it "renders projects" do
48
+ rendered.should include(project.name)
49
+ end
50
+
51
+ it "doesn't render the blank slate" do
52
+ rendered.should_not include("blank_slate")
53
+ end
54
+ end
55
+
56
+ context "without projects" do
57
+ before do
58
+ account.stubs(:projects_visible_to => [])
59
+ render_account
60
+ end
61
+
62
+ it "renders the blank slate" do
63
+ rendered.should include("blank_slate")
64
+ end
65
+ end
66
+ end
metadata ADDED
@@ -0,0 +1,203 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: saucy
3
+ version: !ruby/object:Gem::Version
4
+ hash: 25
5
+ prerelease: false
6
+ segments:
7
+ - 0
8
+ - 1
9
+ - 1
10
+ version: 0.1.1
11
+ platform: ruby
12
+ authors:
13
+ - thoughtbot, inc.
14
+ - Joe Ferris
15
+ - Mike Burns
16
+ autorequire:
17
+ bindir: bin
18
+ cert_chain: []
19
+
20
+ date: 2010-12-07 00:00:00 -05:00
21
+ default_executable:
22
+ dependencies:
23
+ - !ruby/object:Gem::Dependency
24
+ name: formtastic
25
+ prerelease: false
26
+ requirement: &id001 !ruby/object:Gem::Requirement
27
+ none: false
28
+ requirements:
29
+ - - ">="
30
+ - !ruby/object:Gem::Version
31
+ hash: 11
32
+ segments:
33
+ - 1
34
+ - 2
35
+ version: "1.2"
36
+ type: :runtime
37
+ version_requirements: *id001
38
+ - !ruby/object:Gem::Dependency
39
+ name: railties
40
+ prerelease: false
41
+ requirement: &id002 !ruby/object:Gem::Requirement
42
+ none: false
43
+ requirements:
44
+ - - ">="
45
+ - !ruby/object:Gem::Version
46
+ hash: 1
47
+ segments:
48
+ - 3
49
+ - 0
50
+ - 3
51
+ version: 3.0.3
52
+ type: :runtime
53
+ version_requirements: *id002
54
+ - !ruby/object:Gem::Dependency
55
+ name: aruba
56
+ prerelease: false
57
+ requirement: &id003 !ruby/object:Gem::Requirement
58
+ none: false
59
+ requirements:
60
+ - - "="
61
+ - !ruby/object:Gem::Version
62
+ hash: 27
63
+ segments:
64
+ - 0
65
+ - 2
66
+ - 6
67
+ version: 0.2.6
68
+ type: :development
69
+ version_requirements: *id003
70
+ description: BLAH BLAH BLAH
71
+ email: support@thoughtbot.com
72
+ executables: []
73
+
74
+ extensions: []
75
+
76
+ extra_rdoc_files: []
77
+
78
+ files:
79
+ - Gemfile.lock
80
+ - README
81
+ - Gemfile
82
+ - config/routes.rb
83
+ - app/views/invitations/new.html.erb
84
+ - app/views/invitations/show.html.erb
85
+ - app/views/accounts/new.html.erb
86
+ - app/views/accounts/_projects.html.erb
87
+ - app/views/accounts/edit.html.erb
88
+ - app/views/accounts/_tab_bar.html.erb
89
+ - app/views/accounts/_blank_slate.html.erb
90
+ - app/views/accounts/_account.html.erb
91
+ - app/views/accounts/index.html.erb
92
+ - app/views/invitation_mailer/invitation.text.erb
93
+ - app/views/plans/index.html.erb
94
+ - app/views/memberships/index.html.erb
95
+ - app/views/profiles/edit.html.erb
96
+ - app/views/profiles/_inputs.html.erb
97
+ - app/views/projects/new.html.erb
98
+ - app/views/projects/edit.html.erb
99
+ - app/views/projects/index.html.erb
100
+ - app/views/projects/_form.html.erb
101
+ - app/views/permissions/edit.html.erb
102
+ - app/controllers/profiles_controller.rb
103
+ - app/controllers/accounts_controller.rb
104
+ - app/controllers/memberships_controller.rb
105
+ - app/controllers/plans_controller.rb
106
+ - app/controllers/projects_controller.rb
107
+ - app/controllers/invitations_controller.rb
108
+ - app/controllers/permissions_controller.rb
109
+ - app/models/project_membership.rb
110
+ - app/models/invitation.rb
111
+ - app/models/signup.rb
112
+ - app/models/account_membership.rb
113
+ - lib/generators/saucy/views/views_generator.rb
114
+ - lib/generators/saucy/base.rb
115
+ - lib/generators/saucy/install/install_generator.rb
116
+ - lib/generators/saucy/install/templates/create_saucy_tables.rb
117
+ - lib/generators/saucy/install/templates/models/project.rb
118
+ - lib/generators/saucy/install/templates/models/plan.rb
119
+ - lib/generators/saucy/install/templates/models/account.rb
120
+ - lib/generators/saucy/install/templates/models/invitation_mailer.rb
121
+ - lib/generators/saucy/features/features_generator.rb
122
+ - lib/generators/saucy/features/templates/factories.rb
123
+ - lib/generators/saucy/features/templates/step_definitions/factory_girl_steps.rb
124
+ - lib/generators/saucy/features/templates/step_definitions/html_steps.rb
125
+ - lib/generators/saucy/features/templates/step_definitions/session_steps.rb
126
+ - lib/generators/saucy/features/templates/step_definitions/project_steps.rb
127
+ - lib/generators/saucy/features/templates/step_definitions/email_steps.rb
128
+ - lib/generators/saucy/features/templates/step_definitions/user_steps.rb
129
+ - lib/saucy.rb
130
+ - lib/saucy/layouts.rb
131
+ - lib/saucy/account_authorization.rb
132
+ - lib/saucy/configuration.rb
133
+ - lib/saucy/engine.rb
134
+ - lib/saucy/project.rb
135
+ - lib/saucy/plan.rb
136
+ - lib/saucy/account.rb
137
+ - lib/saucy/user.rb
138
+ - features/run_features.feature
139
+ - features/support/file.rb
140
+ - features/support/env.rb
141
+ - features/step_definitions/rails_steps.rb
142
+ - features/step_definitions/clearance_steps.rb
143
+ - spec/views/accounts/_account.html.erb_spec.rb
144
+ - spec/controllers/application_controller_spec.rb
145
+ - spec/controllers/invitations_controller_spec.rb
146
+ - spec/controllers/accounts_controller_spec.rb
147
+ - spec/controllers/memberships_controller_spec.rb
148
+ - spec/controllers/permissions_controller_spec.rb
149
+ - spec/controllers/profiles_controller_spec.rb
150
+ - spec/controllers/projects_controller_spec.rb
151
+ - spec/layouts_spec.rb
152
+ - spec/saucy_spec.rb
153
+ - spec/support/clearance_matchers.rb
154
+ - spec/support/authorization_helpers.rb
155
+ - spec/support/authentication_helpers.rb
156
+ - spec/models/user_spec.rb
157
+ - spec/models/signup_spec.rb
158
+ - spec/models/project_spec.rb
159
+ - spec/models/project_membership_spec.rb
160
+ - spec/models/invitation_spec.rb
161
+ - spec/models/account_spec.rb
162
+ - spec/models/account_membership_spec.rb
163
+ - spec/spec_helper.rb
164
+ has_rdoc: true
165
+ homepage: http://github.com/thoughtbot/saucy
166
+ licenses: []
167
+
168
+ post_install_message:
169
+ rdoc_options: []
170
+
171
+ require_paths:
172
+ - lib
173
+ required_ruby_version: !ruby/object:Gem::Requirement
174
+ none: false
175
+ requirements:
176
+ - - ">="
177
+ - !ruby/object:Gem::Version
178
+ hash: 3
179
+ segments:
180
+ - 0
181
+ version: "0"
182
+ required_rubygems_version: !ruby/object:Gem::Requirement
183
+ none: false
184
+ requirements:
185
+ - - ">="
186
+ - !ruby/object:Gem::Version
187
+ hash: 3
188
+ segments:
189
+ - 0
190
+ version: "0"
191
+ requirements: []
192
+
193
+ rubyforge_project:
194
+ rubygems_version: 1.3.7
195
+ signing_key:
196
+ specification_version: 3
197
+ summary: blah blah blah
198
+ test_files:
199
+ - features/run_features.feature
200
+ - features/support/file.rb
201
+ - features/support/env.rb
202
+ - features/step_definitions/rails_steps.rb
203
+ - features/step_definitions/clearance_steps.rb