frozen_record 0.13.0 → 0.14.0
Sign up to get free protection for your applications and to get access to all the features.
- 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
|