voluntary 0.3.0 → 0.4.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.
- 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
|