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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: d541145484a9b6ea0c53d9fdf9ddbd6fdd6d6bc32eb4cf23d5311fdab2db53e3
4
- data.tar.gz: 5605b369f05d6139d8ec9cff92c2b4c3aaa716875b730c22989cbed57407599b
3
+ metadata.gz: a916f7d67a553cfaee0a7965eb96004c974ac98a6c88e4f144e849678764af58
4
+ data.tar.gz: 87746430329d95756e38451305f1ee675675c1569a7c94049f01ea1a1693e438
5
5
  SHA512:
6
- metadata.gz: 5df8e7cfe6022d57a3d831e9b7c88dfddffee16ec7e03ed94aa0cd175f5241f07737f7b298be25c9917e9bf17e4bcb6c89e3c384c2519234b81874cc69490e9a
7
- data.tar.gz: 06d630fd285abd444cafbb72f0497478cbcb401b4c39e3ae380b2e9be05447c6a6e1c97a50524d79853c479b0e807cf8205458f586aafcc610b06e97773f0651
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 'coveralls', '~> 0.8'
15
+ gem 'coveralls_reborn', '~> 0.20'
16
16
  gem 'rspec', '~> 3.10'
17
17
  gem 'rspec-its', '~> 1.3'
18
- gem 'rubocop', '~> 1.9'
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
- coveralls (0.8.23)
11
- json (>= 1.8, < 3)
12
- simplecov (~> 0.16.1)
13
- term-ansicolor (~> 1.3)
14
- thor (>= 0.19.4, < 2.0)
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.0)
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.0)
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.10.0)
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.16.1)
114
+ simplecov (0.21.2)
117
115
  docile (~> 1.1)
118
- json (>= 1.8, < 3)
119
- simplecov-html (~> 0.10.0)
120
- simplecov-html (0.10.2)
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
- coveralls (~> 0.8)
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.9)
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.2.1
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.2.1 ruby lib
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.2.1"
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-02-26"
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 = [
@@ -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.2.1
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-02-26 00:00:00.000000000 Z
11
+ date: 2021-03-05 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rdoc