rndb 0.2.1 → 0.3.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/Gemfile +2 -2
- data/Gemfile.lock +15 -16
- data/README.md +5 -1
- data/VERSION +1 -1
- data/lib/rndb/database.rb +26 -0
- data/lib/rndb/table.rb +16 -1
- data/rndb.gemspec +3 -3
- data/spec/rn_db/database_spec.rb +19 -0
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: a916f7d67a553cfaee0a7965eb96004c974ac98a6c88e4f144e849678764af58
|
4
|
+
data.tar.gz: 87746430329d95756e38451305f1ee675675c1569a7c94049f01ea1a1693e438
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: eb9abf6b5737d2a9213ee6198a59b0e4d5080be85588933a39a00c622f96d72d0b7966d800da953c84a8879c19bb61325ec2b0e3458e10be662bb3190f08ed20
|
7
|
+
data.tar.gz: 6d6b73a123a916e98cf3c675654d1c4b82a53252f33bd0ee9e2d7e7620264c4102637ca29c285f44dd95159a5d28681b410a3e7ac78164ee7c0eef0a4d73d30c
|
data/Gemfile
CHANGED
@@ -12,10 +12,10 @@ group :development do
|
|
12
12
|
end
|
13
13
|
|
14
14
|
group :test do
|
15
|
-
gem '
|
15
|
+
gem 'coveralls_reborn', '~> 0.20'
|
16
16
|
gem 'rspec', '~> 3.10'
|
17
17
|
gem 'rspec-its', '~> 1.3'
|
18
|
-
gem 'rubocop', '~> 1.
|
18
|
+
gem 'rubocop', '~> 1.11'
|
19
19
|
gem 'rubocop-rspec', '~> 2.2'
|
20
20
|
end
|
21
21
|
|
data/Gemfile.lock
CHANGED
@@ -7,12 +7,11 @@ GEM
|
|
7
7
|
builder (3.2.4)
|
8
8
|
byebug (11.1.3)
|
9
9
|
concurrent-ruby (1.1.8)
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
tins (~> 1.6)
|
10
|
+
coveralls_reborn (0.20.0)
|
11
|
+
simplecov (>= 0.18.1, < 0.22.0)
|
12
|
+
term-ansicolor (~> 1.6)
|
13
|
+
thor (>= 0.20.3, < 2.0)
|
14
|
+
tins (~> 1.16)
|
16
15
|
crypt-isaac (1.2.0)
|
17
16
|
descendants_tracker (0.0.4)
|
18
17
|
thread_safe (~> 0.3, >= 0.3.1)
|
@@ -38,7 +37,6 @@ GEM
|
|
38
37
|
highline (2.0.3)
|
39
38
|
i18n (1.8.9)
|
40
39
|
concurrent-ruby (~> 1.0)
|
41
|
-
json (2.5.1)
|
42
40
|
juwelier (2.4.9)
|
43
41
|
builder
|
44
42
|
bundler
|
@@ -70,7 +68,7 @@ GEM
|
|
70
68
|
parallel (1.20.1)
|
71
69
|
parser (3.0.0.0)
|
72
70
|
ast (~> 2.4.1)
|
73
|
-
psych (3.3.
|
71
|
+
psych (3.3.1)
|
74
72
|
public_suffix (4.0.6)
|
75
73
|
racc (1.5.2)
|
76
74
|
rack (2.2.3)
|
@@ -78,7 +76,7 @@ GEM
|
|
78
76
|
rake (13.0.3)
|
79
77
|
rchardet (1.8.0)
|
80
78
|
rdoc (6.3.0)
|
81
|
-
regexp_parser (2.1.
|
79
|
+
regexp_parser (2.1.1)
|
82
80
|
rexml (3.2.4)
|
83
81
|
rspec (3.10.0)
|
84
82
|
rspec-core (~> 3.10.0)
|
@@ -96,7 +94,7 @@ GEM
|
|
96
94
|
diff-lcs (>= 1.2.0, < 2.0)
|
97
95
|
rspec-support (~> 3.10.0)
|
98
96
|
rspec-support (3.10.2)
|
99
|
-
rubocop (1.
|
97
|
+
rubocop (1.11.0)
|
100
98
|
parallel (~> 1.10)
|
101
99
|
parser (>= 3.0.0.0)
|
102
100
|
rainbow (>= 2.2.2, < 4.0)
|
@@ -113,11 +111,12 @@ GEM
|
|
113
111
|
ruby-progressbar (1.11.0)
|
114
112
|
ruby2_keywords (0.0.4)
|
115
113
|
semver2 (3.4.2)
|
116
|
-
simplecov (0.
|
114
|
+
simplecov (0.21.2)
|
117
115
|
docile (~> 1.1)
|
118
|
-
|
119
|
-
|
120
|
-
simplecov-html (0.
|
116
|
+
simplecov-html (~> 0.11)
|
117
|
+
simplecov_json_formatter (~> 0.1)
|
118
|
+
simplecov-html (0.12.3)
|
119
|
+
simplecov_json_formatter (0.1.2)
|
121
120
|
sync (0.5.0)
|
122
121
|
term-ansicolor (1.7.1)
|
123
122
|
tins (~> 1.0)
|
@@ -134,7 +133,7 @@ PLATFORMS
|
|
134
133
|
DEPENDENCIES
|
135
134
|
bundler (~> 1.17)
|
136
135
|
byebug (~> 11.1)
|
137
|
-
|
136
|
+
coveralls_reborn (~> 0.20)
|
138
137
|
crypt-isaac (~> 1.2)
|
139
138
|
faker (~> 2.16)
|
140
139
|
gemfile_updater (~> 0.1)
|
@@ -142,7 +141,7 @@ DEPENDENCIES
|
|
142
141
|
rdoc (~> 6.3)
|
143
142
|
rspec (~> 3.10)
|
144
143
|
rspec-its (~> 1.3)
|
145
|
-
rubocop (~> 1.
|
144
|
+
rubocop (~> 1.11)
|
146
145
|
rubocop-rspec (~> 2.2)
|
147
146
|
yard (~> 0.9)
|
148
147
|
|
data/README.md
CHANGED
@@ -4,7 +4,11 @@
|
|
4
4
|
|
5
5
|
# RnDB
|
6
6
|
|
7
|
-
RnDB is a procedurally-generated fake database.
|
7
|
+
RnDB is a procedurally-generated fake database. Read the [blog post](https://blog.kranzky.com/the-case-of-the-fake-database-7bde487213a3?source=friends_link&sk=56d6351a5cce0c6ae5c6843f4f323997) for details.
|
8
|
+
|
9
|
+
## Video Overview
|
10
|
+
|
11
|
+
[![IMAGE ALT TEXT HERE](https://img.youtube.com/vi/hbn5J4yRrJ8/0.jpg)](https://www.youtube.com/watch?v=hbn5J4yRrJ8)
|
8
12
|
|
9
13
|
## Usage
|
10
14
|
|
data/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
0.
|
1
|
+
0.3.0
|
data/lib/rndb/database.rb
CHANGED
@@ -22,5 +22,31 @@ module RnDB
|
|
22
22
|
def schema
|
23
23
|
Thread.current[:rndb_tables]
|
24
24
|
end
|
25
|
+
|
26
|
+
# Clear overridden state.
|
27
|
+
def reset
|
28
|
+
schema.each_value { |table| table[:state] = {} }
|
29
|
+
end
|
30
|
+
|
31
|
+
# Dump just the overridden state as a hash.
|
32
|
+
def state
|
33
|
+
schema.transform_values do |table|
|
34
|
+
table[:state]
|
35
|
+
end
|
36
|
+
end
|
37
|
+
|
38
|
+
# Load state from the given hash.
|
39
|
+
def load(state)
|
40
|
+
state.each do |name, value|
|
41
|
+
schema[name][:state] = value
|
42
|
+
end
|
43
|
+
end
|
44
|
+
|
45
|
+
class << self
|
46
|
+
# Get a connection to the database
|
47
|
+
def conn
|
48
|
+
Thread.current[:rndb_database]
|
49
|
+
end
|
50
|
+
end
|
25
51
|
end
|
26
52
|
end
|
data/lib/rndb/table.rb
CHANGED
@@ -140,6 +140,9 @@ module RnDB
|
|
140
140
|
define_method(attribute) do
|
141
141
|
_generate_column(attribute)
|
142
142
|
end
|
143
|
+
define_method("#{attribute}=".to_sym) do |value|
|
144
|
+
self.class.send(:_set_state, id, attribute, value)
|
145
|
+
end
|
143
146
|
end
|
144
147
|
|
145
148
|
# Add an association between two Table models.
|
@@ -178,6 +181,8 @@ module RnDB
|
|
178
181
|
@current = id
|
179
182
|
_validate!
|
180
183
|
return id if attribute == :id
|
184
|
+
override = _get_state(id, attribute)
|
185
|
+
return override unless override.nil?
|
181
186
|
column = _schema[:columns][attribute]
|
182
187
|
value = key(id, attribute)
|
183
188
|
unless column[:generator].nil?
|
@@ -233,7 +238,8 @@ module RnDB
|
|
233
238
|
end,
|
234
239
|
associations: Hash.new do |associations, key|
|
235
240
|
associations[key] = nil
|
236
|
-
end
|
241
|
+
end,
|
242
|
+
state: {}
|
237
243
|
}
|
238
244
|
end
|
239
245
|
Thread.current[:rndb_tables][table_name]
|
@@ -299,6 +305,15 @@ module RnDB
|
|
299
305
|
@valid ||= (self == _schema[:class])
|
300
306
|
raise "table not added to database" unless @valid
|
301
307
|
end
|
308
|
+
|
309
|
+
def _get_state(id, attribute)
|
310
|
+
_schema[:state][id] && _schema[:state][id][attribute]
|
311
|
+
end
|
312
|
+
|
313
|
+
def _set_state(id, attribute, value)
|
314
|
+
_schema[:state][id] ||= {}
|
315
|
+
_schema[:state][id][attribute] = value
|
316
|
+
end
|
302
317
|
end
|
303
318
|
end
|
304
319
|
end
|
data/rndb.gemspec
CHANGED
@@ -2,16 +2,16 @@
|
|
2
2
|
# DO NOT EDIT THIS FILE DIRECTLY
|
3
3
|
# Instead, edit Juwelier::Tasks in Rakefile, and run 'rake gemspec'
|
4
4
|
# -*- encoding: utf-8 -*-
|
5
|
-
# stub: rndb 0.
|
5
|
+
# stub: rndb 0.3.0 ruby lib
|
6
6
|
|
7
7
|
Gem::Specification.new do |s|
|
8
8
|
s.name = "rndb".freeze
|
9
|
-
s.version = "0.
|
9
|
+
s.version = "0.3.0"
|
10
10
|
|
11
11
|
s.required_rubygems_version = Gem::Requirement.new(">= 0".freeze) if s.respond_to? :required_rubygems_version=
|
12
12
|
s.require_paths = ["lib".freeze]
|
13
13
|
s.authors = ["Lloyd Kranzky".freeze]
|
14
|
-
s.date = "2021-
|
14
|
+
s.date = "2021-03-05"
|
15
15
|
s.description = "".freeze
|
16
16
|
s.email = "lloyd@kranzky.com".freeze
|
17
17
|
s.extra_rdoc_files = [
|
data/spec/rn_db/database_spec.rb
CHANGED
@@ -27,6 +27,25 @@ describe RnDB::Database do
|
|
27
27
|
expect(ids.sort.uniq.size).to eq(10)
|
28
28
|
end
|
29
29
|
|
30
|
+
it "allows columns to be mutated" do
|
31
|
+
ball = Ball.sample.first
|
32
|
+
ball.colour = "purple"
|
33
|
+
expect(Ball[ball.id].colour).to eq("purple")
|
34
|
+
end
|
35
|
+
|
36
|
+
it "can load mutated state" do
|
37
|
+
described_class.conn.load({ ball: { 12_345 => { colour: "indigo" } } })
|
38
|
+
ball = Ball[12_345]
|
39
|
+
expect(ball.colour).to eq("indigo")
|
40
|
+
end
|
41
|
+
|
42
|
+
it "exposes state mutations" do
|
43
|
+
described_class.conn.reset
|
44
|
+
ball = Ball.sample.first
|
45
|
+
ball.colour = "purple"
|
46
|
+
expect(described_class.conn.state[:ball]).to eq({ ball.id => { colour: "purple" } })
|
47
|
+
end
|
48
|
+
|
30
49
|
context "when running a query" do
|
31
50
|
let(:query) do
|
32
51
|
Ball.where(colour: [:red, :blue], material: :wood)
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: rndb
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.3.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Lloyd Kranzky
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2021-
|
11
|
+
date: 2021-03-05 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: rdoc
|