saucy 0.1.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.
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