pfa 1.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.
- checksums.yaml +7 -0
- data/.DS_Store +0 -0
- data/.gitignore +8 -0
- data/.travis.yml +6 -0
- data/CHANGELOG.md +9 -0
- data/Gemfile +7 -0
- data/Gemfile.lock +46 -0
- data/README.md +156 -0
- data/Rakefile +10 -0
- data/bin/console +14 -0
- data/bin/setup +8 -0
- data/lib/assets/Manuel/ImageMagick.md +155 -0
- data/lib/assets/Manuel/Manuel-developer.md +50 -0
- data/lib/assets/fr/PFA_ABSOLUTE_DATA.yaml +212 -0
- data/lib/assets/fr/errors.yaml +107 -0
- data/lib/pfa/absolute_pfa.rb +25 -0
- data/lib/pfa/any_builder.rb +28 -0
- data/lib/pfa/constants.rb +24 -0
- data/lib/pfa/errors_manager.rb +14 -0
- data/lib/pfa/imagemagick_module.rb +551 -0
- data/lib/pfa/img_builder.rb +198 -0
- data/lib/pfa/node_time.rb +188 -0
- data/lib/pfa/pfa_element_module.rb +30 -0
- data/lib/pfa/relative_pfa.rb +191 -0
- data/lib/pfa/relative_pfa_datatime.rb +27 -0
- data/lib/pfa/relative_pfa_node.rb +238 -0
- data/lib/pfa/temporal_methods.rb +69 -0
- data/lib/pfa/version.rb +3 -0
- data/lib/pfa.rb +20 -0
- data/pfa.gemspec +34 -0
- data/pfa.jpg +0 -0
- metadata +147 -0
@@ -0,0 +1,238 @@
|
|
1
|
+
require_relative 'imagemagick_module'
|
2
|
+
require_relative 'pfa_element_module'
|
3
|
+
|
4
|
+
module PFA
|
5
|
+
class RelativePFA
|
6
|
+
class Node
|
7
|
+
|
8
|
+
include PFAElementModule
|
9
|
+
include MagickPFA
|
10
|
+
|
11
|
+
attr_reader :pfa, :key
|
12
|
+
|
13
|
+
attr_reader :description
|
14
|
+
|
15
|
+
def initialize(pfa, key, value = nil)
|
16
|
+
@pfa = pfa
|
17
|
+
@key = key
|
18
|
+
parse_raw_value(value)
|
19
|
+
end
|
20
|
+
|
21
|
+
def code_image_magick
|
22
|
+
pfa.img_builder.code_image_magick
|
23
|
+
end
|
24
|
+
|
25
|
+
# --- MÉTHODES TEMPORELLES ---
|
26
|
+
|
27
|
+
# -- Temps relatifs --
|
28
|
+
|
29
|
+
# [PFA::NTime] Temps (relatif) de début du nœud
|
30
|
+
# @note : défini à l'instantiation
|
31
|
+
def start_at
|
32
|
+
@start_at
|
33
|
+
end
|
34
|
+
|
35
|
+
# [PFA::NTime] Temps (relatif) de fin du noeud
|
36
|
+
def end_at
|
37
|
+
@end_at ||= start_at + duration # attention : 2 NTime
|
38
|
+
end
|
39
|
+
|
40
|
+
# \PFA::NTime Durée
|
41
|
+
# Soit elle a été explicitement définie en renseignant le noeud,
|
42
|
+
# soit on lui donne la valeur de la durée absolue.
|
43
|
+
# Sauf pour les actes, qui possèdent leur propre calcul, étant
|
44
|
+
# donné qu'ils dépendent d'autres éléments
|
45
|
+
def duration
|
46
|
+
@duration ||= begin
|
47
|
+
if type == :part
|
48
|
+
case key
|
49
|
+
when :exposition then @end_at = pfa.developpement_part1.start_at
|
50
|
+
when :developpement_part1 then @end_at = pfa.developpement_part2.start_at
|
51
|
+
when :developpement_part2 then @end_at = pfa.denouement.start_at
|
52
|
+
when :denouement then @end_at = PFA::NTime.new(pfa.duration.to_i)
|
53
|
+
end
|
54
|
+
end_at - start_at
|
55
|
+
else
|
56
|
+
abs_duration
|
57
|
+
end
|
58
|
+
end
|
59
|
+
end
|
60
|
+
|
61
|
+
# [String] Horloge du temps (relatif) de départ
|
62
|
+
def horloge
|
63
|
+
@horloge ||= start_at.to_horloge
|
64
|
+
end
|
65
|
+
|
66
|
+
# -- Temps Absolus --
|
67
|
+
|
68
|
+
# [PFA::NTime] Temps absolu (idéal) de départ
|
69
|
+
def abs_start
|
70
|
+
@abs_start ||= calc_with_fraction_of_duree(abs_data[:abs_start])
|
71
|
+
end
|
72
|
+
|
73
|
+
def abs_end
|
74
|
+
@abs_end ||= abs_start + abs_duration
|
75
|
+
end
|
76
|
+
|
77
|
+
def abs_duration
|
78
|
+
@abs_duration ||= calc_with_fraction_of_duree(abs_data[:abs_duration])
|
79
|
+
end
|
80
|
+
|
81
|
+
# --- MÉTHODES DE DIMENSIONNEMENT ---
|
82
|
+
|
83
|
+
# -- Dimensions Absolues --
|
84
|
+
|
85
|
+
def abs_left
|
86
|
+
@abs_left ||= abs_start.to_px(pfa)#.tap { |n| dbg "abs_left: #{n}".bleu}
|
87
|
+
end
|
88
|
+
|
89
|
+
def abs_width
|
90
|
+
@abs_width ||= abs_duration.to_px(pfa)
|
91
|
+
end
|
92
|
+
|
93
|
+
def abs_right
|
94
|
+
@abs_right ||= begin
|
95
|
+
if id == 'DE' # denouement
|
96
|
+
# Pour que le trait du dénouement soit dans l'image
|
97
|
+
abs_left + abs_width - 2
|
98
|
+
else
|
99
|
+
abs_left + abs_width
|
100
|
+
end
|
101
|
+
end
|
102
|
+
end
|
103
|
+
|
104
|
+
def abs_top
|
105
|
+
@abs_top ||= MagickPFA::ABS_TOPS[type]
|
106
|
+
end
|
107
|
+
|
108
|
+
def abs_bottom
|
109
|
+
@abs_bottom ||= MagickPFA::ABS_BOTTOMS[type]
|
110
|
+
end
|
111
|
+
|
112
|
+
def abs_height
|
113
|
+
@abs_height ||= MagickPFA::HEIGHTS[type]
|
114
|
+
end
|
115
|
+
|
116
|
+
def img_abs_surface
|
117
|
+
@img_abs_surface ||= "#{abs_width}x#{abs_height}"
|
118
|
+
end
|
119
|
+
|
120
|
+
# -- Dimensions Relatives --
|
121
|
+
|
122
|
+
def left
|
123
|
+
@left ||= start_at.to_px(pfa)
|
124
|
+
end
|
125
|
+
|
126
|
+
def width
|
127
|
+
@width ||= duration.to_px(pfa)
|
128
|
+
end
|
129
|
+
|
130
|
+
def right
|
131
|
+
@right ||= begin
|
132
|
+
if id == 'DE' # denouement
|
133
|
+
# Pour que le trait du dénouement soit dans l'image
|
134
|
+
left + width - 2
|
135
|
+
else
|
136
|
+
left + width
|
137
|
+
end
|
138
|
+
end
|
139
|
+
end
|
140
|
+
|
141
|
+
def top
|
142
|
+
@top ||= MagickPFA::TOPS[type]
|
143
|
+
end
|
144
|
+
|
145
|
+
def bottom
|
146
|
+
@bottom ||= MagickPFA::BOTTOMS[type]
|
147
|
+
end
|
148
|
+
|
149
|
+
# Hauteur de la boite pour écrire le texte
|
150
|
+
def height
|
151
|
+
@height ||= (MagickPFA::HEIGHTS[type]).to_i
|
152
|
+
end
|
153
|
+
|
154
|
+
def img_surface
|
155
|
+
@img_surface ||= "#{width}x#{height}"
|
156
|
+
end
|
157
|
+
|
158
|
+
|
159
|
+
# --- Predicate Methods ---
|
160
|
+
|
161
|
+
# @return [Bool] true si le nœud courant est après
|
162
|
+
# le nœud [RelativePFA::Node] +node+
|
163
|
+
#
|
164
|
+
def after?(node)
|
165
|
+
# dbg "node = #{node.inspect}".orange
|
166
|
+
return start_at > node.start_at
|
167
|
+
end
|
168
|
+
|
169
|
+
|
170
|
+
# --- Absolute Data ---
|
171
|
+
|
172
|
+
# \Hash Données absolues du nœud
|
173
|
+
def abs_data
|
174
|
+
@abs_data ||= AbsolutePFA.data[:nodes][key]
|
175
|
+
end
|
176
|
+
|
177
|
+
def mark
|
178
|
+
abs_data[:hname]
|
179
|
+
end
|
180
|
+
|
181
|
+
def type
|
182
|
+
abs_data[:type].to_sym
|
183
|
+
end
|
184
|
+
|
185
|
+
def id
|
186
|
+
abs_data[:id]
|
187
|
+
end
|
188
|
+
|
189
|
+
# --- Calculated Values (dimensions) ---
|
190
|
+
|
191
|
+
|
192
|
+
|
193
|
+
# -- Des valeurs qui peuvent servir… --
|
194
|
+
def demiheight ; @demiheight ||= height / 2 end
|
195
|
+
def demiwidth ; @demiwidth ||= width / 2 end
|
196
|
+
def abs_demiwidth ; @absdemiwidth ||= abs_width / 2 end
|
197
|
+
def hcenter ; @hcenter ||= left + demiwidth end
|
198
|
+
def abs_hcenter ; @abshcenter ||= abs_left + abs_demiwidth end
|
199
|
+
def vcenter ; @vcenter ||= top + demiheight end
|
200
|
+
# Le bas ultime du paradigme ?
|
201
|
+
def box_bottom ; @box_bottom ||= top + 13 * MagickPFA::LINE_HEIGHT end
|
202
|
+
|
203
|
+
|
204
|
+
private
|
205
|
+
|
206
|
+
|
207
|
+
# Méthode qui parse la valeur fournie à l'instantiation pour en
|
208
|
+
# tirer les valeurs (@start_at et @duration)
|
209
|
+
def parse_raw_value(value)
|
210
|
+
@raw_value = value
|
211
|
+
if value.is_a?(Hash)
|
212
|
+
@start_at = NTime.new(value[:t], pfa.zero.to_i)
|
213
|
+
@description = value[:d]
|
214
|
+
if value.key?(:duree) || value.key?(:duration)
|
215
|
+
# La durée est fournie en secondes, elle doit donc être
|
216
|
+
# ramenée à la valeur sur 120 minutes
|
217
|
+
@duration = NTime.new(value[:duree]||value[:duration], 0)
|
218
|
+
end
|
219
|
+
end
|
220
|
+
end
|
221
|
+
|
222
|
+
# @return [PFA::NTime] le temps représenté par une fraction dans
|
223
|
+
# les données absolues du Paradigme de Field Augmenté
|
224
|
+
#
|
225
|
+
# @param [String] fraction_str
|
226
|
+
# Cette fraction peut avoir les aspects suivants :
|
227
|
+
# 1/2
|
228
|
+
# 1/2 + 1/48
|
229
|
+
# 1/2 - 1/24
|
230
|
+
#
|
231
|
+
def calc_with_fraction_of_duree(fraction_str)
|
232
|
+
fraction = eval(fraction_str.to_s.gsub(/\//,'.0/')) # p.e. 1/24 => 1.0/24
|
233
|
+
return PFA::NTime.new(pfa.duration.to_i * fraction, 0)
|
234
|
+
end
|
235
|
+
|
236
|
+
end #/class Node
|
237
|
+
end #/class RelativePFA
|
238
|
+
end #/module PFA
|
@@ -0,0 +1,69 @@
|
|
1
|
+
module PFA
|
2
|
+
|
3
|
+
# Reçoit une valeur temporelle quelconque (mais valide) et retourne
|
4
|
+
# le temps \Time correspondant
|
5
|
+
#
|
6
|
+
# Les valeurs adminissibles sont \Time, \String (format horloge)
|
7
|
+
# ou \Integer (nombre de secondes)
|
8
|
+
#
|
9
|
+
def self.time_from(value)
|
10
|
+
case value
|
11
|
+
when Time then value
|
12
|
+
when String then PFA.h2t(value)
|
13
|
+
when Integer then Time.at(value)
|
14
|
+
else raise PFAFatalError.new(52, **{value:"#{value.inspect}::#{value.class}"})
|
15
|
+
end
|
16
|
+
end
|
17
|
+
|
18
|
+
# Reçoit une horloge au format \String et retourne un nombre
|
19
|
+
# de secondes correspondant.
|
20
|
+
#
|
21
|
+
# @param \String horloge L'horloge transmise, sous différents
|
22
|
+
# formats possible, comme 'H:M:S', 'H+M+S' ou 'H,M,S'
|
23
|
+
#
|
24
|
+
def self.h2s(horloge)
|
25
|
+
horloge.match?(REG_HORLOGE) || raise(PFAFatalError.new(52, **{value:"#{horloge.inspect}::#{horloge.class}"}))
|
26
|
+
s, m, h = horloge.split(/[+,:]/).reverse.collect {|n| n.to_i}
|
27
|
+
return (s||0) + (m||0) * 60 + (h||0) * 3600
|
28
|
+
end
|
29
|
+
|
30
|
+
# Reçoit une horloge et retourne le temps correspondant
|
31
|
+
def self.h2t(horloge)
|
32
|
+
Time.at(h2s(horloge))
|
33
|
+
end
|
34
|
+
|
35
|
+
# Reçoit un nombre de secondes \Integer et retourne une horloge
|
36
|
+
# au format 'H:MM:SS'
|
37
|
+
# Si +options[:as]+ = :duree, on renvoie une version durée,
|
38
|
+
# c'est-à-dire avec les heures, et les minutes sur deux chiffres
|
39
|
+
# seulement s'il y a des heures.
|
40
|
+
def self.s2h(secondes, **options)
|
41
|
+
secondes.is_a?(Integer) || raise(PFAFatalError.new(51), **{value: "#{secondes.inspect}::#{secondes.class}"})
|
42
|
+
h = secondes / 3600
|
43
|
+
r = secondes % 3600
|
44
|
+
m = r / 60
|
45
|
+
s = r % 60
|
46
|
+
if options[:as] == :duree
|
47
|
+
# -- Version durée --
|
48
|
+
# (on ne met les heures que si elles sont définies)
|
49
|
+
segs = []
|
50
|
+
segs << "#{h}" if h > 0
|
51
|
+
m = m.to_s.rjust(2,'0') if h > 0
|
52
|
+
segs << "#{m}"
|
53
|
+
segs << s.to_s.rjust(2,'0')
|
54
|
+
segs.join(':') # => "1:02:54" ou "2:45"
|
55
|
+
else
|
56
|
+
# -- Version horloge normale --
|
57
|
+
# (toujours avec les heures)
|
58
|
+
"#{h}:" + [m,s].collect{|n|n.to_s.rjust(2,'0')}.join(':')
|
59
|
+
end
|
60
|
+
end
|
61
|
+
|
62
|
+
# Reçoit un temps \Time et retourne une horloge 'H:MM:SS'
|
63
|
+
def self.t2h(time)
|
64
|
+
time.is_a?(Time) || raise(PFAFatalError.new(50, **{value: "#{time.inspect}::#{time.class}"}))
|
65
|
+
return s2h(time.to_i)
|
66
|
+
end
|
67
|
+
|
68
|
+
REG_HORLOGE = /^([0-9][+:,])?([0-9]{1,2}[+:,])?[0-9]{1,2}$/.freeze
|
69
|
+
end#/module PFA
|
data/lib/pfa/version.rb
ADDED
data/lib/pfa.rb
ADDED
@@ -0,0 +1,20 @@
|
|
1
|
+
def dbg(str)
|
2
|
+
STDOUT.write("\n#{str}\n")
|
3
|
+
end
|
4
|
+
require 'clir'
|
5
|
+
require 'yaml'
|
6
|
+
require 'singleton'
|
7
|
+
require "pfa/version"
|
8
|
+
require 'pfa/constants'
|
9
|
+
require 'pfa/errors_manager'
|
10
|
+
require 'pfa/temporal_methods'
|
11
|
+
require 'pfa/node_time'
|
12
|
+
require 'pfa/relative_pfa'
|
13
|
+
require 'pfa/absolute_pfa'
|
14
|
+
require 'pfa/relative_pfa_node'
|
15
|
+
require 'pfa/relative_pfa_datatime'
|
16
|
+
require 'pfa/img_builder'
|
17
|
+
|
18
|
+
module PFA
|
19
|
+
|
20
|
+
end
|
data/pfa.gemspec
ADDED
@@ -0,0 +1,34 @@
|
|
1
|
+
require_relative 'lib/pfa/version'
|
2
|
+
|
3
|
+
Gem::Specification.new do |s|
|
4
|
+
s.name = "pfa"
|
5
|
+
s.version = PFA::VERSION
|
6
|
+
s.authors = ["PhilippePerret"]
|
7
|
+
s.email = ["philippe.perret@yahoo.fr"]
|
8
|
+
|
9
|
+
s.summary = %q{Gestion d'un Paradigme de Field Augmentée (Field Augmented Paradigm)}
|
10
|
+
s.description = %q{Gestion complète d'un PFA, pour le produire soit en HTML soit en PDF et calculer les différences entre PFA relatif et PFA absolu.}
|
11
|
+
s.homepage = "https://rubygems.org/gems/pfa"
|
12
|
+
s.required_ruby_version = Gem::Requirement.new(">= 2.3.0")
|
13
|
+
|
14
|
+
s.metadata["allowed_push_host"] = "https://rubygems.org"
|
15
|
+
|
16
|
+
s.add_dependency 'yaml'
|
17
|
+
s.add_dependency 'clir'
|
18
|
+
s.add_dependency 'singleton'
|
19
|
+
s.add_development_dependency 'minitest'
|
20
|
+
s.add_development_dependency 'minitest-color'
|
21
|
+
|
22
|
+
s.metadata["homepage_uri"] = s.homepage
|
23
|
+
s.metadata["source_code_uri"] = "https://github.com/PhilippePerret/pfa"
|
24
|
+
s.metadata["changelog_uri"] = "https://github.com/PhilippePerret/pfa/CHANGELOG.md"
|
25
|
+
|
26
|
+
# Specify which files should be added to the gem when it is released.
|
27
|
+
# The `git ls-files -z` loads the files in the RubyGem that have been added into git.
|
28
|
+
s.files = Dir.chdir(File.expand_path('..', __FILE__)) do
|
29
|
+
`git ls-files -z`.split("\x0").reject { |f| f.match(%r{^(test)/}) }
|
30
|
+
end
|
31
|
+
s.bindir = "exe"
|
32
|
+
s.executables = s.files.grep(%r{^exe/}) { |f| File.basename(f) }
|
33
|
+
s.require_paths = ["lib"]
|
34
|
+
end
|
data/pfa.jpg
ADDED
Binary file
|
metadata
ADDED
@@ -0,0 +1,147 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: pfa
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 1.0.1
|
5
|
+
platform: ruby
|
6
|
+
authors:
|
7
|
+
- PhilippePerret
|
8
|
+
autorequire:
|
9
|
+
bindir: exe
|
10
|
+
cert_chain: []
|
11
|
+
date: 2023-09-09 00:00:00.000000000 Z
|
12
|
+
dependencies:
|
13
|
+
- !ruby/object:Gem::Dependency
|
14
|
+
name: yaml
|
15
|
+
requirement: !ruby/object:Gem::Requirement
|
16
|
+
requirements:
|
17
|
+
- - ">="
|
18
|
+
- !ruby/object:Gem::Version
|
19
|
+
version: '0'
|
20
|
+
type: :runtime
|
21
|
+
prerelease: false
|
22
|
+
version_requirements: !ruby/object:Gem::Requirement
|
23
|
+
requirements:
|
24
|
+
- - ">="
|
25
|
+
- !ruby/object:Gem::Version
|
26
|
+
version: '0'
|
27
|
+
- !ruby/object:Gem::Dependency
|
28
|
+
name: clir
|
29
|
+
requirement: !ruby/object:Gem::Requirement
|
30
|
+
requirements:
|
31
|
+
- - ">="
|
32
|
+
- !ruby/object:Gem::Version
|
33
|
+
version: '0'
|
34
|
+
type: :runtime
|
35
|
+
prerelease: false
|
36
|
+
version_requirements: !ruby/object:Gem::Requirement
|
37
|
+
requirements:
|
38
|
+
- - ">="
|
39
|
+
- !ruby/object:Gem::Version
|
40
|
+
version: '0'
|
41
|
+
- !ruby/object:Gem::Dependency
|
42
|
+
name: singleton
|
43
|
+
requirement: !ruby/object:Gem::Requirement
|
44
|
+
requirements:
|
45
|
+
- - ">="
|
46
|
+
- !ruby/object:Gem::Version
|
47
|
+
version: '0'
|
48
|
+
type: :runtime
|
49
|
+
prerelease: false
|
50
|
+
version_requirements: !ruby/object:Gem::Requirement
|
51
|
+
requirements:
|
52
|
+
- - ">="
|
53
|
+
- !ruby/object:Gem::Version
|
54
|
+
version: '0'
|
55
|
+
- !ruby/object:Gem::Dependency
|
56
|
+
name: minitest
|
57
|
+
requirement: !ruby/object:Gem::Requirement
|
58
|
+
requirements:
|
59
|
+
- - ">="
|
60
|
+
- !ruby/object:Gem::Version
|
61
|
+
version: '0'
|
62
|
+
type: :development
|
63
|
+
prerelease: false
|
64
|
+
version_requirements: !ruby/object:Gem::Requirement
|
65
|
+
requirements:
|
66
|
+
- - ">="
|
67
|
+
- !ruby/object:Gem::Version
|
68
|
+
version: '0'
|
69
|
+
- !ruby/object:Gem::Dependency
|
70
|
+
name: minitest-color
|
71
|
+
requirement: !ruby/object:Gem::Requirement
|
72
|
+
requirements:
|
73
|
+
- - ">="
|
74
|
+
- !ruby/object:Gem::Version
|
75
|
+
version: '0'
|
76
|
+
type: :development
|
77
|
+
prerelease: false
|
78
|
+
version_requirements: !ruby/object:Gem::Requirement
|
79
|
+
requirements:
|
80
|
+
- - ">="
|
81
|
+
- !ruby/object:Gem::Version
|
82
|
+
version: '0'
|
83
|
+
description: Gestion complète d'un PFA, pour le produire soit en HTML soit en PDF
|
84
|
+
et calculer les différences entre PFA relatif et PFA absolu.
|
85
|
+
email:
|
86
|
+
- philippe.perret@yahoo.fr
|
87
|
+
executables: []
|
88
|
+
extensions: []
|
89
|
+
extra_rdoc_files: []
|
90
|
+
files:
|
91
|
+
- ".DS_Store"
|
92
|
+
- ".gitignore"
|
93
|
+
- ".travis.yml"
|
94
|
+
- CHANGELOG.md
|
95
|
+
- Gemfile
|
96
|
+
- Gemfile.lock
|
97
|
+
- README.md
|
98
|
+
- Rakefile
|
99
|
+
- bin/console
|
100
|
+
- bin/setup
|
101
|
+
- lib/assets/Manuel/ImageMagick.md
|
102
|
+
- lib/assets/Manuel/Manuel-developer.md
|
103
|
+
- lib/assets/fr/PFA_ABSOLUTE_DATA.yaml
|
104
|
+
- lib/assets/fr/errors.yaml
|
105
|
+
- lib/pfa.rb
|
106
|
+
- lib/pfa/absolute_pfa.rb
|
107
|
+
- lib/pfa/any_builder.rb
|
108
|
+
- lib/pfa/constants.rb
|
109
|
+
- lib/pfa/errors_manager.rb
|
110
|
+
- lib/pfa/imagemagick_module.rb
|
111
|
+
- lib/pfa/img_builder.rb
|
112
|
+
- lib/pfa/node_time.rb
|
113
|
+
- lib/pfa/pfa_element_module.rb
|
114
|
+
- lib/pfa/relative_pfa.rb
|
115
|
+
- lib/pfa/relative_pfa_datatime.rb
|
116
|
+
- lib/pfa/relative_pfa_node.rb
|
117
|
+
- lib/pfa/temporal_methods.rb
|
118
|
+
- lib/pfa/version.rb
|
119
|
+
- pfa.gemspec
|
120
|
+
- pfa.jpg
|
121
|
+
homepage: https://rubygems.org/gems/pfa
|
122
|
+
licenses: []
|
123
|
+
metadata:
|
124
|
+
allowed_push_host: https://rubygems.org
|
125
|
+
homepage_uri: https://rubygems.org/gems/pfa
|
126
|
+
source_code_uri: https://github.com/PhilippePerret/pfa
|
127
|
+
changelog_uri: https://github.com/PhilippePerret/pfa/CHANGELOG.md
|
128
|
+
post_install_message:
|
129
|
+
rdoc_options: []
|
130
|
+
require_paths:
|
131
|
+
- lib
|
132
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
133
|
+
requirements:
|
134
|
+
- - ">="
|
135
|
+
- !ruby/object:Gem::Version
|
136
|
+
version: 2.3.0
|
137
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
138
|
+
requirements:
|
139
|
+
- - ">="
|
140
|
+
- !ruby/object:Gem::Version
|
141
|
+
version: '0'
|
142
|
+
requirements: []
|
143
|
+
rubygems_version: 3.1.6
|
144
|
+
signing_key:
|
145
|
+
specification_version: 4
|
146
|
+
summary: Gestion d'un Paradigme de Field Augmentée (Field Augmented Paradigm)
|
147
|
+
test_files: []
|