survey 0.1

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 (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: []