memory_record 0.0.13 → 0.0.14

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
  SHA256:
3
- metadata.gz: a4e8c3d1cda033561e441032be32332be1327c9876a4a62d0d64cac44b024f99
4
- data.tar.gz: 2b9fed19a0944263ac9d0895677018537557c5f4d2d5bba9b4536f02c97f517c
3
+ metadata.gz: 64b86bd76f59f5da1e0e4111208b5fdb868df86865239e998c9d4de5796f43e6
4
+ data.tar.gz: 405a3da00872ef9c104ac6208c225eb808b7329443be89cc1ee3328b3aec0a5e
5
5
  SHA512:
6
- metadata.gz: 8412d6ec55aaea46004a97a34d111e66c0a5fc5901ad975f2714842087f5a5168935920f752f426930fa1967816950c742a4a4f14c9e03951d9fdf248e372565
7
- data.tar.gz: 3d994cce8445425741eb6245b65dfac26d7dae8253062ea8b9a5694f32baab72be36d4b1b167c29cc8fe26c68b662ce4a1d96ab345aee008b145a767e429175e
6
+ metadata.gz: 0f243e8cf16808efda1c6fab438c1631982d9d825d1dd760f5bc3c1741ee30d1ca01ec1e79a5259e6f2757cef8153d6823e8360ee4df09fa2644745c4ac6bb69
7
+ data.tar.gz: 51f7d2216b5aef88194fd7d9c76362babab8800193c85b7bb511d6aa6d4cbda004e7992891d77113101e86e04e02f868b22831d41e28c17e43ca817d5bb89912
data/README.md CHANGED
@@ -2,7 +2,8 @@
2
2
 
3
3
  [![Build Status](https://travis-ci.org/akicho8/memory_record.svg?branch=master)](https://travis-ci.org/akicho8/memory_record)
4
4
  [![Gem Version](https://badge.fury.io/rb/memory_record.svg)](https://badge.fury.io/rb/memory_record)
5
- [![Dependency Status](https://gemnasium.com/badges/github.com/akicho8/memory_record.svg)](https://gemnasium.com/github.com/akicho8/memory_record)
5
+
6
+ <!-- [![Dependency Status](https://gemnasium.com/badges/github.com/akicho8/memory_record.svg)](https://gemnasium.com/github.com/akicho8/memory_record) -->
6
7
 
7
8
  ## Introduction
8
9
 
@@ -206,14 +207,18 @@ class ColorInfo
206
207
 
207
208
  def children
208
209
  [
209
- {foo: 1, bar: 3},
210
- {foo: 2, bar: 4},
210
+ {x: 1, y: 2},
211
+ {x: 3, y: 4},
211
212
  ]
212
213
  end
213
214
  end
214
215
 
215
- ColorInfo.first.as_json(only: :key) # => {:key => :blue}
216
- ColorInfo.first.as_json(except: [:rgb, :code]) # => {:key => :blue}
217
- ColorInfo.first.as_json(only: [], methods: :hex) # => {:hex => "#0000FF"}
218
- ColorInfo.first.as_json(only: [], include: {children: {only: :foo}} ).should == {:children => [{"foo" => 1}, {"foo" => 2}]}
216
+ color_info = ColorInfo.first
217
+ color_info.as_json(only: :key) # => {:key => :blue}
218
+ color_info.as_json(except: [:rgb, :code]) # => {:key => :blue}
219
+ color_info.as_json(only: [], methods: :hex) # => {:hex => "#0000FF"}
220
+ color_info.as_json(only: [], include: {children: {only: :x}} ) # => {:children => [{"x" => 1}, {"x" => 3}]}
221
+
222
+ ColorInfo.as_json(only: :key) # => [{:key=>:blue}, {:key=>:red}]
223
+ ColorInfo.to_json(only: :key) # => "[{\"key\":\"blue\"},{\"key\":\"red\"}]"
219
224
  ```
@@ -40,3 +40,6 @@ ColorInfo.first.as_json(only: :key) # => {:key=>
40
40
  ColorInfo.first.as_json(except: [:rgb, :code, :a]) # => {:key=>:blue}
41
41
  ColorInfo.first.as_json(only: [], methods: :hex) # => {:hex=>"#0000FF"}
42
42
  ColorInfo.first.as_json(only: [], include: {children: {only: :a}} ) # => {:children=>[{"a"=>1}, {"a"=>1}, {:a=>1}]}
43
+
44
+ ColorInfo.as_json(only: :key) # => [{:key=>:blue}, {:key=>:red}]
45
+ ColorInfo.to_json(only: :key) # => "[{\"key\":\"blue\"},{\"key\":\"red\"}]"
@@ -0,0 +1,14 @@
1
+ $LOAD_PATH.unshift '../lib'
2
+ require 'memory_record'
3
+
4
+ class Foo
5
+ include MemoryRecord
6
+ memory_record [
7
+ { key: :a, },
8
+ { key: :b, },
9
+ ]
10
+ end
11
+
12
+ Foo[:a] == Foo[:a] # => true
13
+ Foo[:a] == Foo[:b] # => false
14
+ Foo[:a] < Foo[:b] # => true
@@ -36,6 +36,7 @@ module MemoryRecord
36
36
  end
37
37
 
38
38
  extend Enumerable
39
+ include Comparable
39
40
  include ::MemoryRecord::SingletonMethods
40
41
  include ::MemoryRecord::Serialization
41
42
 
@@ -76,16 +77,11 @@ module MemoryRecord
76
77
  define_method(:name) { key.to_s }
77
78
  end
78
79
 
79
- # sort matches definition order
80
+ # sort matches definition order. Comparable module methods will be available.
80
81
  def <=>(other)
81
82
  [self.class, code] <=> [other.class, other.code]
82
83
  end
83
84
 
84
- # Even if duplicate, objects match
85
- def ==(other)
86
- self.class == other.class && key == other.key
87
- end
88
-
89
85
  # Even if object_id of objects used as hash keys are different, they match. It also speeds up by defining hash.
90
86
  def eql?(other)
91
87
  self.class == other.class && key == other.key
@@ -1,3 +1,3 @@
1
1
  module MemoryRecord
2
- VERSION = '0.0.13'
2
+ VERSION = '0.0.14'
3
3
  end
@@ -1,22 +1,30 @@
1
1
  require 'spec_helper'
2
2
 
3
- class Model
4
- include MemoryRecord
5
- memory_record [
6
- {name: 'A'},
7
- {name: 'B'},
8
- ], attr_reader: :name
9
- end
3
+ RSpec.describe MemoryRecord do
4
+ class Model5
5
+ include MemoryRecord
6
+ memory_record [
7
+ { key: :a },
8
+ { key: :b },
9
+ ]
10
+ end
10
11
 
11
- class Legacy
12
- include MemoryRecord
13
- memory_record [
14
- {code: 10, key: :a, name: 'A'},
15
- {code: 20, key: :b, name: 'B'},
16
- ], attr_reader: :name
17
- end
12
+ class Model
13
+ include MemoryRecord
14
+ memory_record [
15
+ { name: 'A' },
16
+ { name: 'B' },
17
+ ], attr_reader: :name
18
+ end
19
+
20
+ class Legacy
21
+ include MemoryRecord
22
+ memory_record [
23
+ { code: 10, key: :a, name: 'A', },
24
+ { code: 20, key: :b, name: 'B', },
25
+ ], attr_reader: :name
26
+ end
18
27
 
19
- RSpec.describe MemoryRecord do
20
28
  def class_new(table)
21
29
  Class.new {
22
30
  include MemoryRecord
@@ -26,21 +34,21 @@ RSpec.describe MemoryRecord do
26
34
 
27
35
  context 'Useful Class Methods' do
28
36
  it 'each' do
29
- assert Model.each
37
+ assert { Model.each }
30
38
  end
31
39
 
32
40
  it 'keys' do
33
- assert_equal [:_key0, :_key1], Model.keys
41
+ assert { [:_key0, :_key1] == Model.keys }
34
42
  end
35
43
 
36
44
  it 'values' do
37
- assert_equal Model.each.to_a, Model.values
45
+ assert { Model.each.to_a == Model.values }
38
46
  end
39
47
  end
40
48
 
41
49
  context 'Subscript access to class' do
42
50
  it 'When code and key are automatically waved' do
43
- assert_equal 'A', Model[0].name
51
+ assert { 'A' == Model[0].name }
44
52
  end
45
53
 
46
54
  it 'It will not cause an error even if there is no corresponding key' do
@@ -58,23 +66,23 @@ RSpec.describe MemoryRecord do
58
66
 
59
67
  context 'Subscript access to instance' do
60
68
  it do
61
- Model.first[:name].should == 'A'
62
- Model.first[:xxxx].should == nil
69
+ assert { Model.first[:name] == 'A' }
70
+ assert { Model.first[:xxxx] == nil }
63
71
  end
64
72
  end
65
73
 
66
74
  context 'to_s' do
67
75
  it do
68
- Model.first.to_s.should == 'A'
76
+ assert { Model.first.to_s == 'A' }
69
77
  end
70
78
  end
71
79
 
72
80
  context 'instance accessor' do
73
81
  it do
74
- assert Model.first.to_h
75
- assert Model.first.attributes
76
- assert Model.first.key
77
- assert Model.first.code
82
+ assert { Model.first.to_h }
83
+ assert { Model.first.attributes }
84
+ assert { Model.first.key }
85
+ assert { Model.first.code }
78
86
  end
79
87
  end
80
88
 
@@ -84,35 +92,35 @@ RSpec.describe MemoryRecord do
84
92
  @model.memory_record_reset [{key: :b}, {key: :c}]
85
93
  end
86
94
  it 'changed' do
87
- assert_equal [:b, :c], @model.keys
88
- assert_equal [0, 1], @model.codes
95
+ assert { [:b, :c] == @model.keys }
96
+ assert { [0, 1] == @model.codes }
89
97
  end
90
98
  end
91
99
 
92
100
  context 'Subtle specifications' do
93
101
  it 'When keys are specified as an array, they become symbols with underscores' do
94
102
  model = class_new [{key: [:id, :desc]}]
95
- assert_equal [:id_desc], model.keys
103
+ assert { [:id_desc] == model.keys }
96
104
  end
97
105
 
98
106
  it 'Name method is automatically defined if it is not defined' do
99
107
  model = class_new [{key: :foo}]
100
- assert_equal true, model.instance_methods.include?(:name)
101
- assert_equal "foo", model[:foo].name
108
+ assert { true == model.instance_methods.include?(:name) }
109
+ assert { "foo" == model[:foo].name }
102
110
  end
103
111
  end
104
112
 
105
113
  it 'Japanese can be used for key' do
106
114
  model = class_new [{key: 'あ'}]
107
- assert model['あ']
115
+ assert { model['あ'] }
108
116
  end
109
117
 
110
118
  it 'When you define code and keys yourself' do
111
- assert_equal 'A', Legacy[10].name
119
+ assert { 'A' == Legacy[10].name }
112
120
  end
113
121
 
114
122
  it 'We do not freeze values because memoization becomes impossible' do
115
- Model.first.name.upcase!
123
+ assert_nothing_raised { Model.first.name.upcase! }
116
124
  end
117
125
 
118
126
  describe 'super' do
@@ -128,7 +136,7 @@ RSpec.describe MemoryRecord do
128
136
  end
129
137
 
130
138
  it 'Since methods are defined in ancestry, you can use super' do
131
- assert_equal 'xy', Model2.first.var
139
+ assert { 'xy' == Model2.first.var }
132
140
  end
133
141
  end
134
142
 
@@ -142,15 +150,15 @@ RSpec.describe MemoryRecord do
142
150
  end
143
151
 
144
152
  it do
145
- assert_equal 1, Model3.first.a
146
- assert_equal nil, Model3.first.b
153
+ assert { 1 == Model3.first.a }
154
+ assert { nil == Model3.first.b }
147
155
  end
148
156
  end
149
157
 
150
158
  describe 'Do not duplicate key and code' do
151
159
  it do
152
- expect { Model.memory_record_reset([{key: :a}, {key: :a}]) }.to raise_error(ArgumentError)
153
- expect { Model.memory_record_reset([{code: 0}, {code: 0}]) }.to raise_error(ArgumentError)
160
+ assert_raises(ArgumentError) { Model.memory_record_reset([{key: :a}, {key: :a}]) }
161
+ assert_raises(ArgumentError) { Model.memory_record_reset([{code: 0}, {code: 0}]) }
154
162
  end
155
163
  end
156
164
 
@@ -169,27 +177,27 @@ RSpec.describe MemoryRecord do
169
177
  context 'false' do
170
178
  subject { element(attr_reader: false) }
171
179
  it do
172
- assert_equal false, subject.respond_to?(:x)
173
- assert_equal false, subject.respond_to?(:y)
174
- assert_equal false, subject.respond_to?(:z)
180
+ assert { subject.respond_to?(:x) == false }
181
+ assert { subject.respond_to?(:y) == false }
182
+ assert { subject.respond_to?(:z) == false }
175
183
  end
176
184
  end
177
185
 
178
186
  context 'only' do
179
187
  subject { element(attr_reader: {only: [:x, :z]}) }
180
188
  it do
181
- assert_equal true, subject.respond_to?(:x)
182
- assert_equal false, subject.respond_to?(:y)
183
- assert_equal true, subject.respond_to?(:z)
189
+ assert { subject.respond_to?(:x) == true }
190
+ assert { subject.respond_to?(:y) == false }
191
+ assert { subject.respond_to?(:z) == true }
184
192
  end
185
193
  end
186
194
 
187
195
  context 'except' do
188
196
  subject { element(attr_reader: {except: :y}) }
189
197
  it do
190
- assert_equal true, subject.respond_to?(:x)
191
- assert_equal false, subject.respond_to?(:y)
192
- assert_equal true, subject.respond_to?(:z)
198
+ assert { subject.respond_to?(:x) == true }
199
+ assert { subject.respond_to?(:y) == false }
200
+ assert { subject.respond_to?(:z) == true }
193
201
  end
194
202
  end
195
203
  end
@@ -201,39 +209,50 @@ RSpec.describe MemoryRecord do
201
209
  super.key
202
210
  end
203
211
  end
204
- model[:a].should == :a
212
+ assert { model[:a] == :a }
205
213
  end
206
214
 
207
215
  it "minus" do
208
216
  m = class_new [{key: :a}, {key: :b}]
209
- ([m[:a], m[:b]] - [m[:a]]).should == [m[:b]]
217
+ assert { ([m[:a], m[:b]] - [m[:a]]) == [m[:b]] }
210
218
  end
211
219
 
212
220
  describe "sort (<=> method)" do
213
221
  it "same class" do
214
222
  m = class_new [{key: :a}, {key: :b}]
215
- [m[:b], m[:a]].sort.should == [m[:a], m[:b]]
223
+ assert { [m[:b], m[:a]].sort == [m[:a], m[:b]] }
216
224
  end
217
225
 
218
226
  it "different class" do
219
227
  m1 = class_new [{key: :a}, {key: :b}]
220
228
  m2 = class_new [{key: :a}, {key: :b}]
221
- expect { [m1[:b], m2[:a]].sort }.to raise_error(ArgumentError)
229
+ assert_raises(ArgumentError) { [m1[:b], m2[:a]].sort }
222
230
  end
223
231
  end
224
232
 
225
- it "==" do
226
- a = Model.fetch(:_key0)
227
- b = Marshal.load(Marshal.dump(a))
228
- (a == b).should == true
229
- end
230
-
231
233
  it "eql?, hash" do
232
234
  a = Model.fetch(:_key0)
233
235
  b = Marshal.load(Marshal.dump(a))
234
236
  h = {}
235
237
  h[a] = true
236
- h[b].should == true
238
+ assert { h[b] == true }
239
+ end
240
+
241
+ describe "Comparable operator" do
242
+ it do
243
+ model = class_new [
244
+ { key: :a },
245
+ { key: :b },
246
+ ]
247
+ assert { model[:a] < model[:b] }
248
+ assert { model[:a] == model[:a] }
249
+ end
250
+
251
+ it "==" do
252
+ a = Model5.first
253
+ b = Marshal.load(Marshal.dump(a))
254
+ assert { a == b }
255
+ end
237
256
  end
238
257
 
239
258
  context 'as_json' do
@@ -271,10 +290,11 @@ RSpec.describe MemoryRecord do
271
290
  end
272
291
 
273
292
  it "as_json(options)" do
274
- ColorInfo.first.as_json(only: :key).should == {:key => :blue}
275
- ColorInfo.first.as_json(except: [:rgb, :code, :a]).should == {:key => :blue}
276
- ColorInfo.first.as_json(only: [], methods: :hex).should == {:hex => "#0000FF"}
277
- ColorInfo.first.as_json(only: [], include: {children: {only: :a}} ).should == {:children => [{"a" => 1}, {"a" => 1}, {:a => 1}]}
293
+ assert { ColorInfo.first.as_json(only: :key) == {:key => :blue} }
294
+ assert { ColorInfo.first.as_json(except: [:rgb, :code, :a]) == {:key => :blue} }
295
+ assert { ColorInfo.first.as_json(only: [], methods: :hex) == {:hex => "#0000FF"} }
296
+ assert { ColorInfo.first.as_json(only: [], include: {children: {only: :a}}) == {:children => [{"a" => 1}, {"a" => 1}, {:a => 1}]} }
297
+ assert { ColorInfo.as_json(only: :key) == [{:key => :blue}, {:key => :red}] }
278
298
  end
279
299
  end
280
300
  end
data/spec/spec_helper.rb CHANGED
@@ -2,8 +2,5 @@ $LOAD_PATH.unshift File.expand_path('../../lib', __FILE__)
2
2
  require 'memory_record'
3
3
 
4
4
  RSpec.configure do |config|
5
- config.expect_with :rspec do |expectations|
6
- expectations.syntax = [:should, :expect]
7
- end
8
5
  config.expect_with :test_unit
9
6
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: memory_record
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.13
4
+ version: 0.0.14
5
5
  platform: ruby
6
6
  authors:
7
7
  - akicho8
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2018-05-20 00:00:00.000000000 Z
11
+ date: 2018-06-03 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rake
@@ -117,6 +117,7 @@ files:
117
117
  - examples/0300_use_as_hash_key.rb
118
118
  - examples/0310_same_if_dup.rb
119
119
  - examples/0320_as_json.rb
120
+ - examples/0330_comparable.rb
120
121
  - lib/memory_record.rb
121
122
  - lib/memory_record/memory_record.rb
122
123
  - lib/memory_record/memory_record/serialization.rb
@@ -144,7 +145,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
144
145
  version: '0'
145
146
  requirements: []
146
147
  rubyforge_project:
147
- rubygems_version: 2.7.3
148
+ rubygems_version: 2.7.6
148
149
  signing_key:
149
150
  specification_version: 4
150
151
  summary: A simple library that handles a few records easily