chair 1.1.0 → 1.1.1

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 415c4dfeb44887b370a98e38d6b9dd0b97b734e2
4
- data.tar.gz: 3fb7024b049ee94c0534f1c0e79376992b07d899
3
+ metadata.gz: 708b6c777ef65da883a84fea3b82efc0fab65d04
4
+ data.tar.gz: 6487ea6b33e0a3580ed3dee015e3dee76ef84bf0
5
5
  SHA512:
6
- metadata.gz: 99d8558f1baa52dfbfb986bdbe5848f37ba8c5210052b71af04fb5d57f89bbab9e5684a19ffbca1bffe8c1cbf26f66d60942dd70c8372c884cb069611f440edd
7
- data.tar.gz: 9952115d82340884b0ccb5fdf35f2d2df944e2e6184b312db02cf7042df400a28192af68db21090e70538122558e94233bcce2cd83176d14b4db601e59f15132
6
+ metadata.gz: ad6141ebfb731b5c310b0f6f3180ad84881418de08e5d5b78d928aa3702c9cdbeacdc39142443cfc7696c74d61bf587be10a37d74e9ee0f24f5e0b9db84b10a0
7
+ data.tar.gz: f53d8948344d3dff2afa298c0501b74084590d03301720c94d87ef49e66d0e933380b3c37858bcaf7a73a6c7b494fe508e467c0e9c3b39d2ebef45f6682db355
data/lib/chair/chair.rb CHANGED
@@ -4,7 +4,7 @@ require 'set'
4
4
  # @attr_reader primary_key [Symbol] the primary key of the table
5
5
  # @attr_reader indices [Set<Symbol>] the set of indices for the table
6
6
  class Chair
7
- attr_reader :primary_key, :indices
7
+ attr_reader :primary_key
8
8
 
9
9
  # Creates a new Table object
10
10
  # @param columns [Symbol] columns to insert into the table at initialization
@@ -118,6 +118,10 @@ class Chair
118
118
 
119
119
  alias_method :count, :size
120
120
 
121
+ def indices
122
+ @indices.keys
123
+ end
124
+
121
125
  # Finds a row by searching based on primary key
122
126
  # @param pk [Object] The primary key to look up using
123
127
  # @return [Row,nil] The row that matches
@@ -182,11 +186,12 @@ class Chair
182
186
  # @param column [Symbol] the column to be primary key
183
187
  # @return [Symbol, nil] the primary key assigned. can be nil if the column doesn't exist
184
188
  def set_primary_key!(column)
185
- unless @columns.has_key? column
186
- return nil
189
+ unless has_primary_key?
190
+ check_column_exists column
191
+ remove_index!(column) if indices.include? column
192
+ @pk_map = build_pk_map column
193
+ @primary_key = column
187
194
  end
188
- @pk_map = build_pk_map column
189
- @primary_key = column
190
195
  end
191
196
 
192
197
  # Does this table have a primary key?
@@ -242,8 +247,20 @@ class Chair
242
247
  @table.last
243
248
  end
244
249
 
245
- protected
250
+ def inspect
251
+ # Use the table's column list to order our columns
252
+ inspection = []
253
+ inspection << "primary_key: #{@primary_key.inspect}" if has_primary_key?
254
+ inspection << "indices: #{@indices.keys.inspect}" unless @indices.empty?
255
+ inspection << "columns: #{@columns.keys.inspect}" unless @columns.empty?
256
+ inspection = inspection.compact.join(', ')
257
+ unless inspection.empty?
258
+ inspection.insert 0, ' '
259
+ end
260
+ "#<#{self.class}#{inspection}>"
261
+ end
246
262
 
263
+ protected
247
264
  def find_valid_indices(cols)
248
265
  @indices.keys & cols
249
266
  end
data/lib/chair/version.rb CHANGED
@@ -1,3 +1,3 @@
1
1
  class Chair
2
- VERSION = "1.1.0"
2
+ VERSION = "1.1.1"
3
3
  end
@@ -66,7 +66,7 @@ describe Chair do
66
66
  expect(table.where_title_is('War and Peace').first.to_a).to eq([0, 'War and Peace', 'Leo Tolstoy'])
67
67
  end
68
68
 
69
- it 'table scan' do
69
+ it 'table scan by choice' do
70
70
  table.insert! id: 0, title: 'War and Peace', author: 'Leo Tolstoy'
71
71
  expect(table.table_scan(title: 'War and Peace').first.to_a).to eq([0, 'War and Peace', 'Leo Tolstoy'])
72
72
  end
data/spec/table_spec.rb CHANGED
@@ -80,6 +80,21 @@ describe Chair do
80
80
  }.to change {table.primary_key}.from(nil).to(:title)
81
81
  end
82
82
 
83
+ it "should raise an ArgumentError if it's not an existing column" do
84
+ table = Chair.new
85
+ expect{
86
+ table.set_primary_key! :title
87
+ }.to raise_error ArgumentError, "Column :title does not exist in table"
88
+ end
89
+
90
+ it "fails if there's already a primary key" do
91
+ table = Chair.new :title, :author
92
+ table.set_primary_key! :title
93
+ expect{
94
+ table.set_primary_key! :author
95
+ }.not_to change{table.primary_key}.from(:title)
96
+ end
97
+
83
98
  describe 'fails to build index' do
84
99
  it 'when duplicate fields exist' do
85
100
  table = Chair.new :title
@@ -107,22 +122,15 @@ describe Chair do
107
122
  table.set_primary_key! :title
108
123
  }.to raise_error RuntimeError, 'Row does not have a value in column :title'
109
124
  end
110
-
111
125
  end
112
- end
113
-
114
- it "doesn't set the primary key if it's not a valid column" do
115
- table = Chair.new
116
- expect{
117
- table.set_primary_key! :title
118
- }.not_to change{table.primary_key}.from(nil)
119
- end
120
126
 
121
- it "doesn't set the primary key if there's already a primary key" do
122
- table = Chair.new
123
- expect{
124
- table.set_primary_key! :title
125
- }.not_to change{table.primary_key}.from(nil)
127
+ it 'removes index on column' do
128
+ table = Chair.new :title
129
+ table.add_index! :title
130
+ expect {
131
+ table.set_primary_key! :title
132
+ }.to change {table.indices}.from([:title]).to([])
133
+ end
126
134
  end
127
135
 
128
136
  describe 'add index' do
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: chair
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.1.0
4
+ version: 1.1.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Katherine Whitlock