ast-tdl 0.0.1

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml ADDED
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA256:
3
+ metadata.gz: 2f857804cef121dd1c5f2a8e41ab0d27098517e03ee15c8316bc0e62d7707093
4
+ data.tar.gz: 2235c16bf905edf99c00693477e5b9c0f037b084c39ca541bec49f00031f9cdb
5
+ SHA512:
6
+ metadata.gz: 62436ef8167db994e207f1309c7a41a9b022ceae7ca85f82f57b9f630134965859ceb845953b99c5858a3a16613961ba04507451252a27597da9702e86458655
7
+ data.tar.gz: 10e94fd67a4301721b0b600b4786fe73d5527493a3c192d85e1f7d8c290fe376a79f4e3ebab62f63eba8748b7af025fbf59cd1d4203b608634e5f0ae31f644b5
data/README.md ADDED
@@ -0,0 +1,33 @@
1
+ # Training Description Language (TDL) for Artificial Sport Trainer (AST)
2
+
3
+ AST-DSL is a very small domain-specific language
4
+
5
+ ## Objective
6
+
7
+ ## Installation
8
+
9
+ $ gem install ast-tdl
10
+
11
+ ## Language description
12
+
13
+ ## Examples
14
+
15
+ ### Session
16
+
17
+ ```ruby
18
+ session("Short swimming session today") {
19
+ sport :"swim"
20
+ info :"Very easy training"
21
+ avhr :"130"
22
+ td :"30"
23
+ }
24
+ ```
25
+ ## License
26
+
27
+ This package is distributed under the MIT License. This license can be found online at <http://www.opensource.org/licenses/MIT>.
28
+
29
+ ## Disclaimer
30
+
31
+ This framework is provided as-is, and there are no guarantees that it fits your purposes or that it is bug-free. Use it at your own risk!
32
+
33
+
data/lib/ast-tdl.rb ADDED
@@ -0,0 +1 @@
1
+ require 'ast'
data/lib/ast.rb ADDED
@@ -0,0 +1,53 @@
1
+ require 'json'
2
+
3
+ require_relative 'classes'
4
+ require_relative 'interval'
5
+ require_relative 'session'
6
+
7
+
8
+ module Ast
9
+ def self.build(name, &block)
10
+ training = Training.new(name)
11
+ training.instance_eval(&block)
12
+ return training
13
+ end
14
+
15
+ class Training
16
+ def initialize(name)
17
+ @name = name
18
+ @session = []
19
+ @interval = []
20
+ end
21
+
22
+ def session(name, &block)
23
+ training_type = Session.new(name)
24
+ training_type.instance_eval(&block)
25
+ @session << training_type
26
+ end
27
+
28
+ def interval(name, &block)
29
+ interval_data = Interval.new(name)
30
+ interval_data.instance_eval(&block)
31
+ @interval << interval_data
32
+ end
33
+
34
+ def to_s
35
+ str = "#{@name} #{@session[0]}"
36
+ end
37
+
38
+ def json
39
+ training_json = {
40
+ name: @name,
41
+ session: @session.collect { |x| x.to_hash },
42
+ interval: @interval.collect { |x| x.to_hash },
43
+ }
44
+ training_json.to_json
45
+ end
46
+
47
+ def save_to_file(filename)
48
+ f = File.open(filename, "w")
49
+ f.puts(json)
50
+ f.close
51
+ end
52
+ end
53
+ end
data/lib/classes.rb ADDED
@@ -0,0 +1,86 @@
1
+ require 'json'
2
+
3
+
4
+ class Sport
5
+ attr_reader :type
6
+
7
+ def initialize(type)
8
+ @type = type
9
+ end
10
+
11
+ def to_hash
12
+ sport_json = {
13
+ type: @type
14
+ }
15
+ end
16
+ end
17
+
18
+ class Info
19
+ attr_reader :message
20
+
21
+ def initialize(message)
22
+ @message = message
23
+ end
24
+
25
+ def to_hash
26
+ info_json = {
27
+ message: @message
28
+ }
29
+ end
30
+ end
31
+
32
+ class Avhr
33
+ attr_reader :heart_rate
34
+
35
+ def initialize(heart_rate)
36
+ @heart_rate = heart_rate
37
+ end
38
+
39
+ def to_hash
40
+ info_json = {
41
+ average_hr: @heart_rate
42
+ }
43
+ end
44
+ end
45
+
46
+ class Td
47
+ attr_reader :duration
48
+
49
+ def initialize(duration)
50
+ @duration = duration
51
+ end
52
+
53
+ def to_hash
54
+ td_json = {
55
+ duration: @duration
56
+ }
57
+ end
58
+ end
59
+
60
+ class AvhrRest
61
+ attr_reader :avhr_rest
62
+
63
+ def initialize(avhr_rest)
64
+ @avhr_rest = avhr_rest
65
+ end
66
+
67
+ def to_hash
68
+ avhr_json = {
69
+ average_hr_rest: @avhr_rest
70
+ }
71
+ end
72
+ end
73
+
74
+ class TdRest
75
+ attr_reader :td_rest
76
+
77
+ def initialize(td_rest)
78
+ @td_rest = td_rest
79
+ end
80
+
81
+ def to_hash
82
+ td_json = {
83
+ duration_rest: @td_rest
84
+ }
85
+ end
86
+ end
data/lib/interval.rb ADDED
@@ -0,0 +1,51 @@
1
+ class Interval
2
+ def initialize(name)
3
+ @name = []
4
+ @sport = []
5
+ @info = []
6
+ @avhr = []
7
+ @td = []
8
+ @avhr_rest = []
9
+ @td_rest = []
10
+ end
11
+
12
+ def sport(type)
13
+ @sport << Sport.new(type)
14
+ end
15
+
16
+ def info(message)
17
+ @info << Info.new(message)
18
+ end
19
+
20
+ def avhr(heart_rate)
21
+ @avhr << Avhr.new(heart_rate)
22
+ end
23
+
24
+ def td(duration)
25
+ @td << Td.new(duration)
26
+ end
27
+
28
+ def avhr_rest(heart_rate_rest)
29
+ @avhr_rest << AvhrRest.new(heart_rate_rest)
30
+ end
31
+
32
+ def td_rest(duration_rest)
33
+ @td_rest << TdRest.new(duration_rest)
34
+ end
35
+
36
+ def to_s
37
+ str = "#{@sport[0].type} #{@info[0].message}"
38
+ end
39
+
40
+ def to_hash
41
+ interval_json = {
42
+ name: @name.collect { |x| x.to_hash },
43
+ sport: @sport.collect { |x| x.to_hash },
44
+ info: @info.collect { |x| x.to_hash },
45
+ average_hr: @avhr.collect { |x| x.to_hash },
46
+ duration: @td.collect { |x| x.to_hash },
47
+ average_hr_rest: @avhr_rest.collect { |x| x.to_hash },
48
+ duration_rest: @td_rest.collect { |x| x.to_hash },
49
+ }
50
+ end
51
+ end
data/lib/session.rb ADDED
@@ -0,0 +1,42 @@
1
+ require 'json'
2
+
3
+
4
+ class Session
5
+ def initialize(name)
6
+ @name = []
7
+ @sport = []
8
+ @info = []
9
+ @avhr = []
10
+ @td = []
11
+ end
12
+
13
+ def sport(type)
14
+ @sport << Sport.new(type)
15
+ end
16
+
17
+ def info(message)
18
+ @info << Info.new(message)
19
+ end
20
+
21
+ def avhr(heart_rate)
22
+ @avhr << Avhr.new(heart_rate)
23
+ end
24
+
25
+ def td(duration)
26
+ @td << Td.new(duration)
27
+ end
28
+
29
+ def to_s
30
+ str = "#{@sport[0].type} #{@info[0].message}"
31
+ end
32
+
33
+ def to_hash
34
+ session_json = {
35
+ name: @name.collect { |x| x.to_hash },
36
+ sport: @sport.collect { |x| x.to_hash },
37
+ info: @info.collect { |x| x.to_hash },
38
+ average_hr: @avhr.collect { |x| x.to_hash },
39
+ duration: @td.collect { |x| x.to_hash },
40
+ }
41
+ end
42
+ end
metadata ADDED
@@ -0,0 +1,54 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: ast-tdl
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.0.1
5
+ platform: ruby
6
+ authors:
7
+ - firefly-cpp
8
+ - luckyLukac
9
+ autorequire:
10
+ bindir: bin
11
+ cert_chain: []
12
+ date: 2022-06-14 00:00:00.000000000 Z
13
+ dependencies: []
14
+ description:
15
+ email:
16
+ - iztok@iztok-jr-fister.eu
17
+ - luka.lukac@student.um.si
18
+ executables: []
19
+ extensions: []
20
+ extra_rdoc_files: []
21
+ files:
22
+ - README.md
23
+ - lib/ast-tdl.rb
24
+ - lib/ast.rb
25
+ - lib/classes.rb
26
+ - lib/interval.rb
27
+ - lib/session.rb
28
+ homepage: https://github.com/firefly-cpp/AST-DSL
29
+ licenses: []
30
+ metadata:
31
+ homepage_uri: https://github.com/firefly-cpp/AST-DSL
32
+ source_code_uri: https://github.com/firefly-cpp/AST-DSL
33
+ changelog_uri: https://github.com/firefly-cpp/AST-DSL
34
+ post_install_message:
35
+ rdoc_options: []
36
+ require_paths:
37
+ - lib
38
+ required_ruby_version: !ruby/object:Gem::Requirement
39
+ requirements:
40
+ - - ">="
41
+ - !ruby/object:Gem::Version
42
+ version: 2.4.0
43
+ required_rubygems_version: !ruby/object:Gem::Requirement
44
+ requirements:
45
+ - - ">="
46
+ - !ruby/object:Gem::Version
47
+ version: '0'
48
+ requirements: []
49
+ rubygems_version: 3.3.7
50
+ signing_key:
51
+ specification_version: 4
52
+ summary: An experimental and minimalistic Training Description Language for Artificial
53
+ Sport Trainer
54
+ test_files: []