helena 1.0.0.rc2 → 1.0.0.rc3
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 +4 -4
- data/.travis.yml +4 -0
- data/Gemfile +1 -1
- data/Gemfile.lock +97 -90
- data/README.md +2 -2
- data/app/models/helena/question_group.rb +2 -2
- data/app/models/helena/session.rb +6 -26
- data/app/models/helena/version.rb +3 -2
- data/app/views/helena/questions/_bipolar_radio_matrix.html.haml +48 -25
- data/app/views/helena/questions/_radio_matrix.html.haml +45 -21
- data/app/views/helena/questions/_static_text.html.slim +6 -1
- data/db/seeds.rb +1 -1
- data/helena.gemspec +6 -4
- data/lib/helena.rb +1 -1
- data/lib/helena/survey_importer.rb +3 -3
- data/lib/helena/version.rb +1 -1
- data/lib/helena/version_publisher.rb +7 -20
- data/spec/dummy/config/application.rb +1 -0
- data/spec/lib/version_publisher_spec.rb +13 -5
- data/spec/models/helena/session_spec.rb +3 -11
- data/spec/spec_helper.rb +1 -1
- metadata +40 -12
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA1:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: acadeb9841bf21c2de938861517824219cd1e517
|
|
4
|
+
data.tar.gz: d9a338d54c6551a53b85f6f496a4ce3d11475594
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: 74cb384bc70e07c17c593792da8ca7aa3c7a7b5ce7b4543a357a7e8be432cc7466412f54aeed35678495dc54fa6eec165dadc6d32abffa845d0551f9de0861ba
|
|
7
|
+
data.tar.gz: 96e6a034c109870e6bad4cbf0950ff8d38546df49395cd9e3d1424a6a22b32547d0acc3cec09caeca394ae511d7262429608d7c4784c9ca049413332df70d515
|
data/.travis.yml
CHANGED
data/Gemfile
CHANGED
data/Gemfile.lock
CHANGED
|
@@ -1,15 +1,17 @@
|
|
|
1
1
|
PATH
|
|
2
2
|
remote: .
|
|
3
3
|
specs:
|
|
4
|
-
helena (1.0.0.
|
|
4
|
+
helena (1.0.0.rc3)
|
|
5
5
|
bootstrap-sass (~> 3.2)
|
|
6
6
|
breadcrumbs_on_rails (~> 2.3)
|
|
7
|
-
|
|
8
|
-
|
|
7
|
+
browser (~> 0.8)
|
|
8
|
+
haml-rails (~> 0.9)
|
|
9
|
+
jquery-rails (~> 4.0)
|
|
9
10
|
mongoid (~> 4.0)
|
|
10
11
|
mongoid-simple-tags (~> 0.1)
|
|
12
|
+
mongoid-tree (~> 2.0)
|
|
11
13
|
mongoid_orderable (~> 4.1)
|
|
12
|
-
rails (~> 4.
|
|
14
|
+
rails (~> 4.2)
|
|
13
15
|
rails-i18n (~> 4.0)
|
|
14
16
|
responders (~> 2.0)
|
|
15
17
|
sass-rails (~> 5.0)
|
|
@@ -19,44 +21,44 @@ PATH
|
|
|
19
21
|
GEM
|
|
20
22
|
remote: https://rubygems.org/
|
|
21
23
|
specs:
|
|
22
|
-
actionmailer (4.2.
|
|
23
|
-
actionpack (= 4.2.
|
|
24
|
-
actionview (= 4.2.
|
|
25
|
-
activejob (= 4.2.
|
|
24
|
+
actionmailer (4.2.2)
|
|
25
|
+
actionpack (= 4.2.2)
|
|
26
|
+
actionview (= 4.2.2)
|
|
27
|
+
activejob (= 4.2.2)
|
|
26
28
|
mail (~> 2.5, >= 2.5.4)
|
|
27
29
|
rails-dom-testing (~> 1.0, >= 1.0.5)
|
|
28
|
-
actionpack (4.2.
|
|
29
|
-
actionview (= 4.2.
|
|
30
|
-
activesupport (= 4.2.
|
|
30
|
+
actionpack (4.2.2)
|
|
31
|
+
actionview (= 4.2.2)
|
|
32
|
+
activesupport (= 4.2.2)
|
|
31
33
|
rack (~> 1.6)
|
|
32
34
|
rack-test (~> 0.6.2)
|
|
33
35
|
rails-dom-testing (~> 1.0, >= 1.0.5)
|
|
34
36
|
rails-html-sanitizer (~> 1.0, >= 1.0.1)
|
|
35
|
-
actionview (4.2.
|
|
36
|
-
activesupport (= 4.2.
|
|
37
|
+
actionview (4.2.2)
|
|
38
|
+
activesupport (= 4.2.2)
|
|
37
39
|
builder (~> 3.1)
|
|
38
40
|
erubis (~> 2.7.0)
|
|
39
41
|
rails-dom-testing (~> 1.0, >= 1.0.5)
|
|
40
42
|
rails-html-sanitizer (~> 1.0, >= 1.0.1)
|
|
41
|
-
activejob (4.2.
|
|
42
|
-
activesupport (= 4.2.
|
|
43
|
+
activejob (4.2.2)
|
|
44
|
+
activesupport (= 4.2.2)
|
|
43
45
|
globalid (>= 0.3.0)
|
|
44
|
-
activemodel (4.2.
|
|
45
|
-
activesupport (= 4.2.
|
|
46
|
+
activemodel (4.2.2)
|
|
47
|
+
activesupport (= 4.2.2)
|
|
46
48
|
builder (~> 3.1)
|
|
47
|
-
activerecord (4.2.
|
|
48
|
-
activemodel (= 4.2.
|
|
49
|
-
activesupport (= 4.2.
|
|
49
|
+
activerecord (4.2.2)
|
|
50
|
+
activemodel (= 4.2.2)
|
|
51
|
+
activesupport (= 4.2.2)
|
|
50
52
|
arel (~> 6.0)
|
|
51
|
-
activesupport (4.2.
|
|
53
|
+
activesupport (4.2.2)
|
|
52
54
|
i18n (~> 0.7)
|
|
53
55
|
json (~> 1.7, >= 1.7.7)
|
|
54
56
|
minitest (~> 5.1)
|
|
55
57
|
thread_safe (~> 0.3, >= 0.3.4)
|
|
56
58
|
tzinfo (~> 1.1)
|
|
57
59
|
addressable (2.3.8)
|
|
58
|
-
arel (6.0.
|
|
59
|
-
autoprefixer-rails (5.1
|
|
60
|
+
arel (6.0.2)
|
|
61
|
+
autoprefixer-rails (5.2.1)
|
|
60
62
|
execjs
|
|
61
63
|
json
|
|
62
64
|
better_errors (2.1.1)
|
|
@@ -65,13 +67,14 @@ GEM
|
|
|
65
67
|
rack (>= 0.9.0)
|
|
66
68
|
binding_of_caller (0.7.2)
|
|
67
69
|
debug_inspector (>= 0.0.1)
|
|
68
|
-
bootstrap-sass (3.3.
|
|
70
|
+
bootstrap-sass (3.3.5)
|
|
69
71
|
autoprefixer-rails (>= 5.0.0.1)
|
|
70
72
|
sass (>= 3.2.19)
|
|
71
73
|
breadcrumbs_on_rails (2.3.0)
|
|
72
|
-
|
|
74
|
+
browser (0.8.0)
|
|
75
|
+
bson (3.1.0)
|
|
73
76
|
builder (3.2.2)
|
|
74
|
-
byebug (
|
|
77
|
+
byebug (5.0.0)
|
|
75
78
|
columnize (= 0.9.0)
|
|
76
79
|
capybara (2.4.4)
|
|
77
80
|
mime-types (>= 1.16)
|
|
@@ -84,10 +87,10 @@ GEM
|
|
|
84
87
|
coderay (1.1.0)
|
|
85
88
|
columnize (0.9.0)
|
|
86
89
|
connection_pool (2.2.0)
|
|
87
|
-
coveralls (0.8.
|
|
88
|
-
|
|
90
|
+
coveralls (0.8.2)
|
|
91
|
+
json (~> 1.8)
|
|
89
92
|
rest-client (>= 1.6.8, < 2)
|
|
90
|
-
simplecov (~> 0.
|
|
93
|
+
simplecov (~> 0.10.0)
|
|
91
94
|
term-ansicolor (~> 1.3)
|
|
92
95
|
thor (~> 0.19.1)
|
|
93
96
|
database_cleaner (1.4.1)
|
|
@@ -107,7 +110,8 @@ GEM
|
|
|
107
110
|
factory_girl_rails (4.5.0)
|
|
108
111
|
factory_girl (~> 4.5.0)
|
|
109
112
|
railties (>= 3.0.0)
|
|
110
|
-
|
|
113
|
+
faker (1.4.3)
|
|
114
|
+
i18n (~> 0.5)
|
|
111
115
|
ffi (1.9.8)
|
|
112
116
|
globalid (0.3.5)
|
|
113
117
|
activesupport (>= 4.1.0)
|
|
@@ -119,7 +123,7 @@ GEM
|
|
|
119
123
|
haml (>= 4.0.6, < 5.0)
|
|
120
124
|
html2haml (>= 1.0.1)
|
|
121
125
|
railties (>= 4.0.1)
|
|
122
|
-
highline (1.7.
|
|
126
|
+
highline (1.7.2)
|
|
123
127
|
html2haml (2.0.0)
|
|
124
128
|
erubis (~> 2.7.0)
|
|
125
129
|
haml (~> 4.0.0)
|
|
@@ -128,7 +132,7 @@ GEM
|
|
|
128
132
|
http-cookie (1.0.2)
|
|
129
133
|
domain_name (~> 0.5)
|
|
130
134
|
i18n (0.7.0)
|
|
131
|
-
i18n-tasks (0.8.
|
|
135
|
+
i18n-tasks (0.8.3)
|
|
132
136
|
activesupport
|
|
133
137
|
easy_translate (>= 0.5.0)
|
|
134
138
|
erubis
|
|
@@ -136,39 +140,42 @@ GEM
|
|
|
136
140
|
i18n
|
|
137
141
|
term-ansicolor
|
|
138
142
|
terminal-table
|
|
139
|
-
jquery-rails (
|
|
140
|
-
|
|
143
|
+
jquery-rails (4.0.4)
|
|
144
|
+
rails-dom-testing (~> 1.0)
|
|
145
|
+
railties (>= 4.2.0)
|
|
141
146
|
thor (>= 0.14, < 2.0)
|
|
142
|
-
json (1.8.
|
|
147
|
+
json (1.8.3)
|
|
143
148
|
launchy (2.4.3)
|
|
144
149
|
addressable (~> 2.3)
|
|
145
|
-
loofah (2.0.
|
|
150
|
+
loofah (2.0.2)
|
|
146
151
|
nokogiri (>= 1.5.9)
|
|
147
152
|
mail (2.6.3)
|
|
148
153
|
mime-types (>= 1.16, < 3)
|
|
149
154
|
method_source (0.8.2)
|
|
150
|
-
mime-types (2.
|
|
155
|
+
mime-types (2.6.1)
|
|
151
156
|
mini_portile (0.6.2)
|
|
152
|
-
minitest (5.
|
|
157
|
+
minitest (5.7.0)
|
|
153
158
|
mongoid (4.0.2)
|
|
154
159
|
activemodel (~> 4.0)
|
|
155
160
|
moped (~> 2.0.0)
|
|
156
161
|
origin (~> 2.1)
|
|
157
162
|
tzinfo (>= 0.3.37)
|
|
158
|
-
mongoid-rspec (2.
|
|
163
|
+
mongoid-rspec (2.2.0)
|
|
159
164
|
mongoid (~> 4.0.0)
|
|
160
165
|
rake
|
|
161
166
|
rspec (~> 3.1)
|
|
162
167
|
mongoid-simple-tags (0.1.3)
|
|
163
168
|
json (~> 1.8)
|
|
164
169
|
mongoid (>= 3.0.3)
|
|
170
|
+
mongoid-tree (2.0.0)
|
|
171
|
+
mongoid (>= 4.0, <= 5.0)
|
|
165
172
|
mongoid_orderable (4.1.1)
|
|
166
173
|
mongoid
|
|
167
|
-
moped (2.0.
|
|
168
|
-
bson (~>
|
|
174
|
+
moped (2.0.6)
|
|
175
|
+
bson (~> 3.0)
|
|
169
176
|
connection_pool (~> 2.0)
|
|
170
177
|
optionable (~> 0.2.0)
|
|
171
|
-
multi_json (1.11.
|
|
178
|
+
multi_json (1.11.1)
|
|
172
179
|
netrc (0.10.3)
|
|
173
180
|
nokogiri (1.6.6.2)
|
|
174
181
|
mini_portile (~> 0.6.0)
|
|
@@ -178,24 +185,24 @@ GEM
|
|
|
178
185
|
coderay (~> 1.1.0)
|
|
179
186
|
method_source (~> 0.8.1)
|
|
180
187
|
slop (~> 3.4)
|
|
181
|
-
pry-byebug (3.
|
|
182
|
-
byebug (~>
|
|
188
|
+
pry-byebug (3.2.0)
|
|
189
|
+
byebug (~> 5.0)
|
|
183
190
|
pry (~> 0.10)
|
|
184
191
|
quiet_assets (1.1.0)
|
|
185
192
|
railties (>= 3.1, < 5.0)
|
|
186
|
-
rack (1.6.
|
|
193
|
+
rack (1.6.4)
|
|
187
194
|
rack-test (0.6.3)
|
|
188
195
|
rack (>= 1.0)
|
|
189
|
-
rails (4.2.
|
|
190
|
-
actionmailer (= 4.2.
|
|
191
|
-
actionpack (= 4.2.
|
|
192
|
-
actionview (= 4.2.
|
|
193
|
-
activejob (= 4.2.
|
|
194
|
-
activemodel (= 4.2.
|
|
195
|
-
activerecord (= 4.2.
|
|
196
|
-
activesupport (= 4.2.
|
|
196
|
+
rails (4.2.2)
|
|
197
|
+
actionmailer (= 4.2.2)
|
|
198
|
+
actionpack (= 4.2.2)
|
|
199
|
+
actionview (= 4.2.2)
|
|
200
|
+
activejob (= 4.2.2)
|
|
201
|
+
activemodel (= 4.2.2)
|
|
202
|
+
activerecord (= 4.2.2)
|
|
203
|
+
activesupport (= 4.2.2)
|
|
197
204
|
bundler (>= 1.3.0, < 2.0)
|
|
198
|
-
railties (= 4.2.
|
|
205
|
+
railties (= 4.2.2)
|
|
199
206
|
sprockets-rails
|
|
200
207
|
rails-deprecated_sanitizer (1.0.3)
|
|
201
208
|
activesupport (>= 4.2.0.alpha)
|
|
@@ -208,9 +215,9 @@ GEM
|
|
|
208
215
|
rails-i18n (4.0.4)
|
|
209
216
|
i18n (~> 0.6)
|
|
210
217
|
railties (~> 4.0)
|
|
211
|
-
railties (4.2.
|
|
212
|
-
actionpack (= 4.2.
|
|
213
|
-
activesupport (= 4.2.
|
|
218
|
+
railties (4.2.2)
|
|
219
|
+
actionpack (= 4.2.2)
|
|
220
|
+
activesupport (= 4.2.2)
|
|
214
221
|
rake (>= 0.8.7)
|
|
215
222
|
thor (>= 0.18.1, < 2.0)
|
|
216
223
|
rake (10.4.2)
|
|
@@ -220,75 +227,75 @@ GEM
|
|
|
220
227
|
http-cookie (>= 1.0.2, < 2.0)
|
|
221
228
|
mime-types (>= 1.16, < 3.0)
|
|
222
229
|
netrc (~> 0.7)
|
|
223
|
-
rspec (3.
|
|
224
|
-
rspec-core (~> 3.
|
|
225
|
-
rspec-expectations (~> 3.
|
|
226
|
-
rspec-mocks (~> 3.
|
|
230
|
+
rspec (3.3.0)
|
|
231
|
+
rspec-core (~> 3.3.0)
|
|
232
|
+
rspec-expectations (~> 3.3.0)
|
|
233
|
+
rspec-mocks (~> 3.3.0)
|
|
227
234
|
rspec-collection_matchers (1.1.2)
|
|
228
235
|
rspec-expectations (>= 2.99.0.beta1)
|
|
229
|
-
rspec-core (3.2
|
|
230
|
-
rspec-support (~> 3.
|
|
231
|
-
rspec-expectations (3.
|
|
236
|
+
rspec-core (3.3.2)
|
|
237
|
+
rspec-support (~> 3.3.0)
|
|
238
|
+
rspec-expectations (3.3.1)
|
|
232
239
|
diff-lcs (>= 1.2.0, < 2.0)
|
|
233
|
-
rspec-support (~> 3.
|
|
234
|
-
rspec-mocks (3.2
|
|
240
|
+
rspec-support (~> 3.3.0)
|
|
241
|
+
rspec-mocks (3.3.2)
|
|
235
242
|
diff-lcs (>= 1.2.0, < 2.0)
|
|
236
|
-
rspec-support (~> 3.
|
|
237
|
-
rspec-rails (3.
|
|
243
|
+
rspec-support (~> 3.3.0)
|
|
244
|
+
rspec-rails (3.3.3)
|
|
238
245
|
actionpack (>= 3.0, < 4.3)
|
|
239
246
|
activesupport (>= 3.0, < 4.3)
|
|
240
247
|
railties (>= 3.0, < 4.3)
|
|
241
|
-
rspec-core (~> 3.
|
|
242
|
-
rspec-expectations (~> 3.
|
|
243
|
-
rspec-mocks (~> 3.
|
|
244
|
-
rspec-support (~> 3.
|
|
245
|
-
rspec-support (3.
|
|
248
|
+
rspec-core (~> 3.3.0)
|
|
249
|
+
rspec-expectations (~> 3.3.0)
|
|
250
|
+
rspec-mocks (~> 3.3.0)
|
|
251
|
+
rspec-support (~> 3.3.0)
|
|
252
|
+
rspec-support (3.3.0)
|
|
246
253
|
ruby-progressbar (1.7.5)
|
|
247
|
-
ruby_parser (3.
|
|
254
|
+
ruby_parser (3.7.0)
|
|
248
255
|
sexp_processor (~> 4.1)
|
|
249
256
|
rubyzip (1.1.7)
|
|
250
|
-
sass (3.4.
|
|
251
|
-
sass-rails (5.0.
|
|
257
|
+
sass (3.4.14)
|
|
258
|
+
sass-rails (5.0.3)
|
|
252
259
|
railties (>= 4.0.0, < 5.0)
|
|
253
260
|
sass (~> 3.1)
|
|
254
261
|
sprockets (>= 2.8, < 4.0)
|
|
255
262
|
sprockets-rails (>= 2.0, < 4.0)
|
|
256
263
|
tilt (~> 1.1)
|
|
257
|
-
selenium-webdriver (2.
|
|
264
|
+
selenium-webdriver (2.46.2)
|
|
258
265
|
childprocess (~> 0.5)
|
|
259
266
|
multi_json (~> 1.0)
|
|
260
267
|
rubyzip (~> 1.0)
|
|
261
268
|
websocket (~> 1.0)
|
|
262
|
-
sexp_processor (4.
|
|
269
|
+
sexp_processor (4.6.0)
|
|
263
270
|
shoulda-matchers (2.8.0)
|
|
264
271
|
activesupport (>= 3.0.0)
|
|
265
272
|
simple_form (3.1.0)
|
|
266
273
|
actionpack (~> 4.0)
|
|
267
274
|
activemodel (~> 4.0)
|
|
268
|
-
simplecov (0.
|
|
275
|
+
simplecov (0.10.0)
|
|
269
276
|
docile (~> 1.1.0)
|
|
270
|
-
|
|
271
|
-
simplecov-html (~> 0.
|
|
272
|
-
simplecov-html (0.
|
|
273
|
-
slim (3.0.
|
|
277
|
+
json (~> 1.8)
|
|
278
|
+
simplecov-html (~> 0.10.0)
|
|
279
|
+
simplecov-html (0.10.0)
|
|
280
|
+
slim (3.0.6)
|
|
274
281
|
temple (~> 0.7.3)
|
|
275
282
|
tilt (>= 1.3.3, < 2.1)
|
|
276
283
|
slop (3.6.0)
|
|
277
|
-
sprockets (3.0
|
|
284
|
+
sprockets (3.2.0)
|
|
278
285
|
rack (~> 1.0)
|
|
279
|
-
sprockets-rails (2.2
|
|
286
|
+
sprockets-rails (2.3.2)
|
|
280
287
|
actionpack (>= 3.0)
|
|
281
288
|
activesupport (>= 3.0)
|
|
282
289
|
sprockets (>= 2.8, < 4.0)
|
|
283
|
-
temple (0.7.
|
|
284
|
-
term-ansicolor (1.3.
|
|
290
|
+
temple (0.7.6)
|
|
291
|
+
term-ansicolor (1.3.2)
|
|
285
292
|
tins (~> 1.0)
|
|
286
293
|
terminal-table (1.4.5)
|
|
287
294
|
thor (0.19.1)
|
|
288
295
|
thread (0.2.0)
|
|
289
296
|
thread_safe (0.3.5)
|
|
290
297
|
tilt (1.4.1)
|
|
291
|
-
tins (1.
|
|
298
|
+
tins (1.5.4)
|
|
292
299
|
tzinfo (1.2.2)
|
|
293
300
|
thread_safe (~> 0.1)
|
|
294
301
|
unf (0.1.4)
|
|
@@ -310,12 +317,12 @@ DEPENDENCIES
|
|
|
310
317
|
coveralls
|
|
311
318
|
database_cleaner (~> 1.3)
|
|
312
319
|
factory_girl_rails (~> 4.4)
|
|
313
|
-
|
|
320
|
+
faker (~> 1.4)
|
|
314
321
|
helena!
|
|
315
322
|
i18n-tasks
|
|
316
323
|
jquery-rails
|
|
317
324
|
launchy
|
|
318
|
-
mongoid-rspec
|
|
325
|
+
mongoid-rspec
|
|
319
326
|
pry
|
|
320
327
|
pry-byebug
|
|
321
328
|
quiet_assets
|
data/README.md
CHANGED
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
[](https://travis-ci.org/gurix/helena)
|
|
2
2
|
[](https://codeclimate.com/github/gurix/helena)
|
|
3
3
|
[](https://gemnasium.com/gurix/helena)
|
|
4
|
-
[](https://rubygems.org/gems/helena)
|
|
5
|
+
[](https://coveralls.io/github/gurix/helena?branch=master)
|
|
6
6
|
# Helena
|
|
7
7
|
Helena is an online survey/test framework designed for agile survey/test development, longitudinal studies and instant feedback.
|
|
8
8
|
|
|
@@ -5,7 +5,7 @@ module Helena
|
|
|
5
5
|
|
|
6
6
|
belongs_to :version
|
|
7
7
|
|
|
8
|
-
has_many :questions, inverse_of: :question_group, class_name: 'Helena::Question', dependent: :destroy
|
|
8
|
+
has_many :questions, inverse_of: :question_group, class_name: 'Helena::Question', dependent: :destroy, autosave: true
|
|
9
9
|
|
|
10
10
|
orderable scope: :version
|
|
11
11
|
|
|
@@ -13,7 +13,7 @@ module Helena
|
|
|
13
13
|
field :allow_to_go_back, type: Boolean
|
|
14
14
|
|
|
15
15
|
def question_codes
|
|
16
|
-
questions.map { |question| [question.code] +
|
|
16
|
+
questions.map { |question| [question.code] + question.sub_questions.map(&:code) }.flatten
|
|
17
17
|
end
|
|
18
18
|
end
|
|
19
19
|
end
|
|
@@ -14,10 +14,13 @@ module Helena
|
|
|
14
14
|
|
|
15
15
|
validates :token, :view_token, uniqueness: true
|
|
16
16
|
|
|
17
|
+
index created_at: 1
|
|
18
|
+
index updated_at: 1
|
|
19
|
+
|
|
17
20
|
before_create :reset_tokens
|
|
18
21
|
|
|
19
22
|
def answers_as_yaml
|
|
20
|
-
Hash[answers.map { |
|
|
23
|
+
Hash[answers.map { |answer| [answer.code, answer.value] }.sort].to_yaml
|
|
21
24
|
end
|
|
22
25
|
|
|
23
26
|
def answers_as_yaml=(yaml)
|
|
@@ -33,15 +36,6 @@ module Helena
|
|
|
33
36
|
self.view_token = generate_token(25) until unique_token_for?(:view_token)
|
|
34
37
|
end
|
|
35
38
|
|
|
36
|
-
def self.to_csv
|
|
37
|
-
CSV.generate do |csv|
|
|
38
|
-
csv << fields.keys + uniq_answer_codes
|
|
39
|
-
all.each do |session|
|
|
40
|
-
csv << session.attributes.values_at(*fields.keys) + answer_values_in(session)
|
|
41
|
-
end
|
|
42
|
-
end
|
|
43
|
-
end
|
|
44
|
-
|
|
45
39
|
def as_json(options)
|
|
46
40
|
session = super(options)
|
|
47
41
|
session[:answer] = answers_as_hash
|
|
@@ -49,19 +43,11 @@ module Helena
|
|
|
49
43
|
end
|
|
50
44
|
|
|
51
45
|
def answers_as_hash
|
|
52
|
-
answers.map { |answer| [answer[:code], answer[:value]] }.
|
|
46
|
+
Hash[*answers.map { |answer| [answer[:code], answer[:value]] }.flatten]
|
|
53
47
|
end
|
|
54
48
|
|
|
55
49
|
private
|
|
56
50
|
|
|
57
|
-
def self.answer_values_in(session)
|
|
58
|
-
answers = []
|
|
59
|
-
answer_codes.each do |code|
|
|
60
|
-
answers << session.answers.where(code: code).first.try(&:value)
|
|
61
|
-
end
|
|
62
|
-
answers
|
|
63
|
-
end
|
|
64
|
-
|
|
65
51
|
def self.answer_codes
|
|
66
52
|
answer_codes = []
|
|
67
53
|
all.each do |session|
|
|
@@ -70,12 +56,6 @@ module Helena
|
|
|
70
56
|
answer_codes
|
|
71
57
|
end
|
|
72
58
|
|
|
73
|
-
def self.uniq_answer_codes
|
|
74
|
-
answer_codes.map do |code|
|
|
75
|
-
fields.keys.include?(code) ? "answer_#{code}" : code
|
|
76
|
-
end
|
|
77
|
-
end
|
|
78
|
-
|
|
79
59
|
def generate_token(size)
|
|
80
60
|
SecureRandom.base64(size).delete('/+=')[0, size]
|
|
81
61
|
end
|
|
@@ -85,7 +65,7 @@ module Helena
|
|
|
85
65
|
end
|
|
86
66
|
|
|
87
67
|
def update_answers(parsed_answers)
|
|
88
|
-
parsed_answers.each do |
|
|
68
|
+
parsed_answers.each do |code, value|
|
|
89
69
|
answer = answers.where(code: code).first
|
|
90
70
|
if answer
|
|
91
71
|
next if answer.value == value
|
|
@@ -2,6 +2,7 @@ module Helena
|
|
|
2
2
|
class Version
|
|
3
3
|
include Helena::Concerns::ApplicationModel
|
|
4
4
|
include Mongoid::Orderable # Needed, because the embedded objects needs this, see
|
|
5
|
+
include Mongoid::Tree
|
|
5
6
|
|
|
6
7
|
field :version, type: Integer, default: 0
|
|
7
8
|
field :notes, type: String
|
|
@@ -11,8 +12,8 @@ module Helena
|
|
|
11
12
|
|
|
12
13
|
belongs_to :survey
|
|
13
14
|
|
|
14
|
-
has_many :question_groups, inverse_of: :version, dependent: :destroy, class_name: 'Helena::QuestionGroup'
|
|
15
|
-
has_many :sessions, inverse_of: :version, dependent: :destroy, class_name: 'Helena::Session'
|
|
15
|
+
has_many :question_groups, inverse_of: :version, dependent: :destroy, class_name: 'Helena::QuestionGroup', autosave: true
|
|
16
|
+
has_many :sessions, inverse_of: :version, dependent: :destroy, class_name: 'Helena::Session', autosave: true
|
|
16
17
|
|
|
17
18
|
embeds_one :survey_detail, class_name: 'Helena::SurveyDetail'
|
|
18
19
|
|
|
@@ -1,33 +1,56 @@
|
|
|
1
1
|
- label_width = "#{60 / question.labels.count}%"
|
|
2
|
+
- mobile = (browser.mobile? || browser.tablet?) # Use a special layout for this devices
|
|
2
3
|
|
|
3
4
|
.radio_matrix.form-group{ class: "#{'has-error' if errors.present?}" }
|
|
4
5
|
%label{class: "#{'text-danger' if errors.present?}"}
|
|
5
6
|
!= question.question_text
|
|
6
7
|
= ' *' if question.required
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
%
|
|
10
|
-
%
|
|
11
|
-
%th
|
|
12
|
-
- question.labels.each do |label|
|
|
13
|
-
%th{ width: label_width }
|
|
14
|
-
= label.text
|
|
15
|
-
%th
|
|
16
|
-
|
|
17
|
-
%tbody
|
|
18
|
-
- question.sub_questions.each do |sub_question|
|
|
8
|
+
- unless mobile
|
|
9
|
+
.table-responsive
|
|
10
|
+
%table.table
|
|
11
|
+
%thead
|
|
19
12
|
%tr
|
|
20
|
-
%
|
|
21
|
-
= sub_question.parts.first
|
|
22
|
-
- if errors[sub_question.code]
|
|
23
|
-
.help-block.text-danger= errors[sub_question.code]
|
|
13
|
+
%th
|
|
24
14
|
- question.labels.each do |label|
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
15
|
+
%th{ width: label_width }
|
|
16
|
+
= label.text
|
|
17
|
+
%th
|
|
18
|
+
|
|
19
|
+
%tbody
|
|
20
|
+
- question.sub_questions.each do |sub_question|
|
|
21
|
+
%tr
|
|
22
|
+
%td.text-right
|
|
23
|
+
= sub_question.parts.first
|
|
24
|
+
- if errors[sub_question.code]
|
|
25
|
+
.help-block.text-danger= errors[sub_question.code]
|
|
26
|
+
- question.labels.each do |label|
|
|
27
|
+
- checked = answers[sub_question.code].to_s == label.value.to_s if answers[sub_question.code].present?
|
|
28
|
+
- checked ||= (label.preselected? ? true : false)
|
|
29
|
+
%td{ width: label_width }
|
|
30
|
+
%label
|
|
31
|
+
= form.simple_fields_for :answers do |answer_form|
|
|
32
|
+
= answer_form.radio_button sub_question.code, label.value, checked: checked
|
|
33
|
+
%span.hide-text= label.text
|
|
34
|
+
%td
|
|
35
|
+
= sub_question.parts.last if sub_question.splitted?
|
|
36
|
+
- if mobile
|
|
37
|
+
.mobile
|
|
38
|
+
- question.sub_questions.each do |sub_question|
|
|
39
|
+
%table.table.well
|
|
40
|
+
%tbody
|
|
41
|
+
%tr
|
|
42
|
+
%td.part= sub_question.parts.first
|
|
43
|
+
%tr
|
|
44
|
+
%td
|
|
45
|
+
- question.labels.each do |label|
|
|
46
|
+
- checked = answers[sub_question.code].to_s == label.value.to_s if answers[sub_question.code].present?
|
|
47
|
+
- checked ||= (label.preselected? ? true : false)
|
|
48
|
+
.radio
|
|
49
|
+
%label.responsive_label
|
|
50
|
+
= form.simple_fields_for :answers do |answer_form|
|
|
51
|
+
= answer_form.radio_button sub_question.code, label.value, checked: checked
|
|
52
|
+
= label.text
|
|
53
|
+
|
|
54
|
+
- if sub_question.splitted?
|
|
55
|
+
%tr
|
|
56
|
+
%td.part= sub_question.parts.last
|
|
@@ -1,29 +1,53 @@
|
|
|
1
1
|
- label_width = "#{80 / question.labels.count}%"
|
|
2
|
+
- mobile = (browser.mobile? || browser.tablet?) # Use a special layout for this devices
|
|
2
3
|
|
|
3
4
|
.radio_matrix.form-group{ class: "#{'has-error' if errors.present?}" }
|
|
4
5
|
%label{class: "#{'text-danger' if errors.present?}"}
|
|
5
6
|
!= question.question_text
|
|
6
7
|
= ' *' if question.required
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
%
|
|
10
|
-
%
|
|
11
|
-
%th
|
|
12
|
-
- question.labels.each do |label|
|
|
13
|
-
%th{ width: label_width }
|
|
14
|
-
= label.text
|
|
15
|
-
%tbody
|
|
16
|
-
- question.sub_questions.each do |sub_question|
|
|
8
|
+
- unless mobile
|
|
9
|
+
.table-responsive
|
|
10
|
+
%table.table
|
|
11
|
+
%thead
|
|
17
12
|
%tr
|
|
18
|
-
%
|
|
19
|
-
= sub_question.parts.first
|
|
20
|
-
- if errors[sub_question.code]
|
|
21
|
-
.help-block.text-danger= errors[sub_question.code]
|
|
13
|
+
%th
|
|
22
14
|
- question.labels.each do |label|
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
15
|
+
%th{ width: label_width }
|
|
16
|
+
= label.text
|
|
17
|
+
%tbody
|
|
18
|
+
- question.sub_questions.each do |sub_question|
|
|
19
|
+
%tr
|
|
20
|
+
%td
|
|
21
|
+
= sub_question.parts.first
|
|
22
|
+
- if errors[sub_question.code]
|
|
23
|
+
.help-block.text-danger= errors[sub_question.code]
|
|
24
|
+
- question.labels.each do |label|
|
|
25
|
+
- checked = answers[sub_question.code].to_s == label.value.to_s if answers[sub_question.code].present?
|
|
26
|
+
- checked ||= (label.preselected? ? true : false)
|
|
27
|
+
%td{ width: label_width }
|
|
28
|
+
%label
|
|
29
|
+
= form.simple_fields_for :answers do |answer_form|
|
|
30
|
+
= answer_form.radio_button sub_question.code, label.value, checked: checked
|
|
31
|
+
%span.hide-text= label.text
|
|
32
|
+
|
|
33
|
+
- if mobile
|
|
34
|
+
.mobile
|
|
35
|
+
- question.sub_questions.each do |sub_question|
|
|
36
|
+
%table.table.well
|
|
37
|
+
%tbody
|
|
38
|
+
%tr
|
|
39
|
+
%td.part= sub_question.parts.first
|
|
40
|
+
%tr
|
|
41
|
+
%td
|
|
42
|
+
- question.labels.each do |label|
|
|
43
|
+
- checked = answers[sub_question.code].to_s == label.value.to_s if answers[sub_question.code].present?
|
|
44
|
+
- checked ||= (label.preselected? ? true : false)
|
|
45
|
+
.radio
|
|
46
|
+
%label.responsive_label
|
|
47
|
+
= form.simple_fields_for :answers do |answer_form|
|
|
48
|
+
= answer_form.radio_button sub_question.code, label.value, checked: checked
|
|
49
|
+
= label.text
|
|
50
|
+
|
|
51
|
+
- if sub_question.splitted?
|
|
52
|
+
%tr
|
|
53
|
+
%td.part= sub_question.parts.last
|
data/db/seeds.rb
CHANGED
data/helena.gemspec
CHANGED
|
@@ -19,24 +19,26 @@ survey/test development, longitudinal studies and instant feedback.'
|
|
|
19
19
|
s.files = `git ls-files`.split("\n")
|
|
20
20
|
s.test_files = `git ls-files -- {spec}/*`.split("\n")
|
|
21
21
|
|
|
22
|
-
s.add_dependency 'rails', '~> 4.
|
|
22
|
+
s.add_dependency 'rails', '~> 4.2'
|
|
23
23
|
s.add_dependency 'mongoid', '~> 4.0'
|
|
24
24
|
s.add_dependency 'mongoid_orderable', '~> 4.1'
|
|
25
25
|
s.add_dependency 'mongoid-simple-tags', '~> 0.1'
|
|
26
|
-
s.add_dependency 'haml-rails', '~> 0.
|
|
26
|
+
s.add_dependency 'haml-rails', '~> 0.9'
|
|
27
27
|
s.add_dependency 'slim', '~> 3.0'
|
|
28
|
-
s.add_dependency 'jquery-rails', '~>
|
|
28
|
+
s.add_dependency 'jquery-rails', '~> 4.0'
|
|
29
29
|
s.add_dependency 'sass-rails', '~> 5.0'
|
|
30
30
|
s.add_dependency 'bootstrap-sass', '~> 3.2'
|
|
31
31
|
s.add_dependency 'simple_form', '~> 3.1.0.rc2'
|
|
32
32
|
s.add_dependency 'breadcrumbs_on_rails', '~> 2.3'
|
|
33
33
|
s.add_dependency 'rails-i18n', '~> 4.0'
|
|
34
34
|
s.add_dependency 'responders', '~> 2.0'
|
|
35
|
+
s.add_dependency 'browser', '~> 0.8'
|
|
36
|
+
s.add_dependency 'mongoid-tree', '~> 2.0'
|
|
35
37
|
|
|
36
38
|
s.add_development_dependency 'rspec-rails', '~> 3'
|
|
37
39
|
s.add_development_dependency 'rspec-collection_matchers', '~> 1'
|
|
38
40
|
s.add_development_dependency 'factory_girl_rails', '~> 4.4'
|
|
39
41
|
s.add_development_dependency 'database_cleaner', '~> 1.3'
|
|
40
|
-
s.add_development_dependency '
|
|
42
|
+
s.add_development_dependency 'faker', '~> 1.4'
|
|
41
43
|
s.add_development_dependency 'capybara', '~> 2.3'
|
|
42
44
|
end
|
data/lib/helena.rb
CHANGED
|
@@ -13,7 +13,7 @@ module Helena
|
|
|
13
13
|
private
|
|
14
14
|
|
|
15
15
|
def create_survey
|
|
16
|
-
@survey = Helena::Survey.
|
|
16
|
+
@survey = Helena::Survey.find_or_initialize_by @parsed.except('versions')
|
|
17
17
|
return unless @survey.save!
|
|
18
18
|
return unless @parsed['versions']
|
|
19
19
|
@parsed['versions'].each { |parsed_version| create_version parsed_version }
|
|
@@ -21,7 +21,7 @@ module Helena
|
|
|
21
21
|
|
|
22
22
|
def create_version(parsed_version)
|
|
23
23
|
version = build_version(parsed_version)
|
|
24
|
-
|
|
24
|
+
return unless version.new_record? # We ignore already imported versions
|
|
25
25
|
return unless version.save!
|
|
26
26
|
return unless parsed_version.last['question_groups']
|
|
27
27
|
parsed_version.last['question_groups'].each { |parsed_question_group| create_question_group version, parsed_question_group }
|
|
@@ -43,7 +43,7 @@ module Helena
|
|
|
43
43
|
end
|
|
44
44
|
|
|
45
45
|
def build_version(parsed_version)
|
|
46
|
-
version = @survey.versions.
|
|
46
|
+
version = @survey.versions.find_or_initialize_by parsed_version.last.except('question_groups', 'survey_detail')
|
|
47
47
|
version.version = parsed_version.first
|
|
48
48
|
version.survey_detail = parsed_version.last['survey_detail']
|
|
49
49
|
version
|
data/lib/helena/version.rb
CHANGED
|
@@ -1,12 +1,12 @@
|
|
|
1
1
|
module Helena
|
|
2
2
|
class VersionPublisher
|
|
3
3
|
def self.publish(version)
|
|
4
|
-
copied_version =
|
|
4
|
+
copied_version = build_copied_version_from(version)
|
|
5
5
|
|
|
6
6
|
version.question_groups.each do |original_question_group|
|
|
7
|
-
question_group = copied_version.question_groups.
|
|
7
|
+
question_group = copied_version.question_groups.build original_question_group.clone.attributes
|
|
8
8
|
original_question_group.questions.each do |original_question|
|
|
9
|
-
question = question_group.questions.
|
|
9
|
+
question = question_group.questions.build original_question.clone.attributes
|
|
10
10
|
question.labels = original_question.labels
|
|
11
11
|
question.sub_questions = original_question.sub_questions
|
|
12
12
|
end
|
|
@@ -16,6 +16,7 @@ module Helena
|
|
|
16
16
|
|
|
17
17
|
def self.adjust_copied_attributes(version, copied_version)
|
|
18
18
|
copied_version.version = newest_version_of(version.survey) + 1
|
|
19
|
+
copied_version.survey_detail = version.survey_detail.attributes if version.survey_detail
|
|
19
20
|
copied_version.created_at = DateTime.now
|
|
20
21
|
copied_version.updated_at = DateTime.now
|
|
21
22
|
copied_version.active = false
|
|
@@ -26,23 +27,9 @@ module Helena
|
|
|
26
27
|
survey.newest_version.version
|
|
27
28
|
end
|
|
28
29
|
|
|
29
|
-
def self.
|
|
30
|
-
copied_version =
|
|
31
|
-
|
|
32
|
-
copied_version.survey_detail = reset_ids(version.survey_detail.attributes) if version.survey_detail
|
|
33
|
-
copied_version.save
|
|
34
|
-
copied_version
|
|
35
|
-
end
|
|
36
|
-
|
|
37
|
-
def self.reset_ids(attributes)
|
|
38
|
-
attributes.each do |key, value|
|
|
39
|
-
if key == '_id' && value.is_a?(BSON::ObjectId)
|
|
40
|
-
attributes[key] = BSON::ObjectId.new
|
|
41
|
-
elsif value.is_a?(Hash) || value.is_a?(Array)
|
|
42
|
-
attributes[key] = reset_ids(value)
|
|
43
|
-
end
|
|
44
|
-
end
|
|
45
|
-
attributes
|
|
30
|
+
def self.build_copied_version_from(version)
|
|
31
|
+
copied_version = version.clone
|
|
32
|
+
adjust_copied_attributes(version, copied_version)
|
|
46
33
|
end
|
|
47
34
|
end
|
|
48
35
|
end
|
|
@@ -3,21 +3,29 @@ require 'spec_helper'
|
|
|
3
3
|
describe Helena::VersionPublisher do
|
|
4
4
|
let!(:survey) { create :survey }
|
|
5
5
|
let!(:source_version) { survey.versions.create version: 42, active: true }
|
|
6
|
-
let!(:survey_detail) { source_version.survey_detail = build :survey_detail }
|
|
6
|
+
let!(:survey_detail) { source_version.survey_detail = build :survey_detail, title: 'Bla Bla' }
|
|
7
7
|
let!(:question_group) { source_version.question_groups.create }
|
|
8
|
-
let!(:question) {
|
|
9
|
-
let!(:label) {
|
|
10
|
-
let!(:sub_question) {
|
|
8
|
+
let!(:question) { create(:radio_matrix_question, code: 'abc', question_group: question_group) }
|
|
9
|
+
let!(:label) { create(:label, text: 'xyz', value: 'asdf', question: question) }
|
|
10
|
+
let!(:sub_question) { create(:sub_question, text: 'ymca', code: 'cde', question: question) }
|
|
11
11
|
|
|
12
12
|
it 'creates a new version' do
|
|
13
13
|
allow(DateTime).to receive(:now).and_return('Tue, 24 Jun 2014 10:24:08 +0200')
|
|
14
14
|
|
|
15
15
|
new_version = Helena::VersionPublisher.publish(source_version)
|
|
16
|
+
new_version.save
|
|
16
17
|
|
|
17
18
|
expect(new_version.version).to eq 43
|
|
18
|
-
expect(new_version.survey_detail).to
|
|
19
|
+
expect(new_version.survey_detail.title).to eq 'Bla Bla'
|
|
20
|
+
|
|
19
21
|
expect(new_version).to have(1).question_groups
|
|
22
|
+
expect(Helena::QuestionGroup.count).to eq 2
|
|
23
|
+
expect(new_version.question_groups.first.id).not_to eq source_version.question_groups.first.id
|
|
24
|
+
|
|
20
25
|
expect(new_version.question_groups.first).to have_exactly(1).questions
|
|
26
|
+
expect(new_version.question_groups.first.questions.first.id).not_to eq source_version.question_groups.first.questions.first.id
|
|
27
|
+
expect(Helena::Question.count).to eq 2
|
|
28
|
+
|
|
21
29
|
expect(new_version.question_groups.first.questions.first).to have_exactly(1).labels
|
|
22
30
|
expect(new_version.question_groups.first.questions.first).to have_exactly(1).sub_questions
|
|
23
31
|
expect(new_version.created_at).to eq 'Tue, 24 Jun 2014 10:24:08 +0200'
|
|
@@ -13,6 +13,9 @@ describe Helena::Session do
|
|
|
13
13
|
it { expect(subject).to validate_uniqueness_of(:token) }
|
|
14
14
|
it { expect(subject).to validate_uniqueness_of(:view_token) }
|
|
15
15
|
|
|
16
|
+
it { expect(subject).to have_index_for(created_at: 1) }
|
|
17
|
+
it { expect(subject).to have_index_for(updated_at: 1) }
|
|
18
|
+
|
|
16
19
|
it 'has a valid factory' do
|
|
17
20
|
expect(build :session).to be_valid
|
|
18
21
|
end
|
|
@@ -22,17 +25,6 @@ describe Helena::Session do
|
|
|
22
25
|
expect(create(:session_without_token).token).to eq 'a493oP'
|
|
23
26
|
end
|
|
24
27
|
|
|
25
|
-
it 'exports as CSV with answers' do
|
|
26
|
-
session.answers << Helena::Answer.build_generic('a', 42, '192.168.0.1')
|
|
27
|
-
session.answers << Helena::Answer.build_generic('b', true, '192.235.0.1')
|
|
28
|
-
session.answers << Helena::Answer.build_generic('c', 'Barbra Streisand!!', '192.999.0.1')
|
|
29
|
-
|
|
30
|
-
csv = Helena::Session.to_csv
|
|
31
|
-
|
|
32
|
-
expect(csv).to include 'a,b,c'
|
|
33
|
-
expect(csv).to include '42,true,Barbra Streisand!!'
|
|
34
|
-
end
|
|
35
|
-
|
|
36
28
|
describe '#answers_as_yaml and #answer_as_yaml=' do
|
|
37
29
|
before do
|
|
38
30
|
session.answers << Helena::Answer.build_generic('c', 'Barbra Streisand!!', '192.999.0.1')
|
data/spec/spec_helper.rb
CHANGED
metadata
CHANGED
|
@@ -1,14 +1,14 @@
|
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
|
2
2
|
name: helena
|
|
3
3
|
version: !ruby/object:Gem::Version
|
|
4
|
-
version: 1.0.0.
|
|
4
|
+
version: 1.0.0.rc3
|
|
5
5
|
platform: ruby
|
|
6
6
|
authors:
|
|
7
7
|
- Markus Graf
|
|
8
8
|
autorequire:
|
|
9
9
|
bindir: bin
|
|
10
10
|
cert_chain: []
|
|
11
|
-
date: 2015-
|
|
11
|
+
date: 2015-07-22 00:00:00.000000000 Z
|
|
12
12
|
dependencies:
|
|
13
13
|
- !ruby/object:Gem::Dependency
|
|
14
14
|
name: rails
|
|
@@ -16,14 +16,14 @@ dependencies:
|
|
|
16
16
|
requirements:
|
|
17
17
|
- - "~>"
|
|
18
18
|
- !ruby/object:Gem::Version
|
|
19
|
-
version: '4.
|
|
19
|
+
version: '4.2'
|
|
20
20
|
type: :runtime
|
|
21
21
|
prerelease: false
|
|
22
22
|
version_requirements: !ruby/object:Gem::Requirement
|
|
23
23
|
requirements:
|
|
24
24
|
- - "~>"
|
|
25
25
|
- !ruby/object:Gem::Version
|
|
26
|
-
version: '4.
|
|
26
|
+
version: '4.2'
|
|
27
27
|
- !ruby/object:Gem::Dependency
|
|
28
28
|
name: mongoid
|
|
29
29
|
requirement: !ruby/object:Gem::Requirement
|
|
@@ -72,14 +72,14 @@ dependencies:
|
|
|
72
72
|
requirements:
|
|
73
73
|
- - "~>"
|
|
74
74
|
- !ruby/object:Gem::Version
|
|
75
|
-
version: '0.
|
|
75
|
+
version: '0.9'
|
|
76
76
|
type: :runtime
|
|
77
77
|
prerelease: false
|
|
78
78
|
version_requirements: !ruby/object:Gem::Requirement
|
|
79
79
|
requirements:
|
|
80
80
|
- - "~>"
|
|
81
81
|
- !ruby/object:Gem::Version
|
|
82
|
-
version: '0.
|
|
82
|
+
version: '0.9'
|
|
83
83
|
- !ruby/object:Gem::Dependency
|
|
84
84
|
name: slim
|
|
85
85
|
requirement: !ruby/object:Gem::Requirement
|
|
@@ -100,14 +100,14 @@ dependencies:
|
|
|
100
100
|
requirements:
|
|
101
101
|
- - "~>"
|
|
102
102
|
- !ruby/object:Gem::Version
|
|
103
|
-
version: '
|
|
103
|
+
version: '4.0'
|
|
104
104
|
type: :runtime
|
|
105
105
|
prerelease: false
|
|
106
106
|
version_requirements: !ruby/object:Gem::Requirement
|
|
107
107
|
requirements:
|
|
108
108
|
- - "~>"
|
|
109
109
|
- !ruby/object:Gem::Version
|
|
110
|
-
version: '
|
|
110
|
+
version: '4.0'
|
|
111
111
|
- !ruby/object:Gem::Dependency
|
|
112
112
|
name: sass-rails
|
|
113
113
|
requirement: !ruby/object:Gem::Requirement
|
|
@@ -192,6 +192,34 @@ dependencies:
|
|
|
192
192
|
- - "~>"
|
|
193
193
|
- !ruby/object:Gem::Version
|
|
194
194
|
version: '2.0'
|
|
195
|
+
- !ruby/object:Gem::Dependency
|
|
196
|
+
name: browser
|
|
197
|
+
requirement: !ruby/object:Gem::Requirement
|
|
198
|
+
requirements:
|
|
199
|
+
- - "~>"
|
|
200
|
+
- !ruby/object:Gem::Version
|
|
201
|
+
version: '0.8'
|
|
202
|
+
type: :runtime
|
|
203
|
+
prerelease: false
|
|
204
|
+
version_requirements: !ruby/object:Gem::Requirement
|
|
205
|
+
requirements:
|
|
206
|
+
- - "~>"
|
|
207
|
+
- !ruby/object:Gem::Version
|
|
208
|
+
version: '0.8'
|
|
209
|
+
- !ruby/object:Gem::Dependency
|
|
210
|
+
name: mongoid-tree
|
|
211
|
+
requirement: !ruby/object:Gem::Requirement
|
|
212
|
+
requirements:
|
|
213
|
+
- - "~>"
|
|
214
|
+
- !ruby/object:Gem::Version
|
|
215
|
+
version: '2.0'
|
|
216
|
+
type: :runtime
|
|
217
|
+
prerelease: false
|
|
218
|
+
version_requirements: !ruby/object:Gem::Requirement
|
|
219
|
+
requirements:
|
|
220
|
+
- - "~>"
|
|
221
|
+
- !ruby/object:Gem::Version
|
|
222
|
+
version: '2.0'
|
|
195
223
|
- !ruby/object:Gem::Dependency
|
|
196
224
|
name: rspec-rails
|
|
197
225
|
requirement: !ruby/object:Gem::Requirement
|
|
@@ -249,19 +277,19 @@ dependencies:
|
|
|
249
277
|
- !ruby/object:Gem::Version
|
|
250
278
|
version: '1.3'
|
|
251
279
|
- !ruby/object:Gem::Dependency
|
|
252
|
-
name:
|
|
280
|
+
name: faker
|
|
253
281
|
requirement: !ruby/object:Gem::Requirement
|
|
254
282
|
requirements:
|
|
255
283
|
- - "~>"
|
|
256
284
|
- !ruby/object:Gem::Version
|
|
257
|
-
version: '1.
|
|
285
|
+
version: '1.4'
|
|
258
286
|
type: :development
|
|
259
287
|
prerelease: false
|
|
260
288
|
version_requirements: !ruby/object:Gem::Requirement
|
|
261
289
|
requirements:
|
|
262
290
|
- - "~>"
|
|
263
291
|
- !ruby/object:Gem::Version
|
|
264
|
-
version: '1.
|
|
292
|
+
version: '1.4'
|
|
265
293
|
- !ruby/object:Gem::Dependency
|
|
266
294
|
name: capybara
|
|
267
295
|
requirement: !ruby/object:Gem::Requirement
|
|
@@ -447,7 +475,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
|
447
475
|
version: 1.3.1
|
|
448
476
|
requirements: []
|
|
449
477
|
rubyforge_project:
|
|
450
|
-
rubygems_version: 2.
|
|
478
|
+
rubygems_version: 2.4.5
|
|
451
479
|
signing_key:
|
|
452
480
|
specification_version: 4
|
|
453
481
|
summary: Helena is an online survey/test framework designed for agile survey/test
|