ntable 0.1.1 → 0.1.2

Sign up to get free protection for your applications and to get access to all the features.
@@ -1,3 +1,13 @@
1
+ === 0.1.2 / 2012-09-09
2
+
3
+ I took a long look at ntable's interface, and the usage patterns of my own personal projects that depended on it, and decided some simplification was needed.
4
+
5
+ * INCOMPATIBLE CHANGE: Renamed the "index_to_label" and "label_to_index" methods on axis objects to "label" and "index", respectively.
6
+ * INCOMPATIBLE CHANGE: Renamed the "axis", "index", and "name" methods on AxisInfo to "axis_object", "axis_index", and "axis_name", respectively.
7
+ * Added "index", "label", and "size" methods to AxisInfo, delegating to the underlying axis object. This means AxisInfo is now effectively a proxy for the axis implementation, which should normally no longer need to be accessed.
8
+ * INCOMPATIBLE CHANGE: Renamed the "axis_info" and "all_axis_info" methods of Structure to "axis" and "all_axes", respectively.
9
+ * The "axis" and "all_axes" methods of Structure are now exposed on Table, so you should not need to access the structure too often.
10
+
1
11
  === 0.1.1 / 2012-09-07
2
12
 
3
13
  * The "preferred" construction methods are now module methods on ::NTable.
data/Version CHANGED
@@ -1 +1 @@
1
- 0.1.1
1
+ 0.1.2
@@ -58,7 +58,7 @@
58
58
  # such a table with 100 rows and two columns could be created like this:
59
59
  #
60
60
  # table = NTable.structure(NTable::IndexedAxis.new(100)).
61
- # add(NTable::LabeledAxis(:name, :address)).
61
+ # add(NTable::LabeledAxis.new(:name, :address)).
62
62
  # create
63
63
  #
64
64
  # You can then look up individual cells like this:
@@ -68,7 +68,7 @@
68
68
  # Axes can be given names as well:
69
69
  #
70
70
  # table = NTable.structure(NTable::IndexedAxis.new(100), :row).
71
- # add(NTable::LabeledAxis(:name, :address), :col).
71
+ # add(NTable::LabeledAxis.new(:name, :address), :col).
72
72
  # create
73
73
  #
74
74
  # Then you can specify the axes by name when you look up:
@@ -49,15 +49,23 @@ module NTable
49
49
  class EmptyAxis
50
50
 
51
51
 
52
+ # Axis objects must implement an equality check.
53
+
52
54
  def eql?(obj_)
53
55
  obj_.is_a?(EmptyAxis)
54
56
  end
55
57
  alias_method :==, :eql?
56
58
 
59
+
60
+ # Axis objects must implement a hash
61
+
57
62
  def hash
58
63
  self.class.hash
59
64
  end
60
65
 
66
+
67
+ # Axis methods should implement display methods for debugging.
68
+
61
69
  def inspect
62
70
  "#<#{self.class}:0x#{object_id.to_s(16)}>"
63
71
  end
@@ -75,7 +83,7 @@ module NTable
75
83
  # Given a label object, return the corresponding 0-based integer index.
76
84
  # Returns nil if the label is not recognized.
77
85
 
78
- def label_to_index(label_)
86
+ def index(label_)
79
87
  nil
80
88
  end
81
89
 
@@ -84,7 +92,7 @@ module NTable
84
92
  # Returns nil if the index is out of bounds (i.e. is less than 0 or
85
93
  # greater than or equal to size.)
86
94
 
87
- def index_to_label(index_)
95
+ def label(index_)
88
96
  nil
89
97
  end
90
98
 
@@ -144,11 +152,11 @@ module NTable
144
152
  attr_reader :size
145
153
 
146
154
 
147
- def label_to_index(label_)
155
+ def index(label_)
148
156
  @h[label_.to_s]
149
157
  end
150
158
 
151
- def index_to_label(index_)
159
+ def label(index_)
152
160
  @a[index_]
153
161
  end
154
162
 
@@ -186,7 +194,7 @@ module NTable
186
194
  alias_method :==, :eql?
187
195
 
188
196
  def hash
189
- @size.hash + @start.hash
197
+ @size.hash ^ @start.hash
190
198
  end
191
199
 
192
200
  def inspect
@@ -199,11 +207,11 @@ module NTable
199
207
  attr_reader :start
200
208
 
201
209
 
202
- def label_to_index(label_)
210
+ def index(label_)
203
211
  label_ >= @start && label_ < @size + @start ? label_ - @start : nil
204
212
  end
205
213
 
206
- def index_to_label(index_)
214
+ def label(index_)
207
215
  index_ >= 0 && index_ < @size ? index_ + @start : nil
208
216
  end
209
217
 
@@ -258,11 +266,11 @@ module NTable
258
266
  attr_reader :size
259
267
 
260
268
 
261
- def label_to_index(label_)
269
+ def index(label_)
262
270
  @h[label_]
263
271
  end
264
272
 
265
- def index_to_label(index_)
273
+ def label(index_)
266
274
  @a[index_]
267
275
  end
268
276
 
@@ -61,39 +61,67 @@ module NTable
61
61
 
62
62
  # A data structure that provides information about a particular
63
63
  # axis/dimension in a Structure. It provides access to the axis
64
- # itself, as well as the axis's name (if any) and 0-based index
64
+ # object, as well as the axis's name (if any) and 0-based index
65
65
  # into the list of axes. You should never need to create an
66
- # AxisInfo yourself, but you can obtain one from Structure#axis_info.
66
+ # AxisInfo yourself, but you can obtain one from Structure#axis.
67
67
 
68
- class AxisInfo # :nodoc:
68
+ class AxisInfo
69
69
 
70
70
  def initialize(axis_, index_, name_, step_=nil) # :nodoc:
71
- @axis = axis_
72
- @index = index_
73
- @name = name_
71
+ @axis_object = axis_
72
+ @axis_index = index_
73
+ @axis_name = name_
74
74
  @step = step_
75
75
  end
76
76
 
77
- # The axis object
78
- attr_reader :axis
77
+
78
+ # The underlying axis implementation
79
+ attr_reader :axis_object
80
+
79
81
  # The 0-based index of this axis in the structure. i.e. the first,
80
- # most major axis has index 0.
81
- attr_reader :index
82
+ # most major axis has number 0.
83
+ attr_reader :axis_index
84
+
82
85
  # The name of this axis in the structure as a string, or nil for
83
86
  # no name.
84
- attr_reader :name
87
+ attr_reader :axis_name
85
88
 
86
89
  attr_reader :step # :nodoc:
87
90
 
88
91
 
92
+ # Given a label object, return the corresponding 0-based integer index.
93
+ # Returns nil if the label is not recognized.
94
+
95
+ def index(label_)
96
+ @axis_object.index(label_)
97
+ end
98
+
99
+
100
+ # Given a 0-based integer index, return the corresponding label object.
101
+ # Returns nil if the index is out of bounds (i.e. is less than 0 or
102
+ # greater than or equal to size.)
103
+
104
+ def label(index_)
105
+ @axis_object.label(index_)
106
+ end
107
+
108
+
109
+ # Return the number of rows along this axis.
110
+ # An empty axis will return 0.
111
+
112
+ def size
113
+ @axis_object.size
114
+ end
115
+
116
+
89
117
  def eql?(obj_) # :nodoc:
90
- obj_.is_a?(AxisInfo) && obj_.axis.eql?(@axis) && obj_.name.eql?(@name)
118
+ obj_.is_a?(AxisInfo) && @axis_object.eql?(obj_.axis_object) && @axis_name.eql?(obj_.axis_name)
91
119
  end
92
120
  alias_method :==, :eql? # :nodoc:
93
121
 
94
122
 
95
123
  def _set_axis(axis_) # :nodoc:
96
- @axis = axis_
124
+ @axis_object = axis_
97
125
  end
98
126
 
99
127
  def _set_step(step_) # :nodoc:
@@ -101,7 +129,7 @@ module NTable
101
129
  end
102
130
 
103
131
  def _dec_index # :nodoc:
104
- @index -= 1
132
+ @axis_index -= 1
105
133
  end
106
134
 
107
135
  end
@@ -132,8 +160,8 @@ module NTable
132
160
  # axis may be provided by name or index.
133
161
 
134
162
  def coord(axis_)
135
- ainfo_ = @structure.axis_info(axis_)
136
- ainfo_ ? _coords[ainfo_.index] : nil
163
+ ainfo_ = @structure.axis(axis_)
164
+ ainfo_ ? _coords[ainfo_.axis_index] : nil
137
165
  end
138
166
  alias_method :[], :coord
139
167
 
@@ -194,7 +222,7 @@ module NTable
194
222
  other_.instance_variable_get(:@indexes).each do |ai_|
195
223
  ai_ = ai_.dup
196
224
  @indexes << ai_
197
- if (name_ = ai_.name)
225
+ if (name_ = ai_.axis_name)
198
226
  @names[name_] = ai_
199
227
  end
200
228
  end
@@ -207,7 +235,7 @@ module NTable
207
235
 
208
236
  def unlocked_copy
209
237
  copy_ = Structure.new
210
- @indexes.each{ |ai_| copy_.add(ai_.axis, ai_.name) }
238
+ @indexes.each{ |ai_| copy_.add(ai_.axis_object, ai_.axis_name) }
211
239
  copy_
212
240
  end
213
241
 
@@ -239,7 +267,7 @@ module NTable
239
267
  if rhs_indexes_.size == @indexes.size
240
268
  rhs_indexes_.each_with_index do |rhs_ai_, i_|
241
269
  lhs_ai_ = @indexes[i_]
242
- return false unless lhs_ai_.axis == rhs_ai_.axis && lhs_ai_.name == rhs_ai_.name
270
+ return false unless lhs_ai_.axis_object == rhs_ai_.axis_object && lhs_ai_.axis_name == rhs_ai_.axis_name
243
271
  end
244
272
  return true
245
273
  end
@@ -271,17 +299,17 @@ module NTable
271
299
 
272
300
  def remove(axis_)
273
301
  raise StructureStateError, "Structure locked" if @locked
274
- ainfo_ = axis_info(axis_)
302
+ ainfo_ = axis(axis_)
275
303
  unless ainfo_
276
304
  raise UnknownAxisError, "Unknown axis: #{axis_.inspect}"
277
305
  end
278
- index_ = ainfo_.index
279
- @names.delete(ainfo_.name)
306
+ index_ = ainfo_.axis_index
307
+ @names.delete(ainfo_.axis_name)
280
308
  @indexes.delete_at(index_)
281
309
  @indexes[index_..-1].each{ |ai_| ai_._dec_index }
282
- size_ = ainfo_.axis.size
310
+ size_ = ainfo_.size
283
311
  if size_ == 0
284
- @size = @indexes.inject(1){ |s_, ai_| s_ * ai_.axis.size }
312
+ @size = @indexes.inject(1){ |s_, ai_| s_ * ai_.size }
285
313
  else
286
314
  @size /= size_
287
315
  end
@@ -299,15 +327,15 @@ module NTable
299
327
 
300
328
  def replace(axis_, naxis_=nil)
301
329
  raise StructureStateError, "Structure locked" if @locked
302
- ainfo_ = axis_info(axis_)
330
+ ainfo_ = axis(axis_)
303
331
  unless ainfo_
304
332
  raise UnknownAxisError, "Unknown axis: #{axis_.inspect}"
305
333
  end
306
- osize_ = ainfo_.axis.size
334
+ osize_ = ainfo_.size
307
335
  naxis_ ||= yield(ainfo_)
308
336
  ainfo_._set_axis(naxis_)
309
337
  if osize_ == 0
310
- @size = @indexes.inject(1){ |size_, ai_| size_ * ai_.axis.size }
338
+ @size = @indexes.inject(1){ |size_, ai_| size_ * ai_.size }
311
339
  else
312
340
  @size = @size / osize_ * naxis_.size
313
341
  end
@@ -341,7 +369,7 @@ module NTable
341
369
  # Returns an array of AxisInfo objects representing all the axes
342
370
  # of this structure.
343
371
 
344
- def all_axis_info
372
+ def all_axes
345
373
  @indexes.dup
346
374
  end
347
375
 
@@ -350,7 +378,7 @@ module NTable
350
378
  # must be specified by 0-based index or by name string. Returns nil
351
379
  # if there is no such axis.
352
380
 
353
- def axis_info(axis_)
381
+ def axis(axis_)
354
382
  case axis_
355
383
  when ::Integer
356
384
  @indexes[axis_]
@@ -370,7 +398,7 @@ module NTable
370
398
  if @size > 0
371
399
  s_ = @size
372
400
  @indexes.each do |ainfo_|
373
- s_ /= ainfo_.axis.size
401
+ s_ /= ainfo_.size
374
402
  ainfo_._set_step(s_)
375
403
  end
376
404
  end
@@ -436,8 +464,8 @@ module NTable
436
464
 
437
465
  def to_json_array
438
466
  @indexes.map do |ai_|
439
- name_ = ai_.name
440
- axis_ = ai_.axis
467
+ name_ = ai_.axis_name
468
+ axis_ = ai_.axis_object
441
469
  type_ = axis_.class.name
442
470
  if type_ =~ /^NTable::(\w+)Axis$/
443
471
  type_ = $1
@@ -499,11 +527,11 @@ module NTable
499
527
  names_ = {}
500
528
  size_ = 1
501
529
  @indexes.each do |ainfo_|
502
- if axes_.include?(ainfo_.index) == bool_
503
- nainfo_ = AxisInfo.new(ainfo_.axis, indexes_.size, ainfo_.name, ainfo_.step)
530
+ if axes_.include?(ainfo_.axis_index) == bool_
531
+ nainfo_ = AxisInfo.new(ainfo_.axis_object, indexes_.size, ainfo_.axis_name, ainfo_.step)
504
532
  indexes_ << nainfo_
505
- names_[ainfo_.name] = nainfo_
506
- size_ *= ainfo_.axis.size
533
+ names_[ainfo_.axis_name] = nainfo_
534
+ size_ *= ainfo_.size
507
535
  end
508
536
  end
509
537
  sub_.instance_variable_set(:@indexes, indexes_)
@@ -522,8 +550,8 @@ module NTable
522
550
  when ::Hash
523
551
  offset_ = 0
524
552
  arg_.each do |k_, v_|
525
- if (ainfo_ = axis_info(k_))
526
- index_ = ainfo_.axis.label_to_index(v_)
553
+ if (ainfo_ = axis(k_))
554
+ index_ = ainfo_.index(v_)
527
555
  return nil unless index_
528
556
  offset_ += ainfo_.step * index_
529
557
  else
@@ -535,7 +563,7 @@ module NTable
535
563
  offset_ = 0
536
564
  arg_.each_with_index do |v_, i_|
537
565
  if (ainfo_ = @indexes[i_])
538
- index_ = ainfo_.axis.label_to_index(v_)
566
+ index_ = ainfo_.index(v_)
539
567
  return nil unless index_
540
568
  offset_ += ainfo_.step * index_
541
569
  else
@@ -556,16 +584,16 @@ module NTable
556
584
  case arg_
557
585
  when ::Hash
558
586
  arg_.each do |k_, v_|
559
- if (ainfo_ = axis_info(k_))
560
- val_ = ainfo_.axis.label_to_index(v_)
561
- vec_[ainfo_.index] = val_ if val_
587
+ if (ainfo_ = axis(k_))
588
+ val_ = ainfo_.index(v_)
589
+ vec_[ainfo_.axis_index] = val_ if val_
562
590
  end
563
591
  end
564
592
  vec_
565
593
  when ::Array
566
594
  arg_.each_with_index do |v_, i_|
567
595
  if (ainfo_ = @indexes[i_])
568
- val_ = ainfo_.axis.label_to_index(v_)
596
+ val_ = ainfo_.index(v_)
569
597
  vec_[i_] = val_ if val_
570
598
  end
571
599
  end
@@ -587,7 +615,7 @@ module NTable
587
615
 
588
616
  def _compute_coords_for_vector(vector_) # :nodoc:
589
617
  vector_.map.with_index do |v_, i_|
590
- @indexes[i_].axis.index_to_label(v_)
618
+ @indexes[i_].label(v_)
591
619
  end
592
620
  end
593
621
 
@@ -596,7 +624,7 @@ module NTable
596
624
  (vector_.size - 1).downto(-1) do |i_|
597
625
  return true if i_ < 0
598
626
  v_ = vector_[i_] + 1
599
- if v_ >= @indexes[i_].axis.size
627
+ if v_ >= @indexes[i_].size
600
628
  vector_[i_] = 0
601
629
  else
602
630
  vector_[i_] = v_
@@ -612,7 +640,7 @@ module NTable
612
640
  return true if i_ < 0
613
641
  v_ = vector_[i_] - 1
614
642
  if v_ < 0
615
- vector_[i_] = @indexes[i_].axis.size - 1
643
+ vector_[i_] = @indexes[i_].size - 1
616
644
  else
617
645
  vector_[i_] = v_
618
646
  break
@@ -627,7 +655,7 @@ module NTable
627
655
  @indexes.map do |ainfo_|
628
656
  i_ = offset_ / ainfo_.step
629
657
  offset_ -= ainfo_.step * i_
630
- ainfo_.axis.index_to_label(i_)
658
+ ainfo_.label(i_)
631
659
  end
632
660
  end
633
661
 
@@ -161,6 +161,23 @@ module NTable
161
161
  end
162
162
 
163
163
 
164
+ # Returns the AxisInfo object representing the given axis. The axis
165
+ # must be specified by 0-based index or by name string. Returns nil
166
+ # if there is no such axis.
167
+
168
+ def axis(axis_)
169
+ @structure.axis(axis_)
170
+ end
171
+
172
+
173
+ # Returns an array of AxisInfo objects representing all the axes
174
+ # of the structure of this table.
175
+
176
+ def all_axes
177
+ @structure.all_axes
178
+ end
179
+
180
+
164
181
  # Return the parent of this table. A table with a parent shares the
165
182
  # parent's data, and cannot have its data modified directly. Instead,
166
183
  # if the parent table is modified, the changes are reflected in the
@@ -473,8 +490,8 @@ module NTable
473
490
  axes_ = axes_.flatten
474
491
  axis_indexes_ = []
475
492
  axes_.each do |a_|
476
- if (ainfo_ = @structure.axis_info(a_))
477
- axis_indexes_ << ainfo_.index
493
+ if (ainfo_ = @structure.axis(a_))
494
+ axis_indexes_ << ainfo_.axis_index
478
495
  else
479
496
  raise UnknownAxisError, "Unknown axis: #{a_.inspect}"
480
497
  end
@@ -523,10 +540,10 @@ module NTable
523
540
  offset_ = @offset
524
541
  select_set_ = {}
525
542
  hash_.each do |k_, v_|
526
- if (ainfo_ = @structure.axis_info(k_))
527
- aindex_ = ainfo_.index
543
+ if (ainfo_ = @structure.axis(k_))
544
+ aindex_ = ainfo_.axis_index
528
545
  unless select_set_.include?(aindex_)
529
- lindex_ = ainfo_.axis.label_to_index(v_)
546
+ lindex_ = ainfo_.index(v_)
530
547
  if lindex_
531
548
  offset_ += ainfo_.step * lindex_
532
549
  select_set_[aindex_] = true
@@ -582,7 +599,7 @@ module NTable
582
599
  def _to_nested_obj(aidx_, vec_, opts_) # :nodoc:
583
600
  exclude_ = opts_.include?(:exclude_value)
584
601
  exclude_value_ = opts_[:exclude_value] if exclude_
585
- axis_ = @structure.axis_info(aidx_).axis
602
+ axis_ = @structure.axis(aidx_).axis_object
586
603
  result_ = IndexedAxis === axis_ ? [] : {}
587
604
  (0...axis_.size).map do |i_|
588
605
  vec_[aidx_] = i_
@@ -592,7 +609,7 @@ module NTable
592
609
  _to_nested_obj(aidx_ + 1, vec_, opts_)
593
610
  end
594
611
  if !exclude_ || !val_.eql?(exclude_value_)
595
- result_[axis_.index_to_label(i_)] = val_
612
+ result_[axis_.label(i_)] = val_
596
613
  end
597
614
  end
598
615
  result_
@@ -52,18 +52,18 @@ module NTable
52
52
 
53
53
  def test_labeled_axis_label_to_index
54
54
  axis_ = LabeledAxis.new([:one, :two])
55
- assert_equal(0, axis_.label_to_index(:one))
56
- assert_equal(1, axis_.label_to_index(:two))
57
- assert_equal(0, axis_.label_to_index('one'))
58
- assert_nil(axis_.label_to_index(:three))
55
+ assert_equal(0, axis_.index(:one))
56
+ assert_equal(1, axis_.index(:two))
57
+ assert_equal(0, axis_.index('one'))
58
+ assert_nil(axis_.index(:three))
59
59
  end
60
60
 
61
61
 
62
62
  def test_labeled_axis_index_to_label
63
63
  axis_ = LabeledAxis.new([:one, :two])
64
- assert_equal('one', axis_.index_to_label(0))
65
- assert_equal('two', axis_.index_to_label(1))
66
- assert_nil(axis_.index_to_label(2))
64
+ assert_equal('one', axis_.label(0))
65
+ assert_equal('two', axis_.label(1))
66
+ assert_nil(axis_.label(2))
67
67
  end
68
68
 
69
69
 
@@ -90,18 +90,18 @@ module NTable
90
90
 
91
91
  def test_object_axis_label_to_index
92
92
  axis_ = ObjectAxis.new([:one, :two])
93
- assert_equal(0, axis_.label_to_index(:one))
94
- assert_equal(1, axis_.label_to_index(:two))
95
- assert_nil(axis_.label_to_index('one'))
96
- assert_nil(axis_.label_to_index(:three))
93
+ assert_equal(0, axis_.index(:one))
94
+ assert_equal(1, axis_.index(:two))
95
+ assert_nil(axis_.index('one'))
96
+ assert_nil(axis_.index(:three))
97
97
  end
98
98
 
99
99
 
100
100
  def test_object_axis_index_to_label
101
101
  axis_ = ObjectAxis.new([:one, :two])
102
- assert_equal(:one, axis_.index_to_label(0))
103
- assert_equal(:two, axis_.index_to_label(1))
104
- assert_nil(axis_.index_to_label(2))
102
+ assert_equal(:one, axis_.label(0))
103
+ assert_equal(:two, axis_.label(1))
104
+ assert_nil(axis_.label(2))
105
105
  end
106
106
 
107
107
 
@@ -128,17 +128,17 @@ module NTable
128
128
 
129
129
  def test_indexed_axis_label_to_index
130
130
  axis_ = IndexedAxis.new(2, 4)
131
- assert_equal(0, axis_.label_to_index(4))
132
- assert_equal(1, axis_.label_to_index(5))
133
- assert_nil(axis_.label_to_index(3))
131
+ assert_equal(0, axis_.index(4))
132
+ assert_equal(1, axis_.index(5))
133
+ assert_nil(axis_.index(3))
134
134
  end
135
135
 
136
136
 
137
137
  def test_indexed_axis_index_to_label
138
138
  axis_ = IndexedAxis.new(2, 4)
139
- assert_equal(4, axis_.index_to_label(0))
140
- assert_equal(5, axis_.index_to_label(1))
141
- assert_nil(axis_.index_to_label(2))
139
+ assert_equal(4, axis_.label(0))
140
+ assert_equal(5, axis_.label(1))
141
+ assert_nil(axis_.label(2))
142
142
  end
143
143
 
144
144
 
@@ -67,10 +67,10 @@ module NTable
67
67
  def test_add_single_axis
68
68
  s_ = Structure.new
69
69
  s_.add(@labeled1, :first)
70
- assert_equal(@labeled1, s_.axis_info(0).axis)
71
- assert_equal(@labeled1, s_.axis_info(:first).axis)
72
- assert_equal(0, s_.axis_info(:first).index)
73
- assert_equal('first', s_.axis_info(0).name)
70
+ assert_equal(@labeled1, s_.axis(0).axis_object)
71
+ assert_equal(@labeled1, s_.axis(:first).axis_object)
72
+ assert_equal(0, s_.axis(:first).axis_index)
73
+ assert_equal('first', s_.axis(0).axis_name)
74
74
  end
75
75
 
76
76
 
@@ -79,16 +79,16 @@ module NTable
79
79
  s_.add(@labeled1, :first)
80
80
  s_.add(@indexed1, :second)
81
81
  s_.add(@indexed1)
82
- assert_equal(@labeled1, s_.axis_info(0).axis)
83
- assert_equal(@labeled1, s_.axis_info(:first).axis)
84
- assert_equal(0, s_.axis_info(:first).index)
85
- assert_equal('first', s_.axis_info(0).name)
86
- assert_equal(@indexed1, s_.axis_info(1).axis)
87
- assert_equal(@indexed1, s_.axis_info(:second).axis)
88
- assert_equal(1, s_.axis_info(:second).index)
89
- assert_equal('second', s_.axis_info(1).name)
90
- assert_equal(@indexed1, s_.axis_info(2).axis)
91
- assert_nil(s_.axis_info(2).name)
82
+ assert_equal(@labeled1, s_.axis(0).axis_object)
83
+ assert_equal(@labeled1, s_.axis(:first).axis_object)
84
+ assert_equal(0, s_.axis(:first).axis_index)
85
+ assert_equal('first', s_.axis(0).axis_name)
86
+ assert_equal(@indexed1, s_.axis(1).axis_object)
87
+ assert_equal(@indexed1, s_.axis(:second).axis_object)
88
+ assert_equal(1, s_.axis(:second).axis_index)
89
+ assert_equal('second', s_.axis(1).axis_name)
90
+ assert_equal(@indexed1, s_.axis(2).axis_object)
91
+ assert_nil(s_.axis(2).axis_name)
92
92
  end
93
93
 
94
94
 
@@ -98,12 +98,12 @@ module NTable
98
98
  s_.add(@indexed1, :second)
99
99
  s_.remove(:first)
100
100
  assert_equal(1, s_.dim)
101
- assert_equal(@indexed1, s_.axis_info(0).axis)
102
- assert_equal(@indexed1, s_.axis_info(:second).axis)
103
- assert_equal(0, s_.axis_info(:second).index)
104
- assert_equal('second', s_.axis_info(0).name)
105
- assert_nil(s_.axis_info(1))
106
- assert_nil(s_.axis_info(:first))
101
+ assert_equal(@indexed1, s_.axis(0).axis_object)
102
+ assert_equal(@indexed1, s_.axis(:second).axis_object)
103
+ assert_equal(0, s_.axis(:second).axis_index)
104
+ assert_equal('second', s_.axis(0).axis_name)
105
+ assert_nil(s_.axis(1))
106
+ assert_nil(s_.axis(:first))
107
107
  end
108
108
 
109
109
 
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: ntable
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.1
4
+ version: 0.1.2
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -9,7 +9,7 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2012-09-07 00:00:00.000000000 Z
12
+ date: 2012-09-10 00:00:00.000000000 Z
13
13
  dependencies: []
14
14
  description: NTable provides a convenient data structure for storing n-dimensional
15
15
  tabular data. It works with zero-dimensional scalar values, arrays, tables, and