active_record_survey_api 0.0.11 → 0.0.12

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 9c173af6cea094f14c55fe9932d84b8caa4afc74
4
- data.tar.gz: 05d509216bbd05a2d3beb8abe1c182aeef6b8885
3
+ metadata.gz: 2e462167630331aaa6e6676953e57ea5002c556e
4
+ data.tar.gz: 4cd8e981aeff4966e3c441cbb8b540947e6c65ab
5
5
  SHA512:
6
- metadata.gz: a3fb3a5ffe1db338b18c24c2b212ed259cce9bb08a646359e1fee3a94dd6cc825bdef06df93ea694b986193e7a366eb0e49fa7fbfb3f80ca62e26fd181c30773
7
- data.tar.gz: 0b9b54ac7a32c1b4552d7b03b10a2bf6f193e7daba9b12936a3bc71576ee982ab14f9ee2a2a1bd3fc6b7748817d1cd831233dcebe9456b18291f5c9b51af2d14
6
+ metadata.gz: ee0605613c6950668fd6c98e43ad410a0ef5615a8ba72c887dfeb7dbdc05150bf743abb3c4c53549006d45869e07dd5f7dfca0a85dfd1db27b3feee5c03d6083
7
+ data.tar.gz: a7e639e26887d4f5376236f4570494ef236f4ad35038c73f0bef339917bf72a400cc0f9e2fb061103d06e6f0bd4de0ba00bb1adfcaf985022cf1099a98ca3d9a
@@ -0,0 +1,15 @@
1
+ require_dependency "active_record_survey_api/application_controller"
2
+
3
+ module Concerns
4
+ module Controllers
5
+ module NodeMapGroups
6
+ extend ActiveRecordSurveyApi::Concerns::Controllers::NodeMapGroups
7
+ end
8
+ end
9
+ end
10
+
11
+ module ActiveRecordSurveyApi
12
+ class NodeMapGroupsController < ApplicationController
13
+ include Concerns::Controllers::NodeMapGroups
14
+ end
15
+ end
data/config/routes.rb CHANGED
@@ -7,7 +7,9 @@ ActiveRecordSurveyApi::Engine.routes.draw do
7
7
  resources :questions do
8
8
  resources :answers
9
9
  end
10
+ resources :node_map_groups, as: "pages"
10
11
  end
12
+ resources :node_map_groups, as: "pages"
11
13
  resources :questions do
12
14
  resources :answers
13
15
 
@@ -0,0 +1,11 @@
1
+ class AddActiveRecordSurveyNodeMapGroup < ActiveRecord::Migration
2
+ def up
3
+ require "generators/active_record_survey/node_map_group/templates/migration_0.0.1"
4
+ AddActiveRecordSurveyNodeMapGroup.up
5
+ end
6
+
7
+ def down
8
+ require "generators/active_record_survey/node_map_group/templates/migration_0.0.1"
9
+ AddActiveRecordSurveyNodeMapGroup.down
10
+ end
11
+ end
@@ -0,0 +1,15 @@
1
+ class AddActiveRecordSurveyNodeMapGroupGlobalize < ActiveRecord::Migration
2
+ def up
3
+ ::ActiveRecordSurvey::NodeMapGroup.create_translation_table!(
4
+ :text => {
5
+ :type => :string,
6
+ :null => false,
7
+ :default => '',
8
+ }
9
+ )
10
+ end
11
+
12
+ def down
13
+ ::ActiveRecordSurvey::NodeMapGroup.drop_translation_table!
14
+ end
15
+ end
@@ -0,0 +1,54 @@
1
+ module ActiveRecordSurveyApi
2
+ module Concerns
3
+ module Controllers
4
+ module NodeMapGroups
5
+ extend ActiveSupport::Concern
6
+
7
+ def create
8
+ @node_map_group = new_node_map_group
9
+ @node_map_group.survey = @survey
10
+ @node_map_group.attributes = node_map_group_params
11
+ @node_map_group.save
12
+
13
+ if !@node_map_group.save
14
+ render json: JSONAPI::Serializer.serialize_errors(@node_map_group.errors), :status => 409
15
+ else
16
+ render json: serialize_model(@node_map_group, serializer: ActiveRecordSurveyApi::NodeMapGroupSerializer)
17
+ end
18
+ end
19
+
20
+ def all_node_map_groups
21
+ @survey.node_map_groups
22
+ end
23
+
24
+ def node_map_group_by_id(id)
25
+ ActiveRecordSurvey::NodeMapGroup.find(id)
26
+ end
27
+
28
+ def new_node_map_group(p = nil)
29
+ ActiveRecordSurvey::NodeMapGroup.new(p)
30
+ end
31
+
32
+ def json_params
33
+ ActionController::Parameters.new(JSON.parse(request.body.read))
34
+ end
35
+
36
+ def node_map_group_params
37
+ json_params.require(:node_map_group).permit(:text, questions: []).tap { |whitelisted|
38
+ whitelisted[:build_from_questions] = whitelisted[:questions] unless whitelisted[:questions].nil?
39
+
40
+ whitelisted.delete(:questions)
41
+ }
42
+ end
43
+
44
+ included do
45
+ before_filter :find_survey, :if => proc { |c| params[:survey_id].to_i > 0 }
46
+ end
47
+
48
+ def find_survey
49
+ self.instance_variable_set "@survey", ActiveRecordSurvey::Survey.find(params[:survey_id])
50
+ end
51
+ end
52
+ end
53
+ end
54
+ end
@@ -0,0 +1,15 @@
1
+ module ActiveRecordSurveyApi
2
+ module Models
3
+ module NodeMapGroup
4
+ def self.included(base)
5
+ base.class_eval do
6
+ translates :text
7
+ end
8
+
9
+ def build_from_questions=questions
10
+ self.build_questions(questions)
11
+ end
12
+ end
13
+ end
14
+ end
15
+ end
@@ -0,0 +1,5 @@
1
+ module ActiveRecordSurveyApi
2
+ class NodeMapGroupSerializer < BaseSerializer
3
+
4
+ end
5
+ end
@@ -1,3 +1,3 @@
1
1
  module ActiveRecordSurveyApi
2
- VERSION = "0.0.11"
2
+ VERSION = "0.0.12"
3
3
  end
@@ -1,5 +1,6 @@
1
1
  require "http_accept_language"
2
2
  require "active_record_survey"
3
+ require "active_record_survey/node_map_group"
3
4
  require "globalize"
4
5
 
5
6
  require "active_record_survey_api/engine"
@@ -8,6 +9,7 @@ require "active_record_survey_api/concerns/controllers/surveys"
8
9
  require "active_record_survey_api/concerns/controllers/questions"
9
10
  require "active_record_survey_api/concerns/controllers/answers"
10
11
  require "active_record_survey_api/concerns/controllers/node_maps"
12
+ require "active_record_survey_api/concerns/controllers/node_map_groups"
11
13
  require "active_record_survey_api/concerns/controllers/nodes"
12
14
  require "active_record_survey_api/concerns/controllers/instances"
13
15
  require "active_record_survey_api/concerns/controllers/instance_nodes"
@@ -17,12 +19,14 @@ require "active_record_survey_api/models/node_map"
17
19
  require "active_record_survey_api/models/node/question"
18
20
  require "active_record_survey_api/models/node/answer"
19
21
  require "active_record_survey_api/models/instance"
22
+ require "active_record_survey_api/models/node_map_group"
20
23
 
21
24
  require "active_record_survey_api/serializers/base_serializer"
22
25
  require "active_record_survey_api/serializers/answer_serializer"
23
26
  require "active_record_survey_api/serializers/instance_serializer"
24
27
  require "active_record_survey_api/serializers/instance_node_serializer"
25
28
  require "active_record_survey_api/serializers/node_map_serializer"
29
+ require "active_record_survey_api/serializers/node_map_group_serializer"
26
30
  require "active_record_survey_api/serializers/node_serializer"
27
31
  require "active_record_survey_api/serializers/question_serializer"
28
32
  require "active_record_survey_api/serializers/survey_serializer"
@@ -36,6 +40,8 @@ ActiveRecordSurvey::Node::Question.send(:include, ActiveRecordSurveyApi::Models:
36
40
  ActiveRecordSurvey::Node::Answer.send(:include, ActiveRecordSurveyApi::Models::Node::Answer)
37
41
  ActiveRecordSurvey::Instance.send(:include, ActiveRecordSurveyApi::Models::Instance)
38
42
 
43
+ ActiveRecordSurvey::NodeMapGroup.send(:include, ActiveRecordSurveyApi::Models::NodeMapGroup)
44
+
39
45
  # Fallback support
40
46
  #require "i18n/backend/fallbacks"
41
47
  #I18n.fallbacks.map('es' => 'en')
@@ -0,0 +1,76 @@
1
+ require 'spec_helper'
2
+
3
+ describe ActiveRecordSurveyApi::NodeMapGroupsController, :type => :controller, :node_map_groups_api => true do
4
+ routes { ActiveRecordSurveyApi::Engine.routes }
5
+
6
+ before(:each) do
7
+ I18n.locale = :en
8
+ request.headers[:HTTP_ACCEPT_LANGUAGE] = :en
9
+ @header_params = {
10
+ :CONTENT_TYPE => 'application/json',
11
+ :ACCEPT => 'application/json'
12
+ }
13
+ @survey = FactoryGirl.build(:pageable_survey)
14
+ @survey.save
15
+
16
+ @q1 = @survey.questions.select { |i| i.text == "Question #1" }.first
17
+ @q1_a1 = @q1.answers.select { |i| i.text == "Q1 Answer #1" }.first
18
+ @q1_a2 = @q1.answers.select { |i| i.text == "Q1 Answer #2" }.first
19
+
20
+ @q2 = @survey.questions.select { |i| i.text == "Question #2" }.first
21
+ @q2_a2 = @q2.answers.select { |i| i.text == "Q2 Answer #2" }.first
22
+
23
+ @q3 = @survey.questions.select { |i| i.text == "Question #3" }.first
24
+ @q3_a1 = @q3.answers.select { |i| i.text == "Q3 Answer #1" }.first
25
+ @q3_a2 = @q3.answers.select { |i| i.text == "Q3 Answer #2" }.first
26
+
27
+ @q4 = @survey.questions.select { |i| i.text == "Question #4" }.first
28
+ @q5 = @survey.questions.select { |i| i.text == "Question #5" }.first
29
+ end
30
+
31
+ describe "CREATE" do
32
+ describe "success" do
33
+ it 'should succeed for single questions' do
34
+ post :create,
35
+ {
36
+ :node_map_group => {
37
+ :questions => [
38
+ @q1.id,
39
+ ]
40
+ }
41
+ }.to_json, @header_params.merge(:survey_id => @survey.id)
42
+
43
+ expect(response.status).to eq(200)
44
+ end
45
+
46
+ it 'should succeed for multiple questions' do
47
+ post :create,
48
+ {
49
+ :node_map_group => {
50
+ :questions => [
51
+ @q3.id,
52
+ @q4.id,
53
+ ]
54
+ }
55
+ }.to_json, @header_params.merge(:survey_id => @survey.id)
56
+
57
+ expect(response.status).to eq(200)
58
+ end
59
+ end
60
+ describe "failure" do
61
+ it 'should fail when one of the questions branches' do
62
+ post :create,
63
+ {
64
+ :node_map_group => {
65
+ :questions => [
66
+ @q1.id,
67
+ @q2.id,
68
+ ]
69
+ }
70
+ }.to_json, @header_params.merge(:survey_id => @survey.id)
71
+
72
+ expect(response.status).to eq(409)
73
+ end
74
+ end
75
+ end
76
+ end
@@ -40,6 +40,39 @@ module FactoryGirlSurveyHelpers
40
40
  q3_a1.build_link(q4)
41
41
  q3_a2.build_link(q4)
42
42
  end
43
+
44
+ def build_pageable_survey(survey)
45
+ q1 = survey.questions.build(:type => "ActiveRecordSurvey::Node::Question", :text => "Question #1", :survey => survey)
46
+ q1_a1 = ActiveRecordSurvey::Node::Answer.new(:text => "Q1 Answer #1")
47
+ q1_a2 = ActiveRecordSurvey::Node::Answer.new(:text => "Q1 Answer #2")
48
+ q1.build_answer(q1_a1)
49
+ q1.build_answer(q1_a2)
50
+
51
+ q2 = survey.questions.build(:type => "ActiveRecordSurvey::Node::Question", :text => "Question #2", :survey => survey)
52
+ q2_a1 = ActiveRecordSurvey::Node::Answer::Boolean.new(:text => "Q2 Answer #1")
53
+ q2_a2 = ActiveRecordSurvey::Node::Answer::Boolean.new(:text => "Q2 Answer #2")
54
+ q2.build_answer(q2_a1)
55
+ q2.build_answer(q2_a2)
56
+
57
+ q3 = survey.questions.build(:type => "ActiveRecordSurvey::Node::Question", :text => "Question #3", :survey => survey)
58
+ q3_a1 = ActiveRecordSurvey::Node::Answer.new(:text => "Q3 Answer #1")
59
+ q3_a2 = ActiveRecordSurvey::Node::Answer.new(:text => "Q3 Answer #2")
60
+ q3.build_answer(q3_a1)
61
+ q3.build_answer(q3_a2)
62
+
63
+ q4 = survey.questions.build(:type => "ActiveRecordSurvey::Node::Question", :text => "Question #4", :survey => survey)
64
+
65
+ q5 = survey.questions.build(:type => "ActiveRecordSurvey::Node::Question", :text => "Question #5", :survey => survey)
66
+
67
+ q1_a1.build_link(q2)
68
+ q1_a2.build_link(q3)
69
+ q2_a2.build_link(q3)
70
+
71
+ q3_a1.build_link(q4)
72
+ q3_a2.build_link(q4)
73
+
74
+ q4.build_link(q5)
75
+ end
43
76
  end
44
77
 
45
78
  FactoryGirl.define do
@@ -50,4 +83,7 @@ FactoryGirl.define do
50
83
  factory :basic_survey, parent: :survey do |f|
51
84
  after(:build) { |survey| FactoryGirlSurveyHelpers.build_basic_survey(survey) }
52
85
  end
86
+ factory :pageable_survey, parent: :survey do |f|
87
+ after(:build) { |survey| FactoryGirlSurveyHelpers.build_pageable_survey(survey) }
88
+ end
53
89
  end
@@ -11,7 +11,24 @@
11
11
  #
12
12
  # It's strongly recommended that you check this file into your version control system.
13
13
 
14
- ActiveRecord::Schema.define(version: 20151002131904) do
14
+ ActiveRecord::Schema.define(version: 20160408032206) do
15
+
16
+ create_table "active_record_survey_api_node_map_group_translations", force: :cascade do |t|
17
+ t.integer "active_record_survey_api_node_map_group_id", null: false
18
+ t.string "locale", null: false
19
+ t.datetime "created_at", null: false
20
+ t.datetime "updated_at", null: false
21
+ t.string "text", default: "", null: false
22
+ end
23
+
24
+ add_index "active_record_survey_api_node_map_group_translations", ["active_record_survey_api_node_map_group_id"], name: "index_b498d8de7f6d8f1068770987d74f791d985628f2"
25
+ add_index "active_record_survey_api_node_map_group_translations", ["locale"], name: "index_ce3a77b5bc1f5d7186fb8462af6a4ead5150a0f7"
26
+
27
+ create_table "active_record_survey_api_node_map_groups", force: :cascade do |t|
28
+ t.integer "active_record_survey_id"
29
+ t.datetime "created_at", null: false
30
+ t.datetime "updated_at", null: false
31
+ end
15
32
 
16
33
  create_table "active_record_survey_instance_nodes", force: :cascade do |t|
17
34
  t.integer "active_record_survey_instance_id"
@@ -30,13 +47,14 @@ ActiveRecord::Schema.define(version: 20151002131904) do
30
47
  create_table "active_record_survey_node_maps", force: :cascade do |t|
31
48
  t.integer "active_record_survey_node_id"
32
49
  t.integer "parent_id"
33
- t.integer "lft", null: false
34
- t.integer "rgt", null: false
35
- t.integer "depth", default: 0, null: false
36
- t.integer "children_count", default: 0, null: false
50
+ t.integer "lft", null: false
51
+ t.integer "rgt", null: false
52
+ t.integer "depth", default: 0, null: false
53
+ t.integer "children_count", default: 0, null: false
37
54
  t.integer "active_record_survey_id"
38
- t.datetime "created_at", null: false
39
- t.datetime "updated_at", null: false
55
+ t.datetime "created_at", null: false
56
+ t.datetime "updated_at", null: false
57
+ t.integer "active_record_survey_api_node_map_group_id"
40
58
  end
41
59
 
42
60
  add_index "active_record_survey_node_maps", ["lft"], name: "index_active_record_survey_node_maps_on_lft"
Binary file
Binary file
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: active_record_survey_api
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.11
4
+ version: 0.0.12
5
5
  platform: ruby
6
6
  authors:
7
7
  - Butch Marshall
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2016-03-31 00:00:00.000000000 Z
11
+ date: 2016-08-25 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rails
@@ -44,14 +44,28 @@ dependencies:
44
44
  requirements:
45
45
  - - ">="
46
46
  - !ruby/object:Gem::Version
47
- version: 0.1.37
47
+ version: 0.1.38
48
48
  type: :runtime
49
49
  prerelease: false
50
50
  version_requirements: !ruby/object:Gem::Requirement
51
51
  requirements:
52
52
  - - ">="
53
53
  - !ruby/object:Gem::Version
54
- version: 0.1.37
54
+ version: 0.1.38
55
+ - !ruby/object:Gem::Dependency
56
+ name: active_record_survey-node_map_group
57
+ requirement: !ruby/object:Gem::Requirement
58
+ requirements:
59
+ - - ">="
60
+ - !ruby/object:Gem::Version
61
+ version: 0.0.4
62
+ type: :runtime
63
+ prerelease: false
64
+ version_requirements: !ruby/object:Gem::Requirement
65
+ requirements:
66
+ - - ">="
67
+ - !ruby/object:Gem::Version
68
+ version: 0.0.4
55
69
  - !ruby/object:Gem::Dependency
56
70
  name: globalize
57
71
  requirement: !ruby/object:Gem::Requirement
@@ -192,16 +206,20 @@ files:
192
206
  - app/controllers/active_record_survey_api/application_controller.rb
193
207
  - app/controllers/active_record_survey_api/instance_nodes_controller.rb
194
208
  - app/controllers/active_record_survey_api/instances_controller.rb
209
+ - app/controllers/active_record_survey_api/node_map_groups_controller.rb
195
210
  - app/controllers/active_record_survey_api/questions_controller.rb
196
211
  - app/controllers/active_record_survey_api/surveys_controller.rb
197
212
  - app/helpers/active_record_survey_api/application_helper.rb
198
213
  - app/helpers/active_record_survey_api/surveys_helper.rb
199
214
  - config/routes.rb
200
215
  - db/migrate/20151002131904_add_globalize.rb
216
+ - db/migrate/20160408032133_add_active_record_survey_node_map_group.rb
217
+ - db/migrate/20160408032206_add_active_record_survey_node_map_group_globalize.rb
201
218
  - lib/active_record_survey_api.rb
202
219
  - lib/active_record_survey_api/concerns/controllers/answers.rb
203
220
  - lib/active_record_survey_api/concerns/controllers/instance_nodes.rb
204
221
  - lib/active_record_survey_api/concerns/controllers/instances.rb
222
+ - lib/active_record_survey_api/concerns/controllers/node_map_groups.rb
205
223
  - lib/active_record_survey_api/concerns/controllers/node_maps.rb
206
224
  - lib/active_record_survey_api/concerns/controllers/nodes.rb
207
225
  - lib/active_record_survey_api/concerns/controllers/questions.rb
@@ -212,10 +230,12 @@ files:
212
230
  - lib/active_record_survey_api/models/node/answer.rb
213
231
  - lib/active_record_survey_api/models/node/question.rb
214
232
  - lib/active_record_survey_api/models/node_map.rb
233
+ - lib/active_record_survey_api/models/node_map_group.rb
215
234
  - lib/active_record_survey_api/serializers/answer_serializer.rb
216
235
  - lib/active_record_survey_api/serializers/base_serializer.rb
217
236
  - lib/active_record_survey_api/serializers/instance_node_serializer.rb
218
237
  - lib/active_record_survey_api/serializers/instance_serializer.rb
238
+ - lib/active_record_survey_api/serializers/node_map_group_serializer.rb
219
239
  - lib/active_record_survey_api/serializers/node_map_serializer.rb
220
240
  - lib/active_record_survey_api/serializers/node_serializer.rb
221
241
  - lib/active_record_survey_api/serializers/question_serializer.rb
@@ -225,6 +245,7 @@ files:
225
245
  - spec/active_record_survey_api_spec.rb
226
246
  - spec/controllers/active_record_survey_api/surveys/instances/instance_nodes_spec.rb
227
247
  - spec/controllers/active_record_survey_api/surveys/instances_spec.rb
248
+ - spec/controllers/active_record_survey_api/surveys/node_map_groups_spec.rb
228
249
  - spec/controllers/active_record_survey_api/surveys/questions/answers_spec.rb
229
250
  - spec/controllers/active_record_survey_api/surveys/questions_spec.rb
230
251
  - spec/controllers/active_record_survey_api/surveys_spec.rb
@@ -4861,6 +4882,7 @@ test_files:
4861
4882
  - spec/controllers/active_record_survey_api/surveys/instances_spec.rb
4862
4883
  - spec/controllers/active_record_survey_api/surveys/instances/instance_nodes_spec.rb
4863
4884
  - spec/controllers/active_record_survey_api/surveys/questions/answers_spec.rb
4885
+ - spec/controllers/active_record_survey_api/surveys/node_map_groups_spec.rb
4864
4886
  - spec/controllers/active_record_survey_api/surveys/questions_spec.rb
4865
4887
  - spec/spec_helper.rb
4866
4888
  - spec/factories/active_record_survey/node/answer.rb