rails_view_adapters 0.2.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.
- checksums.yaml +7 -0
- data/.gitignore +10 -0
- data/.rspec +2 -0
- data/.rubocop.yml +181 -0
- data/.travis.yml +7 -0
- data/Gemfile +4 -0
- data/LICENSE.md +27 -0
- data/README.md +88 -0
- data/Rakefile +6 -0
- data/lib/rails_view_adapters/adapter.rb +34 -0
- data/lib/rails_view_adapters/adapter_base.rb +101 -0
- data/lib/rails_view_adapters/definition_proxy.rb +155 -0
- data/lib/rails_view_adapters/map.rb +46 -0
- data/lib/rails_view_adapters/version.rb +4 -0
- data/lib/rails_view_adapters.rb +13 -0
- data/rails_view_adapters.gemspec +35 -0
- data/spec/active_record_helper.rb +16 -0
- data/spec/active_record_support/db/migrate/20161031222934_create_users.rb +14 -0
- data/spec/active_record_support/db/migrate/20161031223219_create_posts.rb +11 -0
- data/spec/active_record_support/db/migrate/20161031223253_create_teams.rb +10 -0
- data/spec/active_record_support/fabricators/post_fabricator.rb +7 -0
- data/spec/active_record_support/fabricators/team_fabricator.rb +6 -0
- data/spec/active_record_support/fabricators/user_fabricator.rb +10 -0
- data/spec/active_record_support/models/post.rb +4 -0
- data/spec/active_record_support/models/team.rb +4 -0
- data/spec/active_record_support/models/user.rb +5 -0
- data/spec/integration/an_adapter_spec.rb +58 -0
- data/spec/lib/adapter_base_spec.rb +133 -0
- data/spec/lib/adapter_spec.rb +45 -0
- data/spec/lib/definition_proxy_spec.rb +242 -0
- data/spec/lib/map_spec.rb +99 -0
- data/spec/spec_helper.rb +19 -0
- data/spec/support/an_adapter.rb +72 -0
- data/spec/support/fuzzy_nested_match.rb +96 -0
- metadata +206 -0
@@ -0,0 +1,99 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
require "spec_helper"
|
3
|
+
|
4
|
+
module RailsViewAdapters
|
5
|
+
|
6
|
+
class TestMap < Map
|
7
|
+
def to_hash
|
8
|
+
{
|
9
|
+
model_fields: model_fields,
|
10
|
+
public_fields: public_fields,
|
11
|
+
simple_maps: simple_maps,
|
12
|
+
to_maps: to_maps,
|
13
|
+
from_maps: from_maps
|
14
|
+
}
|
15
|
+
end
|
16
|
+
end
|
17
|
+
|
18
|
+
describe Map do
|
19
|
+
let(:map) { TestMap.new }
|
20
|
+
let(:bare_hash) do
|
21
|
+
{
|
22
|
+
model_fields: [],
|
23
|
+
public_fields: [],
|
24
|
+
simple_maps: [],
|
25
|
+
to_maps: [],
|
26
|
+
from_maps: []
|
27
|
+
}
|
28
|
+
end
|
29
|
+
|
30
|
+
describe "#add_model_field" do
|
31
|
+
let(:model_field) { :test123 }
|
32
|
+
it "adds the model field" do
|
33
|
+
map.add_model_field(model_field)
|
34
|
+
expect(map.to_hash).to eql(bare_hash.merge(model_fields: [model_field]))
|
35
|
+
end
|
36
|
+
it "returns self" do
|
37
|
+
expect(map.add_model_field(model_field)).to be(map)
|
38
|
+
end
|
39
|
+
end
|
40
|
+
|
41
|
+
describe "#add_public_field" do
|
42
|
+
let(:public_field) { :test123 }
|
43
|
+
it "adds the model field" do
|
44
|
+
map.add_public_field(public_field)
|
45
|
+
expect(map.to_hash).to eql(bare_hash.merge(public_fields: [public_field]))
|
46
|
+
end
|
47
|
+
it "returns self" do
|
48
|
+
expect(map.add_public_field(public_field)).to be(map)
|
49
|
+
end
|
50
|
+
end
|
51
|
+
|
52
|
+
describe "#add_simple_map" do
|
53
|
+
let(:public_field) { :pub }
|
54
|
+
let(:model_field) { :mod }
|
55
|
+
it "adds the simple mapping" do
|
56
|
+
map.add_simple_map(model_field, public_field)
|
57
|
+
expect(map.to_hash).to eql(bare_hash.merge(
|
58
|
+
public_fields: [public_field],
|
59
|
+
model_fields: [model_field],
|
60
|
+
simple_maps: [[model_field, public_field]]
|
61
|
+
))
|
62
|
+
end
|
63
|
+
it "returns self" do
|
64
|
+
expect(map.add_simple_map(model_field, public_field)).to be(map)
|
65
|
+
end
|
66
|
+
end
|
67
|
+
|
68
|
+
describe "#add_to_map" do
|
69
|
+
let(:model_field) { :mod }
|
70
|
+
let(:process) { proc {|v| v + 37 } }
|
71
|
+
it "adds the mapping" do
|
72
|
+
map.add_to_map(model_field, &process)
|
73
|
+
expect(map.to_hash).to eql(bare_hash.merge(
|
74
|
+
model_fields: [model_field],
|
75
|
+
to_maps: [[model_field, process]]
|
76
|
+
))
|
77
|
+
end
|
78
|
+
it "returns self" do
|
79
|
+
expect(map.add_to_map(model_field, &process)).to be(map)
|
80
|
+
end
|
81
|
+
end
|
82
|
+
|
83
|
+
describe "#add_from_map" do
|
84
|
+
let(:public_field) { :pub }
|
85
|
+
let(:process) { proc {|v| v + 37 } }
|
86
|
+
it "adds the mapping" do
|
87
|
+
map.add_from_map(public_field, &process)
|
88
|
+
expect(map.to_hash).to eql(bare_hash.merge(
|
89
|
+
public_fields: [public_field],
|
90
|
+
from_maps: [[public_field, process]]
|
91
|
+
))
|
92
|
+
end
|
93
|
+
it "returns self" do
|
94
|
+
expect(map.add_from_map(public_field, &process)).to be(map)
|
95
|
+
end
|
96
|
+
end
|
97
|
+
end
|
98
|
+
|
99
|
+
end
|
data/spec/spec_helper.rb
ADDED
@@ -0,0 +1,19 @@
|
|
1
|
+
|
2
|
+
# frozen_string_literal: true
|
3
|
+
RSpec.configure do |config|
|
4
|
+
config.expect_with :rspec do |expectations|
|
5
|
+
expectations.include_chain_clauses_in_custom_matcher_descriptions = true
|
6
|
+
end
|
7
|
+
|
8
|
+
config.mock_with :rspec do |mocks|
|
9
|
+
mocks.verify_partial_doubles = true
|
10
|
+
end
|
11
|
+
|
12
|
+
config.shared_context_metadata_behavior = :apply_to_host_groups
|
13
|
+
|
14
|
+
# config.order = :random
|
15
|
+
# Kernel.srand config.seed
|
16
|
+
end
|
17
|
+
|
18
|
+
require "rails_view_adapters"
|
19
|
+
Dir[File.join(File.dirname(__FILE__), "support", "**", "*.rb")].each {|f| require f }
|
@@ -0,0 +1,72 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
# Copyright (c) 2015 The Regents of the University of Michigan.
|
3
|
+
# All Rights Reserved.
|
4
|
+
# Licensed according to the terms of the Revised BSD License
|
5
|
+
# See LICENSE.md for details.
|
6
|
+
|
7
|
+
# You should define these:
|
8
|
+
# let(:model)
|
9
|
+
# let(:public_hash)
|
10
|
+
# let(:model_hash)
|
11
|
+
|
12
|
+
shared_examples "an adapter" do |hidden_params|
|
13
|
+
hidden_params ||= {}
|
14
|
+
describe ".from_model" do
|
15
|
+
it "can be created from a model" do
|
16
|
+
expect do
|
17
|
+
adapter_class.from_model(model)
|
18
|
+
end.to_not raise_error
|
19
|
+
end
|
20
|
+
end
|
21
|
+
|
22
|
+
describe ".from_public" do
|
23
|
+
it "can be created from a model" do
|
24
|
+
expect do
|
25
|
+
adapter_class.from_public(public_hash)
|
26
|
+
end.to_not raise_error
|
27
|
+
end
|
28
|
+
it "handles missing data" do
|
29
|
+
expect do
|
30
|
+
adapter_class.from_public({})
|
31
|
+
end.to_not raise_error
|
32
|
+
end
|
33
|
+
end
|
34
|
+
|
35
|
+
context "starting with .from_public" do
|
36
|
+
let(:adapter) do
|
37
|
+
adapter_class.from_public(public_hash.merge(unrelated: :unchanged).merge(hidden_params))
|
38
|
+
end
|
39
|
+
include_examples "adapter output", unrelated: :unchanged
|
40
|
+
end
|
41
|
+
|
42
|
+
context "starting with .from_model" do
|
43
|
+
let(:adapter) { adapter_class.from_model(model) }
|
44
|
+
include_examples "adapter output", {}
|
45
|
+
end
|
46
|
+
end
|
47
|
+
|
48
|
+
shared_examples "adapter output" do |params_extra|
|
49
|
+
describe "#to_model_hash" do
|
50
|
+
it "creates the proper hash" do
|
51
|
+
expect(adapter.to_model_hash).to fuzzy_nested_match(model_hash)
|
52
|
+
end
|
53
|
+
it "removes extra fields" do
|
54
|
+
expect(adapter.to_model_hash.keys.sort).to match_array(model_hash.keys.sort)
|
55
|
+
end
|
56
|
+
end
|
57
|
+
|
58
|
+
describe "#to_public_hash" do
|
59
|
+
it "creates the proper hash" do
|
60
|
+
expect(adapter.to_public_hash).to fuzzy_nested_match(public_hash)
|
61
|
+
end
|
62
|
+
it "removes extra fields" do
|
63
|
+
expect(adapter.to_public_hash.keys.sort).to match_array(public_hash.keys.sort)
|
64
|
+
end
|
65
|
+
end
|
66
|
+
|
67
|
+
describe "#to_params_hash" do
|
68
|
+
it "creates the proper hash" do
|
69
|
+
expect(adapter.to_params_hash).to fuzzy_nested_match(model_hash.merge(params_extra))
|
70
|
+
end
|
71
|
+
end
|
72
|
+
end
|
@@ -0,0 +1,96 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
# Copyright (c) 2015 The Regents of the University of Michigan.
|
3
|
+
# All Rights Reserved.
|
4
|
+
# Licensed according to the terms of the Revised BSD License
|
5
|
+
# See LICENSE.md for details.
|
6
|
+
|
7
|
+
module Matchers
|
8
|
+
class FuzzyNestedMatcher
|
9
|
+
def initialize(expected)
|
10
|
+
@expected = expected
|
11
|
+
@errors = nil
|
12
|
+
end
|
13
|
+
|
14
|
+
def matches?(actual)
|
15
|
+
@errors ||= match(actual, @expected)
|
16
|
+
@errors.nil?
|
17
|
+
end
|
18
|
+
|
19
|
+
def match_primitives(actual, expected)
|
20
|
+
"expected #{expected}, got #{actual}" unless actual == expected
|
21
|
+
end
|
22
|
+
|
23
|
+
def match_times(actual, expected)
|
24
|
+
diff = actual - expected
|
25
|
+
"expected #{expected}, got #{actual}" unless diff.between?(-1, 1)
|
26
|
+
end
|
27
|
+
|
28
|
+
def match_hashes(actual, expected)
|
29
|
+
unless actual.keys.sort == expected.keys.sort
|
30
|
+
extra = (actual.keys - expected.keys).map {|key| "+#{key}" }
|
31
|
+
missing = (expected.keys - actual.keys).map {|key| "-#{key}" }
|
32
|
+
return { "Hash keys mismatch:" => extra + missing }
|
33
|
+
end
|
34
|
+
|
35
|
+
errors = {}
|
36
|
+
actual.keys.each do |key|
|
37
|
+
error = match(actual[key], expected[key])
|
38
|
+
errors[key] = error if error
|
39
|
+
end
|
40
|
+
|
41
|
+
errors.empty? ? nil : errors
|
42
|
+
end
|
43
|
+
|
44
|
+
def match_arrays(actual, expected)
|
45
|
+
unless actual.size == expected.size
|
46
|
+
return "Actual size #{actual.size}, expected #{expected.size}"
|
47
|
+
end
|
48
|
+
errors = []
|
49
|
+
actual.each_index do |i|
|
50
|
+
error = match(actual[i], expected[i])
|
51
|
+
errors[i] = error if error
|
52
|
+
end
|
53
|
+
errors.empty? ? nil : errors
|
54
|
+
end
|
55
|
+
|
56
|
+
def match_active_records(actual, expected)
|
57
|
+
match_hashes(actual.attributes.except(:id), expected.attributes.except(:id))
|
58
|
+
end
|
59
|
+
|
60
|
+
def match(actual, expected)
|
61
|
+
actual_responds_to = responders(actual)
|
62
|
+
expected_responds_to = responders(expected)
|
63
|
+
unless actual_responds_to == expected_responds_to
|
64
|
+
return "Type mismatch: expected [#{expected_responds_to}], got [#{actual_responds_to}]"
|
65
|
+
end
|
66
|
+
if actual_responds_to.include? :push
|
67
|
+
return match_arrays(actual, expected)
|
68
|
+
elsif actual_responds_to.include? :has_key?
|
69
|
+
return match_hashes(actual, expected)
|
70
|
+
elsif actual.is_a? ActiveRecord::Base
|
71
|
+
return match_active_records(actual, expected)
|
72
|
+
elsif actual.respond_to? :strftime
|
73
|
+
return match_times(actual, expected)
|
74
|
+
else
|
75
|
+
return match_primitives(actual, expected)
|
76
|
+
end
|
77
|
+
end
|
78
|
+
|
79
|
+
def responders(obj)
|
80
|
+
responds_to = []
|
81
|
+
[:each, :push, :has_key?].each do |method|
|
82
|
+
responds_to << method if obj.respond_to? method
|
83
|
+
end
|
84
|
+
responds_to
|
85
|
+
end
|
86
|
+
|
87
|
+
def failure_message
|
88
|
+
@errors
|
89
|
+
end
|
90
|
+
|
91
|
+
end
|
92
|
+
end
|
93
|
+
|
94
|
+
def fuzzy_nested_match(actual)
|
95
|
+
Matchers::FuzzyNestedMatcher.new(actual)
|
96
|
+
end
|
metadata
ADDED
@@ -0,0 +1,206 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: rails_view_adapters
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.2.1
|
5
|
+
platform: ruby
|
6
|
+
authors:
|
7
|
+
- Bryan Hockey
|
8
|
+
autorequire:
|
9
|
+
bindir: exe
|
10
|
+
cert_chain: []
|
11
|
+
date: 2016-11-02 00:00:00.000000000 Z
|
12
|
+
dependencies:
|
13
|
+
- !ruby/object:Gem::Dependency
|
14
|
+
name: activerecord
|
15
|
+
requirement: !ruby/object:Gem::Requirement
|
16
|
+
requirements:
|
17
|
+
- - "~>"
|
18
|
+
- !ruby/object:Gem::Version
|
19
|
+
version: 4.2.7.1
|
20
|
+
type: :runtime
|
21
|
+
prerelease: false
|
22
|
+
version_requirements: !ruby/object:Gem::Requirement
|
23
|
+
requirements:
|
24
|
+
- - "~>"
|
25
|
+
- !ruby/object:Gem::Version
|
26
|
+
version: 4.2.7.1
|
27
|
+
- !ruby/object:Gem::Dependency
|
28
|
+
name: activesupport
|
29
|
+
requirement: !ruby/object:Gem::Requirement
|
30
|
+
requirements:
|
31
|
+
- - "~>"
|
32
|
+
- !ruby/object:Gem::Version
|
33
|
+
version: 4.2.7.1
|
34
|
+
type: :runtime
|
35
|
+
prerelease: false
|
36
|
+
version_requirements: !ruby/object:Gem::Requirement
|
37
|
+
requirements:
|
38
|
+
- - "~>"
|
39
|
+
- !ruby/object:Gem::Version
|
40
|
+
version: 4.2.7.1
|
41
|
+
- !ruby/object:Gem::Dependency
|
42
|
+
name: sqlite3
|
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
|
+
- !ruby/object:Gem::Dependency
|
56
|
+
name: rspec-rails
|
57
|
+
requirement: !ruby/object:Gem::Requirement
|
58
|
+
requirements:
|
59
|
+
- - ">="
|
60
|
+
- !ruby/object:Gem::Version
|
61
|
+
version: '0'
|
62
|
+
type: :development
|
63
|
+
prerelease: false
|
64
|
+
version_requirements: !ruby/object:Gem::Requirement
|
65
|
+
requirements:
|
66
|
+
- - ">="
|
67
|
+
- !ruby/object:Gem::Version
|
68
|
+
version: '0'
|
69
|
+
- !ruby/object:Gem::Dependency
|
70
|
+
name: faker
|
71
|
+
requirement: !ruby/object:Gem::Requirement
|
72
|
+
requirements:
|
73
|
+
- - ">="
|
74
|
+
- !ruby/object:Gem::Version
|
75
|
+
version: '0'
|
76
|
+
type: :development
|
77
|
+
prerelease: false
|
78
|
+
version_requirements: !ruby/object:Gem::Requirement
|
79
|
+
requirements:
|
80
|
+
- - ">="
|
81
|
+
- !ruby/object:Gem::Version
|
82
|
+
version: '0'
|
83
|
+
- !ruby/object:Gem::Dependency
|
84
|
+
name: fabrication
|
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: pry
|
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
|
+
- !ruby/object:Gem::Dependency
|
112
|
+
name: rubocop
|
113
|
+
requirement: !ruby/object:Gem::Requirement
|
114
|
+
requirements:
|
115
|
+
- - ">="
|
116
|
+
- !ruby/object:Gem::Version
|
117
|
+
version: '0'
|
118
|
+
type: :development
|
119
|
+
prerelease: false
|
120
|
+
version_requirements: !ruby/object:Gem::Requirement
|
121
|
+
requirements:
|
122
|
+
- - ">="
|
123
|
+
- !ruby/object:Gem::Version
|
124
|
+
version: '0'
|
125
|
+
description: Bidirectional mappings between models and external views for Rails.
|
126
|
+
email:
|
127
|
+
- bhock@umich.edu
|
128
|
+
executables: []
|
129
|
+
extensions: []
|
130
|
+
extra_rdoc_files: []
|
131
|
+
files:
|
132
|
+
- ".gitignore"
|
133
|
+
- ".rspec"
|
134
|
+
- ".rubocop.yml"
|
135
|
+
- ".travis.yml"
|
136
|
+
- Gemfile
|
137
|
+
- LICENSE.md
|
138
|
+
- README.md
|
139
|
+
- Rakefile
|
140
|
+
- lib/rails_view_adapters.rb
|
141
|
+
- lib/rails_view_adapters/adapter.rb
|
142
|
+
- lib/rails_view_adapters/adapter_base.rb
|
143
|
+
- lib/rails_view_adapters/definition_proxy.rb
|
144
|
+
- lib/rails_view_adapters/map.rb
|
145
|
+
- lib/rails_view_adapters/version.rb
|
146
|
+
- rails_view_adapters.gemspec
|
147
|
+
- spec/active_record_helper.rb
|
148
|
+
- spec/active_record_support/db/migrate/20161031222934_create_users.rb
|
149
|
+
- spec/active_record_support/db/migrate/20161031223219_create_posts.rb
|
150
|
+
- spec/active_record_support/db/migrate/20161031223253_create_teams.rb
|
151
|
+
- spec/active_record_support/fabricators/post_fabricator.rb
|
152
|
+
- spec/active_record_support/fabricators/team_fabricator.rb
|
153
|
+
- spec/active_record_support/fabricators/user_fabricator.rb
|
154
|
+
- spec/active_record_support/models/post.rb
|
155
|
+
- spec/active_record_support/models/team.rb
|
156
|
+
- spec/active_record_support/models/user.rb
|
157
|
+
- spec/integration/an_adapter_spec.rb
|
158
|
+
- spec/lib/adapter_base_spec.rb
|
159
|
+
- spec/lib/adapter_spec.rb
|
160
|
+
- spec/lib/definition_proxy_spec.rb
|
161
|
+
- spec/lib/map_spec.rb
|
162
|
+
- spec/spec_helper.rb
|
163
|
+
- spec/support/an_adapter.rb
|
164
|
+
- spec/support/fuzzy_nested_match.rb
|
165
|
+
homepage: https://github.com/mlibrary/rails_view_adapters
|
166
|
+
licenses: []
|
167
|
+
metadata: {}
|
168
|
+
post_install_message:
|
169
|
+
rdoc_options: []
|
170
|
+
require_paths:
|
171
|
+
- lib
|
172
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
173
|
+
requirements:
|
174
|
+
- - ">="
|
175
|
+
- !ruby/object:Gem::Version
|
176
|
+
version: 2.2.2
|
177
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
178
|
+
requirements:
|
179
|
+
- - ">="
|
180
|
+
- !ruby/object:Gem::Version
|
181
|
+
version: '0'
|
182
|
+
requirements: []
|
183
|
+
rubyforge_project:
|
184
|
+
rubygems_version: 2.5.1
|
185
|
+
signing_key:
|
186
|
+
specification_version: 4
|
187
|
+
summary: Bidirectional mappings between models and external views for Rails.
|
188
|
+
test_files:
|
189
|
+
- spec/active_record_support/models/post.rb
|
190
|
+
- spec/active_record_support/models/team.rb
|
191
|
+
- spec/active_record_support/models/user.rb
|
192
|
+
- spec/active_record_support/db/migrate/20161031223219_create_posts.rb
|
193
|
+
- spec/active_record_support/db/migrate/20161031223253_create_teams.rb
|
194
|
+
- spec/active_record_support/db/migrate/20161031222934_create_users.rb
|
195
|
+
- spec/active_record_support/fabricators/user_fabricator.rb
|
196
|
+
- spec/active_record_support/fabricators/post_fabricator.rb
|
197
|
+
- spec/active_record_support/fabricators/team_fabricator.rb
|
198
|
+
- spec/spec_helper.rb
|
199
|
+
- spec/lib/adapter_base_spec.rb
|
200
|
+
- spec/lib/definition_proxy_spec.rb
|
201
|
+
- spec/lib/adapter_spec.rb
|
202
|
+
- spec/lib/map_spec.rb
|
203
|
+
- spec/active_record_helper.rb
|
204
|
+
- spec/support/an_adapter.rb
|
205
|
+
- spec/support/fuzzy_nested_match.rb
|
206
|
+
- spec/integration/an_adapter_spec.rb
|