frozen_record 0.20.1 → 0.22.2

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: 4c98f13b693b4c7bceae48a308722c3681a678033855f40995a10fd82c0faee8
4
- data.tar.gz: ff4ef784946b6fc9f067caf8e26d50433c3c396716ead1c953dd324528861ab2
3
+ metadata.gz: 46d80cfe87901ec547852256bff7eed06ac990a7bb9705b93fa13464354c5af5
4
+ data.tar.gz: 63f48c770a8e86d867382f0333f1c5d6d48b64ece3b849717fd840945f0781ff
5
5
  SHA512:
6
- metadata.gz: e25090babf81d5ffa18a26acecf5af68d3424866b848508838ded880196d2178f994ce586be9bee8d63db71b3c84159ed2b4fac2c7e90f26414b9fbff4c69598
7
- data.tar.gz: 384749f211db239a1d3964c16d5c23d4af4261ee052d6c0fa16f15f0d6a0ce5710df898b1f4e290c9cfa77c553d214668ab383ca33b09fbb82a03266db7a0324
6
+ metadata.gz: 0a5c7c217742022ff5d23532cc54c04f040ae83e9e05c191783a49db5012c2c95f2815a85a8743e00bd467bbff9fb451d94ba5a75cdd80bde71dee66ccb2a256
7
+ data.tar.gz: 587dc2bcd6cec261cd53c9be8cfe696b7f4944d1c55b5cea55945b7826112eed2829a323c617c906dfcd039d72578e4b4ba5cb790a1ba1131277c6076dafcafc
@@ -0,0 +1,32 @@
1
+ name: CI
2
+
3
+ on: [push, pull_request]
4
+
5
+ jobs:
6
+ build:
7
+ runs-on: ubuntu-latest
8
+ strategy:
9
+ matrix:
10
+ ruby: [ '2.5', '2.6', '2.7', '3.0' ]
11
+ minimal: [ false, true ]
12
+ name: Ruby ${{ matrix.ruby }} tests, minimal=${{ matrix.minimal }}
13
+ steps:
14
+ - uses: actions/checkout@v2
15
+ - name: Setup Ruby
16
+ uses: ruby/setup-ruby@v1
17
+ with:
18
+ ruby-version: ${{ matrix.ruby }}
19
+ - uses: actions/cache@v2
20
+ with:
21
+ path: vendor/bundle
22
+ key: ${{ runner.os }}-${{ matrix.ruby }}-gems-${{ hashFiles('Gemfile', 'frozen_record.gemspec') }}
23
+ restore-keys: |
24
+ ${{ runner.os }}-${{ matrix.ruby }}-gems-
25
+ - name: Bundle install
26
+ run: |
27
+ gem install bundler
28
+ bundle install --jobs 4 --retry 3 --path=vendor/bundle
29
+ - name: Run tests
30
+ env:
31
+ MINIMAL: ${{ matrix.minimal }}
32
+ run: bundle exec rake
data/README.md CHANGED
@@ -1,8 +1,6 @@
1
1
  # FrozenRecord
2
2
 
3
3
  [![Build Status](https://secure.travis-ci.org/byroot/frozen_record.svg)](http://travis-ci.org/byroot/frozen_record)
4
- [![Code Climate](https://codeclimate.com/github/byroot/frozen_record.svg)](https://codeclimate.com/github/byroot/frozen_record)
5
- [![Coverage Status](https://coveralls.io/repos/byroot/frozen_record/badge.svg)](https://coveralls.io/r/byroot/frozen_record)
6
4
  [![Gem Version](https://badge.fury.io/rb/frozen_record.svg)](http://badge.fury.io/rb/frozen_record)
7
5
 
8
6
  ActiveRecord-like interface for **read only** access to static data files.
@@ -0,0 +1,34 @@
1
+ #!/usr/bin/env ruby
2
+ # frozen_string_literal: true
3
+
4
+ require_relative 'setup'
5
+
6
+ records = FrozenRecord::Backends::Yaml.load(Country.file_path)
7
+ large_records = 100.times.flat_map do |i|
8
+ records.map do |record|
9
+ new_record = record.dup
10
+ new_record['id'] += 10 * i
11
+ new_record['name'] += i.to_s
12
+ new_record
13
+ end
14
+ end
15
+
16
+ File.write('/tmp/frozen-record-bench-countries.yml', YAML.dump(large_records))
17
+
18
+ class LargeCountry < Country
19
+ class << self
20
+ def file_path
21
+ '/tmp/frozen-record-bench-countries.yml'
22
+ end
23
+ end
24
+ end
25
+
26
+ puts "=== simple scalar match ==="
27
+ Benchmark.ips do |x|
28
+ x.report('simple') { LargeCountry.nato.size }
29
+ end
30
+
31
+ puts "=== range match ==="
32
+ Benchmark.ips do |x|
33
+ x.report('range') { LargeCountry.where(density: 100...200).size }
34
+ end
@@ -22,9 +22,6 @@ Gem::Specification.new do |spec|
22
22
  spec.add_runtime_dependency 'activemodel'
23
23
  spec.add_runtime_dependency 'dedup'
24
24
 
25
- spec.add_development_dependency 'bundler'
26
25
  spec.add_development_dependency 'rake'
27
26
  spec.add_development_dependency 'rspec'
28
- spec.add_development_dependency 'pry'
29
- spec.add_development_dependency 'coveralls'
30
27
  end
data/lib/frozen_record.rb CHANGED
@@ -1,30 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- require 'yaml'
4
- require 'set'
5
- require 'active_support/all'
6
- require 'active_model'
7
-
8
- require 'dedup'
9
-
10
- require 'frozen_record/version'
11
- require 'frozen_record/scope'
12
- require 'frozen_record/index'
13
- require 'frozen_record/base'
14
- require 'frozen_record/compact'
15
-
16
- module FrozenRecord
17
- RecordNotFound = Class.new(StandardError)
18
-
19
- class << self
20
- attr_accessor :deprecated_yaml_erb_backend
21
-
22
- def eager_load!
23
- Base.descendants.each(&:eager_load!)
24
- end
25
- end
26
-
27
- self.deprecated_yaml_erb_backend = true
28
- end
29
-
3
+ require 'frozen_record/minimal'
4
+ require 'frozen_record/serialization'
30
5
  require 'frozen_record/railtie' if defined?(Rails)
@@ -0,0 +1 @@
1
+ true
@@ -1,4 +1,5 @@
1
1
  # frozen_string_literal: true
2
+ require 'json'
2
3
 
3
4
  module FrozenRecord
4
5
  module Backends
@@ -9,9 +10,26 @@ module FrozenRecord
9
10
  "#{model_name.underscore.pluralize}.json"
10
11
  end
11
12
 
12
- def load(file_path)
13
- json_data = File.read(file_path)
14
- JSON.parse(json_data) || []
13
+ if JSON.respond_to?(:load_file)
14
+ supports_freeze = begin
15
+ JSON.load_file(File.expand_path('../empty.json', __FILE__), freeze: true)
16
+ rescue ArgumentError
17
+ false
18
+ end
19
+
20
+ if supports_freeze
21
+ def load(file_path)
22
+ JSON.load_file(file_path, freeze: true) || Dedup::EMPTY_ARRAY
23
+ end
24
+ else
25
+ def load(file_path)
26
+ Dedup.deep_intern!(JSON.load_file(file_path) || Dedup::EMPTY_ARRAY)
27
+ end
28
+ end
29
+ else
30
+ def load(file_path)
31
+ Dedup.deep_intern!(JSON.parse(File.read(file_path)) || Dedup::EMPTY_ARRAY)
32
+ end
15
33
  end
16
34
  end
17
35
  end
@@ -3,6 +3,8 @@
3
3
  module FrozenRecord
4
4
  module Backends
5
5
  module Yaml
6
+ autoload :ERB, 'erb'
7
+
6
8
  extend self
7
9
 
8
10
  # Transforms the model name into a valid filename.
@@ -34,15 +36,49 @@ module FrozenRecord
34
36
  end
35
37
  end
36
38
 
37
- YAML.load(yml_data) || []
39
+ load_string(yml_data)
38
40
  else
39
41
  if file_path.end_with?('.erb')
40
- YAML.load(ERB.new(File.read(file_path)).result) || []
42
+ load_string(ERB.new(File.read(file_path)).result)
41
43
  else
42
- YAML.load_file(file_path) || []
44
+ load_file(file_path)
43
45
  end
44
46
  end
45
47
  end
48
+
49
+ private
50
+
51
+ supports_freeze = begin
52
+ YAML.load_file(File.expand_path('../empty.json', __FILE__), freeze: true)
53
+ rescue ArgumentError
54
+ false
55
+ end
56
+
57
+ if YAML.respond_to?(:unsafe_load_file)
58
+ def load_file(path)
59
+ YAML.unsafe_load_file(path, freeze: true) || Dedup::EMPTY_ARRAY
60
+ end
61
+
62
+ def load_string(yaml)
63
+ YAML.unsafe_load(yaml, freeze: true) || Dedup::EMPTY_ARRAY
64
+ end
65
+ elsif supports_freeze
66
+ def load_file(path)
67
+ YAML.load_file(path, freeze: true) || Dedup::EMPTY_ARRAY
68
+ end
69
+
70
+ def load_string(yaml)
71
+ YAML.load(yaml, freeze: true) || Dedup::EMPTY_ARRAY
72
+ end
73
+ else
74
+ def load_file(path)
75
+ Dedup.deep_intern!(YAML.load_file(path) || Dedup::EMPTY_ARRAY)
76
+ end
77
+
78
+ def load_string(yaml)
79
+ Dedup.deep_intern!(YAML.load(yaml) || Dedup::EMPTY_ARRAY)
80
+ end
81
+ end
46
82
  end
47
83
  end
48
84
  end
@@ -1,9 +1,7 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- require 'set'
4
3
  require 'active_support/descendants_tracker'
5
4
  require 'frozen_record/backends'
6
- require 'objspace'
7
5
 
8
6
  module FrozenRecord
9
7
  class Base
@@ -11,11 +9,6 @@ module FrozenRecord
11
9
  extend ActiveModel::Naming
12
10
  include ActiveModel::Conversion
13
11
  include ActiveModel::AttributeMethods
14
- include ActiveModel::Serializers::JSON
15
-
16
- if defined? ActiveModel::Serializers::Xml
17
- include ActiveModel::Serializers::Xml
18
- end
19
12
 
20
13
  FIND_BY_PATTERN = /\Afind_by_(\w+)(!?)/
21
14
  FALSY_VALUES = [false, nil, 0, -''].to_set
@@ -52,7 +45,7 @@ module FrozenRecord
52
45
  alias_method :set_default_attributes, :default_attributes=
53
46
  private :set_default_attributes
54
47
  def default_attributes=(default_attributes)
55
- set_default_attributes(Dedup.deep_intern!(default_attributes.stringify_keys))
48
+ set_default_attributes(Dedup.deep_intern!(default_attributes.transform_keys(&:to_s)))
56
49
  end
57
50
 
58
51
  alias_method :set_primary_key, :primary_key=
@@ -90,8 +83,9 @@ module FrozenRecord
90
83
  store[:scope] = scope
91
84
  end
92
85
 
93
- delegate :find, :find_by_id, :find_by, :find_by!, :where, :first, :first!, :last, :last!, :pluck, :ids, :order, :limit, :offset,
94
- :minimum, :maximum, :average, :sum, :count, to: :current_scope
86
+ delegate :each, :find, :find_each, :find_by_id, :find_by, :find_by!, :where, :first, :first!, :last, :last!,
87
+ :pluck, :ids, :order, :limit, :offset, :minimum, :maximum, :average, :sum, :count,
88
+ to: :current_scope
95
89
 
96
90
  def file_path
97
91
  raise ArgumentError, "You must define `#{name}.base_path`" unless base_path
@@ -146,8 +140,9 @@ module FrozenRecord
146
140
 
147
141
  @records ||= begin
148
142
  records = backend.load(file_path)
149
- records.each { |r| assign_defaults!(r) }
150
- records = Dedup.deep_intern!(records)
143
+ if default_attributes
144
+ records = records.map { |r| assign_defaults!(r.dup).freeze }.freeze
145
+ end
151
146
  @attributes = list_attributes(records).freeze
152
147
  define_attribute_methods(@attributes.to_a)
153
148
  records = records.map { |r| load(r) }.freeze
@@ -164,7 +159,7 @@ module FrozenRecord
164
159
  private :load
165
160
 
166
161
  def new(attrs = {})
167
- load(assign_defaults!(attrs.stringify_keys))
162
+ load(assign_defaults!(attrs.transform_keys(&:to_s)))
168
163
  end
169
164
 
170
165
  private
@@ -206,7 +201,9 @@ module FrozenRecord
206
201
  def list_attributes(records)
207
202
  attributes = Set.new
208
203
  records.each do |record|
209
- attributes.merge(record.keys)
204
+ record.each_key do |key|
205
+ attributes.add(key)
206
+ end
210
207
  end
211
208
  attributes
212
209
  end
@@ -245,7 +242,7 @@ module FrozenRecord
245
242
  private
246
243
 
247
244
  def attribute?(attribute_name)
248
- FALSY_VALUES.exclude?(self[attribute_name]) && self[attribute_name].present?
245
+ !FALSY_VALUES.include?(self[attribute_name]) && self[attribute_name].present?
249
246
  end
250
247
 
251
248
  def attribute_method?(attribute_name)
@@ -13,8 +13,9 @@ module FrozenRecord
13
13
 
14
14
  @records ||= begin
15
15
  records = backend.load(file_path)
16
- records.each { |r| assign_defaults!(r) }
17
- records = Dedup.deep_intern!(records)
16
+ if default_attributes
17
+ records = records.map { |r| assign_defaults!(r.dup).freeze }.freeze
18
+ end
18
19
  @attributes = list_attributes(records).freeze
19
20
  build_attributes_cache
20
21
  define_attribute_methods(@attributes.to_a)
@@ -24,14 +25,8 @@ module FrozenRecord
24
25
  end
25
26
  end
26
27
 
27
- if ActiveModel.gem_version >= Gem::Version.new('6.1.0.alpha')
28
- def define_method_attribute(attr, owner:)
29
- owner << "attr_reader #{attr.inspect}"
30
- end
31
- else
32
- def define_method_attribute(attr)
33
- generated_attribute_methods.attr_reader(attr)
34
- end
28
+ def define_method_attribute(attr, **)
29
+ generated_attribute_methods.attr_reader(attr)
35
30
  end
36
31
 
37
32
  attr_reader :_attributes_cache
@@ -73,7 +68,7 @@ module FrozenRecord
73
68
 
74
69
  def attribute?(attribute_name)
75
70
  val = self[attribute_name]
76
- Base::FALSY_VALUES.exclude?(val) && val.present?
71
+ !Base::FALSY_VALUES.include?(val) && val.present?
77
72
  end
78
73
  end
79
74
  end
@@ -19,12 +19,11 @@ module FrozenRecord
19
19
  false
20
20
  end
21
21
 
22
- def query(value)
23
- case value
24
- when Array, Range
25
- lookup_multi(value)
22
+ def query(matcher)
23
+ if matcher.ranged?
24
+ lookup_multi(matcher.value)
26
25
  else
27
- lookup(value)
26
+ lookup(matcher.value)
28
27
  end
29
28
  end
30
29
 
@@ -0,0 +1,27 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'yaml'
4
+ require 'set'
5
+ require 'active_model'
6
+
7
+ require 'dedup'
8
+
9
+ require 'frozen_record/version'
10
+ require 'frozen_record/scope'
11
+ require 'frozen_record/index'
12
+ require 'frozen_record/base'
13
+ require 'frozen_record/compact'
14
+
15
+ module FrozenRecord
16
+ RecordNotFound = Class.new(StandardError)
17
+
18
+ class << self
19
+ attr_accessor :deprecated_yaml_erb_backend
20
+
21
+ def eager_load!
22
+ Base.descendants.each(&:eager_load!)
23
+ end
24
+ end
25
+
26
+ self.deprecated_yaml_erb_backend = true
27
+ end
@@ -9,6 +9,7 @@ module FrozenRecord
9
9
  ].to_set
10
10
 
11
11
  delegate :first, :last, :length, :collect, :map, :each, :all?, :include?, :to_ary, :to_json, :as_json, :count, to: :to_a
12
+ alias_method :find_each, :each
12
13
  if defined? ActiveModel::Serializers::Xml
13
14
  delegate :to_xml, to: :to_a
14
15
  end
@@ -187,8 +188,8 @@ module FrozenRecord
187
188
  end
188
189
 
189
190
  records.select do |record|
190
- unindexed_where_values.all? { |attr, value| compare_value(record[attr], value) } &&
191
- !@where_not_values.any? { |attr, value| compare_value(record[attr], value) }
191
+ unindexed_where_values.all? { |attr, matcher| matcher.match?(record[attr]) } &&
192
+ !@where_not_values.any? { |attr, matcher| matcher.match?(record[attr]) }
192
193
  end
193
194
  end
194
195
 
@@ -234,16 +235,16 @@ module FrozenRecord
234
235
  end
235
236
 
236
237
  def array_delegable?(method)
237
- Array.method_defined?(method) && DISALLOWED_ARRAY_METHODS.exclude?(method)
238
+ Array.method_defined?(method) && !DISALLOWED_ARRAY_METHODS.include?(method)
238
239
  end
239
240
 
240
241
  def where!(criterias)
241
- @where_values += criterias.map { |k, v| [k.to_s, v] }
242
+ @where_values += criterias.map { |k, v| [k.to_s, Matcher.for(v)] }
242
243
  self
243
244
  end
244
245
 
245
246
  def where_not!(criterias)
246
- @where_not_values += criterias.map { |k, v| [k.to_s, v] }
247
+ @where_not_values += criterias.map { |k, v| [k.to_s, Matcher.for(v)] }
247
248
  self
248
249
  end
249
250
 
@@ -266,9 +267,62 @@ module FrozenRecord
266
267
 
267
268
  private
268
269
 
269
- def compare_value(actual, requested)
270
- return actual == requested unless requested.is_a?(Array) || requested.is_a?(Range)
271
- requested.include?(actual)
270
+ class Matcher
271
+ class << self
272
+ def for(value)
273
+ case value
274
+ when Array
275
+ IncludeMatcher.new(value)
276
+ when Range
277
+ CoverMatcher.new(value)
278
+ else
279
+ new(value)
280
+ end
281
+ end
282
+ end
283
+
284
+ attr_reader :value
285
+
286
+ def hash
287
+ self.class.hash ^ value.hash
288
+ end
289
+
290
+ def initialize(value)
291
+ @value = value
292
+ end
293
+
294
+ def ranged?
295
+ false
296
+ end
297
+
298
+ def match?(other)
299
+ @value == other
300
+ end
301
+
302
+ def ==(other)
303
+ self.class == other.class && value == other.value
304
+ end
305
+ alias_method :eql?, :==
306
+ end
307
+
308
+ class IncludeMatcher < Matcher
309
+ def ranged?
310
+ true
311
+ end
312
+
313
+ def match?(other)
314
+ @value.include?(other)
315
+ end
316
+ end
317
+
318
+ class CoverMatcher < Matcher
319
+ def ranged?
320
+ true
321
+ end
322
+
323
+ def match?(other)
324
+ @value.cover?(other)
325
+ end
272
326
  end
273
327
  end
274
328
  end
@@ -0,0 +1,13 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'frozen_record/base'
4
+
5
+ module FrozenRecord
6
+ class Base
7
+ include ActiveModel::Serializers::JSON
8
+
9
+ if defined? ActiveModel::Serializers::Xml
10
+ include ActiveModel::Serializers::Xml
11
+ end
12
+ end
13
+ end
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module FrozenRecord
4
- VERSION = '0.20.1'
4
+ VERSION = '0.22.2'
5
5
  end
@@ -90,6 +90,32 @@ RSpec.shared_examples 'main' do
90
90
 
91
91
  end
92
92
 
93
+ describe '.each' do
94
+
95
+ it 'yields the records one by one' do
96
+ count = 0
97
+ Country.each do |country|
98
+ expect(country).to be_a Country
99
+ count += 1
100
+ end
101
+ expect(count).to be == Country.count
102
+ end
103
+
104
+ end
105
+
106
+ describe '.find_each' do
107
+
108
+ it 'yields the records one by one' do
109
+ count = 0
110
+ Country.find_each do |country|
111
+ expect(country).to be_a Country
112
+ count += 1
113
+ end
114
+ expect(count).to be == Country.count
115
+ end
116
+
117
+ end
118
+
93
119
  describe '.memsize' do
94
120
 
95
121
  it 'retuns the records memory footprint' do
data/spec/scope_spec.rb CHANGED
@@ -180,6 +180,20 @@ describe 'querying' do
180
180
 
181
181
  end
182
182
 
183
+ describe '.find_each' do
184
+
185
+ it 'yields the records one by one' do
186
+ scope = Country.where(name: 'France')
187
+ count = 0
188
+ scope.find_each do |country|
189
+ expect(country).to be_a Country
190
+ count += 1
191
+ end
192
+ expect(count).to be == 1
193
+ end
194
+
195
+ end
196
+
183
197
  describe '.where' do
184
198
 
185
199
  it 'returns the records that match given criterias' do
@@ -415,7 +429,7 @@ describe 'querying' do
415
429
 
416
430
  end
417
431
 
418
- describe '.as_json' do
432
+ describe '.as_json', exclude_minimal: true do
419
433
 
420
434
  it 'serialize the results' do
421
435
  json = Country.all.as_json
@@ -445,8 +459,8 @@ describe 'querying' do
445
459
  it 'returns true when the same scope has be rechained' do
446
460
  scope_a = Country.nato.republics.nato.republics
447
461
  scope_b = Country.republics.nato
448
- expect(scope_a.instance_variable_get(:@where_values)).to be == [['nato', true], ['king', nil], ['nato', true], ['king', nil]]
449
- expect(scope_b.instance_variable_get(:@where_values)).to be == [['king', nil], ['nato', true]]
462
+ expect(scope_a.instance_variable_get(:@where_values).map { |k, v| [k, v.value] }).to be == [['nato', true], ['king', nil], ['nato', true], ['king', nil]]
463
+ expect(scope_b.instance_variable_get(:@where_values).map { |k, v| [k, v.value] }).to be == [['king', nil], ['nato', true]]
450
464
  expect(scope_a).to be == scope_b
451
465
  end
452
466
  end
data/spec/spec_helper.rb CHANGED
@@ -1,16 +1,16 @@
1
1
  lib = File.expand_path('../lib', __FILE__)
2
2
  $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
3
3
 
4
- require 'pry'
5
- require 'simplecov'
6
- require 'coveralls'
7
- SimpleCov.formatter = SimpleCov::Formatter::MultiFormatter[
8
- SimpleCov::Formatter::HTMLFormatter,
9
- Coveralls::SimpleCov::Formatter
10
- ]
11
- SimpleCov.start
12
-
13
- require 'frozen_record'
4
+ minimal = ENV['MINIMAL'] == 'true'
5
+ require 'objspace'
6
+ require 'time'
7
+
8
+ if minimal
9
+ require 'frozen_record/minimal'
10
+ else
11
+ require 'frozen_record'
12
+ end
13
+
14
14
  require 'frozen_record/test_helper'
15
15
 
16
16
  FrozenRecord::Base.base_path = File.join(File.dirname(__FILE__), 'fixtures')
@@ -22,6 +22,7 @@ FrozenRecord.eager_load!
22
22
  RSpec.configure do |config|
23
23
  config.run_all_when_everything_filtered = true
24
24
  config.filter_run :focus
25
+ config.filter_run_excluding :exclude_minimal if minimal
25
26
 
26
27
  config.order = 'random'
27
28
 
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.20.1
4
+ version: 0.22.2
5
5
  platform: ruby
6
6
  authors:
7
7
  - Jean Boussier
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2020-10-19 00:00:00.000000000 Z
11
+ date: 2021-07-06 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: activemodel
@@ -38,20 +38,6 @@ dependencies:
38
38
  - - ">="
39
39
  - !ruby/object:Gem::Version
40
40
  version: '0'
41
- - !ruby/object:Gem::Dependency
42
- name: bundler
43
- requirement: !ruby/object:Gem::Requirement
44
- requirements:
45
- - - ">="
46
- - !ruby/object:Gem::Version
47
- version: '0'
48
- type: :development
49
- prerelease: false
50
- version_requirements: !ruby/object:Gem::Requirement
51
- requirements:
52
- - - ">="
53
- - !ruby/object:Gem::Version
54
- version: '0'
55
41
  - !ruby/object:Gem::Dependency
56
42
  name: rake
57
43
  requirement: !ruby/object:Gem::Requirement
@@ -80,34 +66,6 @@ dependencies:
80
66
  - - ">="
81
67
  - !ruby/object:Gem::Version
82
68
  version: '0'
83
- - !ruby/object:Gem::Dependency
84
- name: pry
85
- requirement: !ruby/object:Gem::Requirement
86
- requirements:
87
- - - ">="
88
- - !ruby/object:Gem::Version
89
- version: '0'
90
- type: :development
91
- prerelease: false
92
- version_requirements: !ruby/object:Gem::Requirement
93
- requirements:
94
- - - ">="
95
- - !ruby/object:Gem::Version
96
- version: '0'
97
- - !ruby/object:Gem::Dependency
98
- name: coveralls
99
- requirement: !ruby/object:Gem::Requirement
100
- requirements:
101
- - - ">="
102
- - !ruby/object:Gem::Version
103
- version: '0'
104
- type: :development
105
- prerelease: false
106
- version_requirements: !ruby/object:Gem::Requirement
107
- requirements:
108
- - - ">="
109
- - !ruby/object:Gem::Version
110
- version: '0'
111
69
  description:
112
70
  email:
113
71
  - jean.boussier@gmail.com
@@ -115,26 +73,30 @@ executables: []
115
73
  extensions: []
116
74
  extra_rdoc_files: []
117
75
  files:
76
+ - ".github/workflows/main.yml"
118
77
  - ".gitignore"
119
78
  - ".rspec"
120
- - ".travis.yml"
121
79
  - Gemfile
122
80
  - LICENSE.txt
123
81
  - README.md
124
82
  - Rakefile
125
83
  - benchmark/attribute-read
126
84
  - benchmark/memory-usage
85
+ - benchmark/querying
127
86
  - benchmark/setup.rb
128
87
  - frozen_record.gemspec
129
88
  - lib/frozen_record.rb
130
89
  - lib/frozen_record/backends.rb
90
+ - lib/frozen_record/backends/empty.json
131
91
  - lib/frozen_record/backends/json.rb
132
92
  - lib/frozen_record/backends/yaml.rb
133
93
  - lib/frozen_record/base.rb
134
94
  - lib/frozen_record/compact.rb
135
95
  - lib/frozen_record/index.rb
96
+ - lib/frozen_record/minimal.rb
136
97
  - lib/frozen_record/railtie.rb
137
98
  - lib/frozen_record/scope.rb
99
+ - lib/frozen_record/serialization.rb
138
100
  - lib/frozen_record/test_helper.rb
139
101
  - lib/frozen_record/version.rb
140
102
  - spec/fixtures/animals.json
@@ -168,7 +130,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
168
130
  - !ruby/object:Gem::Version
169
131
  version: '0'
170
132
  requirements: []
171
- rubygems_version: 3.1.2
133
+ rubygems_version: 3.3.0.dev
172
134
  signing_key:
173
135
  specification_version: 4
174
136
  summary: ActiveRecord like interface to read only access and query static YAML files
data/.travis.yml DELETED
@@ -1,5 +0,0 @@
1
- sudo: false
2
- rvm:
3
- - '2.5'
4
- - '2.6'
5
- - '2.7'