memory_record 0.0.7 → 0.0.8
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/README.org +31 -2
- data/examples/0110_for_legacy_code.rb +2 -0
- data/examples/0140_practice.rb +2 -2
- data/examples/0150_reset.rb +2 -2
- data/examples/0160_key_is_anything_ok.rb +2 -2
- data/examples/0170_tips_on_handling_boolean_type.rb +3 -3
- data/examples/{0200_validation.rb → 0200_with_active_model_validation.rb} +1 -1
- data/examples/{0210_key_duplicate.rb → 0210_key_duplicate_check.rb} +4 -2
- data/examples/0220_bad_design.rb +17 -0
- data/examples/0230_with_use_activerecord_enum.rb +1 -1
- data/examples/0240_attr_reader_option.rb +6 -6
- data/examples/0250_lookup_super_call.rb +2 -2
- data/examples/0260_also_refer_to_other_keys.rb +27 -0
- data/examples/0270_instance_freeze.rb +22 -0
- data/lib/memory_record/memory_record.rb +3 -0
- data/lib/memory_record/version.rb +1 -1
- metadata +7 -5
- data/examples/0220_when_key_like_numeric.rb +0 -17
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: c8dfcb893c88a45a5e788f4e1b190b9dcd9647b9
|
4
|
+
data.tar.gz: 808381a0ccdb75f0600e5e6618b7755c7466c995
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: d598fd06e27533ce8aadd8531c2b944f592e16e4f9bdeb515af9f593d3a506062e9a0f0d3692f804d11e23fa3eaf8364fd98e3bf89d990831684e4baf9a0a1a5
|
7
|
+
data.tar.gz: 6848273b2c34f2ffb6c9914a135edc278954cd1989a7d54abee1d62ec55aea2be31c8ad1d348ec5d797ecf23bb4ee9227fd70ba6ad5e14eb49d18fa9133da2b3
|
data/README.org
CHANGED
@@ -1,6 +1,7 @@
|
|
1
1
|
* MemoryRecord
|
2
2
|
|
3
|
-
A simple library that handles a few records easily
|
3
|
+
A simple library that handles a few records easily.
|
4
|
+
With this library can flexibly managed immutable data.
|
4
5
|
|
5
6
|
** Installation
|
6
7
|
|
@@ -110,6 +111,35 @@ Foo.fetch_if(:a) # => #<Foo:... @attributes={...}>
|
|
110
111
|
Foo.fetch_if(:xxx) # => <KeyError: ...>
|
111
112
|
#+END_SRC
|
112
113
|
|
114
|
+
*** How to refer to other keys
|
115
|
+
|
116
|
+
#+BEGIN_SRC ruby
|
117
|
+
class Foo
|
118
|
+
include MemoryRecord
|
119
|
+
memory_record [
|
120
|
+
{key: :a, other_key: :x},
|
121
|
+
{key: :b, other_key: :y},
|
122
|
+
{key: :c, other_key: :z},
|
123
|
+
]
|
124
|
+
|
125
|
+
class << self
|
126
|
+
def lookup(v)
|
127
|
+
super || invert_table[v]
|
128
|
+
end
|
129
|
+
|
130
|
+
private
|
131
|
+
|
132
|
+
def invert_table
|
133
|
+
@invert_table ||= inject({}) {|a, e| a.merge(e.other_key => e) }
|
134
|
+
end
|
135
|
+
end
|
136
|
+
end
|
137
|
+
|
138
|
+
Foo[:a] == Foo[:x] # => true
|
139
|
+
Foo[:b] == Foo[:y] # => true
|
140
|
+
Foo[:c] == Foo[:z] # => true
|
141
|
+
#+END_SRC
|
142
|
+
|
113
143
|
*** How can I prohibit the hash key from being attr_reader automatically?
|
114
144
|
|
115
145
|
**** attr_reader: false
|
@@ -182,4 +212,3 @@ Foo.collect(&:code) # => [1, 2, 3]
|
|
182
212
|
|
183
213
|
It is not recommended to specify it explicitly.
|
184
214
|
It is useful only when refactoring legacy code with compatibility in mind.
|
185
|
-
|
data/examples/0140_practice.rb
CHANGED
@@ -9,7 +9,7 @@ class Direction
|
|
9
9
|
]
|
10
10
|
|
11
11
|
def long_name
|
12
|
-
"#{name}
|
12
|
+
"#{name} direction"
|
13
13
|
end
|
14
14
|
end
|
15
15
|
|
@@ -19,7 +19,7 @@ Direction.keys # => [:left, :right]
|
|
19
19
|
Direction[:right].key # => :right
|
20
20
|
Direction[:right].code # => 1
|
21
21
|
Direction[:right].vector # => [1, 0]
|
22
|
-
Direction[:right].long_name # => "
|
22
|
+
Direction[:right].long_name # => "→ direction"
|
23
23
|
|
24
24
|
Direction[1].key # => :right
|
25
25
|
|
data/examples/0150_reset.rb
CHANGED
@@ -8,14 +8,14 @@ end
|
|
8
8
|
|
9
9
|
C.keys # => [:a]
|
10
10
|
|
11
|
-
# memory_record
|
11
|
+
# Can not update with memory_record
|
12
12
|
class C
|
13
13
|
memory_record [{key: :b}]
|
14
14
|
end
|
15
15
|
|
16
16
|
C.keys # => [:a]
|
17
17
|
|
18
|
-
# memory_record_reset
|
18
|
+
# With memory_record_reset you can rebuild data
|
19
19
|
C.memory_record_reset [{key: :c}]
|
20
20
|
|
21
21
|
C.keys # => [:c]
|
@@ -4,11 +4,11 @@ require 'memory_record'
|
|
4
4
|
class Foo
|
5
5
|
include MemoryRecord
|
6
6
|
memory_record [
|
7
|
-
{key: 'true', name: '
|
8
|
-
{key: 'false', name: '
|
7
|
+
{key: 'true', name: 'ON'},
|
8
|
+
{key: 'false', name: 'OFF'},
|
9
9
|
]
|
10
10
|
end
|
11
11
|
|
12
12
|
flag = true
|
13
13
|
|
14
|
-
Foo[flag.to_s].name # => "
|
14
|
+
Foo[flag.to_s].name # => "ON"
|
@@ -1,12 +1,14 @@
|
|
1
1
|
$LOAD_PATH.unshift '../lib'
|
2
2
|
require 'memory_record'
|
3
3
|
|
4
|
+
# An error occurs if key is duplicated
|
5
|
+
|
4
6
|
class Foo
|
5
7
|
include MemoryRecord
|
6
|
-
memory_record [{key: :a}, {key: :a},] rescue $! # => #<ArgumentError: Foo#key
|
8
|
+
memory_record [{key: :a}, {key: :a},] rescue $! # => #<ArgumentError: Foo#key :a is duplicate
|
7
9
|
end
|
8
10
|
|
9
11
|
class Bar
|
10
12
|
include MemoryRecord
|
11
|
-
memory_record [{code: 0}, {code: 0},] rescue $! # => #<ArgumentError: Bar#code
|
13
|
+
memory_record [{code: 0}, {code: 0},] rescue $! # => #<ArgumentError: Bar#code 0 is duplicate
|
12
14
|
end
|
@@ -0,0 +1,17 @@
|
|
1
|
+
$LOAD_PATH.unshift '../lib'
|
2
|
+
require 'memory_record'
|
3
|
+
|
4
|
+
# I can do it like this, but I can not recommend it at all
|
5
|
+
# Do not increase the magic number
|
6
|
+
# Let"s see what key there is for
|
7
|
+
|
8
|
+
class Foo
|
9
|
+
include MemoryRecord
|
10
|
+
memory_record [
|
11
|
+
{key: "01", name: "left"},
|
12
|
+
{key: "02", name: "right"},
|
13
|
+
]
|
14
|
+
end
|
15
|
+
|
16
|
+
Foo["01"] # => #<Foo:0x007f9db5ac1b10 @attributes={:key=>:"01", :name=>"left", :code=>0}>
|
17
|
+
Foo["02"] # => #<Foo:0x007f9db5ac15e8 @attributes={:key=>:"02", :name=>"right", :code=>1}>
|
@@ -3,7 +3,7 @@ require 'memory_record'
|
|
3
3
|
|
4
4
|
require 'active_record'
|
5
5
|
|
6
|
-
ActiveRecord::VERSION::STRING # => "5.1.
|
6
|
+
ActiveRecord::VERSION::STRING # => "5.1.4"
|
7
7
|
ActiveRecord::Migration.verbose = false
|
8
8
|
ActiveRecord::Base.establish_connection(adapter: 'sqlite3', database: ':memory:')
|
9
9
|
|
@@ -10,9 +10,9 @@ class C1
|
|
10
10
|
end
|
11
11
|
end
|
12
12
|
|
13
|
-
C1.first.x rescue $! # => #<NoMethodError: undefined method `x' for #<C1:
|
14
|
-
C1.first.y rescue $! # => #<NoMethodError: undefined method `y' for #<C1:
|
15
|
-
C1.first.z rescue $! # => #<NoMethodError: undefined method `z' for #<C1:
|
13
|
+
C1.first.x rescue $! # => #<NoMethodError: undefined method `x' for #<C1:0x007f93579027d8>>
|
14
|
+
C1.first.y rescue $! # => #<NoMethodError: undefined method `y' for #<C1:0x007f93579027d8>>
|
15
|
+
C1.first.z rescue $! # => #<NoMethodError: undefined method `z' for #<C1:0x007f93579027d8>>
|
16
16
|
|
17
17
|
class C2
|
18
18
|
include MemoryRecord
|
@@ -23,9 +23,9 @@ class C2
|
|
23
23
|
end
|
24
24
|
end
|
25
25
|
|
26
|
-
C2.first.x rescue $! # => #<NoMethodError: undefined method `x' for #<C2:
|
26
|
+
C2.first.x rescue $! # => #<NoMethodError: undefined method `x' for #<C2:0x007f93578e2550>>
|
27
27
|
C2.first.y rescue $! # => 1
|
28
|
-
C2.first.z rescue $! # => #<NoMethodError: undefined method `z' for #<C2:
|
28
|
+
C2.first.z rescue $! # => #<NoMethodError: undefined method `z' for #<C2:0x007f93578e2550>>
|
29
29
|
|
30
30
|
class C3
|
31
31
|
include MemoryRecord
|
@@ -37,5 +37,5 @@ class C3
|
|
37
37
|
end
|
38
38
|
|
39
39
|
C3.first.x rescue $! # => 1
|
40
|
-
C3.first.y rescue $! # => #<NoMethodError: undefined method `y' for #<C3:
|
40
|
+
C3.first.y rescue $! # => #<NoMethodError: undefined method `y' for #<C3:0x007f93578c2278>>
|
41
41
|
C3.first.z rescue $! # => 1
|
@@ -15,5 +15,5 @@ class C
|
|
15
15
|
end
|
16
16
|
end
|
17
17
|
|
18
|
-
C.lookup(:alice) # => #<C:
|
19
|
-
C[:alice] # => #<C:
|
18
|
+
C.lookup(:alice) # => #<C:0x007f92c2addf98 @attributes={:key=>:alice, :code=>0}>
|
19
|
+
C[:alice] # => #<C:0x007f92c2addf98 @attributes={:key=>:alice, :code=>0}>
|
@@ -0,0 +1,27 @@
|
|
1
|
+
$LOAD_PATH.unshift '../lib'
|
2
|
+
require 'memory_record'
|
3
|
+
|
4
|
+
class Foo
|
5
|
+
include MemoryRecord
|
6
|
+
memory_record [
|
7
|
+
{key: :a, other_key: :x},
|
8
|
+
{key: :b, other_key: :y},
|
9
|
+
{key: :c, other_key: :z},
|
10
|
+
]
|
11
|
+
|
12
|
+
class << self
|
13
|
+
def lookup(v)
|
14
|
+
super || invert_table[v]
|
15
|
+
end
|
16
|
+
|
17
|
+
private
|
18
|
+
|
19
|
+
def invert_table
|
20
|
+
@invert_table ||= inject({}) {|a, e| a.merge(e.other_key => e) }
|
21
|
+
end
|
22
|
+
end
|
23
|
+
end
|
24
|
+
|
25
|
+
Foo[:a] == Foo[:x] # => true
|
26
|
+
Foo[:b] == Foo[:y] # => true
|
27
|
+
Foo[:c] == Foo[:z] # => true
|
@@ -0,0 +1,22 @@
|
|
1
|
+
$LOAD_PATH.unshift '../lib'
|
2
|
+
require 'memory_record'
|
3
|
+
|
4
|
+
class Foo
|
5
|
+
include MemoryRecord
|
6
|
+
memory_record [
|
7
|
+
{key: :a},
|
8
|
+
]
|
9
|
+
|
10
|
+
def a
|
11
|
+
@var ||= 1
|
12
|
+
end
|
13
|
+
|
14
|
+
each do |e|
|
15
|
+
e.a
|
16
|
+
e.freeze
|
17
|
+
end
|
18
|
+
end
|
19
|
+
|
20
|
+
v = Foo.first # => #<Foo:0x007fd0c09cfc50 @attributes={:key=>:a, :code=>0}, @var=1>
|
21
|
+
v.frozen? # => true
|
22
|
+
v.a # => 1
|
@@ -157,10 +157,13 @@ module MemoryRecord
|
|
157
157
|
def memory_record_reset(records)
|
158
158
|
@keys = nil
|
159
159
|
@codes = nil
|
160
|
+
|
160
161
|
@values = records.collect.with_index { |e, i|
|
161
162
|
new(_attributes_normalize(e, i))
|
162
163
|
}.freeze
|
164
|
+
|
163
165
|
@values_hash = {}
|
166
|
+
|
164
167
|
[:code, :key].each do |pk|
|
165
168
|
@values_hash[pk] = @values.inject({}) do |a, e|
|
166
169
|
a.merge(e.send(pk) => e) do |key, a, b|
|
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.
|
4
|
+
version: 0.0.8
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- akicho8
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2017-11
|
11
|
+
date: 2017-12-11 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: rake
|
@@ -104,12 +104,14 @@ files:
|
|
104
104
|
- examples/0170_tips_on_handling_boolean_type.rb
|
105
105
|
- examples/0180_freeze_makes_it_impossible_to_memorize.rb
|
106
106
|
- examples/0190_super_usable.rb
|
107
|
-
- examples/
|
108
|
-
- examples/
|
109
|
-
- examples/
|
107
|
+
- examples/0200_with_active_model_validation.rb
|
108
|
+
- examples/0210_key_duplicate_check.rb
|
109
|
+
- examples/0220_bad_design.rb
|
110
110
|
- examples/0230_with_use_activerecord_enum.rb
|
111
111
|
- examples/0240_attr_reader_option.rb
|
112
112
|
- examples/0250_lookup_super_call.rb
|
113
|
+
- examples/0260_also_refer_to_other_keys.rb
|
114
|
+
- examples/0270_instance_freeze.rb
|
113
115
|
- lib/memory_record.rb
|
114
116
|
- lib/memory_record/memory_record.rb
|
115
117
|
- lib/memory_record/version.rb
|
@@ -1,17 +0,0 @@
|
|
1
|
-
$LOAD_PATH.unshift '../lib'
|
2
|
-
require 'memory_record'
|
3
|
-
|
4
|
-
class Foo
|
5
|
-
include MemoryRecord
|
6
|
-
memory_record [
|
7
|
-
{key: '01', name: '→'},
|
8
|
-
{key: '02', name: '←'},
|
9
|
-
]
|
10
|
-
end
|
11
|
-
|
12
|
-
Foo['01'] # => #<Foo:0x007fac2c35db28 @attributes={:key=>:'01', :name=>'→', :code=>0}>
|
13
|
-
Foo['02'] # => #<Foo:0x007fac2c35d9e8 @attributes={:key=>:'02', :name=>'←', :code=>1}>
|
14
|
-
|
15
|
-
# このようにもできるがまったくオススメできない
|
16
|
-
# マジックナンバーを増やすメリットはない
|
17
|
-
# なんのためにキーがあるのか考えよう
|