asker-tool 2.5.0 → 2.5.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.
- checksums.yaml +4 -4
- data/README.md +6 -13
- data/lib/asker/ai/stages/stage_d.rb +18 -8
- data/lib/asker/files/asker.ini +1 -0
- data/lib/asker/files/example-concept.haml +3 -3
- data/lib/asker/loader/embedded_file.rb +87 -34
- data/lib/asker/version.rb +1 -1
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: ecd775d21f7d85f15daa5307be5947fc9d36d22dccd8448bf477c885ea639758
|
4
|
+
data.tar.gz: d145bb6b6ae9af56a917f9c98ccd8f33e09b0e9640c93382854d20c733714bd5
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 87f02c406e8a659bcad86e246982b1192aae902476939fb77e69f533fb648b7962054068a5084f06c0ac6f8cf8349bce8602e55f8e2f20d973f645801cbc6a09
|
7
|
+
data.tar.gz: b030b96ca377a1170961dbf1c6aa1026493756baea1e58a455e4bf454e13cb7af47a53f72807d66f2dbb8c0b93d12ff10881bda617897205f69fb0a977f83844
|
data/README.md
CHANGED
@@ -11,7 +11,6 @@ ASKER helps trainers to create a huge amount of questions, from a definitions (_
|
|
11
11
|
|
12
12
|
* Free Software [LICENSE](LICENSE).
|
13
13
|
* Multiplatform.
|
14
|
-
* [Ruby program](https://rubygems.org/gems/asker-tool)
|
15
14
|
|
16
15
|
## Installation
|
17
16
|
|
@@ -22,20 +21,14 @@ ASKER helps trainers to create a huge amount of questions, from a definitions (_
|
|
22
21
|
|
23
22
|
## Usage
|
24
23
|
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
1. Run _asker_ and get the results into `output` directory.
|
29
|
-
|
30
|
-
Example: Running `asker` with our example input file as argument (`acdc.haml`):
|
31
|
-
|
32
|
-
```
|
24
|
+
1. **Create input file** with your content (_conceptual map_). Examples at [Asker inputs folder](./docs/examples).
|
25
|
+
2. **Run `asker PATH/TO/INPUT`**. Example: Create questions from ACDC input example file:
|
26
|
+
```bash
|
33
27
|
asker docs/examples/bands/acdc.haml
|
34
28
|
```
|
29
|
+
3. Output files created into the `output` folder.
|
35
30
|
|
36
|
-
|
37
|
-
* More [example input files](./docs/examples).
|
38
|
-
* More asker input files at [github/dvarrui/asker-inputs](https://github.com/dvarrui/asker-inputs) repository.
|
31
|
+
> More input examples at [dvarrui/asker-input](https://github.com/dvarrui/asker-inputs) repository.
|
39
32
|
|
40
33
|
## Documentation
|
41
34
|
|
@@ -43,6 +36,7 @@ asker docs/examples/bands/acdc.haml
|
|
43
36
|
* [Videos](docs/videos.md)
|
44
37
|
* [Inputs](docs/inputs/README.md)
|
45
38
|
* [Usage](docs/usage.md)
|
39
|
+
* [Reference](docs/reference.md)
|
46
40
|
* [Contributions](docs/contributions.md)
|
47
41
|
* [Problem to solve](docs/idea.md)
|
48
42
|
* [History](docs/history.md)
|
@@ -50,4 +44,3 @@ asker docs/examples/bands/acdc.haml
|
|
50
44
|
## Contact
|
51
45
|
|
52
46
|
* **Email**: `teuton.software@protonmail.com`
|
53
|
-
* **Twitter**: `@SoftwareTeuton`
|
@@ -5,7 +5,8 @@ require 'set'
|
|
5
5
|
require_relative 'base_stage'
|
6
6
|
require_relative '../question'
|
7
7
|
|
8
|
-
|
8
|
+
##
|
9
|
+
# range d1-d4: d1choice, d1none-misspelled, d1none
|
9
10
|
class StageD < BaseStage
|
10
11
|
def run
|
11
12
|
# Stage D: process every definition, I mean every <def> tag
|
@@ -15,6 +16,7 @@ class StageD < BaseStage
|
|
15
16
|
lang = concept.lang
|
16
17
|
# for every <text> do this
|
17
18
|
concept.texts.each do |t|
|
19
|
+
# s => concept name, none and neighbors
|
18
20
|
s = Set.new [name(:raw), lang.text_for(:none)]
|
19
21
|
concept.neighbors.each { |n| s.add n[:concept].name(:decorated) }
|
20
22
|
a = s.to_a
|
@@ -81,13 +83,20 @@ class StageD < BaseStage
|
|
81
83
|
|
82
84
|
# Question choice => true
|
83
85
|
q = Question.new(:choice)
|
84
|
-
q.name = "#{name(:id)}-#{num}-d2true"
|
86
|
+
q.name = "#{name(:id)}-#{num}-d2true-misspelled"
|
85
87
|
q.text = random_image_for(name(:raw)) + lang.text_for(:d2, name(:raw), t)
|
86
88
|
q.good = lang.text_for(:true)
|
87
89
|
q.bads << lang.text_for(:misspelling)
|
88
90
|
q.bads << lang.text_for(:false)
|
89
91
|
questions << q
|
90
92
|
|
93
|
+
# Question boolean => true
|
94
|
+
q = Question.new(:boolean)
|
95
|
+
q.name = "#{name(:id)}-#{num}-d2true"
|
96
|
+
q.text = random_image_for(name(:raw)) + lang.text_for(:d2, name(:raw), t)
|
97
|
+
q.good = 'TRUE'
|
98
|
+
questions << q
|
99
|
+
|
91
100
|
# Question choice => false
|
92
101
|
if a.size > 1
|
93
102
|
q = Question.new(:choice)
|
@@ -97,6 +106,13 @@ class StageD < BaseStage
|
|
97
106
|
q.bads << lang.text_for(:misspelling)
|
98
107
|
q.bads << lang.text_for(:true)
|
99
108
|
questions << q
|
109
|
+
|
110
|
+
# Question boolean => false
|
111
|
+
q = Question.new(:boolean)
|
112
|
+
q.name = "#{name(:id)}-#{num}-d2false"
|
113
|
+
q.text = random_image_for(name(:raw)) + lang.text_for(:d2, a[1], t)
|
114
|
+
q.good = 'FALSE'
|
115
|
+
questions << q
|
100
116
|
end
|
101
117
|
|
102
118
|
# Question hidden name questions
|
@@ -130,10 +146,4 @@ class StageD < BaseStage
|
|
130
146
|
|
131
147
|
questions
|
132
148
|
end
|
133
|
-
# rubocop:enable Lint/BooleanSymbol
|
134
|
-
# rubocop:enable Metrics/MethodLength
|
135
|
-
# rubocop:enable Metrics/AbcSize
|
136
|
-
# rubocop:enable Metrics/BlockLength
|
137
|
-
# rubocop:enable Metrics/CyclomaticComplexity
|
138
|
-
# rubocop:enable Metrics/PerceivedComplexity
|
139
149
|
end
|
data/lib/asker/files/asker.ini
CHANGED
@@ -4,13 +4,13 @@
|
|
4
4
|
%names AC/DC, ACDC
|
5
5
|
%tags rock, band, australia
|
6
6
|
%def Australian rock band formed by Scottish-born brothers Malcolm and Angus Young
|
7
|
-
%table{ fields: 'members'}
|
7
|
+
%table{ fields: 'members' }
|
8
8
|
%row Bon Scott
|
9
9
|
%row Angus Young
|
10
10
|
%row Malcolm Young
|
11
11
|
%row Phil Rudd
|
12
12
|
%row Cliff Williams
|
13
|
-
%table{ fields: 'attribute, value'}
|
13
|
+
%table{ fields: 'attribute, value' }
|
14
14
|
%row
|
15
15
|
%col Genres
|
16
16
|
%col Hard rock blues rock rock and roll
|
@@ -20,7 +20,7 @@
|
|
20
20
|
%row
|
21
21
|
%col Formed in
|
22
22
|
%col Sydney
|
23
|
-
%table{ fields: 'Albums', sequence: 'Albums sorted by date'}
|
23
|
+
%table{ fields: 'Albums', sequence: 'Albums sorted by date' }
|
24
24
|
%row Albums High Voltage
|
25
25
|
%row Powerage
|
26
26
|
%row Highway to Hell
|
@@ -11,47 +11,24 @@ module EmbeddedFile
|
|
11
11
|
# @param localdir (String) Input file base folder
|
12
12
|
# @return Hash
|
13
13
|
def self.load(value, localdir)
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
html_text = "<b> #{value}: Unkown file type!</b>"
|
22
|
-
end
|
23
|
-
return { text: html_text, file: :none }
|
14
|
+
return load_image(value, localdir) if is_image? value
|
15
|
+
return load_audio(value, localdir) if is_audio? value
|
16
|
+
return load_video(value, localdir) if is_video? value
|
17
|
+
|
18
|
+
if is_url? value
|
19
|
+
Logger.verbose Rainbow("[ERROR] Unkown URL type!: #{value}").red.bright
|
20
|
+
exit 1
|
24
21
|
end
|
25
22
|
|
26
23
|
filepath = File.join(localdir, value)
|
27
24
|
unless File.exist?(filepath)
|
28
|
-
|
29
|
-
|
25
|
+
Logger.verbose Rainbow("[ERROR] File does not exist!: #{filepath}").red.bright
|
26
|
+
# return { text: "URI error", file: :none, type: :unkown }
|
30
27
|
exit 1
|
31
28
|
end
|
32
|
-
if is_image? filepath
|
33
|
-
text = '<img src="@@PLUGINFILE@@/' + File.basename(filepath) \
|
34
|
-
+ '" alt="imagen" class="img-responsive atto_image_button_text-bottom">'
|
35
|
-
data = '<file name="' + File.basename(filepath) + '" path="/" encoding="base64">' \
|
36
|
-
+ Base64.strict_encode64(File.open(filepath, 'rb').read) + '</file>'
|
37
|
-
return { text: text, file: data }
|
38
|
-
elsif is_audio? filepath
|
39
|
-
text = '<audio controls><source src="@@PLUGINFILE@@/' + File.basename(filepath) \
|
40
|
-
+ '">Your browser does not support the audio tag.</audio>'
|
41
|
-
data = '<file name="' + File.basename(filepath) + '" path="/" encoding="base64">' \
|
42
|
-
+ Base64.strict_encode64(File.open(filepath, 'rb').read) + '</file>'
|
43
|
-
return { text: text, file: data }
|
44
|
-
elsif is_video? filepath
|
45
|
-
text = '<video controls><source src="@@PLUGINFILE@@/' + File.basename(filepath) \
|
46
|
-
+ '">Your browser does not support the video tag.</video>'
|
47
|
-
data = '<file name="' + File.basename(filepath) + '" path="/" encoding="base64">' \
|
48
|
-
+ Base64.strict_encode64(File.open(filepath, 'rb').read) + '</file>'
|
49
|
-
return { text: text, file: data }
|
50
|
-
end
|
51
|
-
# Suposse that filename is TXT file
|
52
|
-
return { text: "<pre>#{File.read(filepath)}</pre>", file: :none } if File.exist?(filepath)
|
53
29
|
|
54
|
-
|
30
|
+
# Suposse that filename is TEXT file
|
31
|
+
return { text: "<pre>#{File.read(filepath)}</pre>", file: :none, type: :text }
|
55
32
|
end
|
56
33
|
|
57
34
|
def self.is_audio?(filename)
|
@@ -72,5 +49,81 @@ module EmbeddedFile
|
|
72
49
|
false
|
73
50
|
end
|
74
51
|
|
52
|
+
def self.is_url?(value)
|
53
|
+
return true if value.start_with?('https://') || value.start_with?('http://')
|
54
|
+
false
|
55
|
+
end
|
56
|
+
|
57
|
+
def self.load_audio(value, localdir)
|
58
|
+
output = { text: :error, file: :none, type: :audio}
|
59
|
+
|
60
|
+
if is_url? value
|
61
|
+
output[:text] = "<audio src=\"#{value}\" controls></audio>"
|
62
|
+
output[:file] = :none
|
63
|
+
output[:type] = :url
|
64
|
+
return output
|
65
|
+
end
|
66
|
+
|
67
|
+
filepath = File.join(localdir, value)
|
68
|
+
unless File.exist?(filepath)
|
69
|
+
Logger.verbose Rainbow("[ERROR] Audio file no exists!: #{filepath}").red.bright
|
70
|
+
exit 1
|
71
|
+
end
|
72
|
+
output[:text] = '<audio controls><source src="@@PLUGINFILE@@/' + File.basename(filepath) \
|
73
|
+
+ '">Your browser does not support the audio tag.</audio>'
|
74
|
+
output[:file] = '<file name="' + File.basename(filepath) \
|
75
|
+
+ '" path="/" encoding="base64">' \
|
76
|
+
+ Base64.strict_encode64(File.open(filepath, 'rb').read) + '</file>'
|
77
|
+
output[:type] = :audio
|
78
|
+
output
|
79
|
+
end
|
80
|
+
|
81
|
+
def self.load_image(value, localdir)
|
82
|
+
output = { text: :error, file: :none, type: :image}
|
83
|
+
|
84
|
+
if is_url? value
|
85
|
+
output[:text] = "<img src=\"#{value}\" alt=\"image\" width=\"400\" height=\"300\">"
|
86
|
+
output[:file] = :none
|
87
|
+
output[:type] = :url
|
88
|
+
return output
|
89
|
+
end
|
90
|
+
|
91
|
+
filepath = File.join(localdir, value)
|
92
|
+
unless File.exist?(filepath)
|
93
|
+
Logger.verbose Rainbow("[ERROR] Unknown file! #{filepath}").red.bright
|
94
|
+
exit 1
|
95
|
+
end
|
96
|
+
output[:text] = '<img src="@@PLUGINFILE@@/' + File.basename(filepath) \
|
97
|
+
+ '" alt="imagen" class="img-responsive atto_image_button_text-bottom">'
|
98
|
+
output[:file] = '<file name="' + File.basename(filepath) \
|
99
|
+
+ '" path="/" encoding="base64">' \
|
100
|
+
+ Base64.strict_encode64(File.open(filepath, 'rb').read) + '</file>'
|
101
|
+
output[:type] = :image
|
102
|
+
output
|
103
|
+
end
|
104
|
+
|
105
|
+
def self.load_video(value, localdir)
|
106
|
+
output = { text: :error, file: :none, type: :video}
|
75
107
|
|
108
|
+
if is_url? value
|
109
|
+
output[:text] = "<video controls width=\"400\" height=\"300\">" \
|
110
|
+
+ "<source src=\"#{value}\"/></video>"
|
111
|
+
output[:file] = :none
|
112
|
+
output[:type] = :url
|
113
|
+
return output
|
114
|
+
end
|
115
|
+
|
116
|
+
filepath = File.join(localdir, value)
|
117
|
+
unless File.exist?(filepath)
|
118
|
+
Logger.verbose Rainbow("[ERROR] Unknown file! #{filepath}").red.bright
|
119
|
+
exit 1
|
120
|
+
end
|
121
|
+
output[:text] = '<video controls><source src="@@PLUGINFILE@@/' + File.basename(filepath) \
|
122
|
+
+ '"/>Your browser does not support the video tag.</video>'
|
123
|
+
output[:file] = '<file name="' + File.basename(filepath) \
|
124
|
+
+ '" path="/" encoding="base64">' \
|
125
|
+
+ Base64.strict_encode64(File.open(filepath, 'rb').read) + '</file>'
|
126
|
+
output[:type] = :video
|
127
|
+
output
|
128
|
+
end
|
76
129
|
end
|
data/lib/asker/version.rb
CHANGED
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: asker-tool
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 2.5.
|
4
|
+
version: 2.5.1
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- David Vargas Ruiz
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2022-
|
11
|
+
date: 2022-10-22 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: haml
|