voluntary 0.3.0 → 0.4.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/CHANGELOG.md +9 -0
- data/README.md +1 -1
- data/app/assets/javascripts/voluntary/lib/jquery-competitive_list.js +533 -0
- data/app/controllers/comments_controller.rb +1 -3
- data/app/controllers/concerns/voluntary/v1/base_controller.rb +1 -5
- data/app/controllers/home_controller.rb +0 -1
- data/app/controllers/workflow/project_owner_controller.rb +17 -15
- data/app/controllers/workflow/tasks_controller.rb +1 -1
- data/app/models/ability.rb +3 -7
- data/app/models/comment.rb +1 -1
- data/app/models/product/music_metadata_enrichment.rb +2 -0
- data/app/models/product.rb +0 -27
- data/app/models/project.rb +0 -1
- data/app/models/project_user.rb +2 -3
- data/app/models/user.rb +4 -3
- data/app/views/layouts/application.html.erb +0 -4
- data/app/views/layouts/shared/_flash_messages.html.erb +2 -2
- data/app/views/workflow/project_owner/index.html.erb +7 -7
- data/config/locales/en.yml +1 -2
- data/config/locales/general/en.yml +2 -8
- data/config/locales/workflow/en.yml +1 -5
- data/config/routes/workflow.rb +0 -25
- data/config/routes.rb +0 -35
- data/db/migrate/20131018143613_replace_user_by_polymorphic_resource_in_candidatures.rb +4 -4
- data/db/migrate/20150802141840_drop_recruiting_unless_recruiting_plugin_present.rb +59 -0
- data/lib/generators/voluntary/install/templates/features/support/paths.rb +0 -14
- data/lib/generators/voluntary/product_dummy/templates/config/main_navigation.rb +1 -260
- data/lib/generators/voluntary/product_dummy/templates/features/step_definitions/comment_steps.rb +1 -1
- data/lib/generators/voluntary/product_dummy/templates/features/step_definitions/custom_web_steps.rb +5 -0
- data/lib/generators/voluntary/product_dummy/templates/features/support/integration_sessions_controller.rb +1 -1
- data/lib/generators/voluntary/product_dummy/templates/features/support/paths.rb +0 -14
- data/lib/voluntary/navigation.rb +34 -74
- data/lib/voluntary/test/rspec_helpers/factories.rb +10 -17
- data/lib/voluntary/version.rb +1 -1
- data/lib/voluntary.rb +1 -2
- metadata +37 -44
- data/app/assets/javascripts/voluntary/lib/competitive_list.js +0 -484
- data/app/controllers/candidatures_controller.rb +0 -84
- data/app/controllers/vacancies_controller.rb +0 -88
- data/app/controllers/workflow/candidatures_controller.rb +0 -20
- data/app/controllers/workflow/vacancies_controller.rb +0 -17
- data/app/models/candidature.rb +0 -38
- data/app/models/state_machines/candidature.rb +0 -64
- data/app/models/state_machines/vacancy.rb +0 -49
- data/app/models/vacancy.rb +0 -43
- data/app/views/candidatures/_form.html.erb +0 -13
- data/app/views/candidatures/edit.html.erb +0 -3
- data/app/views/candidatures/index.html.erb +0 -11
- data/app/views/candidatures/new.html.erb +0 -3
- data/app/views/candidatures/show.html.erb +0 -18
- data/app/views/vacancies/_form.html.erb +0 -15
- data/app/views/vacancies/edit.html.erb +0 -3
- data/app/views/vacancies/index.html.erb +0 -7
- data/app/views/vacancies/new.html.erb +0 -3
- data/app/views/vacancies/show.html.erb +0 -15
- data/app/views/workflow/project_owner/_candidatures.html.erb +0 -32
- data/app/views/workflow/project_owner/_vacancies.html.erb +0 -27
- data/config/locales/resources/candidature/en.yml +0 -19
- data/config/locales/resources/vacancy/en.yml +0 -29
- data/lib/generators/voluntary/product_dummy/templates/features/step_definitions/candidature_steps.rb +0 -34
- data/lib/generators/voluntary/product_dummy/templates/features/step_definitions/vacancy_steps.rb +0 -32
@@ -1,17 +0,0 @@
|
|
1
|
-
class Workflow::VacanciesController < ApplicationController
|
2
|
-
def open
|
3
|
-
@vacancies = Vacancy.where(state: 'open')
|
4
|
-
end
|
5
|
-
|
6
|
-
def recommended
|
7
|
-
@vacancies = Vacancy.where(state: 'recommended')
|
8
|
-
end
|
9
|
-
|
10
|
-
def denied
|
11
|
-
@vacancies = Vacancy.where(state: 'denied')
|
12
|
-
end
|
13
|
-
|
14
|
-
def closed
|
15
|
-
@vacancies = Vacancy.where(state: 'closed')
|
16
|
-
end
|
17
|
-
end
|
data/app/models/candidature.rb
DELETED
@@ -1,38 +0,0 @@
|
|
1
|
-
class Candidature < ActiveRecord::Base
|
2
|
-
include StateMachines::Candidature
|
3
|
-
|
4
|
-
belongs_to :vacancy
|
5
|
-
belongs_to :offeror, class_name: 'User'
|
6
|
-
belongs_to :resource, polymorphic: true
|
7
|
-
|
8
|
-
has_many :comments, as: :commentable, dependent: :destroy
|
9
|
-
|
10
|
-
scope :accepted, -> { where(state: 'accepted') }
|
11
|
-
|
12
|
-
validates :vacancy_id, presence: true
|
13
|
-
validates :offeror_id, presence: true
|
14
|
-
validates :resource_id, presence: true, uniqueness: { scope: [:resource_type, :vacancy_id] }
|
15
|
-
#validates :name, presence: true, uniqueness: { scope: :vacancy_id }
|
16
|
-
|
17
|
-
attr_accessible :vacancy, :vacancy_id, :name, :text
|
18
|
-
|
19
|
-
extend FriendlyId
|
20
|
-
friendly_id :name, use: :slugged
|
21
|
-
|
22
|
-
before_validation :set_offeror
|
23
|
-
|
24
|
-
# association shortcuts
|
25
|
-
def project
|
26
|
-
vacancy.project
|
27
|
-
end
|
28
|
-
|
29
|
-
def product
|
30
|
-
project.product
|
31
|
-
end
|
32
|
-
|
33
|
-
private
|
34
|
-
|
35
|
-
def set_offeror
|
36
|
-
self.offeror_id = vacancy.project.user_id
|
37
|
-
end
|
38
|
-
end
|
@@ -1,64 +0,0 @@
|
|
1
|
-
module StateMachines::Candidature
|
2
|
-
def self.included(base)
|
3
|
-
base.extend ClassMethods
|
4
|
-
|
5
|
-
base.class_eval do
|
6
|
-
attr_accessor :current_user
|
7
|
-
|
8
|
-
const_set 'STATES', [:new, :accepted, :denied]
|
9
|
-
const_set 'EVENTS', [:accept, :deny, :quit]
|
10
|
-
|
11
|
-
after_initialize :set_initial_state
|
12
|
-
|
13
|
-
state_machine :state, initial: :new do
|
14
|
-
event :accept do
|
15
|
-
transition [:new, :denied] => :accepted
|
16
|
-
end
|
17
|
-
|
18
|
-
state :accepted do
|
19
|
-
validate :candidatures_limit_not_reached
|
20
|
-
end
|
21
|
-
|
22
|
-
event :deny do
|
23
|
-
transition [:new, :accepted] => :denied
|
24
|
-
end
|
25
|
-
|
26
|
-
event :quit do
|
27
|
-
transition :accepted => :denied
|
28
|
-
end
|
29
|
-
|
30
|
-
after_transition do |object, transition|
|
31
|
-
case transition.to
|
32
|
-
when 'accepted'
|
33
|
-
ProjectUser.find_or_create_by_project_id_and_vacancy_id_and_user_id!(
|
34
|
-
project_id: object.vacancy.project_id, vacancy_id: object.vacancy_id,
|
35
|
-
user_id: object.resource_id
|
36
|
-
)
|
37
|
-
|
38
|
-
if object.vacancy.limit == object.vacancy.candidatures.accepted.count
|
39
|
-
object.vacancy.close! unless object.vacancy.closed?
|
40
|
-
end
|
41
|
-
when 'denied'
|
42
|
-
# if comming from :accepted then the vacancy offerer has to reopen the vacancy manually
|
43
|
-
end
|
44
|
-
end
|
45
|
-
end
|
46
|
-
|
47
|
-
private
|
48
|
-
|
49
|
-
# state validations
|
50
|
-
def candidatures_limit_not_reached
|
51
|
-
if vacancy.limit == vacancy.candidatures.where(state: 'accepted').count
|
52
|
-
errors[:state] << I18n.t('activerecord.errors.models.vacancy.attributes.limit.reached')
|
53
|
-
end
|
54
|
-
end
|
55
|
-
|
56
|
-
def set_initial_state
|
57
|
-
self.state ||= :new
|
58
|
-
end
|
59
|
-
end
|
60
|
-
end
|
61
|
-
|
62
|
-
module ClassMethods
|
63
|
-
end
|
64
|
-
end
|
@@ -1,49 +0,0 @@
|
|
1
|
-
module StateMachines::Vacancy
|
2
|
-
def self.included(base)
|
3
|
-
base.extend ClassMethods
|
4
|
-
|
5
|
-
base.class_eval do
|
6
|
-
attr_accessor :current_user
|
7
|
-
|
8
|
-
const_set 'STATES', [:open, :recommended, :denied, :closed]
|
9
|
-
const_set 'EVENTS', [:accept_recommendation, :deny_recommendation, :close, :reopen]
|
10
|
-
|
11
|
-
after_initialize :set_initial_state
|
12
|
-
|
13
|
-
state_machine :state, initial: :new do
|
14
|
-
event :recommend do
|
15
|
-
transition :new => :recommended
|
16
|
-
end
|
17
|
-
|
18
|
-
event :accept_recommendation do
|
19
|
-
transition :recommended => :open
|
20
|
-
end
|
21
|
-
|
22
|
-
event :deny_recommendation do
|
23
|
-
transition :recommended => :denied
|
24
|
-
end
|
25
|
-
|
26
|
-
event :do_open do
|
27
|
-
transition :new => :open
|
28
|
-
end
|
29
|
-
|
30
|
-
event :close do
|
31
|
-
transition :open => :closed
|
32
|
-
end
|
33
|
-
|
34
|
-
event :reopen do
|
35
|
-
transition [:denied, :closed] => :open
|
36
|
-
end
|
37
|
-
end
|
38
|
-
|
39
|
-
private
|
40
|
-
|
41
|
-
def set_initial_state
|
42
|
-
self.state ||= :new
|
43
|
-
end
|
44
|
-
end
|
45
|
-
end
|
46
|
-
|
47
|
-
module ClassMethods
|
48
|
-
end
|
49
|
-
end
|
data/app/models/vacancy.rb
DELETED
@@ -1,43 +0,0 @@
|
|
1
|
-
class Vacancy < ActiveRecord::Base
|
2
|
-
include StateMachines::Vacancy
|
3
|
-
|
4
|
-
belongs_to :project
|
5
|
-
belongs_to :offeror, class_name: 'User'
|
6
|
-
belongs_to :author, class_name: 'User'
|
7
|
-
belongs_to :resource, polymorphic: true
|
8
|
-
belongs_to :project_user
|
9
|
-
|
10
|
-
has_many :candidatures, dependent: :destroy
|
11
|
-
has_many :comments, as: :commentable, dependent: :destroy
|
12
|
-
|
13
|
-
accepts_nested_attributes_for :candidatures, allow_destroy: true, reject_if: ->(t) { t['name'].blank? }
|
14
|
-
scope :open, -> { where(state: 'open') }
|
15
|
-
|
16
|
-
|
17
|
-
validates :project_id, presence: true
|
18
|
-
validates :offeror_id, presence: true
|
19
|
-
validates :name, presence: true, uniqueness: { scope: :project_id }
|
20
|
-
validates :text, presence: true
|
21
|
-
validates :limit, presence: true
|
22
|
-
|
23
|
-
attr_accessible :project_id, :name, :text, :limit, :candidatures_attributes
|
24
|
-
|
25
|
-
extend FriendlyId
|
26
|
-
|
27
|
-
friendly_id :name, use: :slugged
|
28
|
-
|
29
|
-
before_validation :set_defaults
|
30
|
-
|
31
|
-
def candidatures_left
|
32
|
-
limit - candidatures.accepted.count
|
33
|
-
end
|
34
|
-
|
35
|
-
protected
|
36
|
-
|
37
|
-
def set_defaults
|
38
|
-
if project
|
39
|
-
self.offeror_id = project.user_id
|
40
|
-
self.author_id = project.user_id unless self.author_id.present?
|
41
|
-
end
|
42
|
-
end
|
43
|
-
end
|
@@ -1,13 +0,0 @@
|
|
1
|
-
<%= simple_form_for(@candidature) do |f| %>
|
2
|
-
<%= render partial: 'shared/form/error_messages', locals: { resource: @candidature } %>
|
3
|
-
|
4
|
-
<div class="form-inputs">
|
5
|
-
<%= @candidature.vacancy ? f.hidden_field(:vacancy_id) : f.association(:vacancy) %>
|
6
|
-
<%= f.input :name %>
|
7
|
-
<%= f.input :text, input_html: {style: 'width: 500px; height:300px;'} %>
|
8
|
-
</div>
|
9
|
-
|
10
|
-
<div class="form-actions">
|
11
|
-
<%= f.button :submit %>
|
12
|
-
</div>
|
13
|
-
<% end %>
|
@@ -1,11 +0,0 @@
|
|
1
|
-
<% columns = { 'name' => 'resource.name', 'resource_id' => ''} %>
|
2
|
-
<% columns['vacancy_id'] = '' unless @vacancy %>
|
3
|
-
<% columns['project_id'] = 'vacancy.project' unless @vacancy %>
|
4
|
-
|
5
|
-
<%= form_tag update_multiple_candidatures_path, method: :post do %>
|
6
|
-
<%= render partial: "shared/collection/#{@vacancy ? 'list' : 'table'}", locals: {
|
7
|
-
type: 'candidatures', collection: @candidatures, columns: columns, content_column: 'text'
|
8
|
-
} %>
|
9
|
-
<% end %>
|
10
|
-
|
11
|
-
<%= link_to t('candidatures.new.title'), new_vacancy_candidature_path(@vacancy) if @vacancy %>
|
@@ -1,18 +0,0 @@
|
|
1
|
-
<h3>
|
2
|
-
<a name="top"> </a>
|
3
|
-
<% if @candidature.name.present? %>
|
4
|
-
<%= @candidature.name %>
|
5
|
-
<% else %>
|
6
|
-
No Name
|
7
|
-
<% end %>
|
8
|
-
</h3>
|
9
|
-
|
10
|
-
<dl class="dl-horizontal">
|
11
|
-
<%= show_associations :project, :vacancy, :resource %>
|
12
|
-
<%= show_attribute :state %>
|
13
|
-
<%= show_actions %>
|
14
|
-
</dl>
|
15
|
-
|
16
|
-
<%= markdown @candidature.text %>
|
17
|
-
|
18
|
-
<%= render 'shared/comments', comment: @candidature.comments.new %>
|
@@ -1,15 +0,0 @@
|
|
1
|
-
<%= simple_form_for(@vacancy, html: {class: 'form-horizontal'}) do |f| %>
|
2
|
-
<%= render partial: 'shared/form/error_messages', locals: { resource: @vacancy } %>
|
3
|
-
|
4
|
-
<div class="form-inputs">
|
5
|
-
<%= @vacancy.project ? f.hidden_field(:project_id) : f.association(:project) %>
|
6
|
-
|
7
|
-
<%= f.input :name %>
|
8
|
-
<%= f.input :text, input_html: {style: 'width: 500px; height:300px;'} %>
|
9
|
-
<%= f.input :limit %>
|
10
|
-
</div>
|
11
|
-
|
12
|
-
<div class="form-actions">
|
13
|
-
<%= f.button :submit %>
|
14
|
-
</div>
|
15
|
-
<% end %>
|
@@ -1,7 +0,0 @@
|
|
1
|
-
<%= form_tag update_multiple_candidatures_path, method: :post do %>
|
2
|
-
<%= render partial: "shared/collection/#{@project ? 'list' : 'table'}", locals: {
|
3
|
-
type: 'vacancies', collection: @vacancies, columns: ['name', 'project_id'], content_column: 'text'
|
4
|
-
} %>
|
5
|
-
<% end %>
|
6
|
-
|
7
|
-
<%= link_to t('vacancies.new.title'), new_project_vacancy_path(@project) if @project %>
|
@@ -1,15 +0,0 @@
|
|
1
|
-
<h3>
|
2
|
-
<a id="top" name="top"></a>
|
3
|
-
<%= @vacancy.name %>
|
4
|
-
</h3>
|
5
|
-
|
6
|
-
<dl class="dl-horizontal">
|
7
|
-
<%= show_associations :project %>
|
8
|
-
<%= show_attribute :limit, value: "#{@vacancy.candidatures_left} / #{@vacancy.limit}" %>
|
9
|
-
<%= show_attribute :state %>
|
10
|
-
<%= show_actions %>
|
11
|
-
</dl>
|
12
|
-
|
13
|
-
<%= markdown @vacancy.text %>
|
14
|
-
|
15
|
-
<%= render 'shared/comments', comment: @vacancy.comments.new %>
|
@@ -1,32 +0,0 @@
|
|
1
|
-
<div class="tabs">
|
2
|
-
<ul>
|
3
|
-
<% Candidature::STATES.each do |state| %>
|
4
|
-
<li>
|
5
|
-
<a href="#<%= state %>_candidatures">
|
6
|
-
<%= I18n.t("candidatures.show.states.#{state}") %>
|
7
|
-
<% if @candidatures[state].length == 5 %>
|
8
|
-
(<%= @candidatures[state].length %>+)
|
9
|
-
<% elsif @candidatures[state].length > 0 %>
|
10
|
-
(<%= @candidatures[state].length %>)
|
11
|
-
<% end %>
|
12
|
-
</a>
|
13
|
-
</li>
|
14
|
-
<% end %>
|
15
|
-
</ul>
|
16
|
-
<% Candidature::STATES.each do |state| %>
|
17
|
-
<div id="<%= state %>_candidatures">
|
18
|
-
<%= render partial: 'shared/collection/table', locals: {
|
19
|
-
type: 'candidatures', collection: @candidatures[state],
|
20
|
-
columns: {
|
21
|
-
'project_id' => 'vacancy.project', 'vacancy_id' => '', 'name' => 'user.name',
|
22
|
-
'resource_id' => ''
|
23
|
-
},
|
24
|
-
options: {show_title: false, append_new_link: false }
|
25
|
-
} %>
|
26
|
-
|
27
|
-
<% if @candidatures[state].length == 5 %>
|
28
|
-
<p><%= link_to t('general.more'), eval("#{state}_workflow_candidatures_path") %></p>
|
29
|
-
<% end %>
|
30
|
-
</div>
|
31
|
-
<% end %>
|
32
|
-
</div>
|
@@ -1,27 +0,0 @@
|
|
1
|
-
<div class="tabs">
|
2
|
-
<ul>
|
3
|
-
<% Vacancy::STATES.each do |state| %>
|
4
|
-
<li>
|
5
|
-
<a href="#<%= state %>_vacancies">
|
6
|
-
<%= I18n.t("vacancies.show.states.#{state}") %>
|
7
|
-
<% if @vacancies[state].length == 5 %>
|
8
|
-
(<%= @vacancies[state].length %>+)
|
9
|
-
<% elsif @vacancies[state].length > 0 %>
|
10
|
-
(<%= @vacancies[state].length %>)
|
11
|
-
<% end %>
|
12
|
-
</a>
|
13
|
-
</li>
|
14
|
-
<% end %>
|
15
|
-
</ul>
|
16
|
-
<% Vacancy::STATES.each do |state| %>
|
17
|
-
<div id="<%= state %>_vacancies">
|
18
|
-
<%= render partial: 'shared/collection/table', locals: {
|
19
|
-
type: 'vacancies', collection: @vacancies[state], columns: ['name', 'project_id'],
|
20
|
-
options: {show_title: false, append_new_link: false }
|
21
|
-
} %>
|
22
|
-
<% if @vacancies[state].length == 5 %>
|
23
|
-
<p><%= link_to t('general.more'), eval("#{state}_workflow_vacancies_path") if @vacancies[state].length > 0 %></p>
|
24
|
-
<% end %>
|
25
|
-
</div>
|
26
|
-
<% end %>
|
27
|
-
</div>
|
@@ -1,19 +0,0 @@
|
|
1
|
-
en:
|
2
|
-
candidatures:
|
3
|
-
index:
|
4
|
-
title: Candidatures
|
5
|
-
empty_collection: No candidatures available.
|
6
|
-
new:
|
7
|
-
title: New Candidature
|
8
|
-
edit:
|
9
|
-
title: Edit Candidature
|
10
|
-
show:
|
11
|
-
states:
|
12
|
-
new: New
|
13
|
-
accepted: Accepted
|
14
|
-
denied: Denied
|
15
|
-
events:
|
16
|
-
accept: Accept
|
17
|
-
deny: Deny
|
18
|
-
quit: Quit
|
19
|
-
|
@@ -1,29 +0,0 @@
|
|
1
|
-
en:
|
2
|
-
vacancies:
|
3
|
-
index:
|
4
|
-
title: Vacancies
|
5
|
-
empty_collection: No vacancies available.
|
6
|
-
new:
|
7
|
-
title: New Vacancy
|
8
|
-
edit:
|
9
|
-
title: Edit Vacancy
|
10
|
-
show:
|
11
|
-
states:
|
12
|
-
open: Open
|
13
|
-
recommended: Recommended
|
14
|
-
denied: Denied
|
15
|
-
closed: Closed
|
16
|
-
events:
|
17
|
-
recommend: Recommend
|
18
|
-
accept_recommendation: Accept recommendation
|
19
|
-
deny_recommendation: Deny recommendation
|
20
|
-
close: Close
|
21
|
-
reopen: Reopen
|
22
|
-
|
23
|
-
activerecord:
|
24
|
-
errors:
|
25
|
-
models:
|
26
|
-
vacancy:
|
27
|
-
attributes:
|
28
|
-
limit:
|
29
|
-
reached: Limit of candidatures already reached
|
data/lib/generators/voluntary/product_dummy/templates/features/step_definitions/candidature_steps.rb
DELETED
@@ -1,34 +0,0 @@
|
|
1
|
-
module CandidatureFactoryMethods
|
2
|
-
def set_candidature_defaults(attributes)
|
3
|
-
attributes[:user_id] ||= @me.id unless attributes[:user] || attributes[:user_id] || !@me
|
4
|
-
attributes[:vacancy_id] ||= Vacancy.last.id unless attributes[:vacancy_id] || Vacancy.all.none?
|
5
|
-
attributes[:offeror_id] ||= Vacancy.find(attributes[:vacancy_id]).project.user_id if attributes[:vacancy_id]
|
6
|
-
end
|
7
|
-
|
8
|
-
def new_candidature(name, state = nil)
|
9
|
-
attributes = { name: name }
|
10
|
-
attributes[:state] = state if state
|
11
|
-
|
12
|
-
set_candidature_defaults(attributes)
|
13
|
-
|
14
|
-
@candidature = Factory(:candidature, attributes)
|
15
|
-
|
16
|
-
@candidature.reload
|
17
|
-
end
|
18
|
-
end
|
19
|
-
|
20
|
-
World(CandidatureFactoryMethods)
|
21
|
-
|
22
|
-
Given /^a candidature named "([^\"]*)"$/ do |name|
|
23
|
-
new_candidature(name)
|
24
|
-
end
|
25
|
-
|
26
|
-
Given /^a candidature named "([^\"]*)" with state "([^\"]*)"$/ do |name,state|
|
27
|
-
new_candidature(name, state)
|
28
|
-
end
|
29
|
-
|
30
|
-
Then /^I should see the following candidatures:$/ do |expected_table|
|
31
|
-
rows = find('table').all('tr')
|
32
|
-
table = rows.map { |r| r.all('th,td').map { |c| c.text.strip } }
|
33
|
-
expected_table.diff!(table)
|
34
|
-
end
|
data/lib/generators/voluntary/product_dummy/templates/features/step_definitions/vacancy_steps.rb
DELETED
@@ -1,32 +0,0 @@
|
|
1
|
-
module VacancyFactoryMethods
|
2
|
-
def set_vacancy_defaults(attributes)
|
3
|
-
attributes[:user_id] ||= @me.id unless attributes[:user_id] || !@me
|
4
|
-
attributes[:project_id] ||= Project.last.id unless attributes[:project_id] || Project.all.none?
|
5
|
-
end
|
6
|
-
|
7
|
-
def new_vacancy(name, state = nil)
|
8
|
-
attributes = { name: name }
|
9
|
-
attributes[:state] = state if state
|
10
|
-
|
11
|
-
set_vacancy_defaults(attributes)
|
12
|
-
|
13
|
-
@vacancy = Factory(:vacancy, attributes)
|
14
|
-
@vacancy.reload
|
15
|
-
end
|
16
|
-
end
|
17
|
-
|
18
|
-
World(VacancyFactoryMethods)
|
19
|
-
|
20
|
-
Given /^a vacancy named "([^\"]*)"$/ do |name|
|
21
|
-
new_vacancy(name)
|
22
|
-
end
|
23
|
-
|
24
|
-
Given /^a vacancy named "([^\"]*)" with state "([^\"]*)"$/ do |name, state|
|
25
|
-
new_vacancy(name, state)
|
26
|
-
end
|
27
|
-
|
28
|
-
Then /^I should see the following vacancies:$/ do |expected_table|
|
29
|
-
rows = find('table').all('tr')
|
30
|
-
table = rows.map { |r| r.all('th,td').map { |c| c.text.strip } }
|
31
|
-
expected_table.diff!(table)
|
32
|
-
end
|