ask 0.5.2 → 0.5.3
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.
- checksums.yaml +7 -0
- data/README.markdown +5 -0
- data/app/assets/javascripts/ask.js.coffee +9 -8
- data/app/models/answer.rb +4 -4
- data/app/models/choice.rb +3 -3
- data/app/models/question.rb +15 -6
- data/lib/ask.rb +1 -0
- data/lib/ask/acts_as_answerer.rb +19 -21
- data/lib/ask/acts_as_asker.rb +4 -2
- data/lib/ask/version.rb +1 -1
- metadata +27 -42
checksums.yaml
ADDED
@@ -0,0 +1,7 @@
|
|
1
|
+
---
|
2
|
+
SHA1:
|
3
|
+
metadata.gz: 797809ae29c20763f48c7a2fe68456a2e81d1ee9
|
4
|
+
data.tar.gz: f7e3a5a044a443e390aafa15246a863f97f446a5
|
5
|
+
SHA512:
|
6
|
+
metadata.gz: 8699ccb0e982ef3b10ec98ce1ca4ec7d2adc6c557b6c35de3fd94ee2d2c4109b85292cf0cd1afef76f1179b150a2aae5850a130786fee2867d766be75224922a
|
7
|
+
data.tar.gz: 350a1bfd84e5b05e97a86714d44c880b3e7151261dda7de492fb901d0638490cd05065423d69f96658ce8dd896bc82276c4dca9091a14ac94ea02cbc8953618d
|
data/README.markdown
CHANGED
@@ -90,6 +90,11 @@ If you want to changed the default whitelisted file types for upload questions,
|
|
90
90
|
end
|
91
91
|
|
92
92
|
|
93
|
+
Build Status
|
94
|
+
------------
|
95
|
+
[](https://travis-ci.org/biola/ask)
|
96
|
+
|
97
|
+
|
93
98
|
License
|
94
99
|
-------
|
95
100
|
MIT License
|
@@ -1,6 +1,6 @@
|
|
1
1
|
jQuery ->
|
2
|
-
###
|
3
|
-
Handle adding and removing fields
|
2
|
+
###
|
3
|
+
Handle adding and removing fields
|
4
4
|
###
|
5
5
|
$('form').on 'click', '.remove_fields', (event) ->
|
6
6
|
$(this).prev('input[type=hidden]').val('1')
|
@@ -16,7 +16,7 @@ jQuery ->
|
|
16
16
|
toggleEditMode new_question
|
17
17
|
event.preventDefault()
|
18
18
|
|
19
|
-
###
|
19
|
+
###
|
20
20
|
Update the edit preview mode between textQuestion, ChecklistQuestion, etc.
|
21
21
|
###
|
22
22
|
updateChoiceVisibility = (select) ->
|
@@ -32,11 +32,12 @@ jQuery ->
|
|
32
32
|
current_question_type.removeClass('show-radio').addClass('show-checkbox')
|
33
33
|
else if select.val() == 'FormSection'
|
34
34
|
question.find('.required-option').hide()
|
35
|
-
|
35
|
+
question.find('.required-option input[type=checkbox]').prop('checked', false)
|
36
|
+
|
36
37
|
# Update preview type whenever the user changes the type of this question
|
37
38
|
$('form').on "change", ".select-question-type select", ->
|
38
39
|
updateChoiceVisibility $(this)
|
39
|
-
|
40
|
+
|
40
41
|
bindTypeChange = (select) ->
|
41
42
|
|
42
43
|
# Update once when the DOM first loads
|
@@ -46,8 +47,8 @@ jQuery ->
|
|
46
47
|
updateChoiceVisibility $(this)
|
47
48
|
|
48
49
|
|
49
|
-
###
|
50
|
-
Make the list sortable
|
50
|
+
###
|
51
|
+
Make the list sortable
|
51
52
|
###
|
52
53
|
makeSortable = ->
|
53
54
|
questions = $("form .ask.questions")
|
@@ -158,4 +159,4 @@ jQuery.fn.serializeObject = (ignore_regex = null) ->
|
|
158
159
|
# recursive function that builds a nested object based on the name
|
159
160
|
pushData(objectData, hash_array, value)
|
160
161
|
|
161
|
-
return objectData
|
162
|
+
return objectData
|
data/app/models/answer.rb
CHANGED
@@ -1,7 +1,8 @@
|
|
1
1
|
class Answer < ActiveRecord::Base
|
2
|
+
if respond_to? :attr_accessible # Rails 3.2 backwards compatibility
|
3
|
+
attr_accessible :question_id, :answer, :choice_id, :uploaded_file, :uploaded_file_cache
|
4
|
+
end
|
2
5
|
|
3
|
-
attr_accessible :question_id, :answer, :choice_id, :uploaded_file, :uploaded_file_cache
|
4
|
-
|
5
6
|
belongs_to :answerer, :polymorphic => true
|
6
7
|
belongs_to :question
|
7
8
|
belongs_to :choice
|
@@ -10,7 +11,7 @@ class Answer < ActiveRecord::Base
|
|
10
11
|
|
11
12
|
mount_uploader :uploaded_file, UploadedFileUploader
|
12
13
|
|
13
|
-
default_scope joins(:question).order('questions.position').readonly(false) # This scope prevents updating answers unless readonly is set to false.
|
14
|
+
default_scope lambda { joins(:question).order('questions.position').readonly(false) } # This scope prevents updating answers unless readonly is set to false.
|
14
15
|
scope :for_answerer, lambda{|answerer| where(:answerer_type => answerer.class.to_s, :answerer_id => answerer.id)}
|
15
16
|
scope :for_question, lambda{|question| where(:question_id => question.id)}
|
16
17
|
|
@@ -33,5 +34,4 @@ class Answer < ActiveRecord::Base
|
|
33
34
|
end
|
34
35
|
end
|
35
36
|
end
|
36
|
-
|
37
37
|
end
|
data/app/models/choice.rb
CHANGED
data/app/models/question.rb
CHANGED
@@ -1,23 +1,25 @@
|
|
1
1
|
class Question < ActiveRecord::Base
|
2
|
-
|
3
2
|
require 'acts_as_list'
|
4
3
|
|
5
|
-
TYPES = ['TextQuestion', 'EssayQuestion', 'ChooseOneQuestion', 'ChecklistQuestion', 'UploadQuestion', 'FormSection']
|
6
|
-
|
4
|
+
TYPES = ['TextQuestion', 'EssayQuestion', 'ChooseOneQuestion', 'ChecklistQuestion', 'UploadQuestion', 'FormSection']
|
5
|
+
|
7
6
|
belongs_to :asker, :polymorphic => true
|
8
7
|
has_many :choices, :dependent => :destroy
|
9
8
|
has_many :answers, :dependent => :destroy
|
10
9
|
|
11
10
|
acts_as_list :scope=>:asker
|
12
11
|
|
13
|
-
|
12
|
+
if respond_to? :attr_accessible # Rails 3.2 backwards compatibility
|
13
|
+
attr_accessible :type, :name, :instructions, :required, :choices_attributes, :position
|
14
|
+
end
|
14
15
|
accepts_nested_attributes_for :choices, :allow_destroy=>true, :reject_if=>lambda{|attrs| attrs['name'].blank? }
|
15
16
|
|
16
17
|
validates_presence_of :type, :name
|
17
18
|
validates_inclusion_of :type, :in=>TYPES
|
19
|
+
validate :form_section_not_required
|
18
20
|
|
19
|
-
default_scope
|
20
|
-
scope :required, where(:required => true)
|
21
|
+
default_scope lambda { order(:position) }
|
22
|
+
scope :required, -> { where(:required => true) }
|
21
23
|
|
22
24
|
def attributes_protected_by_default
|
23
25
|
default = [ self.class.primary_key ]
|
@@ -47,4 +49,11 @@ class Question < ActiveRecord::Base
|
|
47
49
|
false
|
48
50
|
end
|
49
51
|
|
52
|
+
private
|
53
|
+
|
54
|
+
def form_section_not_required
|
55
|
+
if type == 'FormSection' && required?
|
56
|
+
errors.add :required, 'cannot be true for form sections'
|
57
|
+
end
|
58
|
+
end
|
50
59
|
end
|
data/lib/ask.rb
CHANGED
data/lib/ask/acts_as_answerer.rb
CHANGED
@@ -1,6 +1,5 @@
|
|
1
1
|
module Ask
|
2
2
|
module ActiveRecord
|
3
|
-
|
4
3
|
module InstanceMethods
|
5
4
|
def all_questions
|
6
5
|
if respond_to? :asker
|
@@ -9,7 +8,7 @@ module Ask
|
|
9
8
|
raise NoMethodError, "You must define a #{self}#asker method that returns the related acts_as_asker model"
|
10
9
|
end
|
11
10
|
end
|
12
|
-
|
11
|
+
|
13
12
|
def find_question(question)
|
14
13
|
if question.is_a? Question
|
15
14
|
question
|
@@ -23,19 +22,19 @@ module Ask
|
|
23
22
|
def questions_by_section
|
24
23
|
section = nil
|
25
24
|
questions = {}
|
26
|
-
|
25
|
+
|
27
26
|
asker.questions.order(:position).each do |question|
|
28
27
|
if question.is_a? FormSection
|
29
28
|
section = question
|
30
29
|
end
|
31
|
-
|
30
|
+
|
32
31
|
questions[section] ||= []
|
33
|
-
|
32
|
+
|
34
33
|
unless question.is_a? FormSection
|
35
34
|
questions[section] << question
|
36
35
|
end
|
37
36
|
end
|
38
|
-
|
37
|
+
|
39
38
|
questions
|
40
39
|
end
|
41
40
|
|
@@ -52,13 +51,12 @@ module Ask
|
|
52
51
|
return nil if question.nil?
|
53
52
|
answers.for_question(question)
|
54
53
|
end
|
55
|
-
|
54
|
+
|
56
55
|
def build_or_create_answers(questions)
|
57
56
|
method = new_record? ? :build : :create
|
58
|
-
|
57
|
+
|
59
58
|
questions.each do |question|
|
60
59
|
if answers_to(question).empty?
|
61
|
-
|
62
60
|
if question.supports_multiple_answers?
|
63
61
|
question.choices.each do |choice|
|
64
62
|
answers.send(method, :question_id=>question.id, :answer=>'', :choice_id=>choice.id)
|
@@ -66,28 +64,27 @@ module Ask
|
|
66
64
|
else
|
67
65
|
answers.send(method, :question_id=>question.id)
|
68
66
|
end
|
69
|
-
|
70
67
|
end
|
71
68
|
end
|
72
69
|
end
|
73
|
-
|
70
|
+
|
74
71
|
def questions_with_answers
|
75
72
|
qa = ActiveSupport::OrderedHash.new
|
76
|
-
|
73
|
+
|
77
74
|
# Set the correct order and make sure we have all the questions
|
78
75
|
all_questions.each do |q|
|
79
76
|
qa[q.id] = []
|
80
77
|
end
|
81
|
-
|
78
|
+
|
82
79
|
answers.each do |a|
|
83
80
|
qa[a.question.id] << a.answer.to_s.strip unless a.answer.blank?
|
84
81
|
end
|
85
|
-
|
82
|
+
|
86
83
|
qa
|
87
84
|
end
|
88
|
-
|
85
|
+
|
89
86
|
private
|
90
|
-
|
87
|
+
|
91
88
|
def validate_required_questions
|
92
89
|
return if asker.blank?
|
93
90
|
asker.questions.required.each do |question|
|
@@ -97,20 +94,21 @@ module Ask
|
|
97
94
|
end
|
98
95
|
end
|
99
96
|
end
|
100
|
-
|
101
97
|
end
|
102
98
|
end
|
103
99
|
|
104
100
|
class ActiveRecord::Base
|
105
101
|
def self.acts_as_answerer
|
106
102
|
include Ask::ActiveRecord::InstanceMethods
|
107
|
-
|
103
|
+
|
108
104
|
has_many :answers, :as => :answerer, :dependent=>:destroy
|
109
105
|
has_many :questions, :through=>:answers
|
110
|
-
|
111
|
-
attr_accessible
|
106
|
+
|
107
|
+
if respond_to? :attr_accessible # Rails 3.2 backwards compatibility
|
108
|
+
attr_accessible :answers_attributes
|
109
|
+
end
|
112
110
|
accepts_nested_attributes_for :answers, :allow_destroy=>true
|
113
|
-
|
111
|
+
|
114
112
|
validate :validate_required_questions
|
115
113
|
end
|
116
114
|
end
|
data/lib/ask/acts_as_asker.rb
CHANGED
@@ -1,8 +1,10 @@
|
|
1
1
|
class ActiveRecord::Base
|
2
2
|
def self.acts_as_asker
|
3
3
|
has_many :questions, :as => :asker, :dependent => :destroy
|
4
|
-
|
5
|
-
attr_accessible
|
4
|
+
|
5
|
+
if respond_to? :attr_accessible # Rails 3.2 backwards compatibility
|
6
|
+
attr_accessible :questions_attributes
|
7
|
+
end
|
6
8
|
accepts_nested_attributes_for :questions, :allow_destroy=>true, :reject_if=>lambda{|attrs| attrs['name'].blank? }
|
7
9
|
end
|
8
10
|
end
|
data/lib/ask/version.rb
CHANGED
metadata
CHANGED
@@ -1,126 +1,111 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: ask
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.5.
|
5
|
-
prerelease:
|
4
|
+
version: 0.5.3
|
6
5
|
platform: ruby
|
7
6
|
authors:
|
8
7
|
- Adam Crownoble
|
9
8
|
autorequire:
|
10
9
|
bindir: bin
|
11
10
|
cert_chain: []
|
12
|
-
date:
|
11
|
+
date: 2015-02-17 00:00:00.000000000 Z
|
13
12
|
dependencies:
|
14
13
|
- !ruby/object:Gem::Dependency
|
15
14
|
name: rails
|
16
15
|
requirement: !ruby/object:Gem::Requirement
|
17
|
-
none: false
|
18
16
|
requirements:
|
19
|
-
- -
|
17
|
+
- - ">="
|
20
18
|
- !ruby/object:Gem::Version
|
21
19
|
version: 3.1.0
|
22
20
|
type: :runtime
|
23
21
|
prerelease: false
|
24
22
|
version_requirements: !ruby/object:Gem::Requirement
|
25
|
-
none: false
|
26
23
|
requirements:
|
27
|
-
- -
|
24
|
+
- - ">="
|
28
25
|
- !ruby/object:Gem::Version
|
29
26
|
version: 3.1.0
|
30
27
|
- !ruby/object:Gem::Dependency
|
31
28
|
name: acts_as_list
|
32
29
|
requirement: !ruby/object:Gem::Requirement
|
33
|
-
none: false
|
34
30
|
requirements:
|
35
|
-
- -
|
31
|
+
- - ">="
|
36
32
|
- !ruby/object:Gem::Version
|
37
33
|
version: 0.1.2
|
38
34
|
type: :runtime
|
39
35
|
prerelease: false
|
40
36
|
version_requirements: !ruby/object:Gem::Requirement
|
41
|
-
none: false
|
42
37
|
requirements:
|
43
|
-
- -
|
38
|
+
- - ">="
|
44
39
|
- !ruby/object:Gem::Version
|
45
40
|
version: 0.1.2
|
46
41
|
- !ruby/object:Gem::Dependency
|
47
42
|
name: rails_autolink
|
48
43
|
requirement: !ruby/object:Gem::Requirement
|
49
|
-
none: false
|
50
44
|
requirements:
|
51
|
-
- -
|
45
|
+
- - ">="
|
52
46
|
- !ruby/object:Gem::Version
|
53
47
|
version: 1.0.2
|
54
48
|
type: :runtime
|
55
49
|
prerelease: false
|
56
50
|
version_requirements: !ruby/object:Gem::Requirement
|
57
|
-
none: false
|
58
51
|
requirements:
|
59
|
-
- -
|
52
|
+
- - ">="
|
60
53
|
- !ruby/object:Gem::Version
|
61
54
|
version: 1.0.2
|
62
55
|
- !ruby/object:Gem::Dependency
|
63
56
|
name: jquery-rails
|
64
57
|
requirement: !ruby/object:Gem::Requirement
|
65
|
-
none: false
|
66
58
|
requirements:
|
67
|
-
- -
|
59
|
+
- - ">="
|
68
60
|
- !ruby/object:Gem::Version
|
69
61
|
version: '0'
|
70
62
|
type: :runtime
|
71
63
|
prerelease: false
|
72
64
|
version_requirements: !ruby/object:Gem::Requirement
|
73
|
-
none: false
|
74
65
|
requirements:
|
75
|
-
- -
|
66
|
+
- - ">="
|
76
67
|
- !ruby/object:Gem::Version
|
77
68
|
version: '0'
|
78
69
|
- !ruby/object:Gem::Dependency
|
79
70
|
name: carrierwave
|
80
71
|
requirement: !ruby/object:Gem::Requirement
|
81
|
-
none: false
|
82
72
|
requirements:
|
83
|
-
- -
|
73
|
+
- - ">="
|
84
74
|
- !ruby/object:Gem::Version
|
85
75
|
version: 0.8.0
|
86
76
|
type: :runtime
|
87
77
|
prerelease: false
|
88
78
|
version_requirements: !ruby/object:Gem::Requirement
|
89
|
-
none: false
|
90
79
|
requirements:
|
91
|
-
- -
|
80
|
+
- - ">="
|
92
81
|
- !ruby/object:Gem::Version
|
93
82
|
version: 0.8.0
|
94
83
|
- !ruby/object:Gem::Dependency
|
95
84
|
name: sqlite3
|
96
85
|
requirement: !ruby/object:Gem::Requirement
|
97
|
-
none: false
|
98
86
|
requirements:
|
99
|
-
- -
|
87
|
+
- - ">="
|
100
88
|
- !ruby/object:Gem::Version
|
101
89
|
version: '0'
|
102
90
|
type: :development
|
103
91
|
prerelease: false
|
104
92
|
version_requirements: !ruby/object:Gem::Requirement
|
105
|
-
none: false
|
106
93
|
requirements:
|
107
|
-
- -
|
94
|
+
- - ">="
|
108
95
|
- !ruby/object:Gem::Version
|
109
96
|
version: '0'
|
110
97
|
- !ruby/object:Gem::Dependency
|
111
98
|
name: rspec-rails
|
112
99
|
requirement: !ruby/object:Gem::Requirement
|
113
|
-
none: false
|
114
100
|
requirements:
|
115
|
-
- -
|
101
|
+
- - ">="
|
116
102
|
- !ruby/object:Gem::Version
|
117
103
|
version: '0'
|
118
104
|
type: :development
|
119
105
|
prerelease: false
|
120
106
|
version_requirements: !ruby/object:Gem::Requirement
|
121
|
-
none: false
|
122
107
|
requirements:
|
123
|
-
- -
|
108
|
+
- - ">="
|
124
109
|
- !ruby/object:Gem::Version
|
125
110
|
version: '0'
|
126
111
|
description: Allow your site's maintainers to easily create forms.
|
@@ -130,6 +115,9 @@ executables: []
|
|
130
115
|
extensions: []
|
131
116
|
extra_rdoc_files: []
|
132
117
|
files:
|
118
|
+
- MIT-LICENSE
|
119
|
+
- README.markdown
|
120
|
+
- Rakefile
|
133
121
|
- app/assets/images/add.png
|
134
122
|
- app/assets/images/delete.png
|
135
123
|
- app/assets/javascripts/ask.js.coffee
|
@@ -163,37 +151,34 @@ files:
|
|
163
151
|
- db/migrate/20110913214255_create_choices.rb
|
164
152
|
- db/migrate/20110913214410_create_questions.rb
|
165
153
|
- db/migrate/20130202010401_add_upload_field_to_answers.rb
|
154
|
+
- lib/ask.rb
|
166
155
|
- lib/ask/acts_as_answerer.rb
|
167
156
|
- lib/ask/acts_as_asker.rb
|
168
157
|
- lib/ask/configuration.rb
|
169
158
|
- lib/ask/engine.rb
|
170
159
|
- lib/ask/version.rb
|
171
|
-
- lib/ask.rb
|
172
|
-
- MIT-LICENSE
|
173
|
-
- Rakefile
|
174
|
-
- README.markdown
|
175
160
|
homepage: https://github.com/biola/ask
|
176
|
-
licenses:
|
161
|
+
licenses:
|
162
|
+
- MIT
|
163
|
+
metadata: {}
|
177
164
|
post_install_message:
|
178
165
|
rdoc_options: []
|
179
166
|
require_paths:
|
180
167
|
- lib
|
181
168
|
required_ruby_version: !ruby/object:Gem::Requirement
|
182
|
-
none: false
|
183
169
|
requirements:
|
184
|
-
- -
|
170
|
+
- - ">="
|
185
171
|
- !ruby/object:Gem::Version
|
186
172
|
version: '0'
|
187
173
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
188
|
-
none: false
|
189
174
|
requirements:
|
190
|
-
- -
|
175
|
+
- - ">="
|
191
176
|
- !ruby/object:Gem::Version
|
192
177
|
version: '0'
|
193
178
|
requirements: []
|
194
179
|
rubyforge_project:
|
195
|
-
rubygems_version:
|
180
|
+
rubygems_version: 2.2.2
|
196
181
|
signing_key:
|
197
|
-
specification_version:
|
182
|
+
specification_version: 4
|
198
183
|
summary: End-user form creation engine for Rails
|
199
184
|
test_files: []
|