voluntary 0.0.3 → 0.1.0.rc1
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/README.rdoc +37 -2
- data/app/assets/images/voluntary/spinner.gif +0 -0
- data/app/assets/javascripts/voluntary/application.js +2 -2
- data/app/assets/javascripts/voluntary/base.js.coffee +8 -1
- data/app/assets/javascripts/voluntary/users.js.coffee +2 -3
- data/app/assets/stylesheets/voluntary/application.css +2 -0
- data/app/assets/stylesheets/voluntary/base.css.sass +62 -0
- data/app/assets/stylesheets/voluntary/bootstrap_and_overrides.css.sass +4 -0
- data/app/controllers/workflow/project_owner_controller.rb +1 -1
- data/app/helpers/collection_helper.rb +5 -1
- data/app/helpers/form_helper.rb +6 -2
- data/{lib/generators/voluntary/install/templates/app → app}/models/ability.rb +0 -0
- data/app/models/page.rb +2 -2
- data/app/models/product.rb +9 -9
- data/app/models/project.rb +8 -1
- data/app/models/task.rb +2 -14
- data/app/presenters/shared/collection/table_presenter.rb +2 -2
- data/app/views/general/wizard.html.erb +1 -1
- data/app/views/layouts/application.html.erb +6 -0
- data/app/views/layouts/shared/_navigation.html.erb +4 -1
- data/app/views/vacancies/show.html.erb +0 -2
- data/db/migrate/20121122185954_add_klass_name_to_products.rb +17 -0
- data/lib/applicat/mvc/controller.rb +0 -2
- data/lib/applicat/mvc/controller/resource.rb +1 -1
- data/lib/applicat/mvc/model/resource/base.rb +8 -3
- data/lib/db_seed.rb +1 -1
- data/lib/generators/voluntary/install/install_generator.rb +1 -2
- data/lib/generators/voluntary/install/templates/app/controllers/application_controller.rb +4 -0
- data/lib/generators/voluntary/install/templates/app/models/application/ability.rb +8 -0
- data/lib/generators/voluntary/install/templates/config/deploy.rb +2 -0
- data/lib/generators/voluntary/install/templates/features/step_definitions/user_steps.rb +4 -0
- data/lib/generators/voluntary/install/templates/features/support/user_cuke_helpers.rb +2 -2
- data/lib/generators/voluntary/product_dummy/product_dummy_generator.rb +1 -1
- data/lib/generators/voluntary/product_dummy/templates/vendor/assets/javascripts/jquery.tokeninput.js +915 -0
- data/lib/generators/voluntary/product_dummy/templates/vendor/assets/stylesheets/token-input-facebook.css +122 -0
- data/lib/generators/voluntary/product_dummy/templates/vendor/assets/stylesheets/token-input-mac.css +204 -0
- data/lib/generators/voluntary/product_dummy/templates/vendor/assets/stylesheets/token-input.css +127 -0
- data/lib/volontariat_seed.rb +27 -0
- data/lib/voluntary.rb +6 -5
- data/lib/voluntary/version.rb +1 -1
- metadata +560 -209
- data/app/assets/javascripts/voluntary/bootstrap.js.coffee +0 -4
- data/app/assets/stylesheets/voluntary/base.css.scss +0 -40
- data/app/assets/stylesheets/voluntary/bootstrap_and_overrides.css.less +0 -67
- data/config/initializers/recaptcha.rb +0 -7
data/README.rdoc
CHANGED
@@ -6,6 +6,8 @@ Then you can add existing voluntary products like text creation or create your o
|
|
6
6
|
|
7
7
|
== Installation
|
8
8
|
|
9
|
+
=== New Application
|
10
|
+
|
9
11
|
Run this in your console:
|
10
12
|
|
11
13
|
rvm --create use 1.9.3@your_crowdsourcing_platform_name
|
@@ -18,6 +20,8 @@ Add this to your Gemfile:
|
|
18
20
|
|
19
21
|
gem 'voluntary'
|
20
22
|
|
23
|
+
Add voluntary products to your Gemfile.
|
24
|
+
|
21
25
|
Run this in your console:
|
22
26
|
|
23
27
|
bundle install
|
@@ -25,16 +29,24 @@ Run this in your console:
|
|
25
29
|
Run this in your console (confirm all overwrite questions):
|
26
30
|
|
27
31
|
rails g voluntary:install
|
28
|
-
rake
|
32
|
+
rake railties:install:migrations
|
29
33
|
|
30
34
|
Remove gem 'sqlite3' from your Gemfile.
|
31
35
|
|
32
36
|
Copy the content of config/database.example.yml into config/database.yml
|
33
37
|
|
38
|
+
Add this to your application.rb:
|
39
|
+
|
40
|
+
config.generators do |g|
|
41
|
+
g.orm :active_record
|
42
|
+
end
|
43
|
+
|
34
44
|
Remove public/index.html
|
35
45
|
|
36
46
|
Add at least 1 controller with 1 action, 1 view and a root route.
|
37
47
|
|
48
|
+
Add a Capfile to your Rails root.
|
49
|
+
|
38
50
|
Run this in your console:
|
39
51
|
|
40
52
|
bundle install
|
@@ -43,6 +55,29 @@ Run this in your console:
|
|
43
55
|
rake db:seed
|
44
56
|
rails s
|
45
57
|
|
58
|
+
=== New Product
|
59
|
+
|
60
|
+
git clone https://github.com/user/voluntary_product_name.git
|
61
|
+
cd voluntary_product_name
|
62
|
+
rvm --create use --rvmrc 1.9.3@voluntary_product_name
|
63
|
+
gem update bundler
|
64
|
+
gem install rails --no-ri --no-rdoc
|
65
|
+
cd ..
|
66
|
+
rails plugin new voluntary_music_research --database=postgresql --skip-javascript --skip-test-unit --dummy-path=dummy --full
|
67
|
+
cd voluntary_product_name
|
68
|
+
# Add voluntary gem as a dependency to gemspec.
|
69
|
+
# Add development dependencies to gemspec, see voluntary_text_creation.
|
70
|
+
bundle install
|
71
|
+
cd dummy
|
72
|
+
rails g voluntary:product_dummy # confirm all overwrite questions
|
73
|
+
# Add "gemspec path: File.expand_path(File.dirname(__FILE__) + '/../')" to the top of the dummy's Gemfile
|
74
|
+
bundle install # if it hangs at Fetching source index stop it and deactivate gems until it works and add them back one by one
|
75
|
+
>> migrations of voluntary and voluntary_* gems <<
|
76
|
+
# database.yml erstellen
|
77
|
+
# optional: bundle exec rake db:migrate
|
78
|
+
# add "require 'voluntary'" to ../lib/voluntary_product_name.rb
|
79
|
+
bundle exec rails s
|
80
|
+
|
46
81
|
= License
|
47
82
|
|
48
|
-
This project uses MIT-LICENSE.
|
83
|
+
This project uses MIT-LICENSE.
|
Binary file
|
@@ -1,4 +1,8 @@
|
|
1
1
|
$(document).ready ->
|
2
|
+
$("a[rel=popover]").popover()
|
3
|
+
$(".tooltip").tooltip()
|
4
|
+
$("a[rel=tooltip]").tooltip()
|
5
|
+
|
2
6
|
$( '.accordions' ).each (k, v) ->
|
3
7
|
$(v).accordion({ autoHeight: false });
|
4
8
|
|
@@ -31,4 +35,7 @@ $(document).ready ->
|
|
31
35
|
$($(this).attr('id_element')).val(ui.item.id)
|
32
36
|
|
33
37
|
return false;
|
34
|
-
});
|
38
|
+
});
|
39
|
+
|
40
|
+
$( ".datepicker" ).each (k, v) ->
|
41
|
+
$(v).datepicker({ dateFormat: "yy-mm-dd", changeYear: true, yearRange: "c-100:c+10" });
|
@@ -2,11 +2,10 @@
|
|
2
2
|
# All this logic will automatically be available in application.js.
|
3
3
|
# You can use CoffeeScript in this file: http://jashkenas.github.com/coffee-script/
|
4
4
|
jQuery ->
|
5
|
-
$('#user_area_tokens').tokenInput '/areas.json'
|
5
|
+
$('#user_area_tokens').tokenInput '/areas.json',
|
6
6
|
theme: 'facebook'
|
7
7
|
prePopulate: $('#user_area_tokens').data('load')
|
8
8
|
|
9
|
-
|
10
|
-
$('#user_foreign_language_tokens').tokenInput '/users/languages.json'
|
9
|
+
$('#user_foreign_language_tokens').tokenInput '/users/languages.json',
|
11
10
|
theme: 'facebook'
|
12
11
|
prePopulate: $('#user_foreign_language_tokens').data('load')
|
@@ -0,0 +1,62 @@
|
|
1
|
+
body
|
2
|
+
padding-top: 60px
|
3
|
+
|
4
|
+
#plattform_brand
|
5
|
+
padding: 10px 0px 10px 0px
|
6
|
+
margin-left: 0px
|
7
|
+
|
8
|
+
#product_brand
|
9
|
+
margin-left: 0px
|
10
|
+
padding: 10px 15px 10px 5px
|
11
|
+
|
12
|
+
pre
|
13
|
+
background-color: white
|
14
|
+
border: 0px
|
15
|
+
border-radius: 0px
|
16
|
+
display: block
|
17
|
+
font-size: 10px
|
18
|
+
line-height: 18px
|
19
|
+
margin: 0px
|
20
|
+
padding: 0px
|
21
|
+
white-space: pre-wrap
|
22
|
+
word-wrap: break-word
|
23
|
+
|
24
|
+
code, pre
|
25
|
+
font-family: Arial
|
26
|
+
|
27
|
+
code
|
28
|
+
border-radius: 0px
|
29
|
+
border-width: 0px
|
30
|
+
color: black
|
31
|
+
background-color: white
|
32
|
+
font-size: 10px
|
33
|
+
padding: 0px
|
34
|
+
|
35
|
+
.auto_width
|
36
|
+
width: auto
|
37
|
+
|
38
|
+
.ui-widget
|
39
|
+
font-family: Arial
|
40
|
+
font-size: 10px
|
41
|
+
|
42
|
+
html, body, div, span
|
43
|
+
font-family: Arial
|
44
|
+
font-size: 10px
|
45
|
+
|
46
|
+
.nav a
|
47
|
+
font-family: Arial
|
48
|
+
font-size: 10px
|
49
|
+
|
50
|
+
.nested_comments
|
51
|
+
margin-left: 30px
|
52
|
+
|
53
|
+
.nested_comments .nested_comments .nested_comments .nested_comments
|
54
|
+
margin-left: 0
|
55
|
+
|
56
|
+
.footer
|
57
|
+
margin-top: 20px
|
58
|
+
|
59
|
+
.floating_form fieldset .control-group
|
60
|
+
float: left
|
61
|
+
margin-right: 10px
|
62
|
+
margin-bottom: 0px
|
@@ -19,7 +19,7 @@ class Workflow::ProjectOwnerController < ApplicationController
|
|
19
19
|
end
|
20
20
|
end
|
21
21
|
|
22
|
-
{ stories: [:completed], tasks: [:under_supervision] }.each do |controller, states|
|
22
|
+
{ stories: [:completed, :active], tasks: [:under_supervision] }.each do |controller, states|
|
23
23
|
states.each do |state|
|
24
24
|
collection = controller.to_s.classify.constantize.where(
|
25
25
|
offeror_id: current_user.id, state: state
|
@@ -13,7 +13,11 @@ module CollectionHelper
|
|
13
13
|
value = '-'
|
14
14
|
end
|
15
15
|
|
16
|
-
|
16
|
+
begin
|
17
|
+
link_to value, eval("#{root_model_class_name(resource).tableize.singularize}_path(resource)")
|
18
|
+
rescue
|
19
|
+
link_to value, eval("#{root_model_class_name(resource).constantize.table_name.singularize}_path(resource)")
|
20
|
+
end
|
17
21
|
elsif column.match('_id')
|
18
22
|
association = nil
|
19
23
|
|
data/app/helpers/form_helper.rb
CHANGED
@@ -33,7 +33,11 @@ module FormHelper
|
|
33
33
|
end
|
34
34
|
end
|
35
35
|
|
36
|
-
def autocomplete_input(f, field)
|
37
|
-
|
36
|
+
def autocomplete_input(f, field, namespace = nil)
|
37
|
+
if namespace
|
38
|
+
f.input "#{field}_name", input_html: { data: {autocomplete: eval("autocomplete_#{namespace}_#{field.to_s.tableize}_path")} }
|
39
|
+
else
|
40
|
+
f.input "#{field}_name", input_html: { data: {autocomplete: eval("autocomplete_#{field.to_s.tableize}_path")} }
|
41
|
+
end
|
38
42
|
end
|
39
43
|
end
|
File without changes
|
data/app/models/page.rb
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
class Page
|
2
2
|
include Mongoid::Document
|
3
3
|
include Mongoid::Timestamps
|
4
|
-
include Mongoid::History::Trackable
|
4
|
+
#include Mongoid::History::Trackable
|
5
5
|
include Mongoid::Slug
|
6
6
|
|
7
7
|
include StateMachines::Page
|
@@ -21,7 +21,7 @@ class Page
|
|
21
21
|
validates :name, presence: true, uniqueness: true
|
22
22
|
validates :text, presence: true
|
23
23
|
|
24
|
-
track_history on: [:user_id, :name, :text, :state]
|
24
|
+
#track_history on: [:user_id, :name, :text, :state]
|
25
25
|
slug :name
|
26
26
|
|
27
27
|
# belongs_to (SQL)
|
data/app/models/product.rb
CHANGED
@@ -5,22 +5,21 @@ class Product
|
|
5
5
|
field :_id, type: String, default: -> { name.to_s.parameterize }
|
6
6
|
field :user_id, type: Integer
|
7
7
|
field :name, type: String, localize: true
|
8
|
+
field :klass_name, type: String
|
8
9
|
field :text, type: String, localize: true
|
9
10
|
field :area_ids, type: Array, default: []
|
10
11
|
field :state, type: String
|
11
12
|
|
12
13
|
attr_accessible :name, :text, :area_ids
|
13
14
|
|
14
|
-
validates :user_id, presence: true
|
15
15
|
validates :name, presence: true, uniqueness: true
|
16
|
-
validates :area_ids, presence: true
|
17
16
|
|
18
17
|
validate :english_name_available?
|
19
18
|
validate :existing_model_file?
|
20
19
|
|
21
20
|
index({ name: 1 }, { unique: true })
|
22
21
|
|
23
|
-
before_validation :
|
22
|
+
before_validation :set_klass_name
|
24
23
|
|
25
24
|
# active record compatibility
|
26
25
|
# just belongs_to reflections for cucumber's factory steps
|
@@ -75,15 +74,17 @@ class Product
|
|
75
74
|
end
|
76
75
|
|
77
76
|
def existing_model_file?
|
78
|
-
unless (
|
77
|
+
unless (get_klass_name.constantize rescue false)
|
79
78
|
errors[:name] << I18n.t(
|
80
79
|
'activerecord.errors.models.product.attributes.name.missing_model_file'
|
81
80
|
)
|
82
81
|
end
|
83
82
|
end
|
84
83
|
|
85
|
-
def
|
86
|
-
if
|
84
|
+
def get_klass_name
|
85
|
+
if klass_name.present?
|
86
|
+
klass_name
|
87
|
+
elsif name == 'Product'
|
87
88
|
'Product'
|
88
89
|
else
|
89
90
|
[
|
@@ -92,8 +93,7 @@ class Product
|
|
92
93
|
end
|
93
94
|
end
|
94
95
|
|
95
|
-
def
|
96
|
-
|
97
|
-
self._type = get_type
|
96
|
+
def set_klass_name
|
97
|
+
self._type = get_klass_name
|
98
98
|
end
|
99
99
|
end
|
data/app/models/project.rb
CHANGED
@@ -31,7 +31,14 @@ class Project < ActiveRecord::Base
|
|
31
31
|
|
32
32
|
# belongs_to (Mongo DB)
|
33
33
|
def product
|
34
|
-
|
34
|
+
return @product if @product
|
35
|
+
|
36
|
+
@product = product_id.blank? ? nil : Product.find(product_id)
|
37
|
+
end
|
38
|
+
|
39
|
+
def product=(document)
|
40
|
+
@product = document
|
41
|
+
self.product_id = @product.try(:id)
|
35
42
|
end
|
36
43
|
|
37
44
|
# has_many (Mongo DB)
|
data/app/models/task.rb
CHANGED
@@ -21,9 +21,9 @@ class Task
|
|
21
21
|
field :state, type: String
|
22
22
|
field :unassigned_user_ids, type: Array
|
23
23
|
|
24
|
-
slug :name
|
24
|
+
slug :name, reserve: ['new', 'edit', 'next']
|
25
25
|
|
26
|
-
attr_accessible :story_id, :name, :text, :result_attributes
|
26
|
+
attr_accessible :story, :story_id, :name, :text, :result_attributes
|
27
27
|
|
28
28
|
scope :current, where(state: 'new')
|
29
29
|
scope :unassigned, where(user_id: nil)
|
@@ -35,7 +35,6 @@ class Task
|
|
35
35
|
validates :offeror_id, presence: true
|
36
36
|
validates :name, presence: true, uniqueness: { scope: :story_id }
|
37
37
|
validates :text, presence: true, if: ->(t) { t.class.name == 'Task' }
|
38
|
-
validate :reserved_words_exclusion
|
39
38
|
|
40
39
|
after_initialize :cache_associations
|
41
40
|
before_validation :cache_associations
|
@@ -64,17 +63,6 @@ class Task
|
|
64
63
|
|
65
64
|
private
|
66
65
|
|
67
|
-
def reserved_words_exclusion
|
68
|
-
current_slug = to_param
|
69
|
-
|
70
|
-
if ['new', 'edit', 'next'].include?(current_slug)
|
71
|
-
message = I18n.t(
|
72
|
-
'activerecord.errors.models.general.attributes.name.reserved_word_included'
|
73
|
-
)
|
74
|
-
errors[:name] << message unless errors[:name].include? message
|
75
|
-
end
|
76
|
-
end
|
77
|
-
|
78
66
|
def cache_associations
|
79
67
|
self.offeror_id = story.offeror_id if story_id.present? && (story rescue nil)
|
80
68
|
end
|
@@ -23,9 +23,9 @@ class Shared::Collection::TablePresenter < Presenter
|
|
23
23
|
return '' unless append_new_link
|
24
24
|
|
25
25
|
path = if current_parent
|
26
|
-
eval("new_#{root_model_class_name(current_parent).tableize.singularize}_#{type.singularize}_path(current_parent)")
|
26
|
+
eval("new_#{root_model_class_name(current_parent).tableize.singularize}_#{type.gsub('.', '_').singularize}_path(current_parent)")
|
27
27
|
else
|
28
|
-
eval("new_#{type.singularize}_path")
|
28
|
+
eval("new_#{type.gsub('.', '_').singularize}_path")
|
29
29
|
end
|
30
30
|
|
31
31
|
link_to t("#{type}.new.title"), path
|
@@ -5,10 +5,16 @@
|
|
5
5
|
<meta charset='utf-8'>
|
6
6
|
<meta content='text/html; charset=utf-8' http-equiv='Content-Type'>
|
7
7
|
<%= stylesheet_link_tag 'voluntary/application', media: 'all' %>
|
8
|
+
<link href="//netdna.bootstrapcdn.com/font-awesome/3.1.1/css/font-awesome.css" rel="stylesheet"/>
|
8
9
|
</head>
|
9
10
|
<body>
|
10
11
|
<%= render 'layouts/shared/navigation' %>
|
11
12
|
|
13
|
+
<section id="dialog">
|
14
|
+
<img alt="Ajax-loader-small" class="hide " id="dialog_body_spinner" src="<%=image_path('voluntary/spinner.gif')%>"/>
|
15
|
+
<div id="dialog_body"/>
|
16
|
+
</section>
|
17
|
+
|
12
18
|
<div class="container-fluid">
|
13
19
|
<% unless flash.empty? %>
|
14
20
|
<div class="row-fluid">
|
@@ -1,6 +1,9 @@
|
|
1
|
-
<div class="navbar">
|
1
|
+
<div class="navbar navbar-inverse navbar-fixed-top">
|
2
2
|
<div class="navbar-inner">
|
3
3
|
<div class="container">
|
4
|
+
<a id="plattform_brand" class="brand" href="#">Volontari.at /</a>
|
5
|
+
<a id="product_brand" class="brand" href="#">Core</a>
|
6
|
+
|
4
7
|
<%= render_navigation context: :main, expand_all: false, renderer: :bootstrap %>
|
5
8
|
</div>
|
6
9
|
</div>
|
@@ -0,0 +1,17 @@
|
|
1
|
+
class AddKlassNameToProducts < ActiveRecord::Migration
|
2
|
+
def up
|
3
|
+
Product.each do |product|
|
4
|
+
next if product.klass_name.present?
|
5
|
+
|
6
|
+
if product.name == 'Product'
|
7
|
+
product.klass_name = 'Product'
|
8
|
+
else
|
9
|
+
product.klass_name = [
|
10
|
+
'Product', product.name.gsub(' - ', '_').gsub('-', '_').gsub(' ', '_').classify
|
11
|
+
].join('::')
|
12
|
+
end
|
13
|
+
|
14
|
+
product.save!
|
15
|
+
end
|
16
|
+
end
|
17
|
+
end
|