survey 0.1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (34) hide show
  1. checksums.yaml +7 -0
  2. data/Gemfile +9 -0
  3. data/MIT-LICENSE +20 -0
  4. data/README.md +194 -0
  5. data/Rakefile +30 -0
  6. data/app/models/survey/answer.rb +34 -0
  7. data/app/models/survey/attempt.rb +60 -0
  8. data/app/models/survey/option.rb +34 -0
  9. data/app/models/survey/question.rb +24 -0
  10. data/app/models/survey/survey.rb +49 -0
  11. data/config/locales/en.yml +36 -0
  12. data/config/locales/pt-PT.yml +48 -0
  13. data/config/locales/pt.yml +48 -0
  14. data/lib/generators/survey/install_generator.rb +20 -0
  15. data/lib/generators/survey/survey_generator.rb +102 -0
  16. data/lib/generators/templates/active_admin.rb +46 -0
  17. data/lib/generators/templates/attempts_plain.rb +69 -0
  18. data/lib/generators/templates/attempts_views/_form.html.erb +18 -0
  19. data/lib/generators/templates/attempts_views/new.html.erb +11 -0
  20. data/lib/generators/templates/helper.rb +44 -0
  21. data/lib/generators/templates/migration.rb +56 -0
  22. data/lib/generators/templates/rails_admin.rb +3 -0
  23. data/lib/generators/templates/survey_plain.rb +54 -0
  24. data/lib/generators/templates/survey_views/_form.html.erb +61 -0
  25. data/lib/generators/templates/survey_views/_option_fields.html.erb +9 -0
  26. data/lib/generators/templates/survey_views/_question_fields.html.erb +15 -0
  27. data/lib/generators/templates/survey_views/edit.html.erb +2 -0
  28. data/lib/generators/templates/survey_views/index.html.erb +16 -0
  29. data/lib/generators/templates/survey_views/new.html.erb +2 -0
  30. data/lib/survey.rb +15 -0
  31. data/lib/survey/active_record.rb +28 -0
  32. data/lib/survey/engine.rb +6 -0
  33. data/lib/survey/version.rb +3 -0
  34. metadata +156 -0
@@ -0,0 +1,56 @@
1
+ class CreateSurvey < ActiveRecord::Migration
2
+ def self.up
3
+
4
+ # survey surveys logic
5
+ create_table :survey_surveys do |t|
6
+ t.string :name
7
+ t.text :description
8
+ t.integer :attempts_number, :default => 0
9
+ t.boolean :finished, :default => false
10
+ t.boolean :active, :default => false
11
+
12
+ t.timestamps
13
+ end
14
+
15
+ create_table :survey_questions do |t|
16
+ t.integer :survey_id
17
+ t.string :text
18
+
19
+ t.timestamps
20
+ end
21
+
22
+ create_table :survey_options do |t|
23
+ t.integer :question_id
24
+ t.integer :weight, :default => 0
25
+ t.string :text
26
+ t.boolean :correct
27
+
28
+ t.timestamps
29
+ end
30
+
31
+ # survey answer logic
32
+ create_table :survey_attempts do |t|
33
+ t.belongs_to :participant, :polymorphic => true
34
+ t.integer :survey_id
35
+ t.boolean :winner
36
+ t.integer :score
37
+ end
38
+
39
+ create_table :survey_answers do |t|
40
+ t.integer :attempt_id
41
+ t.integer :question_id
42
+ t.integer :option_id
43
+ t.boolean :correct
44
+ t.timestamps
45
+ end
46
+ end
47
+
48
+ def self.down
49
+ drop_table :survey_surveys
50
+ drop_table :survey_questions
51
+ drop_table :survey_options
52
+
53
+ drop_table :survey_attempts
54
+ drop_table :survey_answers
55
+ end
56
+ end
@@ -0,0 +1,3 @@
1
+ RailsAdmin.config do |c|
2
+ c.excluded_models = [ Survey::Answer ]
3
+ end
@@ -0,0 +1,54 @@
1
+ class <%= scope_module %>SurveysController < ApplicationController
2
+
3
+ before_filter :load_survey, :only => [:show, :edit, :update]
4
+
5
+ def index
6
+ @surveys = Survey::Survey.all
7
+ end
8
+
9
+ def new
10
+ @survey = Survey::Survey.new
11
+ end
12
+
13
+ def create
14
+ @survey = Survey::Survey.new(survey_params)
15
+ if @survey.valid? && @survey.save
16
+ default_redirect
17
+ else
18
+ render :action => :new
19
+ end
20
+ end
21
+
22
+ def edit
23
+ end
24
+
25
+ def show
26
+ end
27
+
28
+ def update
29
+ if @survey.update_attributes(survey_params)
30
+ default_redirect
31
+ else
32
+ render :action => :edit
33
+ end
34
+ end
35
+
36
+ private
37
+
38
+ def default_redirect
39
+ redirect_to <%= scope_namespace %>surveys_path, alert: I18n.t("surveys_controller.#{action_name}")
40
+ end
41
+
42
+ def load_survey
43
+ @survey = Survey::Survey.find(params[:id])
44
+ end
45
+
46
+ def survey_params
47
+ rails4? ? params_whitelist : params[:survey_survey]
48
+ end
49
+
50
+ def params_whitelist
51
+ params.require(:survey_survey).permit(Survey::Survey::AccessibleAttributes)
52
+ end
53
+
54
+ end
@@ -0,0 +1,61 @@
1
+ <%= form_for(@survey, :url => survey_scope(@survey)) do |f| %>
2
+
3
+ <% if f.object.errors.messages.any? %>
4
+ <ul>
5
+ <% f.object.errors.messages.each_pair do |field, msg| %>
6
+ <li>
7
+ <%= "#{field} - #{msg}" %>
8
+ </li>
9
+ <% end -%>
10
+ </ul>
11
+ <% end -%>
12
+
13
+ <div class="field">
14
+ <%= f.label :name %> <br />
15
+ <%= f.text_field :name %> <br />
16
+ <%= f.label :attempts_number %> <br />
17
+ <%= f.text_field :attempts_number %> <br />
18
+ <%= f.label :active %> <br />
19
+ <%= f.select :active, ["true", "false"] %>
20
+ </div>
21
+
22
+ <div class="field">
23
+ <%= f.label :description %> <br />
24
+ <%= f.text_area :description, :size => "100x5" %> <br />
25
+ </div>
26
+
27
+ <br/ >
28
+
29
+ <div class="field">
30
+ <ul>
31
+ <%= f.fields_for :questions do |builder| %>
32
+ <%= render "question_fields", :f => builder %>
33
+ <% end %>
34
+ </ul>
35
+ <br/ >
36
+ <%= link_to_add_field "Add a new Question", f, :questions %>
37
+ </div>
38
+
39
+ <br/ >
40
+
41
+ <div class="field">
42
+ <%= f.submit %>
43
+ </div>
44
+ <% end -%>
45
+
46
+ <script type="text/javascript">
47
+ // remove attachment field
48
+ function removeField(link) {
49
+ $(link).prev("input[type=hidden]").val("true");
50
+ tag = $(link).closest("li")
51
+ tag.hide("fade in").addClass("deleted");
52
+ }
53
+
54
+ // add attachment field
55
+ function addField(link, association, content) {
56
+ var new_id = new Date().getTime();
57
+ var regexp = new RegExp("new_" + association, "g");
58
+ var html = $(content.replace(regexp, new_id)).hide();
59
+ html.appendTo($(link).closest("div.field").find("ul").first()).slideDown("slow");
60
+ }
61
+ </script>
@@ -0,0 +1,9 @@
1
+ <li>
2
+ <div class="field">
3
+ <%= f.label :text %> <br/ >
4
+ <%= f.text_field :text %>
5
+ <%= f.check_box :correct %>
6
+ <%= f.label :correct %>
7
+ <%= link_to_remove_field "Remove", f %>
8
+ </div>
9
+ </li>
@@ -0,0 +1,15 @@
1
+ <li>
2
+ <legend>Question</legend>
3
+ <div class="field">
4
+ <%= f.label :text %> <br />
5
+ <%= f.text_field :text %>
6
+ <ul class="options">
7
+ <%= f.fields_for :options do |builder| %>
8
+ <%= render "option_fields", :f => builder %>
9
+ <% end -%>
10
+ </ul>
11
+ <%= link_to_add_field "Add a new Option", f, :options %>
12
+ <br/ >
13
+ <%= link_to_remove_field "Remove Question", f %>
14
+ </div>
15
+ </li>
@@ -0,0 +1,2 @@
1
+ <h2>Edit Survey</h2>
2
+ <%= render 'form' %>
@@ -0,0 +1,16 @@
1
+ <div class="questionnaires_<%= action_name %>">
2
+ <h1>
3
+ Surveys Index
4
+ </h1>
5
+ <hr>
6
+ <%= link_to "New Survey", new_survey %>
7
+
8
+ <ul>
9
+ <% @surveys.each do |survey| %>
10
+ <li>
11
+ <%= link_to survey.name, edit_survey(survey) %>
12
+ </li>
13
+ <% end -%>
14
+ </ul>
15
+
16
+ </div>
@@ -0,0 +1,2 @@
1
+ <h2>New Survey</h2>
2
+ <%= render 'form' %>
@@ -0,0 +1,15 @@
1
+ module ::Kernel
2
+ def rails4?
3
+ return defined?(Rails) && Rails::VERSION::MAJOR == 4
4
+ end
5
+
6
+ def in_rails_3(&block)
7
+ yield if block_given? unless rails4?
8
+ end
9
+ end
10
+
11
+ require 'survey/engine'
12
+ require 'survey/version'
13
+ require 'survey/active_record'
14
+
15
+ ActiveRecord::Base.send(:include, Survey::ActiveRecord)
@@ -0,0 +1,28 @@
1
+ module Survey
2
+ module ActiveRecord
3
+ extend ActiveSupport::Concern
4
+
5
+ module ClassMethods
6
+ def has_surveys
7
+ has_many :survey_tentatives, as: :participant, :class_name => ::Survey::Attempt
8
+
9
+ define_method("for_survey") do |survey|
10
+ self.survey_tentatives.where(:survey_id => survey.id)
11
+ end
12
+ end
13
+
14
+
15
+ def acceptable_attributes(*args)
16
+
17
+ self.const_set('AccessibleAttributes', args + [:id, :_destroy])
18
+
19
+ in_rails_3 do
20
+ if defined?(self.respond_to?(:attr_accessible))
21
+ attr_accessible(*self.const_get('AccessibleAttributes').map { |k| k.is_a?(Hash) ? k.keys.first : k })
22
+ end
23
+ end
24
+
25
+ end
26
+ end
27
+ end
28
+ end
@@ -0,0 +1,6 @@
1
+ require 'rails'
2
+
3
+ module Survey
4
+ class Engine < Rails::Engine
5
+ end
6
+ end
@@ -0,0 +1,3 @@
1
+ module Survey
2
+ VERSION = "0.1"
3
+ end
metadata ADDED
@@ -0,0 +1,156 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: survey
3
+ version: !ruby/object:Gem::Version
4
+ version: '0.1'
5
+ platform: ruby
6
+ authors:
7
+ - Runtime Revolution
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2014-03-15 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: rails
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - ">="
18
+ - !ruby/object:Gem::Version
19
+ version: 3.2.6
20
+ - - "<"
21
+ - !ruby/object:Gem::Version
22
+ version: '5'
23
+ type: :runtime
24
+ prerelease: false
25
+ version_requirements: !ruby/object:Gem::Requirement
26
+ requirements:
27
+ - - ">="
28
+ - !ruby/object:Gem::Version
29
+ version: 3.2.6
30
+ - - "<"
31
+ - !ruby/object:Gem::Version
32
+ version: '5'
33
+ - !ruby/object:Gem::Dependency
34
+ name: railties
35
+ requirement: !ruby/object:Gem::Requirement
36
+ requirements:
37
+ - - ">="
38
+ - !ruby/object:Gem::Version
39
+ version: 3.2.6
40
+ - - "<"
41
+ - !ruby/object:Gem::Version
42
+ version: '5'
43
+ type: :runtime
44
+ prerelease: false
45
+ version_requirements: !ruby/object:Gem::Requirement
46
+ requirements:
47
+ - - ">="
48
+ - !ruby/object:Gem::Version
49
+ version: 3.2.6
50
+ - - "<"
51
+ - !ruby/object:Gem::Version
52
+ version: '5'
53
+ - !ruby/object:Gem::Dependency
54
+ name: mocha
55
+ requirement: !ruby/object:Gem::Requirement
56
+ requirements:
57
+ - - ">="
58
+ - !ruby/object:Gem::Version
59
+ version: '0'
60
+ type: :development
61
+ prerelease: false
62
+ version_requirements: !ruby/object:Gem::Requirement
63
+ requirements:
64
+ - - ">="
65
+ - !ruby/object:Gem::Version
66
+ version: '0'
67
+ - !ruby/object:Gem::Dependency
68
+ name: faker
69
+ requirement: !ruby/object:Gem::Requirement
70
+ requirements:
71
+ - - ">="
72
+ - !ruby/object:Gem::Version
73
+ version: '0'
74
+ type: :development
75
+ prerelease: false
76
+ version_requirements: !ruby/object:Gem::Requirement
77
+ requirements:
78
+ - - ">="
79
+ - !ruby/object:Gem::Version
80
+ version: '0'
81
+ - !ruby/object:Gem::Dependency
82
+ name: rake
83
+ requirement: !ruby/object:Gem::Requirement
84
+ requirements:
85
+ - - ">="
86
+ - !ruby/object:Gem::Version
87
+ version: '0'
88
+ type: :development
89
+ prerelease: false
90
+ version_requirements: !ruby/object:Gem::Requirement
91
+ requirements:
92
+ - - ">="
93
+ - !ruby/object:Gem::Version
94
+ version: '0'
95
+ description: A rails gem to enable surveys in your application as easy as possible
96
+ email:
97
+ executables: []
98
+ extensions: []
99
+ extra_rdoc_files: []
100
+ files:
101
+ - Gemfile
102
+ - MIT-LICENSE
103
+ - README.md
104
+ - Rakefile
105
+ - app/models/survey/answer.rb
106
+ - app/models/survey/attempt.rb
107
+ - app/models/survey/option.rb
108
+ - app/models/survey/question.rb
109
+ - app/models/survey/survey.rb
110
+ - config/locales/en.yml
111
+ - config/locales/pt-PT.yml
112
+ - config/locales/pt.yml
113
+ - lib/generators/survey/install_generator.rb
114
+ - lib/generators/survey/survey_generator.rb
115
+ - lib/generators/templates/active_admin.rb
116
+ - lib/generators/templates/attempts_plain.rb
117
+ - lib/generators/templates/attempts_views/_form.html.erb
118
+ - lib/generators/templates/attempts_views/new.html.erb
119
+ - lib/generators/templates/helper.rb
120
+ - lib/generators/templates/migration.rb
121
+ - lib/generators/templates/rails_admin.rb
122
+ - lib/generators/templates/survey_plain.rb
123
+ - lib/generators/templates/survey_views/_form.html.erb
124
+ - lib/generators/templates/survey_views/_option_fields.html.erb
125
+ - lib/generators/templates/survey_views/_question_fields.html.erb
126
+ - lib/generators/templates/survey_views/edit.html.erb
127
+ - lib/generators/templates/survey_views/index.html.erb
128
+ - lib/generators/templates/survey_views/new.html.erb
129
+ - lib/survey.rb
130
+ - lib/survey/active_record.rb
131
+ - lib/survey/engine.rb
132
+ - lib/survey/version.rb
133
+ homepage:
134
+ licenses: []
135
+ metadata: {}
136
+ post_install_message:
137
+ rdoc_options: []
138
+ require_paths:
139
+ - lib
140
+ required_ruby_version: !ruby/object:Gem::Requirement
141
+ requirements:
142
+ - - ">="
143
+ - !ruby/object:Gem::Version
144
+ version: '0'
145
+ required_rubygems_version: !ruby/object:Gem::Requirement
146
+ requirements:
147
+ - - ">="
148
+ - !ruby/object:Gem::Version
149
+ version: '0'
150
+ requirements: []
151
+ rubyforge_project:
152
+ rubygems_version: 2.2.2
153
+ signing_key:
154
+ specification_version: 4
155
+ summary: Survey is a user oriented tool that brings surveys into Rails applications.
156
+ test_files: []