voluntary_brainstorming 0.0.1 → 0.0.2

Sign up to get free protection for your applications and to get access to all the features.
Files changed (56) hide show
  1. checksums.yaml +7 -0
  2. data/README.md +3 -2
  3. data/app/assets/javascripts/voluntary_brainstorming/app.js.coffee +8 -0
  4. data/app/assets/javascripts/voluntary_brainstorming/application.js +4 -0
  5. data/app/assets/javascripts/voluntary_brainstorming/components/brainstorming_idea_argument_component.js.coffee +63 -0
  6. data/app/assets/javascripts/voluntary_brainstorming/components/brainstorming_idea_cell_component.js.coffee +34 -0
  7. data/app/assets/javascripts/voluntary_brainstorming/components/brainstorming_idea_vote_component.js.coffee +46 -0
  8. data/app/assets/javascripts/voluntary_brainstorming/controllers/brainstorming_controller.js.coffee +79 -0
  9. data/app/assets/javascripts/voluntary_brainstorming/controllers/user_brainstormings_controller.js.coffee +5 -0
  10. data/app/assets/javascripts/voluntary_brainstorming/mixins/destroy_brainstorming.js.coffee +14 -0
  11. data/app/assets/javascripts/voluntary_brainstorming/mixins/pagination_controller.js.coffee +43 -0
  12. data/app/assets/javascripts/voluntary_brainstorming/models/brainstorming.js.coffee +6 -0
  13. data/app/assets/javascripts/voluntary_brainstorming/models/user.js.coffee +18 -0
  14. data/app/assets/javascripts/voluntary_brainstorming/router.js.coffee +9 -0
  15. data/app/assets/javascripts/voluntary_brainstorming/routes/brainstorming_route.js.coffee +37 -0
  16. data/app/assets/javascripts/voluntary_brainstorming/routes/edit_brainstorming_route.js.coffee +16 -0
  17. data/app/assets/javascripts/voluntary_brainstorming/routes/index_route.js.coffee +4 -0
  18. data/app/assets/javascripts/voluntary_brainstorming/routes/new_brainstorming_route.js.coffee +5 -0
  19. data/app/assets/javascripts/voluntary_brainstorming/routes/user_brainstormings_route.js.coffee +20 -0
  20. data/app/assets/javascripts/voluntary_brainstorming/templates/application.handlebars.erb +20 -0
  21. data/app/assets/javascripts/voluntary_brainstorming/templates/brainstorming.js.handlebars +77 -0
  22. data/app/assets/javascripts/voluntary_brainstorming/templates/brainstorming_form.js.handlebars +18 -0
  23. data/app/assets/javascripts/voluntary_brainstorming/templates/brainstorming_idea_form.js.handlebars +19 -0
  24. data/app/assets/javascripts/voluntary_brainstorming/templates/components/brainstorming-idea-argument.js.handlebars +86 -0
  25. data/app/assets/javascripts/voluntary_brainstorming/templates/components/brainstorming-idea-cell.js.handlebars +7 -0
  26. data/app/assets/javascripts/voluntary_brainstorming/templates/components/brainstorming-idea-vote.js.handlebars +6 -0
  27. data/app/assets/javascripts/voluntary_brainstorming/templates/edit_brainstorming.js.handlebars +3 -0
  28. data/app/assets/javascripts/voluntary_brainstorming/templates/navigation.js.handlebars +28 -0
  29. data/app/assets/javascripts/voluntary_brainstorming/templates/new_brainstorming.js.handlebars +3 -0
  30. data/app/assets/javascripts/voluntary_brainstorming/templates/shared/_pagination.js.handlebars +23 -0
  31. data/app/assets/javascripts/voluntary_brainstorming/templates/user_brainstormings.js.handlebars +33 -0
  32. data/app/assets/stylesheets/voluntary_brainstorming/application.css +13 -0
  33. data/app/controllers/product/brainstorming_controller.rb +16 -0
  34. data/app/controllers/voluntary/api/v1/brainstorming_idea_votes_controller.rb +38 -0
  35. data/app/controllers/voluntary/api/v1/brainstorming_ideas_controller.rb +66 -0
  36. data/app/controllers/voluntary/api/v1/brainstormings_controller.rb +70 -0
  37. data/app/models/brainstorming.rb +18 -0
  38. data/app/models/brainstorming_idea.rb +53 -0
  39. data/app/models/brainstorming_idea_vote.rb +32 -0
  40. data/app/models/product/brainstorming.rb +2 -0
  41. data/app/serializers/brainstorming_idea_serializer.rb +15 -0
  42. data/app/serializers/brainstorming_idea_vote_serializer.rb +11 -0
  43. data/app/serializers/brainstorming_serializer.rb +7 -0
  44. data/app/views/product/brainstorming/index.html.erb +0 -0
  45. data/config/locales/resources/brainstorming/en.yml +26 -0
  46. data/config/locales/resources/brainstorming_idea_votes/en.yml +18 -0
  47. data/config/locales/resources/brainstorming_ideas/en.yml +31 -0
  48. data/config/routes.rb +9 -0
  49. data/db/migrate/20150818181847_add_brainstorming_product.rb +51 -0
  50. data/lib/voluntary_brainstorming.rb +5 -1
  51. data/lib/voluntary_brainstorming/concerns/model/argument/publishes_changes_to_brainstorming.rb +49 -0
  52. data/lib/voluntary_brainstorming/concerns/model/user/has_brainstormings.rb +17 -0
  53. data/lib/voluntary_brainstorming/engine.rb +13 -0
  54. data/lib/voluntary_brainstorming/version.rb +1 -1
  55. metadata +322 -37
  56. data/MIT-LICENSE +0 -20
@@ -0,0 +1,20 @@
1
+ {{render 'navigation'}}
2
+
3
+ <section id="dialog">
4
+ <img alt="Ajax-loader-small" class="hide " id="dialog_body_spinner" src="<%=asset_path('voluntary/ember_js/spinner.gif')%>"/>
5
+ <div id="dialog_body"/>
6
+ </section>
7
+
8
+ <div class='container-fluid'>
9
+ <div class="row">
10
+ <div class="col-md-12">
11
+ <div id="alert" class="alert alert-dismissible" role="alert" style="display:none;">
12
+ <button type="button" class="close" data-dismiss="alert" aria-label="Close"><span aria-hidden="true">&times;</span></button>
13
+ <span id="alert_message"></span>
14
+ </div>
15
+ {{outlet}}
16
+ </div>
17
+ </div>
18
+ </div>
19
+
20
+ {{!render modal}}
@@ -0,0 +1,77 @@
1
+ <div id="reload_alert" class="alert alert-info alert-dismissible" role="alert" style="display:none;">
2
+ <button type="button" class="close" data-dismiss="alert" aria-label="Close"><span aria-hidden="true">&times;</span></button>
3
+ <span id="reload_alert_message"></span>
4
+ <a {{action 'reload'}}><span class="glyphicon glyphicon-refresh"></span> Reload</a>
5
+ </div>
6
+
7
+ <h2>
8
+ {{model.name}}
9
+ {{#link-to 'edit_brainstorming' model.user_slug model.slug}}
10
+ <span class="glyphicon glyphicon-pencil"></span>
11
+ {{/link-to}}
12
+ <a {{action 'destroy' model.user_slug model.slug}}>
13
+ <span class="glyphicon glyphicon-remove"></span>
14
+ </a>
15
+ </h2>
16
+
17
+ <table class="table table-striped" style="margin-top:15px;">
18
+ <thead>
19
+ <tr>
20
+ <th>{{t 'general.vote'}}</th>
21
+ <th>{{t 'general.author'}}</th>
22
+ <th>{{t 'activerecord.models.brainstorming_idea_short' }}</th>
23
+ <th></th>
24
+ <th>{{t 'arguments.index.title' }}</th>
25
+ </tr>
26
+ </thead>
27
+ <tbody>
28
+ {{#if anyIdeas}}
29
+ {{#each ideas as |idea|}}
30
+ <tr>
31
+ <td style="text-align:right;">
32
+ {{brainstorming-idea-vote ideaId=idea.id count=idea.votes_count vote=idea.user_id setDirtyAction="setDirty" reloadAction='reload'}}
33
+ </td>
34
+ <td>{{#link-to 'user_brainstormings' idea.user_slug 1}}{{idea.user_name}}{{/link-to}}</td>
35
+ <td>
36
+ {{brainstorming-idea-cell selectedId=ideaId ideaId=idea.id ideaName=idea.name ideaText=idea.text leaveEditIdeaModeAction='leaveEditIdeaMode' setDirtyAction='setDirty' reloadAction='reload'}}
37
+ </td>
38
+ <td>
39
+ <a {{action 'editIdea' idea.id}} class="edit_brainstorming_idea_link">
40
+ <span class="glyphicon glyphicon-pencil"></span> {{t 'general.edit'}}
41
+ </a>
42
+ |
43
+ <a {{action 'destroyIdea' idea.id idea.user_id}} class="remove_brainstorming_idea_link">
44
+ <span class="glyphicon glyphicon-remove"></span> {{t 'general.remove'}}
45
+ </a>
46
+ </td>
47
+ <td>
48
+ <table class="table">
49
+ <tbody>
50
+ {{#each idea.arguments as |argument|}}
51
+ {{brainstorming-idea-argument argument=argument.argument selectedId=argumentId id=argument.argument.id ideaId=idea.id topicName=argument.argument.topic_name value=argument.argument.value editAction='editArgument' leaveComposeArgumentModeAction='leaveComposeArgumentMode' setDirtyAction='setDirty' reloadAction='reload'}}
52
+ {{/each}}
53
+ {{brainstorming-idea-argument selectedNewArgumentIdeaId=newArgumentIdeaId ideaId=idea.id newAction="newArgument" leaveComposeArgumentModeAction='leaveComposeArgumentMode' setDirtyAction='setDirty' reloadAction='reload'}}
54
+ </tbody>
55
+ </table>
56
+ </td>
57
+ </tr>
58
+ {{/each}}
59
+ {{else}}
60
+ <tr>
61
+ <td colspan="4">{{t 'brainstorming_ideas.index.empty_collection'}}</td>
62
+ </tr>
63
+ {{/if}}
64
+ {{#if newIdeaMode}}
65
+ <tr>
66
+ <td></td>
67
+ <td>
68
+ {{brainstorming-idea-cell userSlug=userSlug slug=slug reloadAction='reload' leaveNewIdeaModeAction='leaveNewIdeaMode' setDirtyAction='setDirty'}}
69
+ </td>
70
+ <td></td>
71
+ <td></td>
72
+ </tr>
73
+ {{/if}}
74
+ </tbody>
75
+ </table>
76
+
77
+ <a class="new_brainstorming_idea_link" {{action 'newIdea'}}><span class="glyphicon glyphicon-plus"></span> {{t 'brainstorming_ideas.new.title' }}</a>
@@ -0,0 +1,18 @@
1
+ <form class="simple_form form-vertical" novalidate="novalidate" id="new_brainstorming" accept-charset="UTF-8" method="post">
2
+ <div class="form-group string required brainstorming_name">
3
+ <label class="string required control-label control-label" for="brainstorming_name">
4
+ <abbr title="required">*</abbr> {{t 'attributes.name' }}
5
+ </label>
6
+ {{input value=name class="string required form-control" type="text" name="brainstorming[name]" id="brainstorming_name"}}
7
+ </div>
8
+ <div class="form-group text optional brainstorming_text">
9
+ <label class="text optional control-label control-label" for="brainstorming_text">{{t 'attributes.text' }}</label>
10
+ {{textarea value=text style="width:500px; height:100px;" class="text optional form-control" name="brainstorming[text]" id="brainstorming_text"}}
11
+ </div>
12
+
13
+ {{#if slug}}
14
+ <input type="submit" name="commit" value="{{t 'brainstormings.update.title' true }}" class="btn btn-default" {{action 'save'}}/>
15
+ {{else}}
16
+ <input type="submit" name="commit" value="{{t 'brainstormings.create.title' true }}" class="btn btn-default" {{action 'save'}}/>
17
+ {{/if}}
18
+ </form>
@@ -0,0 +1,19 @@
1
+ <form class="simple_form form-vertical" novalidate="novalidate" accept-charset="UTF-8" method="post">
2
+ <div class="form-group string required brainstorming_idea_name">
3
+ <label class="string required control-label control-label" for="brainstorming_idea_name">
4
+ <abbr title="required">*</abbr> {{t 'attributes.name'}}
5
+ </label>
6
+ {{input value=ideaName class="string required form-control" type="text" name="brainstorming_idea[name]" id="brainstorming_idea_name"}}
7
+ </div>
8
+ <div class="form-group string optional brainstorming_idea_text">
9
+ <label class="string optional control-label control-label" for="brainstorming_idea_text">{{t 'attributes.text'}}</label>
10
+ {{textarea value=ideaText style="width:500px; height:100px;" class="string optional form-control" type="text" name="brainstorming_idea[text]" id="brainstorming_idea_text"}}
11
+ </div>
12
+
13
+ {{#if ideaId}}
14
+ <input type="submit" name="commit" value="{{t 'general.cancel' true}}" class="btn btn-default" {{action 'cancel'}}/>
15
+ <input type="submit" name="commit" value="{{t 'brainstorming_ideas.update.title' true}}" class="btn btn-default" {{action 'save'}}/>
16
+ {{else}}
17
+ <input type="submit" name="commit" value="{{t 'brainstorming_ideas.create.title' true}}" class="btn btn-default" {{action 'save'}}/>
18
+ {{/if}}
19
+ </form>
@@ -0,0 +1,86 @@
1
+ {{#if composeMode}}
2
+ <td colspan="3">
3
+ <form class="simple_form form-vertical" novalidate="novalidate" accept-charset="UTF-8">
4
+ <div class="form-group radio_buttons optional argument_vote">
5
+ <label class="radio_buttons optional control-label control-label">{{t 'general.vote'}}</label>
6
+ <span class="radio">
7
+ <label for="argument_vote_pro">
8
+ <input class="radio_buttons optional" type="radio" value="1" name="argument[vote]" id="argument_vote_pro" />
9
+ {{t 'general.pro'}}
10
+ </label>
11
+ </span>
12
+ <span class="radio">
13
+ <label for="argument_vote_contra">
14
+ <input class="radio_buttons optional" readonly="readonly" type="radio" value="0" name="argument[vote]" id="argument_vote_contra" />
15
+ {{t 'general.contra'}}
16
+ </label>
17
+ </span>
18
+ <span class="radio">
19
+ <label for="argument_vote_neutral">
20
+ <input class="radio_buttons optional" readonly="readonly" type="radio" value="" name="argument[vote]" id="argument_vote_neutral" />
21
+ {{t 'general.neutral'}}
22
+ </label>
23
+ </span>
24
+ </div>
25
+ <div class="form-group string optional argument_topic_name">
26
+ <label class="string optional control-label control-label" for="argument_topic_name">
27
+ {{t 'activerecord.models.argument_topic_short'}}
28
+ </label>
29
+ {{input value=topicName class="string optional form-control" type="text" name="argument[topic_name]" id="argument_topic_name" data-autocomplete="/api/v1/argument_topics/autocomplete"}}
30
+ </div>
31
+ <div class="form-group string optional argument_value">
32
+ <label class="string optional control-label control-label" for="argument_value">
33
+ {{t 'activerecord.attributes.argument_topic.value'}}
34
+ </label>
35
+ {{input value=value class="string optional form-control" type="text" name="argument[value]" id="argument_value"}}
36
+ </div>
37
+
38
+ <input type="submit" name="commit" value="{{t 'general.cancel' true}}" class="btn btn-default" {{action 'cancel'}}/>
39
+ {{#if argument}}
40
+ <input type="submit" name="commit" value="{{t 'arguments.update.title' true}}" class="btn btn-default" {{action 'save'}}/>
41
+ {{else}}
42
+ <input type="submit" name="commit" value="{{t 'arguments.create.title' true}}" class="btn btn-default" {{action 'save'}}/>
43
+ {{/if}}
44
+ </form>
45
+ </td>
46
+ {{else}}
47
+ {{#if argument}}
48
+ <td>
49
+ {{#if pro}}
50
+ <span class="glyphicon glyphicon-plus-sign" style="color:green"></span>
51
+ {{/if}}
52
+ {{#if contra}}
53
+ <span class="glyphicon glyphicon-minus-sign" style="color:red"></span>
54
+ {{/if}}
55
+ {{#if neutral}}
56
+ <span class="glyphicon glyphicon-question-sign" style="color:blue"></span>
57
+ {{/if}}
58
+ {{argument.topic_name}}<br/>
59
+ by
60
+ {{#if argument.user_slug}}
61
+ {{#link-to 'user_brainstormings' argument.user_slug 1}}{{argument.user_name}}{{/link-to}}
62
+ {{else}}
63
+ {{t 'general.anonymous'}}
64
+ {{/if}}
65
+ </td>
66
+ <td style="text-align:right">
67
+ {{argument.value}}
68
+ </td>
69
+ <td>
70
+ <a {{action 'edit' argument.id}} class="edit_brainstorming_idea_argument_link">
71
+ <span class="glyphicon glyphicon-pencil"></span> {{t 'general.edit'}}
72
+ </a>
73
+ |
74
+ <a {{action 'destroy' argument.id}} class="remove_brainstorming_idea_argument_link">
75
+ <span class="glyphicon glyphicon-remove"></span> {{t 'general.remove'}}
76
+ </a>
77
+ {{like-or-dislike targetType='Argument' targetId=argument.id positive=argument.positive likes=argument.likes_count dislikes=argument.dislikes_count}}
78
+ </td>
79
+ {{else}}
80
+ <td colspan="3">
81
+ <a class="new_brainstorming_idea_argument_link" {{action 'new' ideaId}}>
82
+ <span class="glyphicon glyphicon-plus"></span> {{t 'arguments.new.title' }}
83
+ </a>
84
+ </td>
85
+ {{/if}}
86
+ {{/if}}
@@ -0,0 +1,7 @@
1
+ {{#if editMode}}
2
+ {{partial 'brainstorming_idea_form'}}
3
+ {{else}}
4
+ {{ideaName}}
5
+ <br/>
6
+ {{toggle-text text=ideaText}}
7
+ {{/if}}
@@ -0,0 +1,6 @@
1
+ {{count}}
2
+ {{#if vote}}
3
+ <span class="glyphicon glyphicon-thumbs-down" {{action 'down'}}></span>
4
+ {{else}}
5
+ <span class="glyphicon glyphicon-thumbs-up" {{action 'up'}}></span>
6
+ {{/if}}
@@ -0,0 +1,3 @@
1
+ <h2>{{t 'brainstormings.edit.title'}}</h2>
2
+
3
+ {{partial 'brainstorming_form'}}
@@ -0,0 +1,28 @@
1
+ <div class="navbar navbar-inverse navbar-fixed-top">
2
+ <div class="container">
3
+ <a id="plattform_brand" class="navbar-brand" href="/">Volontari.at /</a>
4
+ <a id="product_brand" class="navbar-brand" href="#">Brainstorming</a>
5
+
6
+ <ul class="navbar-nav nav">
7
+ {{#if currentUser}}
8
+ <li class="dropdown">
9
+ <a href="#" class="dropdown-toggle" data-toggle="dropdown">
10
+ {{t 'general.account'}}
11
+ <b class="caret"></b>
12
+ </a>
13
+ <ul class="dropdown-menu">
14
+ {{#link-to 'user_brainstormings' currentUser.slug 1 tagName='li'}}<a>{{t 'brainstormings.index.your'}}</a>{{/link-to}}
15
+ <li>
16
+ <a {{action 'signOut'}}>{{t 'general.sign_out'}}</a>
17
+ </li>
18
+ </ul>
19
+ </li>
20
+ {{else}}
21
+ <li>
22
+ <a href="/users/sign_in">{{t 'general.authentication'}}</a>
23
+ </li>
24
+ {{/if}}
25
+ <li><a href="http://GitHub.com/Volontariat/voluntary_brainstorming/issues">{{t 'general.issues' }}</a></li>
26
+ </ul>
27
+ </div>
28
+ </div>
@@ -0,0 +1,3 @@
1
+ <h2>{{t 'brainstormings.new.title'}}</h2>
2
+
3
+ {{partial 'brainstorming_form'}}
@@ -0,0 +1,23 @@
1
+ <nav>
2
+ <ul class="pagination">
3
+ {{#if controller.showFirstPageLink}}
4
+ <li class="first"><a {{action 'goToPage' 1}}>&laquo; First</a></li>
5
+ {{/if}}
6
+
7
+ {{#if controller.showPreviousPageLink}}
8
+ <li class="prev"><a {{action 'goToPage' controller.previousPage}}>&laquo; Previous</a></li>
9
+ {{/if}}
10
+
11
+ {{#each controller.pages as |currentPage|}}
12
+ <li class="{{if currentPage.isCurrent 'active'}}"><a href="#" {{action 'goToPage' currentPage.number}}>{{currentPage.number}}</a></li>
13
+ {{/each}}
14
+
15
+ {{#if controller.showNextPageLink}}
16
+ <li class="next_page"><a {{action 'goToPage' controller.nextPage}}>Next &raquo;</a></li>
17
+ {{/if}}
18
+
19
+ {{#if controller.showLastPageLink}}
20
+ <li class="last next"><a {{action 'goToPage' controller.totalPages}}>Last &raquo;</a></li>
21
+ {{/if}}
22
+ </ul>
23
+ </nav>
@@ -0,0 +1,33 @@
1
+ <h2>{{name-with-apostrophe userName}} {{t 'brainstormings.index.title'}}</h2>
2
+
3
+ {{#if anyBrainstormings}}
4
+ <table class="table table-striped" style="margin-top:15px;">
5
+ <tbody>
6
+ {{#each brainstormings as |brainstorming|}}
7
+ <tr>
8
+ <td>
9
+ {{#link-to 'brainstorming' brainstorming.user_slug brainstorming.slug}}{{brainstorming.name}}{{/link-to}}
10
+ </td>
11
+ <td>
12
+ {{#link-to 'edit_brainstorming' brainstorming.user_slug brainstorming.slug}}
13
+ <span class="glyphicon glyphicon-pencil"></span> {{t 'general.edit'}}
14
+ {{/link-to}}
15
+ |
16
+ <a {{action 'destroy' brainstorming.user_slug brainstorming.slug}} class="remove_brainstorming_link">
17
+ <span class="glyphicon glyphicon-remove"></span> {{t 'general.remove'}}
18
+ </a>
19
+ </td>
20
+ </tr>
21
+ {{/each}}
22
+ </tbody>
23
+ </table>
24
+ {{else}}
25
+ {{t 'brainstormings.index.empty_collection'}}
26
+ {{/if}}
27
+
28
+ {{partial 'shared/pagination'}}
29
+
30
+ {{#link-to 'new_brainstorming' userSlug}}
31
+ <span class="glyphicon glyphicon-plus"></span>
32
+ {{t 'brainstormings.new.title'}}
33
+ {{/link-to}}
@@ -0,0 +1,13 @@
1
+ /*
2
+ * This is a manifest file that'll be compiled into application.css, which will include all the files
3
+ * listed below.
4
+ *
5
+ * Any CSS and SCSS file within this directory, lib/assets/stylesheets, vendor/assets/stylesheets,
6
+ * or vendor/assets/stylesheets of plugins, if any, can be referenced here using a relative path.
7
+ *
8
+ * You're free to add application-wide styles to this file and they'll appear at the top of the
9
+ * compiled file, but it's generally better to create a new file per style scope.
10
+ *
11
+ *= require voluntary/ember_js/application
12
+ *= require_self
13
+ */
@@ -0,0 +1,16 @@
1
+ class Product::BrainstormingController < Voluntary::EmberJs::ApplicationController
2
+ layout Proc.new { |controller| controller.request.xhr? || request.format.try('json?') ? false : 'voluntary/ember_js' }
3
+
4
+ def index
5
+ end
6
+
7
+ protected
8
+
9
+ def voluntary_ember_js_stylesheets
10
+ ['voluntary_brainstorming/application']
11
+ end
12
+
13
+ def voluntary_ember_js_javascripts
14
+ ['voluntary_brainstorming/application']
15
+ end
16
+ end
@@ -0,0 +1,38 @@
1
+ class Voluntary::Api::V1::BrainstormingIdeaVotesController < ActionController::Base
2
+ include Voluntary::V1::BaseController
3
+
4
+ respond_to :json
5
+
6
+ def index
7
+ idea = BrainstormingIdea.friendly.find params[:idea_id]
8
+ respond_with do |format|
9
+ format.json { render json: idea.votes.includes(:user) }
10
+ end
11
+ end
12
+
13
+ def create
14
+ resource = current_user.brainstorming_idea_votes.create idea_id: params[:idea_id]
15
+
16
+ respond_to do |format|
17
+ format.json do
18
+ render json: resource.persisted? ? resource : { errors: resource.errors.to_hash }
19
+ end
20
+ end
21
+ end
22
+
23
+ def destroy
24
+ resource = current_user.brainstorming_idea_votes.where(idea_id: params[:idea_id]).first
25
+ raise ActiveRecord::RecordNotFound unless resource
26
+ resource.destroy
27
+
28
+ if resource.persisted?
29
+ raise I18n.t('activerecord.errors.models.brainstorming_idea_vote.attributes.base.deletion_failed')
30
+ end
31
+
32
+ respond_to do |format|
33
+ format.json do
34
+ render json: {}
35
+ end
36
+ end
37
+ end
38
+ end
@@ -0,0 +1,66 @@
1
+ class Voluntary::Api::V1::BrainstormingIdeasController < ActionController::Base
2
+ include Voluntary::V1::BaseController
3
+
4
+ respond_to :json
5
+
6
+ def index
7
+ user = User.friendly.find params[:user_slug]
8
+ collection = user.brainstormings.friendly.find(params[:brainstorming_slug]).ideas.order('votes_count DESC').includes(:user)
9
+ collection = collection.with_current_user_vote(current_user.id) if current_user
10
+ collection = collection.to_a
11
+
12
+ collection.each_with_index do |resource, index|
13
+ arguments = resource.arguments.includes(:user, :topic).to_a
14
+ argument_likes = Argument.likes_or_dislikes_for(current_user, arguments.map(&:id))
15
+
16
+ arguments.map! do |argument|
17
+ argument.positive = argument_likes[argument.id].try(:positive)
18
+ argument
19
+ end
20
+
21
+ resource.arguments = arguments
22
+ collection[index] = resource
23
+ end
24
+
25
+ respond_with do |format|
26
+ format.json { render json: collection }
27
+ end
28
+ end
29
+
30
+ def create
31
+ params[:brainstorming_idea][:brainstorming_id] = User.friendly.find(params[:user_slug]).brainstormings.friendly.find(params[:brainstorming_slug]).id
32
+ resource = current_user.brainstorming_ideas.create params[:brainstorming_idea]
33
+
34
+ respond_to do |format|
35
+ format.json do
36
+ render json: resource.persisted? ? resource : { errors: resource.errors.to_hash }
37
+ end
38
+ end
39
+ end
40
+
41
+ def update
42
+ resource = current_user.brainstorming_ideas.find params[:id]
43
+ resource.update_attributes params[:brainstorming_idea]
44
+
45
+ respond_to do |format|
46
+ format.json do
47
+ render json: resource.valid? ? resource : { errors: resource.errors.to_hash }
48
+ end
49
+ end
50
+ end
51
+
52
+ def destroy
53
+ resource = current_user.brainstorming_ideas.find params[:id]
54
+ resource.destroy
55
+
56
+ respond_to do |format|
57
+ format.json do
58
+ render json: if resource.persisted?
59
+ { error: I18n.t('activerecord.errors.models.brainstorming_idea.attributes.base.deletion_failed') }
60
+ else
61
+ {}
62
+ end
63
+ end
64
+ end
65
+ end
66
+ end