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
data/app/models/ability.rb
CHANGED
@@ -19,7 +19,7 @@ class Ability
|
|
19
19
|
alias_action :read, :assign_actions, to: :supervisor
|
20
20
|
|
21
21
|
can :read, [
|
22
|
-
Area, Organization, Profession, Product, Project,
|
22
|
+
Area, Organization, Profession, Product, Project, Story, Task, Result, Comment
|
23
23
|
]
|
24
24
|
can [:read, :check_name, :check_url, :check_email, :check_email_unblocked], User
|
25
25
|
can :show, Page
|
@@ -27,21 +27,17 @@ class Ability
|
|
27
27
|
if user.present?
|
28
28
|
can :destroy, User, id: user.id
|
29
29
|
|
30
|
-
can [:new, :create], [Area, Profession, Project,
|
30
|
+
can [:new, :create], [Area, Profession, Project, Comment, Like]
|
31
31
|
can :assign, Task
|
32
32
|
can [:update, :cancel, :review], [Task, Like], user_id: user.id
|
33
33
|
|
34
34
|
{
|
35
35
|
user_id: [Product, Organization, Project, Comment, ProjectUser, Result],
|
36
|
-
offeror_id: [
|
36
|
+
offeror_id: [Story, Task]
|
37
37
|
}.each do |attribute, classes|
|
38
38
|
can :restful_actions, classes, attribute => user.id
|
39
39
|
end
|
40
40
|
|
41
|
-
can :restful_actions, Candidature, resource_type: 'User', resource_id: user.id
|
42
|
-
|
43
|
-
can Candidature::EVENTS, Candidature, offeror_id: user.id
|
44
|
-
can Vacancy::EVENTS, Vacancy, offeror_id: user.id
|
45
41
|
can Story::EVENTS, Story, offeror_id: user.id
|
46
42
|
can Task::EVENTS + [:update], Task, offeror_id: user.id
|
47
43
|
|
data/app/models/comment.rb
CHANGED
data/app/models/product.rb
CHANGED
@@ -16,12 +16,9 @@ class Product
|
|
16
16
|
validates :name, presence: true, uniqueness: true
|
17
17
|
|
18
18
|
validate :english_name_available?
|
19
|
-
validate :existing_model_file?
|
20
19
|
|
21
20
|
index({ name: 1 }, { unique: true })
|
22
21
|
|
23
|
-
before_validation :set_klass_name
|
24
|
-
|
25
22
|
# active record compatibility
|
26
23
|
# just belongs_to reflections for cucumber's factory steps
|
27
24
|
def self.reflections
|
@@ -77,28 +74,4 @@ class Product
|
|
77
74
|
)
|
78
75
|
end
|
79
76
|
end
|
80
|
-
|
81
|
-
def existing_model_file?
|
82
|
-
unless (get_klass_name.constantize rescue false)
|
83
|
-
errors[:name] << I18n.t(
|
84
|
-
'activerecord.errors.models.product.attributes.name.missing_model_file'
|
85
|
-
)
|
86
|
-
end
|
87
|
-
end
|
88
|
-
|
89
|
-
def get_klass_name
|
90
|
-
if klass_name.present?
|
91
|
-
klass_name
|
92
|
-
elsif name == 'Product'
|
93
|
-
'Product'
|
94
|
-
else
|
95
|
-
[
|
96
|
-
'Product', name.gsub(' - ', '_').gsub('-', '_').gsub(' ', '_').classify
|
97
|
-
].join('::')
|
98
|
-
end
|
99
|
-
end
|
100
|
-
|
101
|
-
def set_klass_name
|
102
|
-
self._type = get_klass_name
|
103
|
-
end
|
104
77
|
end
|
data/app/models/project.rb
CHANGED
data/app/models/project_user.rb
CHANGED
@@ -2,12 +2,11 @@ class ProjectUser < ActiveRecord::Base#
|
|
2
2
|
self.table_name = 'projects_users'
|
3
3
|
|
4
4
|
belongs_to :project
|
5
|
-
belongs_to :vacancy
|
6
5
|
belongs_to :user
|
7
6
|
belongs_to :role
|
8
7
|
|
9
8
|
validates :project_id, presence: true
|
10
|
-
validates :user_id, presence: true, uniqueness: { scope: [:project_id
|
9
|
+
validates :user_id, presence: true, uniqueness: { scope: [:project_id] }
|
11
10
|
|
12
|
-
attr_accessible :project_id, :
|
11
|
+
attr_accessible :project_id, :user_id, :role_id
|
13
12
|
end
|
data/app/models/user.rb
CHANGED
@@ -13,9 +13,6 @@ class User < ActiveRecord::Base
|
|
13
13
|
has_and_belongs_to_many :projects
|
14
14
|
|
15
15
|
has_many :organizations, dependent: :destroy
|
16
|
-
has_many :offeror_vacancies, source: :offeror, class_name: 'Vacancy'
|
17
|
-
has_many :offeror_candidatures, source: :offeror, class_name: 'Candidature'
|
18
|
-
has_many :candidatures, as: :resource
|
19
16
|
|
20
17
|
accepts_nested_attributes_for :areas, allow_destroy: true
|
21
18
|
|
@@ -49,6 +46,10 @@ class User < ActiveRecord::Base
|
|
49
46
|
|
50
47
|
PARENT_TYPES = ['area', 'project']
|
51
48
|
|
49
|
+
def self.by_slug_or_id(id)
|
50
|
+
id.to_i.to_s == id.to_s ? find(id) : friendly.find(id)
|
51
|
+
end
|
52
|
+
|
52
53
|
def self.languages(query = nil)
|
53
54
|
options = []
|
54
55
|
|
@@ -11,10 +11,6 @@
|
|
11
11
|
<body>
|
12
12
|
<div id="bootstrap_modal" class="modal hide fade"></div>
|
13
13
|
|
14
|
-
<% if voluntary_application_repository_path.present? %>
|
15
|
-
<a href="https://github.com/<%= voluntary_application_repository_path %>"><img style="position: absolute; top: 41px; right: 0; border: 0; z-index: 100;" src="https://camo.githubusercontent.com/365986a132ccd6a44c23a9169022c0b5c890c387/68747470733a2f2f73332e616d617a6f6e6177732e636f6d2f6769746875622f726962626f6e732f666f726b6d655f72696768745f7265645f6161303030302e706e67" alt="Fork me on GitHub" data-canonical-src="https://s3.amazonaws.com/github/ribbons/forkme_right_red_aa0000.png"></a>
|
16
|
-
<% end %>
|
17
|
-
|
18
14
|
<section id="dialog">
|
19
15
|
<img alt="Ajax-loader-small" class="hide " id="dialog_body_spinner" src="<%=image_path('voluntary/spinner.gif')%>"/>
|
20
16
|
<div id="dialog_body"/>
|
@@ -1,7 +1,7 @@
|
|
1
1
|
<div class="flash">
|
2
2
|
<% flash.each do |type, message| -%>
|
3
|
-
<div class="message <%= type == :notice ? 'alert-info' :
|
4
|
-
|
3
|
+
<div class="alert message <%= (type.to_sym == :notice ? 'alert-info' : 'alert-error') %>">
|
4
|
+
<%= message %><br/>
|
5
5
|
</div>
|
6
6
|
<% end -%>
|
7
7
|
</div>
|
@@ -4,8 +4,9 @@
|
|
4
4
|
<ul>
|
5
5
|
<li><a href="#stories"><%= I18n.t('stories.index.title') %></a></li>
|
6
6
|
<li><a href="#tasks"><%= I18n.t('workflow.project_owner.index.tasks') %></a></li>
|
7
|
-
|
8
|
-
<li><a href="
|
7
|
+
<% Workflow::ProjectOwnerController.extra_tabs.each do |tab| %>
|
8
|
+
<li><a href="#<%= tab %>"><%= I18n.t("#{tab}.index.title") %></a></li>
|
9
|
+
<% end %>
|
9
10
|
</ul>
|
10
11
|
<div id="stories">
|
11
12
|
<%= render 'stories' %>
|
@@ -13,12 +14,11 @@
|
|
13
14
|
<div id="tasks">
|
14
15
|
<%= render 'tasks' %>
|
15
16
|
</div>
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
<div id="vacancies">
|
20
|
-
<%= render 'vacancies' %>
|
17
|
+
<% Workflow::ProjectOwnerController.extra_tabs.each do |tab| %>
|
18
|
+
<div id="<%= tab %>">
|
19
|
+
<%= render "workflow/project_owner/#{tab}" %>
|
21
20
|
</div>
|
21
|
+
<% end %>
|
22
22
|
</div>
|
23
23
|
</div>
|
24
24
|
</div>
|
data/config/locales/en.yml
CHANGED
@@ -55,8 +55,7 @@ en:
|
|
55
55
|
parent: Parent
|
56
56
|
project_id: Project
|
57
57
|
state: State
|
58
|
-
user_id: User
|
59
|
-
vacancy_id: Vacancy
|
58
|
+
user_id: User
|
60
59
|
roles: Roles
|
61
60
|
position: Position
|
62
61
|
date: Date
|
@@ -65,7 +64,6 @@ en:
|
|
65
64
|
activerecord:
|
66
65
|
models:
|
67
66
|
area: Area
|
68
|
-
candidature: Candidature
|
69
67
|
comment: Comment
|
70
68
|
product: Product
|
71
69
|
organization: Organization
|
@@ -74,14 +72,10 @@ en:
|
|
74
72
|
story: Story
|
75
73
|
task: Task
|
76
74
|
user: User
|
77
|
-
vacancy: Vacancy
|
78
75
|
|
79
76
|
attributes:
|
80
77
|
comment:
|
81
78
|
name: Subject
|
82
|
-
vacancy:
|
83
|
-
name: Name
|
84
|
-
limit: Limit
|
85
79
|
user:
|
86
80
|
area_tokens: Areas
|
87
81
|
country: Country
|
@@ -89,7 +83,7 @@ en:
|
|
89
83
|
foreign_language: Foreign language
|
90
84
|
interface_language: Interface language
|
91
85
|
language: Mother tongue
|
92
|
-
profession:
|
86
|
+
profession: Profession
|
93
87
|
|
94
88
|
errors:
|
95
89
|
models:
|
data/config/routes/workflow.rb
CHANGED
@@ -25,29 +25,4 @@ namespace 'workflow' do
|
|
25
25
|
get 'tasks/:id/complete' => 'tasks#complete', as: :complete_task
|
26
26
|
end
|
27
27
|
end
|
28
|
-
|
29
|
-
resources :vacancies, controller: 'vacancies', only: :index do
|
30
|
-
collection do
|
31
|
-
get '/' => 'vacancies#open', as: :open
|
32
|
-
|
33
|
-
get :autocomplete
|
34
|
-
|
35
|
-
get :open
|
36
|
-
get :recommended
|
37
|
-
get :denied
|
38
|
-
get :closed
|
39
|
-
end
|
40
|
-
end
|
41
|
-
|
42
|
-
resources :candidatures, controller: 'candidatures', only: :index do
|
43
|
-
collection do
|
44
|
-
get '/' => 'candidatures#new', as: :new
|
45
|
-
|
46
|
-
get :autocomplete
|
47
|
-
|
48
|
-
get :new
|
49
|
-
get :accepted
|
50
|
-
get :denied
|
51
|
-
end
|
52
|
-
end
|
53
28
|
end
|
data/config/routes.rb
CHANGED
@@ -49,7 +49,6 @@ Rails.application.routes.draw do
|
|
49
49
|
|
50
50
|
resources :projects do
|
51
51
|
resources :users, only: :index
|
52
|
-
resources :vacancies, only: [:index, :new]
|
53
52
|
resources :stories, only: [:index, :new]
|
54
53
|
resources :comments, only: [:index, :new]
|
55
54
|
|
@@ -58,39 +57,6 @@ Rails.application.routes.draw do
|
|
58
57
|
get :autocomplete
|
59
58
|
end
|
60
59
|
end
|
61
|
-
|
62
|
-
resources :vacancies do
|
63
|
-
resources :candidatures, only: [:index, :new]
|
64
|
-
resources :comments, only: [:index, :new]
|
65
|
-
|
66
|
-
collection do
|
67
|
-
put :update_multiple
|
68
|
-
get :autocomplete
|
69
|
-
end
|
70
|
-
|
71
|
-
member do
|
72
|
-
put :recommend
|
73
|
-
put :accept_recommendation
|
74
|
-
put :deny_recommendation
|
75
|
-
put :close
|
76
|
-
put :reopen
|
77
|
-
end
|
78
|
-
end
|
79
|
-
|
80
|
-
resources :candidatures do
|
81
|
-
resources :comments, only: [:index, :new]
|
82
|
-
|
83
|
-
collection do
|
84
|
-
put :update_multiple
|
85
|
-
get :autocomplete
|
86
|
-
end
|
87
|
-
|
88
|
-
member do
|
89
|
-
get :accept
|
90
|
-
get :deny
|
91
|
-
get :quit
|
92
|
-
end
|
93
|
-
end
|
94
60
|
|
95
61
|
resources :stories, only: [:create, :show, :edit, :update, :destroy] do
|
96
62
|
resources :tasks, only: [:index, :new]
|
@@ -134,7 +100,6 @@ Rails.application.routes.draw do
|
|
134
100
|
|
135
101
|
resources :users do
|
136
102
|
resources :projects, only: [:index, :new]
|
137
|
-
resources :candidatures, only: :index
|
138
103
|
|
139
104
|
collection do
|
140
105
|
put :update_multiple
|
@@ -3,16 +3,16 @@ class ReplaceUserByPolymorphicResourceInCandidatures < ActiveRecord::Migration
|
|
3
3
|
add_column :vacancies, :resource_type, :string
|
4
4
|
add_column :vacancies, :resource_id, :integer
|
5
5
|
|
6
|
-
Vacancy.update_all(resource_type: "User")
|
7
|
-
Vacancy.update_all('resource_id = user_id')
|
6
|
+
Vacancy.where('user_id IS NOT NULL').update_all(resource_type: "User")
|
7
|
+
Vacancy.where('user_id IS NOT NULL').update_all('resource_id = user_id')
|
8
8
|
|
9
9
|
remove_column :vacancies, :user_id
|
10
10
|
|
11
11
|
add_column :candidatures, :resource_type, :string
|
12
12
|
add_column :candidatures, :resource_id, :integer
|
13
13
|
|
14
|
-
Candidature.update_all(resource_type: "User")
|
15
|
-
Candidature.update_all('resource_id = user_id')
|
14
|
+
Candidature.where('user_id IS NOT NULL').update_all(resource_type: "User")
|
15
|
+
Candidature.where('user_id IS NOT NULL').update_all('resource_id = user_id')
|
16
16
|
|
17
17
|
remove_column :candidatures, :user_id
|
18
18
|
|
@@ -0,0 +1,59 @@
|
|
1
|
+
class DropRecruitingUnlessRecruitingPluginPresent < ActiveRecord::Migration
|
2
|
+
def up
|
3
|
+
unless (Product::Recruiting rescue nil)
|
4
|
+
drop_table :vacancies
|
5
|
+
drop_table :candidatures
|
6
|
+
remove_index name: 'index_projects_users_on_project_id_and_user_id_and_vacancy_id'
|
7
|
+
drop_column :projects_users, :vacancy_id
|
8
|
+
add_index 'projects_users', ['project_id', 'user_id'], name: 'index_projects_users_on_project_id_and_user_id', unique: true, using: :btree
|
9
|
+
end
|
10
|
+
end
|
11
|
+
|
12
|
+
def down
|
13
|
+
unless (Product::Recruiting rescue nil)
|
14
|
+
create_table 'vacancies', force: true do |t|
|
15
|
+
t.string 'type'
|
16
|
+
t.integer 'project_id'
|
17
|
+
t.integer 'offeror_id'
|
18
|
+
t.integer 'author_id'
|
19
|
+
t.integer 'project_user_id'
|
20
|
+
t.string 'name'
|
21
|
+
t.string 'slug'
|
22
|
+
t.text 'text'
|
23
|
+
t.integer 'limit', default: 1
|
24
|
+
t.string 'state'
|
25
|
+
t.datetime 'created_at', null: false
|
26
|
+
t.datetime 'updated_at', null: false
|
27
|
+
t.string 'resource_type'
|
28
|
+
t.integer 'resource_id'
|
29
|
+
end
|
30
|
+
|
31
|
+
add_index 'vacancies', ['offeror_id'], name: 'index_vacancies_on_offeror_id', using: :btree
|
32
|
+
add_index 'vacancies', ['project_id', 'name'], name: 'index_vacancies_on_project_id_and_name', unique: true, using: :btree
|
33
|
+
add_index 'vacancies', ['project_id'], name: 'index_vacancies_on_project_id', using: :btree
|
34
|
+
add_index 'vacancies', ['project_user_id'], name: 'index_vacancies_on_project_user_id', using: :btree
|
35
|
+
add_index 'vacancies', ['slug'], name: 'index_vacancies_on_slug', unique: true, using: :btree
|
36
|
+
|
37
|
+
create_table 'candidatures', force: true do |t|
|
38
|
+
t.integer 'vacancy_id'
|
39
|
+
t.integer 'offeror_id'
|
40
|
+
t.string 'name'
|
41
|
+
t.string 'slug'
|
42
|
+
t.text 'text'
|
43
|
+
t.string 'state'
|
44
|
+
t.datetime 'created_at', null: false
|
45
|
+
t.datetime 'updated_at', null: false
|
46
|
+
t.string 'resource_type'
|
47
|
+
t.integer 'resource_id'
|
48
|
+
end
|
49
|
+
|
50
|
+
add_index 'candidatures', ['resource_id', 'resource_type', 'vacancy_id'], name: 'index_candidatures_on_resource_and_vacancy', unique: true, using: :btree
|
51
|
+
add_index 'candidatures', ['slug'], name: 'index_candidatures_on_slug', unique: true, using: :btree
|
52
|
+
add_index 'candidatures', ['vacancy_id', 'name'], name: 'index_candidatures_on_vacancy_id_and_name', unique: true, using: :btree
|
53
|
+
add_index 'candidatures', ['vacancy_id'], name: 'index_candidatures_on_vacancy_id', using: :btree
|
54
|
+
|
55
|
+
add_column 'projects_users', 'vacancy_id', :integer
|
56
|
+
add_index 'projects_users', ['project_id', 'user_id', 'vacancy_id'], name: 'index_projects_users_on_project_id_and_user_id_and_vacancy_id', unique: true, using: :btree
|
57
|
+
end
|
58
|
+
end
|
59
|
+
end
|
@@ -43,20 +43,6 @@ module NavigationHelpers
|
|
43
43
|
|
44
44
|
when /the edit project page/
|
45
45
|
edit_project_path(@project)
|
46
|
-
|
47
|
-
# vacancies
|
48
|
-
when /the vacancy page/
|
49
|
-
vacancy_path(@vacancy)
|
50
|
-
|
51
|
-
when /the edit vacancy page/
|
52
|
-
edit_vacancy_path(@vacancy)
|
53
|
-
|
54
|
-
# candidatures
|
55
|
-
when /the candidature page/
|
56
|
-
candidature_path(@candidature)
|
57
|
-
|
58
|
-
when /the edit candidature page/
|
59
|
-
edit_candidature_path(@candidature)
|
60
46
|
|
61
47
|
# stories
|
62
48
|
when /the new project story page/
|