inferno_core 0.0.6 → 0.0.8

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.
Files changed (45) hide show
  1. checksums.yaml +4 -4
  2. data/bin/inferno +7 -0
  3. data/lib/inferno/apps/cli/console.rb +12 -0
  4. data/lib/inferno/apps/cli/main.rb +18 -0
  5. data/lib/inferno/apps/cli/migration.rb +14 -0
  6. data/lib/inferno/apps/cli.rb +8 -0
  7. data/lib/inferno/apps/web/index.html.erb +1 -0
  8. data/lib/inferno/config/application.rb +3 -0
  9. data/lib/inferno/config/boot/db.rb +1 -9
  10. data/lib/inferno/config/boot/logging.rb +2 -0
  11. data/lib/inferno/db/migrations/001_create_initial_structure.rb +1 -1
  12. data/lib/inferno/db/schema.rb +1 -1
  13. data/lib/inferno/dsl/assertions.rb +66 -1
  14. data/lib/inferno/dsl/configurable.rb +1 -1
  15. data/lib/inferno/dsl/fhir_client.rb +22 -18
  16. data/lib/inferno/dsl/fhir_client_builder.rb +3 -3
  17. data/lib/inferno/dsl/fhir_validation.rb +105 -1
  18. data/lib/inferno/dsl/http_client.rb +4 -4
  19. data/lib/inferno/dsl/http_client_builder.rb +3 -3
  20. data/lib/inferno/dsl/request_storage.rb +8 -8
  21. data/lib/inferno/dsl/results.rb +1 -1
  22. data/lib/inferno/dsl/resume_test_route.rb +9 -9
  23. data/lib/inferno/dsl/runnable.rb +36 -18
  24. data/lib/inferno/entities/header.rb +14 -7
  25. data/lib/inferno/entities/message.rb +16 -8
  26. data/lib/inferno/entities/request.rb +32 -19
  27. data/lib/inferno/entities/result.rb +36 -29
  28. data/lib/inferno/entities/session_data.rb +12 -6
  29. data/lib/inferno/entities/test.rb +13 -0
  30. data/lib/inferno/entities/test_run.rb +29 -6
  31. data/lib/inferno/entities/test_session.rb +16 -10
  32. data/lib/inferno/public/217.bundle.js +1 -1
  33. data/lib/inferno/public/bundle.js +154 -1
  34. data/lib/inferno/public/bundle.js.LICENSE.txt +15 -0
  35. data/lib/inferno/repositories/in_memory_repository.rb +1 -1
  36. data/lib/inferno/repositories/results.rb +1 -1
  37. data/lib/inferno/spec_support.rb +1 -1
  38. data/lib/inferno/test_runner.rb +1 -1
  39. data/lib/inferno/utils/markdown_formatter.rb +1 -1
  40. data/lib/inferno/utils/middleware/request_logger.rb +9 -3
  41. data/lib/inferno/utils/migration.rb +17 -0
  42. data/lib/inferno/version.rb +1 -1
  43. data/lib/inferno.rb +0 -4
  44. metadata +41 -8
  45. data/bin/inferno-console +0 -8
@@ -4,7 +4,7 @@ module Inferno
4
4
  class HTTPClientBuilder
5
5
  attr_accessor :runnable
6
6
 
7
- # @api private
7
+ # @private
8
8
  def build(runnable, block)
9
9
  self.runnable = runnable
10
10
  instance_exec(self, &block)
@@ -38,14 +38,14 @@ module Inferno
38
38
  @headers ||= headers
39
39
  end
40
40
 
41
- # @api private
41
+ # @private
42
42
  def method_missing(name, *args, &block)
43
43
  return runnable.call(name, *args, &block) if runnable.respond_to? name
44
44
 
45
45
  super
46
46
  end
47
47
 
48
- # @api private
48
+ # @private
49
49
  def respond_to_missing?(name)
50
50
  runnable.respond_to?(name) || super
51
51
  end
@@ -41,7 +41,7 @@ module Inferno
41
41
  requests.find { |request| request.name == self.class.config.request_name(name.to_sym) }
42
42
  end
43
43
 
44
- # @api private
44
+ # @private
45
45
  def store_request(direction, name = nil, &block)
46
46
  response = block.call
47
47
 
@@ -61,7 +61,7 @@ module Inferno
61
61
  request
62
62
  end
63
63
 
64
- # @api private
64
+ # @private
65
65
  def load_named_requests
66
66
  requests_repo = Inferno::Repositories::Requests.new
67
67
  self.class.named_requests_used.map do |request_name|
@@ -74,19 +74,19 @@ module Inferno
74
74
  end
75
75
 
76
76
  module ClassMethods
77
- # @api private
77
+ # @private
78
78
  def named_requests_made
79
79
  @named_requests_made ||= []
80
80
  end
81
81
 
82
- # @api private
82
+ # @private
83
83
  def named_requests_used
84
84
  @named_requests_used ||= []
85
85
  end
86
86
 
87
87
  # Specify the named requests made by a test
88
88
  #
89
- # @param *identifiers [Symbol] one or more Symbols
89
+ # @param identifiers [Symbol] one or more request identifiers
90
90
  def makes_request(*identifiers)
91
91
  named_requests_made.concat(identifiers).uniq!
92
92
  identifiers.each do |identifier|
@@ -96,20 +96,20 @@ module Inferno
96
96
 
97
97
  # Specify the name for a request received by a test
98
98
  #
99
- # @param *identifiers [Symbol] one or more Symbols
99
+ # @param identifier [Symbol]
100
100
  def receives_request(identifier)
101
101
  config.add_request(identifier)
102
102
  @incoming_request_name = identifier
103
103
  end
104
104
 
105
- # @api private
105
+ # @private
106
106
  def incoming_request_name
107
107
  @incoming_request_name
108
108
  end
109
109
 
110
110
  # Specify the named requests used by a test
111
111
  #
112
- # @param *identifiers [Symbol] one or more Symbols
112
+ # @param identifiers [Symbol] one or more request identifiers
113
113
  def uses_request(*identifiers)
114
114
  named_requests_used.concat(identifiers).uniq!
115
115
  identifiers.each do |identifier|
@@ -94,7 +94,7 @@ module Inferno
94
94
  # and should not be used in real tests.
95
95
  #
96
96
  # @param message [String]
97
- # @api private
97
+ # @private
98
98
  def cancel(message = '')
99
99
  raise Exceptions::CancelException, message
100
100
  end
@@ -4,7 +4,7 @@ module Inferno
4
4
  module DSL
5
5
  # A base class for creating routes to resume test execution upon receiving
6
6
  # an incoming request.
7
- # @api private
7
+ # @private
8
8
  # @see Inferno::DSL::Runnable#resume_test_route
9
9
  class ResumeTestRoute
10
10
  include Hanami::Action
@@ -26,23 +26,23 @@ module Inferno
26
26
  @request ||= Inferno::Entities::Request.from_rack_env(@params.env)
27
27
  end
28
28
 
29
- # @api private
29
+ # @private
30
30
  def test_run
31
31
  @test_run ||=
32
32
  test_runs_repo.find_latest_waiting_by_identifier(test_run_identifier)
33
33
  end
34
34
 
35
- # @api private
35
+ # @private
36
36
  def waiting_result
37
37
  @waiting_result ||= results_repo.find_waiting_result(test_run_id: test_run.id)
38
38
  end
39
39
 
40
- # @api private
40
+ # @private
41
41
  def update_result
42
42
  results_repo.pass_waiting_result(waiting_result.id)
43
43
  end
44
44
 
45
- # @api private
45
+ # @private
46
46
  def persist_request
47
47
  requests_repo.create(
48
48
  request.to_hash.merge(
@@ -53,22 +53,22 @@ module Inferno
53
53
  )
54
54
  end
55
55
 
56
- # @api private
56
+ # @private
57
57
  def redirect_route
58
58
  "/test_sessions/#{test_run.test_session_id}##{waiting_group_id}"
59
59
  end
60
60
 
61
- # @api private
61
+ # @private
62
62
  def test
63
63
  @test ||= tests_repo.find(waiting_result.test_id)
64
64
  end
65
65
 
66
- # @api private
66
+ # @private
67
67
  def waiting_group_id
68
68
  test.parent.id
69
69
  end
70
70
 
71
- # @api private
71
+ # @private
72
72
  def call(_params)
73
73
  if test_run.nil?
74
74
  status(500, "Unable to find test run with identifier '#{test_run_identifier}'.")
@@ -16,7 +16,7 @@ module Inferno
16
16
  # - add the subclass to the relevant repository when it is created
17
17
  # - copy the class instance variables from the superclass
18
18
  # - add a hook to the subclass so that its subclasses do the same
19
- # @api private
19
+ # @private
20
20
  def self.extended(extending_class)
21
21
  super
22
22
  extending_class.extend Configurable
@@ -41,7 +41,7 @@ module Inferno
41
41
  # classes. When inheriting from a Runnable class, these class instance
42
42
  # variables need to be copied. Any child Runnable classes will themselves
43
43
  # need to be subclassed so that their parent can be updated.
44
- # @api private
44
+ # @private
45
45
  def copy_instance_variables(subclass)
46
46
  instance_variables.each do |variable|
47
47
  next if [:@id, :@groups, :@tests, :@parent, :@children, :@test_count, :@config].include?(variable)
@@ -63,12 +63,13 @@ module Inferno
63
63
  end
64
64
  end
65
65
 
66
- # @api private
66
+ # @private
67
67
  def add_self_to_repository
68
68
  repository.insert(self)
69
69
  end
70
70
 
71
71
  # An instance of the repository for the class using this module
72
+ # @private
72
73
  def repository
73
74
  nil
74
75
  end
@@ -76,7 +77,7 @@ module Inferno
76
77
  # This method defines a child entity. Classes using this module should
77
78
  # alias the method name they wish to use to define child entities to this
78
79
  # method.
79
- # @api private
80
+ # @private
80
81
  def define_child(*args, &block)
81
82
  hash_args = process_args(args)
82
83
 
@@ -96,7 +97,7 @@ module Inferno
96
97
  klass
97
98
  end
98
99
 
99
- # @api private
100
+ # @private
100
101
  def process_args(args)
101
102
  hash_args =
102
103
  if args[0].is_a? Hash
@@ -112,13 +113,13 @@ module Inferno
112
113
  hash_args
113
114
  end
114
115
 
115
- # @api private
116
+ # @private
116
117
  def child_metadata(metadata = nil)
117
118
  @child_metadata = metadata if metadata
118
119
  @child_metadata
119
120
  end
120
121
 
121
- # @api private
122
+ # @private
122
123
  def create_child_class(hash_args)
123
124
  superclass_id = hash_args.delete :from
124
125
 
@@ -131,7 +132,7 @@ module Inferno
131
132
  Class.new(superclass)
132
133
  end
133
134
 
134
- # @api private
135
+ # @private
135
136
  def configure_child_class(klass, hash_args) # rubocop:disable Metrics/CyclomaticComplexity
136
137
  inputs.each do |name|
137
138
  next if klass.inputs.any? { |klass_input_name| klass_input_name == name }
@@ -177,11 +178,15 @@ module Inferno
177
178
  end
178
179
  end
179
180
 
180
- # @api private
181
+ # @private
181
182
  def handle_child_definition_block(klass, &block)
182
183
  klass.class_eval(&block) if block_given?
183
184
  end
184
185
 
186
+ # Set/Get a runnable's id
187
+ #
188
+ # @param new_id [String,Symbol]
189
+ # @return [String,Symbol] the id
185
190
  def id(new_id = nil)
186
191
  return @id if new_id.nil? && @id.present?
187
192
 
@@ -197,12 +202,20 @@ module Inferno
197
202
  @id = "#{prefix}#{@base_id}"
198
203
  end
199
204
 
205
+ # Set/Get a runnable's title
206
+ #
207
+ # @param new_title [String]
208
+ # @return [String] the title
200
209
  def title(new_title = nil)
201
210
  return @title if new_title.nil?
202
211
 
203
212
  @title = new_title
204
213
  end
205
214
 
215
+ # Set/Get a runnable's description
216
+ #
217
+ # @param new_description [String]
218
+ # @return [String] the description
206
219
  def description(new_description = nil)
207
220
  return @description if new_description.nil?
208
221
 
@@ -239,7 +252,7 @@ module Inferno
239
252
 
240
253
  # Define outputs
241
254
  #
242
- # @param output_lists [Symbol]
255
+ # @param output_list [Symbol]
243
256
  # @return [void]
244
257
  # @example
245
258
  # output :patient_id, :bearer_token
@@ -250,30 +263,32 @@ module Inferno
250
263
  end
251
264
  end
252
265
 
253
- # @api private
266
+ # @private
254
267
  def default_id
255
268
  to_s
256
269
  end
257
270
 
258
- # @api private
271
+ # @private
259
272
  def inputs
260
273
  @inputs ||= []
261
274
  end
262
275
 
276
+ # @private
263
277
  def input_definitions
264
278
  config.inputs.slice(*inputs)
265
279
  end
266
280
 
281
+ # @private
267
282
  def output_definitions
268
283
  config.outputs.slice(*outputs)
269
284
  end
270
285
 
271
- # @api private
286
+ # @private
272
287
  def outputs
273
288
  @outputs ||= []
274
289
  end
275
290
 
276
- # @api private
291
+ # @private
277
292
  def child_types
278
293
  return [] if ancestors.include? Inferno::Entities::Test
279
294
  return [:groups] if ancestors.include? Inferno::Entities::TestSuite
@@ -281,7 +296,7 @@ module Inferno
281
296
  [:groups, :tests]
282
297
  end
283
298
 
284
- # @api private
299
+ # @private
285
300
  def children
286
301
  @children ||= []
287
302
  end
@@ -292,7 +307,7 @@ module Inferno
292
307
  @validator_url = url
293
308
  end
294
309
 
295
- # @api private
310
+ # @private
296
311
  def suite
297
312
  return self if ancestors.include? Inferno::Entities::TestSuite
298
313
 
@@ -329,8 +344,8 @@ module Inferno
329
344
  # @yield This method takes a block which must return the identifier
330
345
  # defined when a test was set to wait for the test run that hit this
331
346
  # route. The block has access to the `request` method which returns a
332
- # {Inferno::DSL::Request} object with the information for the incoming
333
- # request.
347
+ # {Inferno::Entities::Request} object with the information for the
348
+ # incoming request.
334
349
  def resume_test_route(method, path, &block)
335
350
  route_class = Class.new(ResumeTestRoute) do
336
351
  define_method(:test_run_identifier, &block)
@@ -357,10 +372,12 @@ module Inferno
357
372
  Inferno.routes << { method: method, path: path, handler: handler, suite: suite }
358
373
  end
359
374
 
375
+ # @private
360
376
  def test_count
361
377
  @test_count ||= children&.reduce(0) { |sum, child| sum + child.test_count } || 0
362
378
  end
363
379
 
380
+ # @private
364
381
  def required_inputs(prior_outputs = [])
365
382
  required_inputs = inputs.select do |input|
366
383
  !input_definitions[input][:optional] && !prior_outputs.include?(input)
@@ -371,6 +388,7 @@ module Inferno
371
388
  (required_inputs + children_required_inputs).flatten.uniq
372
389
  end
373
390
 
391
+ # @private
374
392
  def missing_inputs(submitted_inputs)
375
393
  submitted_inputs = [] if submitted_inputs.nil?
376
394
 
@@ -2,13 +2,20 @@ module Inferno
2
2
  module Entities
3
3
  # A `Header` represents an HTTP request/response header
4
4
  #
5
- # @attr_accessor [String] id of the header
6
- # @attr_accessor [String] request_id index of the HTTP request
7
- # @attr_accessor [String] name header name
8
- # @attr_accessor [String] value header value
9
- # @attr_accessor [String] type request/response
10
- # @attr_accessor [Time] created_at
11
- # @attr_accessor [Time] updated_at
5
+ # @!attribute id
6
+ # @return [String] id of the header
7
+ # @!attribute request_id
8
+ # @return [String] index of the HTTP request
9
+ # @!attribute name
10
+ # @return [String] header name
11
+ # @!attribute value
12
+ # @return [String] header value
13
+ # @!attribute type
14
+ # @return [String] request/response
15
+ # @!attribute created_at
16
+ # @return [Time]
17
+ # @!attribute updated_at
18
+ # @return [Time]
12
19
  class Header < Entity
13
20
  ATTRIBUTES = [:id, :request_id, :name, :type, :value, :created_at, :updated_at].freeze
14
21
 
@@ -2,14 +2,22 @@ module Inferno
2
2
  module Entities
3
3
  # A `Message` represents a message generated during a test.
4
4
  #
5
- # @attr_accessor [String] id of the message
6
- # @attr_accessor [String] index of the message. Used for ordering.
7
- # @attr_accessor [String] result_id
8
- # @attr_accessor [Inferno::Entities::Result] result
9
- # @attr_accessor [String] type
10
- # @attr_accessor [String] message
11
- # @attr_accessor [Time] created_at
12
- # @attr_accessor [Time] updated_at
5
+ # @!attribute id
6
+ # @return [String] id of the message
7
+ # @!attribute index
8
+ # @return [String] index of the message. Used for ordering.
9
+ # @!attribute result_id
10
+ # @return [String]
11
+ # @!attribute result
12
+ # @return [Inferno::Entities::Result]
13
+ # @!attribute type
14
+ # @return [String]
15
+ # @!attribute message
16
+ # @return [String]
17
+ # @!attribute created_at
18
+ # @return [Time]
19
+ # @!attribute updated_at
20
+ # @return [Time]
13
21
  class Message < Entity
14
22
  ATTRIBUTES = [:id, :index, :message, :result_id, :result, :type, :created_at, :updated_at].freeze
15
23
  TYPES = ['error', 'warning', 'info'].freeze
@@ -2,21 +2,34 @@ module Inferno
2
2
  module Entities
3
3
  # A `Request` represents a request and response issued during a test.
4
4
  #
5
- # @attr_accessor [String] id of the request
6
- # @attr_accessor [String] index of the request. Used for ordering.
7
- # @attr_accessor [String] verb http verb
8
- # @attr_accessor [String] url request url
9
- # @attr_accessor [String] direction incoming/outgoing
10
- # @attr_accessor [String] name name for the request
11
- # @attr_accessor [String] status http response status code
12
- # @attr_accessor [String] request_body body of the http request
13
- # @attr_accessor [String] response_body body of the http response
14
- # @attr_accessor [Array<Inferno::Entities::Header>] headers http
15
- # request/response headers
16
- # @attr_accessor [String] result_id id of the result for this request
17
- # @attr_accessor [String] test_session_id id of the test session for this request
18
- # @attr_accessor [Time] created_at creation timestamp
19
- # @attr_accessor [Time] updated_at update timestamp
5
+ # @!attribute id
6
+ # @return [String] id of the request
7
+ # @!attribute index
8
+ # @return [String] index of the request. Used for ordering.
9
+ # @!attribute verb
10
+ # @return [String] http verb
11
+ # @!attribute url
12
+ # @return [String] request url
13
+ # @!attribute direction
14
+ # @return [String] incoming/outgoing
15
+ # @!attribute name
16
+ # @return [String] name for the request
17
+ # @!attribute status
18
+ # @return [String] http response status code
19
+ # @!attribute request_body
20
+ # @return [String] body of the http request
21
+ # @!attribute response_body
22
+ # @return [String] body of the http response
23
+ # @!attribute headers
24
+ # @return [Array<Inferno::Entities::Header>] http request/response headers
25
+ # @!attribute result_id
26
+ # @return [String] id of the result for this request
27
+ # @!attribute test_session_id
28
+ # @return [String] id of the test session for this request
29
+ # @!attribute created_at
30
+ # @return [Time] creation timestamp
31
+ # @!attribute updated_at
32
+ # @return [Time] update timestamp
20
33
  class Request < Entity
21
34
  ATTRIBUTES = [
22
35
  :id, :index, :verb, :url, :direction, :name, :status,
@@ -94,7 +107,7 @@ module Inferno
94
107
  }
95
108
  end
96
109
 
97
- # @api private
110
+ # @private
98
111
  def to_hash
99
112
  {
100
113
  id: id,
@@ -122,7 +135,7 @@ module Inferno
122
135
  end
123
136
 
124
137
  class << self
125
- # @api private
138
+ # @private
126
139
  def from_rack_env(env, name: nil)
127
140
  rack_request = env['router.request'].rack_request
128
141
  url = "#{rack_request.base_url}#{rack_request.path}"
@@ -143,7 +156,7 @@ module Inferno
143
156
  )
144
157
  end
145
158
 
146
- # @api private
159
+ # @private
147
160
  def from_http_response(response, test_session_id:, direction: 'outgoing', name: nil)
148
161
  request_headers =
149
162
  response.env.request_headers
@@ -165,7 +178,7 @@ module Inferno
165
178
  )
166
179
  end
167
180
 
168
- # @api private
181
+ # @private
169
182
  def from_fhir_client_reply(reply, test_session_id:, direction: 'outgoing', name: nil)
170
183
  request = reply.request
171
184
  response = reply.response
@@ -3,36 +3,43 @@ module Inferno
3
3
  # A `Result` represents the result of running a `Test`, `TestGroup`,
4
4
  # or `TestSuite`
5
5
  #
6
- # @attr_accessor [String] id id of the session
7
- # @attr_accessor [Time] created_at creation timestamp
8
- # @attr_accessor [Time] updated_at update timestamp
9
- # @attr_accessor [String] reference_type type of entity this result belongs
10
- # to (`Test`, `TestGroup`, or `TestSuite`)
11
- # @attr_accessor [String, nil] test_id id of the `Test` this result belongs
12
- # to
13
- # @attr_accessor [Test, nil] test the `Test` this result belongs to
14
- # @attr_accessor [String, nil] test_group_id id of the `TestGroup` this
15
- # result belongs to
16
- # @attr_accessor [TestGroup, nil] test_group the `TestGroup` this result
17
- # belongs to
18
- # @attr_accessor [String, nil] test_suite_id id of the `TestSuite` this
19
- # result belongs to
20
- # @attr_accessor [TestSuite, nil] test_suite the `TestSuite` this result
21
- # belongs to
22
- # @attr_accessor [String] result the result (`pass`, `fail`, `skip`, `omit`,
23
- # `error`, `running`, `wait`, `cancel`)
24
- # @attr_accessor [String] result_message summary message for this result
25
- # @attr_accessor [String] test_run_id the `TestRun` this result belongs to
26
- # @attr_accessor [String] test_session_id the `TestSession` this result
27
- # belongs to
28
- # @attr_accessor [Array<Inferno::Entities::Message>] messages additional
29
- # messages for this result
30
- # @attr_accessor [Array<Inferno::Entities::Request>] request_summaries
31
- # summaries of the requests associated with this result
32
- # @attr_accessor [String] input_json JSON string of the inputs used for this
6
+ # @!attribute id
7
+ # @return [String] id of the session
8
+ # @!attribute created_at
9
+ # @return [Time] creation timestamp
10
+ # @!attribute updated_at
11
+ # @return [Time] update timestamp
12
+ # @!attribute test_id
13
+ # @return [String, nil] id of the `Test` this result belongs to
14
+ # @!attribute test
15
+ # @return [Test, nil] the `Test` this result belongs to
16
+ # @!attribute test_group_id
17
+ # @return [String, nil] id of the `TestGroup` this result belongs to
18
+ # @!attribute test_group
19
+ # @return [TestGroup, nil] the `TestGroup` this result belongs to
20
+ # @!attribute test_suite_id
21
+ # @return [String, nil] id of the `TestSuite` this result belongs to
22
+ # @!attribute test_suite
23
+ # @return [TestSuite, nil] the `TestSuite` this result belongs to
24
+ # @!attribute result
25
+ # @return [String] the result (`pass`, `fail`, `skip`, `omit`, `error`,
26
+ # `running`, `wait`, `cancel`)
27
+ # @!attribute result_message
28
+ # @return [String] summary message for this result
29
+ # @!attribute test_run_id
30
+ # @return [String] the `TestRun` this result belongs to
31
+ # @!attribute test_session_id
32
+ # @return [String] the `TestSession` this result belongs to
33
+ # @!attribute messages
34
+ # @return [Array<Inferno::Entities::Message>] additional messages for this
33
35
  # result
34
- # @attr_accessor [String] output_json JSON string of the outputs created by
35
- # this result
36
+ # @!attribute requests
37
+ # @return [Array<Inferno::Entities::Request>] summaries of the requests
38
+ # associated with this result
39
+ # @!attribute input_json
40
+ # @return [String] JSON string of the inputs used for this result
41
+ # @!attribute output_json
42
+ # @return [String] JSON string of the outputs created by this result
36
43
  class Result < Entity
37
44
  ATTRIBUTES = [
38
45
  :id, :created_at, :updated_at, :test_id, :test, :test_group_id,
@@ -3,12 +3,18 @@ module Inferno
3
3
  # `SessionData` represents a piece of saved state for a `TestSession`.
4
4
  # These are used to store test inputs and outputs.
5
5
  #
6
- # @attr_accessor [String] id of the test input
7
- # @attr_accessor [String] name
8
- # @attr_accessor [String] value
9
- # @attr_accessor [String] test_session_id
10
- # @attr_accessor [Time] created_at
11
- # @attr_accessor [Time] updated_at
6
+ # @!attribute id
7
+ # @return [String] id of the test input
8
+ # @!attribute name
9
+ # @return [String]
10
+ # @!attribute value
11
+ # @return [String]
12
+ # @!attribute test_session_id
13
+ # @return [String]
14
+ # @!attribute created_at
15
+ # @return [Time]
16
+ # @!attribute updated_at
17
+ # @return [Time]
12
18
  class SessionData < Entity
13
19
  ATTRIBUTES = [:id, :name, :value, :test_session_id, :created_at, :updated_at].freeze
14
20