lazyrecord 0.0.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (3) hide show
  1. checksums.yaml +7 -0
  2. data/lib/lazyrecord.rb +111 -0
  3. metadata +43 -0
checksums.yaml ADDED
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA256:
3
+ metadata.gz: c4ec6b2f3a12a15562e395d4fd6b32adb3910585197d0b8cc7ce4a26ca99b2e2
4
+ data.tar.gz: 6e308aa39d039027d5952819ed922c5e56bc1ef581190e38440acf0ac5687c69
5
+ SHA512:
6
+ metadata.gz: e5516c160bda129924a4920e9b952bf80a2f3ae36a46f50eed4af7efbb45bd1be157a15a360266ac67a47edaf31b314a9aec3a293ebde47960ed111e004d68ac
7
+ data.tar.gz: 612543c5f7f126e8265ffd86ddbea70744a796282ee9240ba9563f1728f3e07dc847f45b9917e5dd92c409c1d3d5c7630c99d6d785695915a1c1bcf92e582278
data/lib/lazyrecord.rb ADDED
@@ -0,0 +1,111 @@
1
+ require "pstore"
2
+
3
+ class Store
4
+ def initialize(name)
5
+ @data = PStore.new("#{name}.pstore")
6
+ end
7
+
8
+ def create_entity(name)
9
+ transaction do
10
+ if @data[name].nil?
11
+ @data[name] = {}
12
+ @data[current_id_key(name)] = 0
13
+ end
14
+ end
15
+ end
16
+
17
+ def find(entity_name, id)
18
+ transaction do
19
+ @data[entity_name][id]
20
+ end
21
+ end
22
+
23
+ def current_id_key(entity_name)
24
+ "#{entity_name}_current_id"
25
+ end
26
+
27
+ def next_id(entity_name)
28
+ transaction do
29
+ p entity_name
30
+ p @data[current_id_key(entity_name)]
31
+ @data[current_id_key(entity_name)] += 1
32
+ end
33
+ end
34
+
35
+ def all(entity_name)
36
+ transaction do
37
+ @data[entity_name]
38
+ end
39
+ end
40
+
41
+ def entities
42
+ transaction do
43
+ @data.roots
44
+ end
45
+ end
46
+
47
+ def transaction
48
+ @data.transaction do
49
+ yield
50
+ end
51
+ end
52
+
53
+ def save(entity_name, record)
54
+ transaction do
55
+ @data[entity_name][record.id] = record
56
+ end
57
+ end
58
+ end
59
+
60
+ class LazyRecord
61
+ STORE_NAME = "lazyrecord"
62
+
63
+ attr_accessor :id
64
+
65
+ class << self
66
+ def inherited(child_class)
67
+ store.create_entity(child_class.name.downcase)
68
+ end
69
+
70
+ def entity_name
71
+ name.downcase
72
+ end
73
+
74
+ def next_id
75
+ store.next_id(entity_name)
76
+ end
77
+
78
+ def all
79
+ store.all(entity_name).values
80
+ end
81
+
82
+ def find(id = nil, &block)
83
+ if block_given?
84
+ all.find(&block)
85
+ elsif id
86
+ store.find(entity_name, id)
87
+ else
88
+ raise ArgumentError.new("find requires and id or a block to be provided")
89
+ end
90
+ end
91
+
92
+ def store
93
+ @@store ||= Store.new(STORE_NAME)
94
+ end
95
+
96
+ def save(record)
97
+ store.save(entity_name, record)
98
+ end
99
+
100
+ def create(*args)
101
+ record = new(*args)
102
+ save(record)
103
+ record
104
+ end
105
+ end
106
+
107
+ def save
108
+ @id ||= self.class.next_id
109
+ self.class.save(self)
110
+ end
111
+ end
metadata ADDED
@@ -0,0 +1,43 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: lazyrecord
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.0.1
5
+ platform: ruby
6
+ authors:
7
+ - Julio Navarro
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2020-05-05 00:00:00.000000000 Z
12
+ dependencies: []
13
+ description: Learning tool for Models!
14
+ email: julioocz@gmail.com
15
+ executables: []
16
+ extensions: []
17
+ extra_rdoc_files: []
18
+ files:
19
+ - lib/lazyrecord.rb
20
+ homepage: https://rubygems.org/gems/lazyrecord
21
+ licenses:
22
+ - MIT
23
+ metadata: {}
24
+ post_install_message:
25
+ rdoc_options: []
26
+ require_paths:
27
+ - lib
28
+ required_ruby_version: !ruby/object:Gem::Requirement
29
+ requirements:
30
+ - - ">="
31
+ - !ruby/object:Gem::Version
32
+ version: '0'
33
+ required_rubygems_version: !ruby/object:Gem::Requirement
34
+ requirements:
35
+ - - ">="
36
+ - !ruby/object:Gem::Version
37
+ version: '0'
38
+ requirements: []
39
+ rubygems_version: 3.0.1
40
+ signing_key:
41
+ specification_version: 4
42
+ summary: Learning tool for Models!
43
+ test_files: []