frozen_record 0.12.1 → 0.13.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/README.md +35 -0
- data/lib/frozen_record/base.rb +16 -9
- data/lib/frozen_record/version.rb +1 -1
- 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: a2caf0ce8ea29240d70604b68d7e1edeaa8b331c
|
4
|
+
data.tar.gz: 4ccec1e2b69e9a882d48cbbad9df73c9732b5fae
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 62e573bedb84600e916de3784e764eeb9400555c8f11118dc27787ef7f642f15e927a6e304e96e118eb8c1f3317c57613c1bd395fc6330d2b59ad36d014c653c
|
7
|
+
data.tar.gz: c225c4584ee248a86cd88e5f888618745d6275fdd27582a47fbedf405095d521c16a7d8484c6866b1c4ce2e618d921a772b0d45335253f4b50d3bc4c1a2d385a
|
data/README.md
CHANGED
@@ -151,6 +151,41 @@ FrozenRecord::Base.auto_reloading = true # Activate reloading for all models
|
|
151
151
|
Country.auto_reloading # Activate reloading for `Country` only
|
152
152
|
```
|
153
153
|
|
154
|
+
## Testing
|
155
|
+
|
156
|
+
Testing your FrozenRecord-backed models with test fixtures is made easier with:
|
157
|
+
|
158
|
+
```ruby
|
159
|
+
require 'frozen_record/test_helper'
|
160
|
+
|
161
|
+
# During test/spec setup
|
162
|
+
test_fixtures_base_path = 'alternate/fixture/path'
|
163
|
+
FrozenRecord::TestHelper.load_fixture(Country, test_fixtures_base_path)
|
164
|
+
|
165
|
+
# During test/spec teardown
|
166
|
+
FrozenRecord::TestHelper.unload_fixtures
|
167
|
+
```
|
168
|
+
|
169
|
+
Here's a Rails-specific example:
|
170
|
+
|
171
|
+
```ruby
|
172
|
+
require "test_helper"
|
173
|
+
require 'frozen_record/test_helper'
|
174
|
+
|
175
|
+
class CountryTest < ActiveSupport::TestCase
|
176
|
+
setup do
|
177
|
+
test_fixtures_base_path = Rails.root.join(%w(test support fixtures))
|
178
|
+
FrozenRecord::TestHelper.load_fixture(Country, test_fixtures_base_path)
|
179
|
+
end
|
180
|
+
|
181
|
+
teardown do
|
182
|
+
FrozenRecord::TestHelper.unload_fixtures
|
183
|
+
end
|
184
|
+
|
185
|
+
test "countries have a valid name" do
|
186
|
+
# ...
|
187
|
+
```
|
188
|
+
|
154
189
|
## Contributors
|
155
190
|
|
156
191
|
FrozenRecord is a from scratch reimplementation of a [Shopify](https://github.com/Shopify) project from 2007 named `YamlRecord`.
|
data/lib/frozen_record/base.rb
CHANGED
@@ -72,7 +72,7 @@ module FrozenRecord
|
|
72
72
|
end
|
73
73
|
|
74
74
|
def respond_to_missing?(name, *)
|
75
|
-
if name
|
75
|
+
if name =~ FIND_BY_PATTERN
|
76
76
|
load_records # ensure attribute methods are defined
|
77
77
|
return true if $1.split('_and_').all? { |attr| instance_method_already_implemented?(attr) }
|
78
78
|
end
|
@@ -93,7 +93,10 @@ module FrozenRecord
|
|
93
93
|
@records ||= begin
|
94
94
|
records = backend.load(file_path)
|
95
95
|
define_attribute_methods(list_attributes(records))
|
96
|
-
records.map
|
96
|
+
records.map do |attributes|
|
97
|
+
attributes.symbolize_keys!
|
98
|
+
new(attributes)
|
99
|
+
end.freeze
|
97
100
|
end
|
98
101
|
end
|
99
102
|
|
@@ -110,7 +113,7 @@ module FrozenRecord
|
|
110
113
|
end
|
111
114
|
|
112
115
|
def method_missing(name, *args)
|
113
|
-
if name
|
116
|
+
if name =~ FIND_BY_PATTERN
|
114
117
|
return dynamic_match($1, args, $2.present?)
|
115
118
|
end
|
116
119
|
super
|
@@ -125,7 +128,7 @@ module FrozenRecord
|
|
125
128
|
attributes = Set.new
|
126
129
|
records.each do |record|
|
127
130
|
record.keys.each do |key|
|
128
|
-
attributes.add(key.
|
131
|
+
attributes.add(key.to_sym)
|
129
132
|
end
|
130
133
|
end
|
131
134
|
attributes.to_a
|
@@ -133,10 +136,13 @@ module FrozenRecord
|
|
133
136
|
|
134
137
|
end
|
135
138
|
|
136
|
-
attr_reader :attributes
|
137
|
-
|
138
139
|
def initialize(attrs = {})
|
139
|
-
@attributes = attrs
|
140
|
+
@attributes = attrs
|
141
|
+
end
|
142
|
+
|
143
|
+
def attributes
|
144
|
+
# We have to return a hash with string keys for backward compatibity reasons
|
145
|
+
@attributes.stringify_keys
|
140
146
|
end
|
141
147
|
|
142
148
|
def id
|
@@ -144,7 +150,7 @@ module FrozenRecord
|
|
144
150
|
end
|
145
151
|
|
146
152
|
def [](attr)
|
147
|
-
@attributes[attr.
|
153
|
+
@attributes[attr.to_sym]
|
148
154
|
end
|
149
155
|
alias_method :attribute, :[]
|
150
156
|
|
@@ -163,7 +169,8 @@ module FrozenRecord
|
|
163
169
|
private
|
164
170
|
|
165
171
|
def attribute?(attribute_name)
|
166
|
-
|
172
|
+
value = self[attribute_name]
|
173
|
+
FALSY_VALUES.exclude?(value) && value.present?
|
167
174
|
end
|
168
175
|
|
169
176
|
end
|
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.13.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-03-26 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: activemodel
|