frozen_record 0.13.0 → 0.14.0
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.
- checksums.yaml +4 -4
- data/lib/frozen_record/base.rb +22 -18
- data/lib/frozen_record/scope.rb +1 -1
- data/lib/frozen_record/version.rb +1 -1
- data/spec/frozen_record_spec.rb +18 -0
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: aca3d3a4084fea57cbcbc396e95d35ee24750b44
|
4
|
+
data.tar.gz: 5fe3827d178da90300e05c49062e1c1259bc366d
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 6afd96b57e571297ebd78bc218c0cfe8e06249be474231a50a3f573ad74f2ee8236bc289265362d67067769e7313acd7633ff721bf1349b868d23f917c94c2bc
|
7
|
+
data.tar.gz: cfd9d2c57b1238c8df69d311a738cc31d90138523b451f7cabc6bcf7a0c54f553740d47fbf10c92a9f80065e2661c9618d00f97db6975d259262dbcceb2bd84e
|
data/lib/frozen_record/base.rb
CHANGED
@@ -15,19 +15,28 @@ module FrozenRecord
|
|
15
15
|
end
|
16
16
|
|
17
17
|
FIND_BY_PATTERN = /\Afind_by_(\w+)(!?)/
|
18
|
-
FALSY_VALUES = [false, nil, 0, ''].to_set
|
18
|
+
FALSY_VALUES = [false, nil, 0, -''].to_set
|
19
19
|
|
20
20
|
class_attribute :base_path
|
21
21
|
|
22
22
|
class_attribute :primary_key
|
23
|
-
|
23
|
+
|
24
|
+
class << self
|
25
|
+
alias_method :original_primary_key=, :primary_key=
|
26
|
+
|
27
|
+
def primary_key=(primary_key)
|
28
|
+
self.original_primary_key = -primary_key.to_s
|
29
|
+
end
|
30
|
+
end
|
31
|
+
|
32
|
+
self.primary_key = 'id'
|
24
33
|
|
25
34
|
class_attribute :backend
|
26
35
|
self.backend = FrozenRecord::Backends::Yaml
|
27
36
|
|
28
37
|
class_attribute :auto_reloading
|
29
38
|
|
30
|
-
attribute_method_suffix '?'
|
39
|
+
attribute_method_suffix -'?'
|
31
40
|
|
32
41
|
class ThreadSafeStorage
|
33
42
|
|
@@ -72,7 +81,7 @@ module FrozenRecord
|
|
72
81
|
end
|
73
82
|
|
74
83
|
def respond_to_missing?(name, *)
|
75
|
-
if name =~ FIND_BY_PATTERN
|
84
|
+
if name.to_s =~ FIND_BY_PATTERN
|
76
85
|
load_records # ensure attribute methods are defined
|
77
86
|
return true if $1.split('_and_').all? { |attr| instance_method_already_implemented?(attr) }
|
78
87
|
end
|
@@ -93,10 +102,7 @@ module FrozenRecord
|
|
93
102
|
@records ||= begin
|
94
103
|
records = backend.load(file_path)
|
95
104
|
define_attribute_methods(list_attributes(records))
|
96
|
-
records.map
|
97
|
-
attributes.symbolize_keys!
|
98
|
-
new(attributes)
|
99
|
-
end.freeze
|
105
|
+
records.map(&method(:new)).freeze
|
100
106
|
end
|
101
107
|
end
|
102
108
|
|
@@ -113,14 +119,14 @@ module FrozenRecord
|
|
113
119
|
end
|
114
120
|
|
115
121
|
def method_missing(name, *args)
|
116
|
-
if name =~ FIND_BY_PATTERN
|
122
|
+
if name.to_s =~ FIND_BY_PATTERN
|
117
123
|
return dynamic_match($1, args, $2.present?)
|
118
124
|
end
|
119
125
|
super
|
120
126
|
end
|
121
127
|
|
122
128
|
def dynamic_match(expression, values, bang)
|
123
|
-
results = where(expression.split('_and_').zip(values))
|
129
|
+
results = where(expression.split('_and_'.freeze).zip(values))
|
124
130
|
bang ? results.first! : results.first
|
125
131
|
end
|
126
132
|
|
@@ -128,7 +134,7 @@ module FrozenRecord
|
|
128
134
|
attributes = Set.new
|
129
135
|
records.each do |record|
|
130
136
|
record.keys.each do |key|
|
131
|
-
attributes.add(key.
|
137
|
+
attributes.add(key.to_s)
|
132
138
|
end
|
133
139
|
end
|
134
140
|
attributes.to_a
|
@@ -137,20 +143,19 @@ module FrozenRecord
|
|
137
143
|
end
|
138
144
|
|
139
145
|
def initialize(attrs = {})
|
140
|
-
@attributes = attrs
|
146
|
+
@attributes = attrs.stringify_keys.freeze
|
141
147
|
end
|
142
148
|
|
143
149
|
def attributes
|
144
|
-
|
145
|
-
@attributes.stringify_keys
|
150
|
+
@attributes.dup
|
146
151
|
end
|
147
152
|
|
148
153
|
def id
|
149
|
-
self[primary_key]
|
154
|
+
self[primary_key.to_s]
|
150
155
|
end
|
151
156
|
|
152
157
|
def [](attr)
|
153
|
-
@attributes[attr.
|
158
|
+
@attributes[attr.to_s]
|
154
159
|
end
|
155
160
|
alias_method :attribute, :[]
|
156
161
|
|
@@ -169,8 +174,7 @@ module FrozenRecord
|
|
169
174
|
private
|
170
175
|
|
171
176
|
def attribute?(attribute_name)
|
172
|
-
|
173
|
-
FALSY_VALUES.exclude?(value) && value.present?
|
177
|
+
FALSY_VALUES.exclude?(self[attribute_name]) && self[attribute_name].present?
|
174
178
|
end
|
175
179
|
|
176
180
|
end
|
data/lib/frozen_record/scope.rb
CHANGED
data/spec/frozen_record_spec.rb
CHANGED
@@ -13,6 +13,24 @@ describe FrozenRecord::Base do
|
|
13
13
|
|
14
14
|
end
|
15
15
|
|
16
|
+
describe '.primary_key' do
|
17
|
+
|
18
|
+
around do |example|
|
19
|
+
previous_primary_key = Country.primary_key
|
20
|
+
begin
|
21
|
+
example.run
|
22
|
+
ensure
|
23
|
+
Country.primary_key = previous_primary_key
|
24
|
+
end
|
25
|
+
end
|
26
|
+
|
27
|
+
it 'is coerced to string' do
|
28
|
+
Country.primary_key = :foobar
|
29
|
+
expect(Country.primary_key).to be == 'foobar'
|
30
|
+
end
|
31
|
+
|
32
|
+
end
|
33
|
+
|
16
34
|
describe '.auto_reloading' do
|
17
35
|
|
18
36
|
context 'when enabled' do
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: frozen_record
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.14.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Jean Boussier
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2019-
|
11
|
+
date: 2019-04-02 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: activemodel
|