proposal 0.0.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.
- data/Rakefile +38 -0
- data/app/models/proposal/token.rb +184 -0
- data/app/validators/proposal/arguments_validator.rb +36 -0
- data/app/validators/proposal/email_validator.rb +11 -0
- data/db/migrate/20121026005348_create_proposal_tokens.rb +33 -0
- data/lib/proposal.rb +5 -0
- data/lib/proposal/engine.rb +101 -0
- data/lib/proposal/version.rb +3 -0
- data/lib/tasks/proposal_tasks.rake +4 -0
- data/test/dummy/Rakefile +7 -0
- data/test/dummy/app/models/project.rb +3 -0
- data/test/dummy/app/models/user.rb +5 -0
- data/test/dummy/config.ru +4 -0
- data/test/dummy/config/application.rb +59 -0
- data/test/dummy/config/boot.rb +10 -0
- data/test/dummy/config/database.yml +25 -0
- data/test/dummy/config/environment.rb +5 -0
- data/test/dummy/config/environments/development.rb +37 -0
- data/test/dummy/config/environments/production.rb +67 -0
- data/test/dummy/config/environments/test.rb +37 -0
- data/test/dummy/config/initializers/backtrace_silencers.rb +7 -0
- data/test/dummy/config/initializers/inflections.rb +15 -0
- data/test/dummy/config/initializers/mime_types.rb +5 -0
- data/test/dummy/config/initializers/secret_token.rb +7 -0
- data/test/dummy/config/initializers/session_store.rb +8 -0
- data/test/dummy/config/initializers/wrap_parameters.rb +14 -0
- data/test/dummy/config/locales/en.yml +5 -0
- data/test/dummy/config/routes.rb +58 -0
- data/test/dummy/db/migrate/20121026035505_create_users.rb +9 -0
- data/test/dummy/db/migrate/20121031041439_create_projects.rb +8 -0
- data/test/dummy/db/proposal.sqlite3 +0 -0
- data/test/dummy/log/development.log +3 -0
- data/test/dummy/log/test.log +31285 -0
- data/test/dummy/script/rails +6 -0
- data/test/proposal_test.rb +227 -0
- data/test/test_helper.rb +18 -0
- metadata +162 -0
@@ -0,0 +1,6 @@
|
|
1
|
+
#!/usr/bin/env ruby
|
2
|
+
# This command will automatically be run when you run "rails" with Rails 3 gems installed from the root of your application.
|
3
|
+
|
4
|
+
APP_PATH = File.expand_path('../../config/application', __FILE__)
|
5
|
+
require File.expand_path('../../config/boot', __FILE__)
|
6
|
+
require 'rails/commands'
|
@@ -0,0 +1,227 @@
|
|
1
|
+
require 'test_helper'
|
2
|
+
|
3
|
+
class ProposalTest < ActiveSupport::TestCase
|
4
|
+
def email
|
5
|
+
"user@example.com"
|
6
|
+
end
|
7
|
+
|
8
|
+
test "truth" do
|
9
|
+
assert_kind_of Module, Proposal
|
10
|
+
end
|
11
|
+
|
12
|
+
test "user should have proposal" do
|
13
|
+
assert_equal User.propose.class, Proposal::Adapter
|
14
|
+
assert_equal User.propose.to(email).class, Proposal::Token
|
15
|
+
end
|
16
|
+
|
17
|
+
test "should respond to the recipient" do
|
18
|
+
user = User.create email: email
|
19
|
+
proposal = User.propose.to email
|
20
|
+
assert_equal user, proposal.recipient
|
21
|
+
end
|
22
|
+
|
23
|
+
test "should return proposals for instance" do
|
24
|
+
user = User.create email: email
|
25
|
+
project = Project.create!
|
26
|
+
proposal = User.propose(project).to(email)
|
27
|
+
proposal.save
|
28
|
+
assert_equal [proposal], project.proposals
|
29
|
+
end
|
30
|
+
|
31
|
+
test "should add errors when not acceptable accepted safe" do
|
32
|
+
errors = {:token=>["has been accepted"]}
|
33
|
+
proposal = User.propose.to email
|
34
|
+
proposal.save
|
35
|
+
assert_equal true, proposal.accept
|
36
|
+
assert_equal false, proposal.accept
|
37
|
+
assert_equal errors, proposal.errors.messages
|
38
|
+
end
|
39
|
+
|
40
|
+
test "should add errors when not acceptable accepted" do
|
41
|
+
errors = {:token=>["has been accepted"]}
|
42
|
+
proposal = User.propose.to email
|
43
|
+
proposal.save
|
44
|
+
proposal.accept!
|
45
|
+
assert_equal false, proposal.acceptable?
|
46
|
+
assert_equal errors, proposal.errors.messages
|
47
|
+
end
|
48
|
+
|
49
|
+
test "should add errors when not acceptable expired" do
|
50
|
+
errors = {:token=>["has expired"]}
|
51
|
+
proposal = User.propose.to email
|
52
|
+
proposal.save
|
53
|
+
proposal.expires = -> { Time.now - 1.day }
|
54
|
+
assert_equal false, proposal.acceptable?
|
55
|
+
assert_equal errors, proposal.errors.messages
|
56
|
+
end
|
57
|
+
|
58
|
+
test "should respond to the resource" do
|
59
|
+
project = Project.create!
|
60
|
+
user = User.create email: email
|
61
|
+
proposal = User.propose(project).to email
|
62
|
+
assert_equal project, proposal.resource
|
63
|
+
end
|
64
|
+
|
65
|
+
test "should create valid proposal token" do
|
66
|
+
proposal = User.propose.to email
|
67
|
+
proposal.save
|
68
|
+
|
69
|
+
assert_equal proposal.token.class, String
|
70
|
+
end
|
71
|
+
|
72
|
+
test "should return all proposals for type" do
|
73
|
+
proposal = User.propose.to email
|
74
|
+
proposal.save
|
75
|
+
|
76
|
+
assert_equal User.proposals, [proposal]
|
77
|
+
end
|
78
|
+
|
79
|
+
test "should accept a resource" do
|
80
|
+
project_one = Project.create!
|
81
|
+
|
82
|
+
context_one = User.propose(project_one).to(email)
|
83
|
+
assert_equal true, context_one.save
|
84
|
+
|
85
|
+
project_two = Project.create!
|
86
|
+
|
87
|
+
context_two = User.propose(project_two).to(email)
|
88
|
+
assert_equal true, context_two.save
|
89
|
+
|
90
|
+
context_three = User.propose(project_two).to(email)
|
91
|
+
assert_equal context_two, context_three
|
92
|
+
end
|
93
|
+
|
94
|
+
test "should return the resource" do
|
95
|
+
project = Project.create!
|
96
|
+
proposal = User.propose(project).to(email)
|
97
|
+
assert_equal proposal.resource, project
|
98
|
+
end
|
99
|
+
|
100
|
+
test "should return all arguments" do
|
101
|
+
arguments = ['admin', 1]
|
102
|
+
proposal = User.propose.with(*arguments).to('user@example.com')
|
103
|
+
proposal.save
|
104
|
+
|
105
|
+
retrieved = User.proposals.find_by_token proposal.token
|
106
|
+
assert_equal arguments, retrieved.arguments
|
107
|
+
end
|
108
|
+
|
109
|
+
test "should return hash when arguments is hash" do
|
110
|
+
arguments = { role: 'admin' }
|
111
|
+
proposal = User.propose.with(arguments).to(email)
|
112
|
+
|
113
|
+
assert_equal true, proposal.save
|
114
|
+
|
115
|
+
retrieved = User.proposals.find_by_token proposal.token
|
116
|
+
assert_equal arguments, retrieved.arguments
|
117
|
+
end
|
118
|
+
|
119
|
+
test "should validate arguments with symbol" do
|
120
|
+
error_messages = ["must be a hash", "is missing role"]
|
121
|
+
errors = { arguments: error_messages }
|
122
|
+
proposal = User.propose.to email, expects: :role
|
123
|
+
|
124
|
+
assert_equal false, proposal.valid?
|
125
|
+
assert_equal errors, proposal.errors.messages
|
126
|
+
end
|
127
|
+
|
128
|
+
test "should validate arguments with symbol and args" do
|
129
|
+
error_messages = ["is missing role"]
|
130
|
+
errors = { arguments: error_messages }
|
131
|
+
proposal = User.propose.to email
|
132
|
+
proposal.expects = :role
|
133
|
+
|
134
|
+
proposal.args = [{extra: 'foo'}]
|
135
|
+
|
136
|
+
assert_equal false, proposal.valid?
|
137
|
+
assert_equal errors, proposal.errors.messages
|
138
|
+
end
|
139
|
+
|
140
|
+
test "should validate arguments with symbols" do
|
141
|
+
error_messages = ["must be a hash", "is missing role", "is missing count"]
|
142
|
+
errors = { arguments: error_messages }
|
143
|
+
proposal = User.propose.to email, expects: [:role, :count]
|
144
|
+
|
145
|
+
assert_equal false, proposal.valid?
|
146
|
+
assert_equal errors, proposal.errors.messages
|
147
|
+
end
|
148
|
+
|
149
|
+
test "should validate arguments with a proc" do
|
150
|
+
error_messages = ["is invalid"]
|
151
|
+
errors = { arguments: error_messages }
|
152
|
+
proposal = User.propose.to email, expects: -> arguments {
|
153
|
+
!arguments.nil? && !arguments.empty?
|
154
|
+
}
|
155
|
+
|
156
|
+
assert_equal false, proposal.valid?
|
157
|
+
assert_equal errors, proposal.errors.messages
|
158
|
+
end
|
159
|
+
|
160
|
+
test "should return proposal instance" do
|
161
|
+
user = User.create email: email
|
162
|
+
proposal = User.propose.to email
|
163
|
+
assert_equal user, proposal.recipient
|
164
|
+
assert_equal true, proposal.notify?
|
165
|
+
end
|
166
|
+
|
167
|
+
test "should not return proposal instance" do
|
168
|
+
proposal = User.propose.to email
|
169
|
+
assert_equal nil, proposal.recipient
|
170
|
+
assert_raises(Proposal::RecordNotFound) { proposal.recipient! }
|
171
|
+
end
|
172
|
+
|
173
|
+
test "should not return proposal action notify" do
|
174
|
+
user = User.create email: email
|
175
|
+
proposal = User.propose.to email
|
176
|
+
assert_equal :notify, proposal.action
|
177
|
+
assert_equal true, proposal.notify?
|
178
|
+
end
|
179
|
+
|
180
|
+
test "should not return proposal action invite" do
|
181
|
+
proposal = User.propose.to email
|
182
|
+
assert_equal :invite, proposal.action
|
183
|
+
assert_equal true, proposal.invite?
|
184
|
+
end
|
185
|
+
|
186
|
+
test "should not return proposal action remind" do
|
187
|
+
user = User.create email: email
|
188
|
+
existing = User.propose.to email
|
189
|
+
existing.save!
|
190
|
+
existing.accept!
|
191
|
+
|
192
|
+
proposal = User.propose.to email
|
193
|
+
assert_equal :remind, proposal.action
|
194
|
+
assert_equal true, proposal.remind?
|
195
|
+
end
|
196
|
+
|
197
|
+
test "should set reminded" do
|
198
|
+
user = User.create email: email
|
199
|
+
existing = User.propose.to email
|
200
|
+
existing.save!
|
201
|
+
existing.accept!
|
202
|
+
|
203
|
+
proposal = User.propose.to email
|
204
|
+
assert_equal true, proposal.reminded!
|
205
|
+
end
|
206
|
+
|
207
|
+
test "should find and accept proposal" do
|
208
|
+
email = "user@example.com"
|
209
|
+
user = User.create email: email
|
210
|
+
proposal = User.propose.to email
|
211
|
+
proposal.save
|
212
|
+
|
213
|
+
retrieved = User.proposals.find_by_token proposal.token
|
214
|
+
|
215
|
+
assert_equal retrieved, proposal
|
216
|
+
|
217
|
+
retrieved.accept!
|
218
|
+
|
219
|
+
assert_equal true, retrieved.accepted?
|
220
|
+
end
|
221
|
+
|
222
|
+
test "should return token from to_s method" do
|
223
|
+
proposal = User.propose.to email
|
224
|
+
proposal.save
|
225
|
+
assert_equal proposal.token, proposal.to_s
|
226
|
+
end
|
227
|
+
end
|
data/test/test_helper.rb
ADDED
@@ -0,0 +1,18 @@
|
|
1
|
+
# Configure Rails Environment
|
2
|
+
ENV["RAILS_ENV"] = "test"
|
3
|
+
|
4
|
+
require File.expand_path("../dummy/config/environment.rb", __FILE__)
|
5
|
+
require "rails/test_help"
|
6
|
+
|
7
|
+
Rails.backtrace_cleaner.remove_silencers!
|
8
|
+
|
9
|
+
# Load support files
|
10
|
+
Dir["#{File.dirname(__FILE__)}/support/**/*.rb"].each { |f| require f }
|
11
|
+
|
12
|
+
# Load fixtures from the engine
|
13
|
+
if ActiveSupport::TestCase.method_defined?(:fixture_path=)
|
14
|
+
ActiveSupport::TestCase.fixture_path = File.expand_path("../fixtures", __FILE__)
|
15
|
+
end
|
16
|
+
|
17
|
+
ActiveRecord::Migrator.up("db/migrate")
|
18
|
+
ActiveRecord::Migrator.up(File.expand_path("../dummy/db/migrate", __FILE__))
|
metadata
ADDED
@@ -0,0 +1,162 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: proposal
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.0.1
|
5
|
+
prerelease:
|
6
|
+
platform: ruby
|
7
|
+
authors:
|
8
|
+
- Rufus Post
|
9
|
+
autorequire:
|
10
|
+
bindir: bin
|
11
|
+
cert_chain: []
|
12
|
+
date: 2012-11-03 00:00:00.000000000 Z
|
13
|
+
dependencies:
|
14
|
+
- !ruby/object:Gem::Dependency
|
15
|
+
name: rails
|
16
|
+
requirement: !ruby/object:Gem::Requirement
|
17
|
+
none: false
|
18
|
+
requirements:
|
19
|
+
- - ~>
|
20
|
+
- !ruby/object:Gem::Version
|
21
|
+
version: '3.2'
|
22
|
+
type: :runtime
|
23
|
+
prerelease: false
|
24
|
+
version_requirements: !ruby/object:Gem::Requirement
|
25
|
+
none: false
|
26
|
+
requirements:
|
27
|
+
- - ~>
|
28
|
+
- !ruby/object:Gem::Version
|
29
|
+
version: '3.2'
|
30
|
+
- !ruby/object:Gem::Dependency
|
31
|
+
name: sqlite3
|
32
|
+
requirement: !ruby/object:Gem::Requirement
|
33
|
+
none: false
|
34
|
+
requirements:
|
35
|
+
- - ! '>='
|
36
|
+
- !ruby/object:Gem::Version
|
37
|
+
version: '0'
|
38
|
+
type: :development
|
39
|
+
prerelease: false
|
40
|
+
version_requirements: !ruby/object:Gem::Requirement
|
41
|
+
none: false
|
42
|
+
requirements:
|
43
|
+
- - ! '>='
|
44
|
+
- !ruby/object:Gem::Version
|
45
|
+
version: '0'
|
46
|
+
- !ruby/object:Gem::Dependency
|
47
|
+
name: turn
|
48
|
+
requirement: !ruby/object:Gem::Requirement
|
49
|
+
none: false
|
50
|
+
requirements:
|
51
|
+
- - ! '>='
|
52
|
+
- !ruby/object:Gem::Version
|
53
|
+
version: '0'
|
54
|
+
type: :development
|
55
|
+
prerelease: false
|
56
|
+
version_requirements: !ruby/object:Gem::Requirement
|
57
|
+
none: false
|
58
|
+
requirements:
|
59
|
+
- - ! '>='
|
60
|
+
- !ruby/object:Gem::Version
|
61
|
+
version: '0'
|
62
|
+
description:
|
63
|
+
email:
|
64
|
+
- rufuspost@gmail.com
|
65
|
+
executables: []
|
66
|
+
extensions: []
|
67
|
+
extra_rdoc_files: []
|
68
|
+
files:
|
69
|
+
- app/models/proposal/token.rb
|
70
|
+
- app/validators/proposal/arguments_validator.rb
|
71
|
+
- app/validators/proposal/email_validator.rb
|
72
|
+
- db/migrate/20121026005348_create_proposal_tokens.rb
|
73
|
+
- lib/proposal/engine.rb
|
74
|
+
- lib/proposal/version.rb
|
75
|
+
- lib/proposal.rb
|
76
|
+
- lib/tasks/proposal_tasks.rake
|
77
|
+
- Rakefile
|
78
|
+
- test/dummy/Rakefile
|
79
|
+
- test/dummy/app/models/project.rb
|
80
|
+
- test/dummy/app/models/user.rb
|
81
|
+
- test/dummy/config/application.rb
|
82
|
+
- test/dummy/config/boot.rb
|
83
|
+
- test/dummy/config/database.yml
|
84
|
+
- test/dummy/config/environment.rb
|
85
|
+
- test/dummy/config/environments/development.rb
|
86
|
+
- test/dummy/config/environments/production.rb
|
87
|
+
- test/dummy/config/environments/test.rb
|
88
|
+
- test/dummy/config/initializers/backtrace_silencers.rb
|
89
|
+
- test/dummy/config/initializers/inflections.rb
|
90
|
+
- test/dummy/config/initializers/mime_types.rb
|
91
|
+
- test/dummy/config/initializers/secret_token.rb
|
92
|
+
- test/dummy/config/initializers/session_store.rb
|
93
|
+
- test/dummy/config/initializers/wrap_parameters.rb
|
94
|
+
- test/dummy/config/locales/en.yml
|
95
|
+
- test/dummy/config/routes.rb
|
96
|
+
- test/dummy/config.ru
|
97
|
+
- test/dummy/db/migrate/20121026035505_create_users.rb
|
98
|
+
- test/dummy/db/migrate/20121031041439_create_projects.rb
|
99
|
+
- test/dummy/db/proposal.sqlite3
|
100
|
+
- test/dummy/log/development.log
|
101
|
+
- test/dummy/log/test.log
|
102
|
+
- test/dummy/script/rails
|
103
|
+
- test/proposal_test.rb
|
104
|
+
- test/test_helper.rb
|
105
|
+
homepage: https://github.com/mynameisrufus/proposal
|
106
|
+
licenses: []
|
107
|
+
post_install_message:
|
108
|
+
rdoc_options: []
|
109
|
+
require_paths:
|
110
|
+
- lib
|
111
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
112
|
+
none: false
|
113
|
+
requirements:
|
114
|
+
- - ! '>='
|
115
|
+
- !ruby/object:Gem::Version
|
116
|
+
version: '0'
|
117
|
+
segments:
|
118
|
+
- 0
|
119
|
+
hash: 2799481107552733339
|
120
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
121
|
+
none: false
|
122
|
+
requirements:
|
123
|
+
- - ! '>='
|
124
|
+
- !ruby/object:Gem::Version
|
125
|
+
version: '0'
|
126
|
+
segments:
|
127
|
+
- 0
|
128
|
+
hash: 2799481107552733339
|
129
|
+
requirements: []
|
130
|
+
rubyforge_project:
|
131
|
+
rubygems_version: 1.8.24
|
132
|
+
signing_key:
|
133
|
+
specification_version: 3
|
134
|
+
summary: Simple unobtrusive token invitation engine for rails
|
135
|
+
test_files:
|
136
|
+
- test/dummy/Rakefile
|
137
|
+
- test/dummy/app/models/project.rb
|
138
|
+
- test/dummy/app/models/user.rb
|
139
|
+
- test/dummy/config/application.rb
|
140
|
+
- test/dummy/config/boot.rb
|
141
|
+
- test/dummy/config/database.yml
|
142
|
+
- test/dummy/config/environment.rb
|
143
|
+
- test/dummy/config/environments/development.rb
|
144
|
+
- test/dummy/config/environments/production.rb
|
145
|
+
- test/dummy/config/environments/test.rb
|
146
|
+
- test/dummy/config/initializers/backtrace_silencers.rb
|
147
|
+
- test/dummy/config/initializers/inflections.rb
|
148
|
+
- test/dummy/config/initializers/mime_types.rb
|
149
|
+
- test/dummy/config/initializers/secret_token.rb
|
150
|
+
- test/dummy/config/initializers/session_store.rb
|
151
|
+
- test/dummy/config/initializers/wrap_parameters.rb
|
152
|
+
- test/dummy/config/locales/en.yml
|
153
|
+
- test/dummy/config/routes.rb
|
154
|
+
- test/dummy/config.ru
|
155
|
+
- test/dummy/db/migrate/20121026035505_create_users.rb
|
156
|
+
- test/dummy/db/migrate/20121031041439_create_projects.rb
|
157
|
+
- test/dummy/db/proposal.sqlite3
|
158
|
+
- test/dummy/log/development.log
|
159
|
+
- test/dummy/log/test.log
|
160
|
+
- test/dummy/script/rails
|
161
|
+
- test/proposal_test.rb
|
162
|
+
- test/test_helper.rb
|