voluntary 0.1.0 → 0.2.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.
Files changed (136) hide show
  1. data/app/assets/javascripts/voluntary/application.js +1 -1
  2. data/app/assets/javascripts/voluntary/base.js.coffee +30 -1
  3. data/app/assets/stylesheets/voluntary/application.css +1 -0
  4. data/app/assets/stylesheets/voluntary/base.css.sass +1 -1
  5. data/app/controllers/areas_controller.rb +6 -5
  6. data/app/controllers/candidatures_controller.rb +15 -10
  7. data/app/controllers/concerns/voluntary/v1/base_controller.rb +95 -0
  8. data/app/controllers/devise_extensions/registrations_controller.rb +2 -2
  9. data/app/controllers/organizations_controller.rb +7 -6
  10. data/app/controllers/professions_controller.rb +6 -5
  11. data/app/controllers/projects_controller.rb +11 -6
  12. data/app/controllers/users_controller.rb +2 -2
  13. data/app/controllers/vacancies_controller.rb +14 -5
  14. data/app/controllers/voluntary/api/v1/api_controller.rb +9 -0
  15. data/app/controllers/voluntary/application_controller.rb +2 -66
  16. data/app/controllers/workflow/candidatures_controller.rb +1 -1
  17. data/app/controllers/workflow/products_controller.rb +7 -7
  18. data/app/controllers/workflow/stories_controller.rb +1 -1
  19. data/app/controllers/workflow/tasks_controller.rb +2 -2
  20. data/app/controllers/workflow/user/product/areas_controller.rb +2 -2
  21. data/app/controllers/workflow/user/projects_controller.rb +10 -2
  22. data/app/helpers/voluntary/application_helper.rb +79 -0
  23. data/app/helpers/voluntary/collection_helper.rb +45 -0
  24. data/app/helpers/voluntary/comments_helper.rb +13 -0
  25. data/app/helpers/voluntary/form_helper.rb +46 -0
  26. data/app/helpers/voluntary/language_helper.rb +17 -0
  27. data/app/helpers/voluntary/layout_helper.rb +42 -0
  28. data/app/helpers/voluntary/product_helper.rb +36 -0
  29. data/app/helpers/voluntary/show_helper.rb +67 -0
  30. data/app/helpers/voluntary/wizard_helper.rb +29 -0
  31. data/app/models/ability.rb +20 -4
  32. data/app/models/candidature.rb +10 -7
  33. data/app/models/column.rb +1 -0
  34. data/app/models/concerns/user/extensions.rb +5 -0
  35. data/app/models/concerns/user/listable.rb +10 -0
  36. data/app/models/list.rb +30 -0
  37. data/app/models/list_item.rb +22 -0
  38. data/app/models/organization.rb +1 -0
  39. data/app/models/page.rb +2 -1
  40. data/app/models/product.rb +3 -2
  41. data/app/models/project.rb +2 -2
  42. data/app/models/result.rb +1 -0
  43. data/app/models/role.rb +1 -1
  44. data/app/models/state_machines/candidature.rb +17 -1
  45. data/app/models/state_machines/story.rb +15 -2
  46. data/app/models/state_machines/task.rb +33 -0
  47. data/app/models/story.rb +3 -2
  48. data/app/models/task.rb +44 -6
  49. data/app/models/thing.rb +3 -0
  50. data/app/models/user.rb +15 -4
  51. data/app/models/vacancy.rb +7 -5
  52. data/app/presenters/resources/general/wizards/story/steps/setup_tasks_presenter.rb +1 -1
  53. data/app/presenters/shared/collection/table_presenter.rb +1 -1
  54. data/app/views/candidatures/index.html.erb +1 -1
  55. data/app/views/candidatures/show.html.erb +1 -1
  56. data/app/views/columns/_collection.html.erb +0 -0
  57. data/app/views/comments/_resource.html.erb +1 -1
  58. data/app/views/layouts/application.html.erb +12 -0
  59. data/app/views/layouts/shared/_navigation.html.erb +3 -3
  60. data/app/views/organizations/show.html.erb +0 -1
  61. data/app/views/products/index.html.erb +53 -4
  62. data/app/views/projects/_form.html.erb +1 -0
  63. data/app/views/projects/show.html.erb +2 -1
  64. data/app/views/shared/collection/_list.html.erb +1 -1
  65. data/app/views/shared/resource/_actions.html.erb +2 -2
  66. data/app/views/stories/_column_fields.html.erb +0 -0
  67. data/app/views/stories/_form.html.erb +1 -1
  68. data/app/views/stories/steps/_activate.html.erb +1 -1
  69. data/app/views/workflow/products/show.html.erb +1 -1
  70. data/app/views/workflow/project_owner/_candidatures.html.erb +2 -1
  71. data/app/views/workflow/tasks/_work_head.html.erb +1 -1
  72. data/app/views/workflow/tasks/steps/_complete.html.erb +6 -2
  73. data/app/views/workflow/tasks/steps/_review.html.erb +6 -2
  74. data/app/views/workflow/tasks/steps/_work.html.erb +4 -2
  75. data/app/views/workflow/user/product/areas/show.html.erb +0 -0
  76. data/app/views/workflow/user/projects/show.html.erb +0 -0
  77. data/config/initializers/devise.rb +2 -5
  78. data/config/initializers/filter_parameters_logging.rb +1 -0
  79. data/config/initializers/friendly_id.rb +88 -0
  80. data/config/initializers/wrap_parameters.rb +15 -0
  81. data/config/locales/general/en.yml +15 -9
  82. data/config/locales/resources/story/en.yml +1 -0
  83. data/config/routes.rb +9 -0
  84. data/config/routes/workflow.rb +15 -15
  85. data/db/migrate/20120907144853_create_schema.rb +1 -1
  86. data/db/migrate/20120922201955_create_mongo_db_documents.rb +1 -1
  87. data/db/migrate/20121004132105_create_professions.rb +1 -1
  88. data/db/migrate/20121006162913_add_public_attribute_to_roles.rb +20 -1
  89. data/db/migrate/20130817090734_create_lists.rb +33 -0
  90. data/db/migrate/20131018143613_replace_user_by_polymorphic_resource_in_candidatures.rb +46 -0
  91. data/db/migrate/20140307113214_add_user_id_to_organizations.rb +5 -0
  92. data/lib/api_constraints.rb +10 -0
  93. data/lib/applicat/mvc/model/tree.rb +1 -1
  94. data/lib/concerns/model/base_list_item.rb +30 -0
  95. data/lib/concerns/model/base_thing.rb +50 -0
  96. data/lib/db_seed.rb +15 -4
  97. data/lib/generators/voluntary/install/install_generator.rb +17 -16
  98. data/lib/generators/voluntary/install/templates/app/views/layouts/application.html.erb +17 -1
  99. data/lib/generators/voluntary/install/templates/config/main_navigation.rb +1 -260
  100. data/lib/generators/voluntary/install/templates/features/support/integration_sessions_controller.rb +1 -2
  101. data/lib/generators/voluntary/install/templates/spec/factories.rb +19 -0
  102. data/lib/generators/voluntary/install/templates/spec/support/mongo_database_cleaner.rb +14 -4
  103. data/lib/generators/voluntary/product_dummy/product_dummy_generator.rb +23 -17
  104. data/lib/generators/voluntary/product_dummy/templates/config/database.example.yml +1 -1
  105. data/lib/generators/voluntary/product_dummy/templates/dummy/spec/factories.rb +19 -0
  106. data/lib/generators/voluntary/product_dummy/templates/dummy/spec/spec_helper.rb +75 -0
  107. data/lib/generators/voluntary/product_dummy/templates/features/support/integration_sessions_controller.rb +1 -2
  108. data/lib/generators/voluntary/product_dummy/templates/spec/factories.rb +19 -0
  109. data/lib/voluntary.rb +10 -22
  110. data/lib/voluntary/engine.rb +27 -3
  111. data/lib/voluntary/navigation.rb +358 -0
  112. data/lib/voluntary/test/rspec_helpers/factories.rb +123 -0
  113. data/lib/voluntary/version.rb +1 -1
  114. data/vendor_extensions/active_model/naming.rb +1 -1
  115. metadata +526 -308
  116. data/app/helpers/application_helper.rb +0 -65
  117. data/app/helpers/collection_helper.rb +0 -35
  118. data/app/helpers/comments_helper.rb +0 -11
  119. data/app/helpers/form_helper.rb +0 -43
  120. data/app/helpers/language_helper.rb +0 -15
  121. data/app/helpers/layout_helper.rb +0 -39
  122. data/app/helpers/product_helper.rb +0 -34
  123. data/app/helpers/show_helper.rb +0 -65
  124. data/app/helpers/wizard_helper.rb +0 -27
  125. data/app/observers/candidature_observer.rb +0 -29
  126. data/app/observers/story_observer.rb +0 -6
  127. data/app/observers/task_observer.rb +0 -34
  128. data/lib/voluntary/helpers/application.rb +0 -69
  129. data/lib/voluntary/helpers/collection.rb +0 -35
  130. data/lib/voluntary/helpers/comments.rb +0 -15
  131. data/lib/voluntary/helpers/form.rb +0 -43
  132. data/lib/voluntary/helpers/language.rb +0 -19
  133. data/lib/voluntary/helpers/layout.rb +0 -28
  134. data/lib/voluntary/helpers/product.rb +0 -36
  135. data/lib/voluntary/helpers/show.rb +0 -69
  136. data/lib/voluntary/helpers/wizard.rb +0 -31
@@ -0,0 +1,33 @@
1
+ class CreateLists < ActiveRecord::Migration
2
+ def up
3
+ create_table :lists, force: true do |t|
4
+ t.integer :user_id
5
+ t.string :name
6
+ t.timestamps
7
+ end
8
+
9
+ add_index :lists, :user_id
10
+
11
+ create_table :list_items, force: true do |t|
12
+ t.integer :list_id
13
+ t.integer :user_id
14
+ t.string :thing_type
15
+ t.integer :thing_id
16
+ t.integer :position
17
+ t.timestamps
18
+ end
19
+
20
+ #add_index :list_items, [:list_id, :position], unique: true
21
+
22
+ create_table :things, force: true do |t|
23
+ t.string :name
24
+ t.timestamps
25
+ end
26
+
27
+ add_index :things, :name, unique: true
28
+ end
29
+
30
+ def down
31
+ [:lists, :list_items, :things].each {|table| drop_table table }
32
+ end
33
+ end
@@ -0,0 +1,46 @@
1
+ class ReplaceUserByPolymorphicResourceInCandidatures < ActiveRecord::Migration
2
+ def up
3
+ add_column :vacancies, :resource_type, :string
4
+ add_column :vacancies, :resource_id, :integer
5
+
6
+ Vacancy.update_all(resource_type: "User")
7
+ Vacancy.update_all('resource_id = user_id')
8
+
9
+ remove_column :vacancies, :user_id
10
+
11
+ add_column :candidatures, :resource_type, :string
12
+ add_column :candidatures, :resource_id, :integer
13
+
14
+ Candidature.update_all(resource_type: "User")
15
+ Candidature.update_all('resource_id = user_id')
16
+
17
+ remove_column :candidatures, :user_id
18
+
19
+ begin
20
+ remove_index :candidatures, [:user_id, :vacancy_id]
21
+ rescue
22
+ end
23
+
24
+ add_index :candidatures, [:resource_id, :resource_type, :vacancy_id], unique: true, name: 'index_candidatures_on_resource_and_vacancy'
25
+ end
26
+
27
+ def down
28
+ add_column :vacancies, :user_id, :integer
29
+
30
+ Vacancy.where('resource_type = "User"').update_all('user_id = resource_id')
31
+ Vacancy.where('resource_type <> "User"').destroy_all
32
+
33
+ remove_column :vacancies, :resource_type
34
+ remove_column :vacancies, :resource_id
35
+
36
+ add_column :candidatures, :user_id, :integer
37
+
38
+ add_index :candidatures, [:user_id, :vacancy_id]
39
+
40
+ Candidature.where('resource_type = "User"').update_all('user_id = resource_id')
41
+ Candidature.where('resource_type <> "User"').destroy_all
42
+
43
+ remove_column :candidatures, :resource_type
44
+ remove_column :candidatures, :resource_id
45
+ end
46
+ end
@@ -0,0 +1,5 @@
1
+ class AddUserIdToOrganizations < ActiveRecord::Migration
2
+ def change
3
+ add_column :organizations, :user_id, :integer
4
+ end
5
+ end
@@ -0,0 +1,10 @@
1
+ class ApiConstraints
2
+ def initialize(options)
3
+ @version = options[:version]
4
+ @default = options[:default]
5
+ end
6
+
7
+ def matches?(req)
8
+ @default || req.headers['Accept'].include?("application/vnd.example.v#{@version}")
9
+ end
10
+ end
@@ -8,7 +8,7 @@ module Applicat
8
8
 
9
9
  acts_as_list
10
10
 
11
- default_scope :order => 'position'
11
+ default_scope -> { order('position') }
12
12
 
13
13
  def add_child(element,position=nil)
14
14
  #need to add errors to @element.errors and return something
@@ -0,0 +1,30 @@
1
+ module Concerns
2
+ module Model
3
+ module BaseListItem
4
+ extend ActiveSupport::Concern
5
+
6
+ included do
7
+ belongs_to :list
8
+ belongs_to :thing, polymorphic: true
9
+
10
+ validates :list_id, presence: true
11
+ validates :thing_type, presence: true
12
+ validates :thing_id, presence: true
13
+
14
+ #pusherable "#{Rails.env}_channel"
15
+
16
+ def thing=(thing)
17
+ thing.save if thing.new_record?
18
+
19
+ self.thing_type = thing.class.name; self.thing_id = thing.id
20
+
21
+ if self.respond_to?(:list_item_id) && self.list.present?
22
+ self.list_item ||= self.list.items.find_or_create_by_thing_type_and_thing_id(thing_type, thing_id)
23
+ end
24
+
25
+ thing
26
+ end
27
+ end
28
+ end
29
+ end
30
+ end
@@ -0,0 +1,50 @@
1
+ module Concerns
2
+ module Model
3
+ module BaseThing
4
+ extend ActiveSupport::Concern
5
+
6
+ included do
7
+ # find or create movies list
8
+ class_attribute :list_instance
9
+
10
+ #LIST_ID = list.id
11
+
12
+ has_many :list_items, as: :thing, dependent: :destroy
13
+ has_many :user_list_items, as: :thing
14
+ has_many :users, through: :user_list_items
15
+
16
+ attr_accessible :name
17
+
18
+ validates :name, presence: true, uniqueness: true
19
+
20
+ #pusherable "#{Rails.env}_channel"
21
+ end
22
+
23
+ module ClassMethods
24
+ def list
25
+ #if self.to_s.constantize.const_defined?('LIST_ID') && LIST_ID.present?
26
+ # self.to_s.constantize.list_instance ||= List.find(LIST_ID)
27
+ #end
28
+
29
+ return self.to_s.constantize.list_instance if self.to_s.constantize.list_instance.present?
30
+
31
+ attributes = {
32
+ adjective: 'best', topic: self.to_s, scope: 'ever', thing_type: self.to_s,
33
+ negative_adjective: 'worst'
34
+ }
35
+
36
+ self.to_s.constantize.list_instance = List.where(attributes).first
37
+
38
+ unless self.to_s.constantize.list_instance.present?
39
+ self.to_s.constantize.list_instance = List.create!(attributes)
40
+ end
41
+
42
+ self.to_s.constantize.list_instance
43
+ end
44
+ end
45
+
46
+ # custom associations
47
+ def lists; List.where(thing_type: self.to_s); end
48
+ end
49
+ end
50
+ end
data/lib/db_seed.rb CHANGED
@@ -28,8 +28,11 @@ class DbSeed
28
28
  @users = {}
29
29
 
30
30
  self.class::USER_ROLES.each do |role,attributes|
31
+ name = role.to_s.humanize
32
+ name += ' user' unless name == 'User'
33
+
31
34
  @users[role] = attributes
32
- @users[role][:id] = User.find_by_name(role.to_s.humanize).id
35
+ @users[role][:id] = User.find_by_name(name).id
33
36
  end
34
37
 
35
38
  @users
@@ -65,7 +68,9 @@ class DbSeed
65
68
  Role.import([:name], self.class::USER_ROLES.keys.map{|role| [role.to_s.humanize]})
66
69
 
67
70
  self.class::USER_ROLES.keys.each do |role|
68
- attributes = { name: role.to_s.humanize, public: [:project_owner, :user].include?(role) }
71
+ attributes = { name: role.to_s.humanize }
72
+
73
+ attributes[:public] = [:project_owner, :user].include?(role) if Role.new.respond_to? :public
69
74
 
70
75
  "Role::#{role.to_s.classify}".constantize.create(attributes)
71
76
  end
@@ -73,11 +78,17 @@ class DbSeed
73
78
 
74
79
  def create_users
75
80
  self.class::USER_ROLES.each do |role, settings|
81
+ name = role.to_s.humanize
82
+ name += ' user' unless name == 'User'
83
+
76
84
  attributes = {
77
- name: role.to_s.humanize, first_name: 'Mister', last_name: role.to_s.humanize, email: "#{role}@volontari.at",
85
+ name: name, first_name: 'Mister', last_name: role.to_s.humanize, email: "#{role}@volontari.at",
78
86
  password: "#{role}2012", language: 'en', country: 'Germany', interface_language: 'en'
79
87
  }
88
+
89
+ attributes.reject!{|key,value| !User.new.respond_to? key }
80
90
  attributes[:password_confirmation] = attributes[:password]
91
+
81
92
  create_record(User, attributes) # events: ['skip_confirmation!']
82
93
  end
83
94
  end
@@ -102,7 +113,7 @@ class DbSeed
102
113
 
103
114
  send_events(record, events) if events.any?
104
115
 
105
- record.save! if record.new_record?
116
+ record.save!(validate: false) if record.new_record?
106
117
 
107
118
  record
108
119
  end
@@ -18,7 +18,7 @@ module Voluntary
18
18
 
19
19
  # model
20
20
  gem 'settingslogic', git: 'https://github.com/binarylogic/settingslogic.git'
21
-
21
+
22
22
  # view
23
23
  gem 'acts_as_markup', git: 'git://github.com/vigetlabs/acts_as_markup.git'
24
24
  gem 'auto_html', git: 'git://github.com/Applicat/auto_html'
@@ -43,42 +43,43 @@ module Voluntary
43
43
  # gem 'markerb', git: 'https://github.com/plataformatec/markerb.git'
44
44
 
45
45
  gem_group :development do
46
+ gem 'mysql2', '~> 0.3.13'
46
47
  gem 'linecache', '0.46', platforms: :mri_18
47
- gem 'capistrano', require: false
48
- gem 'capistrano_colors', require: false
49
- gem 'capistrano-ext', require: false
50
- gem 'yard', require: false
48
+ gem 'capistrano', '~> 2.15.5', require: false
49
+ gem 'capistrano_colors', '~> 0.5.5', require: false
50
+ gem 'capistrano-ext', '~> 1.2.1', require: false
51
+ gem 'yard', '~> 0.7', require: false
51
52
  end
52
53
 
53
54
  gem_group :test do
54
- gem 'cucumber-rails', '1.3.0', require: false
55
- gem 'rspec-instafail', '>= 0.1.7', require: false
56
- gem 'webmock', '~> 1.7', require: false
57
- gem 'simplecov', require: false
55
+ gem 'cucumber-rails', '~> 1.3.0', require: false
56
+ gem 'rspec-instafail', '~> 0.2.4', require: false
57
+ gem 'webmock', '~> 1.8.11', require: false
58
+ gem 'simplecov', '~> 0.7.1', require: false
58
59
  end
59
60
 
60
61
  gem_group :development, :test do
61
62
  gem 'debugger', platforms: :mri_19
62
- gem 'ruby-debug', platforms: :mri_18
63
+ gem 'ruby-debug', '~> 0.10.4', platforms: :mri_18
63
64
  end
64
65
 
65
66
  gem_group :assets do
66
- gem 'therubyracer', platforms: :ruby
67
+ gem 'therubyracer', '~> 0.12.0', platforms: :ruby
67
68
 
68
69
  # asset_sync is required as needed by application.rb
69
- gem 'asset_sync', require: nil
70
+ gem 'asset_sync', '~> 0.5.0', require: nil
70
71
  end
71
72
 
72
73
  gem_group :production do
73
74
  # dependency nokogiri is incompatible with cucumber-rails
74
75
  # gem 'rails_admin', git: 'git://github.com/halida/rails_admin.git'
75
- gem 'fastercsv', '1.5.5', require: false
76
- gem 'rack-ssl', require: 'rack/ssl'
76
+ gem 'fastercsv', '~> 1.5.5', require: false
77
+ gem 'rack-ssl', '~> 1.3.3', require: 'rack/ssl'
77
78
  gem 'rack-rewrite', '~> 1.2.1', require: false
78
79
 
79
80
  # analytics
80
- gem 'rack-google-analytics', require: 'rack/google-analytics'
81
- gem 'rack-piwik', require: 'rack/piwik', require: false
81
+ gem 'rack-google-analytics', '~> 0.11.0', require: 'rack/google-analytics'
82
+ gem 'rack-piwik', '~> 0.1.3', require: 'rack/piwik', require: false
82
83
  end
83
84
  end
84
85
 
@@ -4,12 +4,19 @@
4
4
  <title><%= t('layout.title') %></title>
5
5
  <meta charset='utf-8'>
6
6
  <meta content='text/html; charset=utf-8' http-equiv='Content-Type'>
7
+ <meta name="viewport" content="width=device-width, initial-scale=1.0">
7
8
  <%= stylesheet_link_tag 'voluntary/application', media: 'all' %>
8
9
  <%= stylesheet_link_tag 'application', media: 'all' %>
10
+ <link href="//netdna.bootstrapcdn.com/font-awesome/3.1.1/css/font-awesome.css" rel="stylesheet"/>
9
11
  </head>
10
12
  <body>
11
13
  <%= render 'layouts/shared/navigation' %>
12
14
 
15
+ <section id="dialog">
16
+ <img alt="Ajax-loader-small" class="hide " id="dialog_body_spinner" src="<%=image_path('voluntary/spinner.gif')%>"/>
17
+ <div id="dialog_body"/>
18
+ </section>
19
+
13
20
  <div class="container-fluid">
14
21
  <% unless flash.empty? %>
15
22
  <div class="row-fluid">
@@ -19,14 +26,22 @@
19
26
  </div>
20
27
  <% end %>
21
28
  <div class="row-fluid">
29
+ <% if sidenav(@sidenav_links_count).present? %>
22
30
  <div class="span9">
23
31
  <%= breadcrumbs %>
24
32
 
25
33
  <%= yield %>
26
34
  </div>
27
35
  <div class="span3">
28
- <%= sidenav %>
36
+ <%= sidenav(@sidenav_links_count) %>
29
37
  </div>
38
+ <% else %>
39
+ <div class="span12">
40
+ <%= breadcrumbs %>
41
+
42
+ <%= yield %>
43
+ </div>
44
+ <% end %>
30
45
  </div>
31
46
  </div>
32
47
  <div class="container-fluid">
@@ -38,6 +53,7 @@
38
53
  </div>
39
54
  <%= javascript_include_tag 'voluntary/application' %>
40
55
  <%= javascript_include_tag 'application' %>
56
+ <%= yield :javascript_includes %>
41
57
  <%= csrf_meta_tags %>
42
58
  <%= javascript_tag do %>
43
59
  <%= yield :top_javascript %>
@@ -1,262 +1,3 @@
1
1
  SimpleNavigation::Configuration.run do |navigation|
2
- navigation.items do |primary|
3
- primary.dom_class = 'nav'
4
- primary.item :root, t('general.index.title'), root_path
5
-
6
- primary.item :areas, t('areas.index.title'), areas_path do |areas|
7
- areas.item :new, t('general.new'), new_area_path
8
-
9
- unless (@area.new_record? rescue true)
10
- areas.item :show, @area.name, area_path(@area) do |area|
11
- if can? :destroy, @area
12
- area.item :destroy, t('general.destroy'), area_path(@area), method: :delete, confirm: t('general.questions.are_you_sure')
13
- end
14
-
15
- area.item :show, t('general.details'), "#{area_path(@area)}#top"
16
- area.item :edit, t('general.edit'), edit_area_path(@area) if can? :edit, @area
17
- area.item :users, t('users.index.title'), area_users_path(@area)
18
- area.item :projects, t('projects.index.title'), area_projects_path(@area)
19
- end
20
- end
21
- end
22
-
23
- primary.item :products, t('products.index.title'), products_path do |products|
24
- products.item :new, t('general.new'), new_product_path
25
-
26
- unless (@product.new_record? rescue true)
27
- products.item :show, @product.name, product_path(@product) do |product|
28
- if can? :edit, @product
29
- product.item :destroy, t('general.destroy'), product_path(@product), method: :delete, confirm: t('general.questions.are_you_sure')
30
- end
31
-
32
- product.item :show, t('general.details'), "#{product_path(@product)}#top"
33
- product.item :edit, t('general.edit'), edit_product_path(@product) if can? :edit, @product
34
-
35
- product.item :projects, t('projects.index.title'), product_projects_path(@product)
36
- end
37
- end
38
- end
39
-
40
- primary.item :projects, t('projects.index.title'), projects_path do |projects|
41
- projects.item :new, t('general.new'), new_project_path
42
-
43
- unless (@project.new_record? rescue true)
44
- projects.item :show, @project.name, project_path(@project) do |project|
45
- if can? :destroy, @project
46
- project.item :destroy, t('general.destroy'), project_path(@project), method: :delete, confirm: t('general.questions.are_you_sure')
47
- end
48
-
49
- project.item :show, t('general.details'), "#{project_path(@project)}#top"
50
- project.item :edit, t('general.edit'), edit_project_path(@project) if can? :edit, @project
51
-
52
- project.item :users, t('users.index.title'), project_users_path(@project)
53
-
54
- project.item :vacancies, t('vacancies.index.title'), project_vacancies_path(@project) do |vacancy|
55
- vacancy.item :new, t('general.new'), new_project_vacancy_path(@project)
56
- end
57
-
58
- project.item :stories, t('stories.index.title'), project_stories_path(@project) do |stories|
59
- stories.item :new, t('general.new'), new_project_story_path(@project)
60
-
61
- unless (@story.new_record? rescue true)
62
- stories.item(:show, @story.name, story_path(@story)) do |story|
63
- if can? :destroy, @story
64
- story.item :destroy, t('general.destroy'), story_path(@story), method: :delete, confirm: t('general.questions.are_you_sure')
65
- end
66
-
67
- story.item :show, t('general.details'), "#{story_path(@story)}#top"
68
- story.item :edit, t('general.edit'), edit_story_path(@story) if can? :edit, @story
69
-
70
- story.item :steps, t('general.steps'), setup_tasks_story_path(@story) do |steps|
71
- steps.item :setup_tasks, t('stories.steps.setup_tasks.title'), setup_tasks_story_path(@story)
72
- steps.item :activate, t('general.events.activate'), activate_story_path(@story)
73
- end
74
-
75
- story.item :tasks, t('tasks.index.title'), story_tasks_path(@story) do |tasks|
76
- tasks.item :new, t('general.new'), new_story_task_path(@story)
77
-
78
- unless (@task.new_record? rescue true)
79
- tasks.item(:show, @task.name, task_path(@task)) do |task|
80
- if can? :destroy, @task
81
- task.item :destroy, t('general.destroy'), task_path(@task), method: :delete, confirm: t('general.questions.are_you_sure')
82
- end
83
-
84
- task.item :show, t('general.details'), "#{task_path(@task)}#top"
85
- task.item :edit, t('general.edit'), edit_task_path(@task) if can? :edit, @task
86
-
87
- task.item :results, t('results.index.title'), task_results_path(@task) do |results|
88
- results.item :new, t('general.new'), new_task_result_path(@task)
89
-
90
- unless (@result.new_record? rescue true)
91
- results.item(:show, @result.name, result_path(@result)) do |result|
92
- if can? :destroy, @result
93
- result.item :destroy, t('general.destroy'), result_path(@result), method: :delete, confirm: t('general.questions.are_you_sure')
94
- end
95
-
96
- result.item :show, t('general.details'), "#{result_path(@result)}#top"
97
- result.item :edit, t('general.edit'), edit_result_path(@result) if can? :edit, @result
98
-
99
- result.item :comments, t('comments.index.title'), "#{story_path(@story)}#comments" do |comments|
100
- comments.item(:new, t('general.new'), new_story_comment_path(@story)) if @comment
101
-
102
- if can? :edit, @comment
103
- comments.item(:edit, t('general.edit'), edit_comment_path(@comment)) if @comment.try(:id)
104
- end
105
- end
106
- end
107
- end
108
- end
109
-
110
- task.item :comments, t('comments.index.title'), "#{story_path(@story)}#comments" do |comments|
111
- comments.item(:new, t('general.new'), new_story_comment_path(@story)) if @comment
112
-
113
- if @comment.try(:id) && can?(:edit, @comment)
114
- comments.item(:edit, t('general.edit'), edit_comment_path(@comment))
115
- end
116
- end
117
- end
118
- end
119
- end
120
-
121
- story.item :comments, t('comments.index.title'), "#{story_path(@story)}#comments" do |comments|
122
- comments.item(:new, t('general.new'), new_story_comment_path(@story)) if @comment
123
-
124
- if @comment.try(:id) && can?(:edit, @comment)
125
- comments.item(:edit, t('general.edit'), edit_comment_path(@comment))
126
- end
127
- end
128
- end
129
- end
130
- end
131
-
132
- project.item :comments, t('comments.index.title'), "#{project_path(@project)}#comments" do |comments|
133
- comments.item(:new, t('general.new'), new_project_comment_path(@project)) if @comment
134
-
135
- if @comment.try(:id) && can?(:edit, @comment)
136
- comments.item(:edit, t('general.edit'), edit_comment_path(@comment))
137
- end
138
- end
139
- end
140
- end
141
- end
142
-
143
- primary.item :vacancies, t('vacancies.index.title'), vacancies_path do |vacancies|
144
- vacancies.item :new, t('general.new'), new_vacancy_path
145
-
146
- unless (@vacancy.new_record? rescue true)
147
- vacancies.item :show, "#{@vacancy.name} @ #{@vacancy.project.name}", vacancy_path(@vacancy) do |vacancy|
148
-
149
- if can? :destroy, @vacancy
150
- vacancy.item :destroy, t('general.destroy'), vacancy_path(@vacancy), method: :delete, confirm: t('general.questions.are_you_sure')
151
- end
152
-
153
- vacancy.item :show, t('general.details'), "#{vacancy_path(@vacancy)}#top"
154
- vacancy.item :edit, t('general.edit'), edit_vacancy_path(@vacancy) if can? :edit, @vacancy
155
-
156
- vacancy.item :candidatures, t('candidatures.index.title'), vacancy_candidatures_path(@vacancy) do |candidatures|
157
- candidatures.item :new, t('general.new'), new_vacancy_candidature_path(@vacancy)
158
-
159
- unless (@candidature.new_record? rescue true)
160
- candidatures.item(
161
- :show, t('activerecord.models.candidature') + " of #{@candidature.user.name} @ #{@candidature.vacancy.project.name}",
162
- candidature_path(@candidature)
163
- ) do |candidature|
164
- if can? :destroy, @candidature
165
- candidature.item :destroy, t('general.destroy'), candidature_path(@candidature), method: :delete, confirm: t('general.questions.are_you_sure')
166
- end
167
-
168
- candidature.item :show, t('general.details'), "#{candidature_path(@candidature)}#top"
169
- candidature.item :edit, t('general.edit'), edit_candidature_path(@candidature) if can? :edit, @candidature
170
-
171
- candidature.item :comments, t('comments.index.title'), "#{candidature_path(@candidature)}#comments" do |comments|
172
- comments.item(:new, t('general.new'), new_candidature_comment_path(@candidature)) if @comment
173
-
174
- if @comment.try(:id) && can?(:edit, @comment)
175
- comments.item(:edit, t('general.edit'), edit_comment_path(@comment))
176
- end
177
- end
178
- end
179
- end
180
- end
181
-
182
- vacancy.item :comments, t('comments.index.title'), "#{vacancy_path(@vacancy)}#comments" do |comments|
183
- comments.item(:new, t('general.new'), new_vacancy_comment_path(@vacancy)) if @comment && !@candidature
184
-
185
- if @comment.try(:id) && can?(:edit, @comment)
186
- comments.item(:edit, t('general.edit'), edit_comment_path(@comment))
187
- end
188
- end
189
- end
190
- end
191
- end
192
-
193
- primary.item :users, t('users.index.title'), users_path do |users|
194
- unless (@user.new_record? rescue true) || current_user.try(:id) == @user.id
195
- users.item :show, t('general.details'), "#{user_path(@user)}#top"
196
-
197
- users.item :projects, t('projects.index.title'), user_projects_path(@user)
198
- users.item :candidatures, t('candidatures.index.title'), user_candidatures_path(@user)
199
- end
200
- end
201
-
202
- if user_signed_in?
203
- primary.item :workflow, t('workflow.index.title'), workflow_path do |workflow|
204
- workflow.item :project_owner, t('workflow.project_owner.index.title'), workflow_project_owner_index_path do |project_owner|
205
- project_owner.item :vacancies, t('vacancies.index.title'), open_workflow_vacancies_path do |vacancies|
206
- Vacancy::STATES.each do |state|
207
- vacancies.item state, t("vacancies.show.states.#{state}"), eval("#{state}_workflow_vacancies_path")
208
- end
209
- end
210
-
211
- project_owner.item :candidatures, t('candidatures.index.title'), new_workflow_candidatures_path do |candidatures|
212
- Candidature::STATES.each do |state|
213
- candidatures.item state, t("candidatures.show.states.#{state}"), eval("#{state}_workflow_candidatures_path")
214
- end
215
- end
216
- end
217
-
218
- workflow.item :user, t('workflow.user.index.title'), workflow_user_index_path do |user|
219
- {
220
- 'no-name' => t('workflow.user.products.no_name.title')
221
- }.each do |slug, text|
222
- user.item slug.gsub('-', '_').to_sym, text, product_workflow_user_index_path(slug) do |product|
223
- product_slug = @story ? (@story.product.try(:to_param) || 'no-name') : 'no-name'
224
-
225
- unless (@story.new_record? rescue true) || product_slug != slug
226
- product.item(:show, @story.name, story_path(@story)) do |story|
227
- story.item :show, t('general.details'), "#{story_path(@story)}#top"
228
-
229
- story.item :tasks, t('tasks.index.title'), tasks_workflow_user_index_path(@story) do |tasks|
230
- unless (@task.new_record? rescue true)
231
- tasks.item(:edit, @task.name, edit_task_workflow_user_index_path(@task))
232
- end
233
- end
234
- end
235
- end
236
-
237
- product.item :next_task, t('workflow.user.tasks.next.title'), next_task_workflow_user_index_path('text-creation')
238
- end
239
- end
240
- end
241
- end
242
-
243
- primary.item :profile, t('users.show.title'), user_path(current_user) do |profile|
244
- profile.item :show, t('users.show.title'), user_path(current_user) do |user|
245
- user.item :show, t('users.show.title'), "#{user_path(current_user)}#top"
246
- user.item :settings, t('users.edit.title'), edit_user_path(current_user)
247
- user.item :preferences, t('users.preferences.title'), preferences_user_path(current_user)
248
- user.item :projects, t('projects.index.title'), user_projects_path(current_user)
249
- user.item :candidatures, t('candidatures.index.title'), user_candidatures_path(current_user)
250
- end
251
- end
252
-
253
- primary.item :sign_out, t('authentication.sign_out'), destroy_user_session_path, method: :delete
254
- else
255
- primary.item :authentication, t('authentication.title'), new_user_session_path do |authentication|
256
- authentication.item :sign_in, t('authentication.sign_in'), new_user_session_path
257
- #authentication.item :rpx_sign_in, t('authentication.rpx_sign_in'), 'a' # link_to_rpx
258
- authentication.item :sign_up, t('authentication.sign_up'), new_user_registration_path
259
- end
260
- end
261
- end
2
+ instance_exec navigation, &Voluntary::Navigation.code
262
3
  end