hashie 3.5.7 → 5.0.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 +5 -5
- data/CHANGELOG.md +281 -195
- data/CONTRIBUTING.md +13 -6
- data/LICENSE +1 -1
- data/README.md +320 -60
- data/Rakefile +2 -2
- data/UPGRADING.md +121 -7
- data/hashie.gemspec +13 -7
- data/lib/hashie/clash.rb +12 -1
- data/lib/hashie/dash.rb +56 -35
- data/lib/hashie/extensions/active_support/core_ext/hash.rb +14 -0
- data/lib/hashie/extensions/coercion.rb +26 -19
- data/lib/hashie/extensions/dash/indifferent_access.rb +29 -1
- data/lib/hashie/extensions/dash/predefined_values.rb +88 -0
- data/lib/hashie/extensions/dash/property_translation.rb +59 -28
- data/lib/hashie/extensions/deep_fetch.rb +5 -3
- data/lib/hashie/extensions/deep_find.rb +14 -5
- data/lib/hashie/extensions/deep_locate.rb +22 -8
- data/lib/hashie/extensions/deep_merge.rb +26 -10
- data/lib/hashie/extensions/ignore_undeclared.rb +4 -5
- data/lib/hashie/extensions/indifferent_access.rb +43 -10
- data/lib/hashie/extensions/key_conflict_warning.rb +55 -0
- data/lib/hashie/extensions/mash/define_accessors.rb +90 -0
- data/lib/hashie/extensions/mash/keep_original_keys.rb +4 -5
- data/lib/hashie/extensions/mash/permissive_respond_to.rb +61 -0
- data/lib/hashie/extensions/mash/safe_assignment.rb +3 -1
- data/lib/hashie/extensions/mash/symbolize_keys.rb +6 -6
- data/lib/hashie/extensions/method_access.rb +47 -14
- data/lib/hashie/extensions/parsers/yaml_erb_parser.rb +28 -4
- data/lib/hashie/extensions/ruby_version_check.rb +5 -1
- data/lib/hashie/extensions/strict_key_access.rb +16 -13
- data/lib/hashie/extensions/stringify_keys.rb +1 -1
- data/lib/hashie/extensions/symbolize_keys.rb +13 -2
- data/lib/hashie/hash.rb +18 -11
- data/lib/hashie/mash.rb +147 -81
- data/lib/hashie/railtie.rb +7 -0
- data/lib/hashie/rash.rb +6 -6
- data/lib/hashie/utils.rb +28 -0
- data/lib/hashie/version.rb +1 -1
- data/lib/hashie.rb +22 -19
- metadata +23 -131
- data/spec/hashie/array_spec.rb +0 -29
- data/spec/hashie/clash_spec.rb +0 -70
- data/spec/hashie/dash_spec.rb +0 -573
- data/spec/hashie/extensions/autoload_spec.rb +0 -24
- data/spec/hashie/extensions/coercion_spec.rb +0 -631
- data/spec/hashie/extensions/dash/coercion_spec.rb +0 -13
- data/spec/hashie/extensions/dash/indifferent_access_spec.rb +0 -84
- data/spec/hashie/extensions/deep_fetch_spec.rb +0 -97
- data/spec/hashie/extensions/deep_find_spec.rb +0 -138
- data/spec/hashie/extensions/deep_locate_spec.rb +0 -137
- data/spec/hashie/extensions/deep_merge_spec.rb +0 -70
- data/spec/hashie/extensions/ignore_undeclared_spec.rb +0 -47
- data/spec/hashie/extensions/indifferent_access_spec.rb +0 -282
- data/spec/hashie/extensions/indifferent_access_with_rails_hwia_spec.rb +0 -208
- data/spec/hashie/extensions/key_conversion_spec.rb +0 -12
- data/spec/hashie/extensions/mash/keep_original_keys_spec.rb +0 -46
- data/spec/hashie/extensions/mash/safe_assignment_spec.rb +0 -50
- data/spec/hashie/extensions/mash/symbolize_keys_spec.rb +0 -39
- data/spec/hashie/extensions/merge_initializer_spec.rb +0 -23
- data/spec/hashie/extensions/method_access_spec.rb +0 -188
- data/spec/hashie/extensions/strict_key_access_spec.rb +0 -110
- data/spec/hashie/extensions/stringify_keys_spec.rb +0 -124
- data/spec/hashie/extensions/symbolize_keys_spec.rb +0 -129
- data/spec/hashie/hash_spec.rb +0 -84
- data/spec/hashie/mash_spec.rb +0 -763
- data/spec/hashie/parsers/yaml_erb_parser_spec.rb +0 -46
- data/spec/hashie/rash_spec.rb +0 -83
- data/spec/hashie/trash_spec.rb +0 -268
- data/spec/hashie/utils_spec.rb +0 -25
- data/spec/hashie/version_spec.rb +0 -7
- data/spec/hashie_spec.rb +0 -13
- data/spec/integration/omniauth/app.rb +0 -11
- data/spec/integration/omniauth/integration_spec.rb +0 -38
- data/spec/integration/omniauth-oauth2/app.rb +0 -53
- data/spec/integration/omniauth-oauth2/integration_spec.rb +0 -26
- data/spec/integration/omniauth-oauth2/some_site.rb +0 -38
- data/spec/integration/rails/app.rb +0 -48
- data/spec/integration/rails/integration_spec.rb +0 -26
- data/spec/integration/rails-without-dependency/integration_spec.rb +0 -15
- data/spec/spec_helper.rb +0 -23
- data/spec/support/integration_specs.rb +0 -36
- data/spec/support/logger.rb +0 -24
- data/spec/support/module_context.rb +0 -11
- data/spec/support/ruby_version_check.rb +0 -6
@@ -1,46 +0,0 @@
|
|
1
|
-
require 'spec_helper'
|
2
|
-
|
3
|
-
describe Hashie::Extensions::Parsers::YamlErbParser do
|
4
|
-
describe '.perform' do
|
5
|
-
context 'a file' do
|
6
|
-
let(:config) do
|
7
|
-
<<-EOF
|
8
|
-
---
|
9
|
-
foo: verbatim
|
10
|
-
bar: <%= "erb" %>
|
11
|
-
baz: "<%= __FILE__ %>"
|
12
|
-
EOF
|
13
|
-
end
|
14
|
-
let(:path) { 'template.yml' }
|
15
|
-
|
16
|
-
subject { described_class.new(path).perform }
|
17
|
-
|
18
|
-
before do
|
19
|
-
expect(File).to receive(:read).with(path).and_return(config)
|
20
|
-
end
|
21
|
-
|
22
|
-
it { is_expected.to be_a(Hash) }
|
23
|
-
|
24
|
-
it 'parses YAML after interpolating ERB' do
|
25
|
-
expect(subject['foo']).to eq 'verbatim'
|
26
|
-
expect(subject['bar']).to eq 'erb'
|
27
|
-
expect(subject['baz']).to eq path
|
28
|
-
end
|
29
|
-
end
|
30
|
-
|
31
|
-
context 'Pathname' do
|
32
|
-
let(:tempfile) do
|
33
|
-
file = Tempfile.new(['foo', '.yml'])
|
34
|
-
file.write("---\nfoo: hello\n")
|
35
|
-
file.rewind
|
36
|
-
file
|
37
|
-
end
|
38
|
-
|
39
|
-
subject { described_class.new(Pathname tempfile.path) }
|
40
|
-
|
41
|
-
it '"#perform" can be done in case of path is a Pathname object.' do
|
42
|
-
expect(subject.perform).to eq 'foo' => 'hello'
|
43
|
-
end
|
44
|
-
end
|
45
|
-
end
|
46
|
-
end
|
data/spec/hashie/rash_spec.rb
DELETED
@@ -1,83 +0,0 @@
|
|
1
|
-
require 'spec_helper'
|
2
|
-
|
3
|
-
describe Hashie::Rash do
|
4
|
-
subject do
|
5
|
-
Hashie::Rash.new(
|
6
|
-
/hello/ => 'hello',
|
7
|
-
/world/ => 'world',
|
8
|
-
'other' => 'whee',
|
9
|
-
true => false,
|
10
|
-
1 => 'awesome',
|
11
|
-
1..1000 => 'rangey',
|
12
|
-
/(bcd)/ => proc { |m| m[1] }
|
13
|
-
# /.+/ => "EVERYTHING"
|
14
|
-
)
|
15
|
-
end
|
16
|
-
|
17
|
-
it 'finds strings' do
|
18
|
-
expect(subject['other']).to eq 'whee'
|
19
|
-
expect(subject['well hello there']).to eq 'hello'
|
20
|
-
expect(subject['the world is round']).to eq 'world'
|
21
|
-
expect(subject.all('hello world').sort).to eq %w(hello world)
|
22
|
-
end
|
23
|
-
|
24
|
-
it 'finds regexps' do
|
25
|
-
expect(subject[/other/]).to eq 'whee'
|
26
|
-
end
|
27
|
-
|
28
|
-
it 'finds other objects' do
|
29
|
-
expect(subject[true]).to eq false
|
30
|
-
expect(subject[1]).to eq 'awesome'
|
31
|
-
end
|
32
|
-
|
33
|
-
it 'finds numbers from ranges' do
|
34
|
-
expect(subject[250]).to eq 'rangey'
|
35
|
-
expect(subject[999]).to eq 'rangey'
|
36
|
-
expect(subject[1000]).to eq 'rangey'
|
37
|
-
expect(subject[1001]).to be_nil
|
38
|
-
end
|
39
|
-
|
40
|
-
it 'finds floats from ranges' do
|
41
|
-
expect(subject[10.1]).to eq 'rangey'
|
42
|
-
expect(subject[1.0]).to eq 'rangey'
|
43
|
-
expect(subject[1000.1]).to be_nil
|
44
|
-
end
|
45
|
-
|
46
|
-
it 'evaluates proc values' do
|
47
|
-
expect(subject['abcdef']).to eq 'bcd'
|
48
|
-
expect(subject['ffffff']).to be_nil
|
49
|
-
end
|
50
|
-
|
51
|
-
it 'finds using the find method' do
|
52
|
-
expect(subject.fetch(10.1)).to eq 'rangey'
|
53
|
-
expect(subject.fetch(true)).to be false
|
54
|
-
end
|
55
|
-
|
56
|
-
it 'raises in find unless a key matches' do
|
57
|
-
expect { subject.fetch(1_000_000) }.to raise_error(KeyError)
|
58
|
-
end
|
59
|
-
|
60
|
-
it 'yields in find unless a key matches' do
|
61
|
-
expect { |y| subject.fetch(1_000_000, &y) }.to yield_control
|
62
|
-
expect { |y| subject.fetch(10.1, &y) }.to_not yield_control
|
63
|
-
end
|
64
|
-
|
65
|
-
it 'gives a default value' do
|
66
|
-
expect(subject.fetch(10.1, 'noop')).to eq 'rangey'
|
67
|
-
expect(subject.fetch(1_000_000, 'noop')).to eq 'noop'
|
68
|
-
expect(subject.fetch(1_000_000) { 'noop' }).to eq 'noop'
|
69
|
-
expect(subject.fetch(1_000_000) { |k| k }).to eq 1_000_000
|
70
|
-
expect(subject.fetch(1_000_000, 'noop') { 'op' }).to eq 'op'
|
71
|
-
end
|
72
|
-
|
73
|
-
it 'responds to hash methods' do
|
74
|
-
expect(subject.respond_to?(:to_a)).to be true
|
75
|
-
expect(subject.methods).to_not include(:to_a)
|
76
|
-
end
|
77
|
-
|
78
|
-
it 'does not lose keys' do
|
79
|
-
subject.optimize_every = 1
|
80
|
-
expect(subject['hello']).to eq('hello')
|
81
|
-
expect(subject['world']).to eq('world')
|
82
|
-
end
|
83
|
-
end
|
data/spec/hashie/trash_spec.rb
DELETED
@@ -1,268 +0,0 @@
|
|
1
|
-
require 'spec_helper'
|
2
|
-
|
3
|
-
describe Hashie::Trash do
|
4
|
-
class TrashTest < Hashie::Trash
|
5
|
-
property :first_name, from: :firstName
|
6
|
-
end
|
7
|
-
|
8
|
-
let(:trash) { TrashTest.new }
|
9
|
-
|
10
|
-
describe 'translating properties' do
|
11
|
-
it 'adds the property to the list' do
|
12
|
-
expect(TrashTest.properties).to include(:first_name)
|
13
|
-
end
|
14
|
-
|
15
|
-
it 'creates a method for reading the property' do
|
16
|
-
expect(trash).to respond_to(:first_name)
|
17
|
-
end
|
18
|
-
|
19
|
-
it 'creates a method for writing the property' do
|
20
|
-
expect(trash).to respond_to(:first_name=)
|
21
|
-
end
|
22
|
-
|
23
|
-
it 'creates a method for writing the translated property' do
|
24
|
-
expect(trash).to respond_to(:firstName=)
|
25
|
-
end
|
26
|
-
|
27
|
-
it 'does not create a method for reading the translated property' do
|
28
|
-
expect(trash).not_to respond_to(:firstName)
|
29
|
-
end
|
30
|
-
|
31
|
-
it 'maintains translations hash mapping from the original to the translated name' do
|
32
|
-
expect(TrashTest.translations[:firstName]).to eq(:first_name)
|
33
|
-
end
|
34
|
-
|
35
|
-
it 'maintains inverse translations hash mapping from the translated to the original name' do
|
36
|
-
expect(TrashTest.inverse_translations[:first_name]).to eq :firstName
|
37
|
-
end
|
38
|
-
|
39
|
-
it '#permitted_input_keys contain the :from key of properties with translations' do
|
40
|
-
expect(TrashTest.permitted_input_keys).to include :firstName
|
41
|
-
end
|
42
|
-
end
|
43
|
-
|
44
|
-
describe 'standard properties' do
|
45
|
-
class TrashTestPermitted < Hashie::Trash
|
46
|
-
property :id
|
47
|
-
end
|
48
|
-
|
49
|
-
it '#permitted_input_keys contain names of properties without translations' do
|
50
|
-
expect(TrashTestPermitted.permitted_input_keys).to include :id
|
51
|
-
end
|
52
|
-
end
|
53
|
-
|
54
|
-
describe 'writing to properties' do
|
55
|
-
it 'does not write to a non-existent property using []=' do
|
56
|
-
expect { trash['abc'] = 123 }.to raise_error(NoMethodError)
|
57
|
-
end
|
58
|
-
|
59
|
-
it 'writes to an existing property using []=' do
|
60
|
-
expect { trash[:first_name] = 'Bob' }.not_to raise_error
|
61
|
-
expect(trash.first_name).to eq('Bob')
|
62
|
-
expect { trash['first_name'] = 'John' }.to raise_error(NoMethodError)
|
63
|
-
end
|
64
|
-
|
65
|
-
it 'writes to a translated property using []=' do
|
66
|
-
expect { trash[:firstName] = 'Bob' }.not_to raise_error
|
67
|
-
expect { trash['firstName'] = 'Bob' }.to raise_error(NoMethodError)
|
68
|
-
end
|
69
|
-
|
70
|
-
it 'reads/writes to an existing property using a method call' do
|
71
|
-
trash.first_name = 'Franklin'
|
72
|
-
expect(trash.first_name).to eq 'Franklin'
|
73
|
-
end
|
74
|
-
|
75
|
-
it 'writes to an translated property using a method call' do
|
76
|
-
trash.firstName = 'Franklin'
|
77
|
-
expect(trash.first_name).to eq 'Franklin'
|
78
|
-
end
|
79
|
-
|
80
|
-
it 'writes to a translated property using #replace' do
|
81
|
-
trash.replace(firstName: 'Franklin')
|
82
|
-
expect(trash.first_name).to eq 'Franklin'
|
83
|
-
end
|
84
|
-
|
85
|
-
it 'writes to a non-translated property using #replace' do
|
86
|
-
trash.replace(first_name: 'Franklin')
|
87
|
-
expect(trash.first_name).to eq 'Franklin'
|
88
|
-
end
|
89
|
-
end
|
90
|
-
|
91
|
-
describe ' initializing with a Hash' do
|
92
|
-
it 'does not initialize non-existent properties' do
|
93
|
-
expect { TrashTest.new(bork: 'abc') }.to raise_error(NoMethodError)
|
94
|
-
end
|
95
|
-
|
96
|
-
it 'sets the desired properties' do
|
97
|
-
expect(TrashTest.new(first_name: 'Michael').first_name).to eq 'Michael'
|
98
|
-
end
|
99
|
-
|
100
|
-
context 'with both the translated property and the property' do
|
101
|
-
it 'sets the desired properties' do
|
102
|
-
expect(TrashTest.new(first_name: 'Michael', firstName: 'Maeve').first_name).to eq 'Michael'
|
103
|
-
end
|
104
|
-
end
|
105
|
-
|
106
|
-
it 'sets the translated properties' do
|
107
|
-
expect(TrashTest.new(firstName: 'Michael').first_name).to eq 'Michael'
|
108
|
-
end
|
109
|
-
end
|
110
|
-
|
111
|
-
describe 'translating properties using a proc' do
|
112
|
-
class TrashLambdaTest < Hashie::Trash
|
113
|
-
property :first_name, from: :firstName, with: ->(value) { value.reverse }
|
114
|
-
end
|
115
|
-
|
116
|
-
let(:lambda_trash) { TrashLambdaTest.new }
|
117
|
-
|
118
|
-
it 'translates the value given on initialization with the given lambda' do
|
119
|
-
expect(TrashLambdaTest.new(firstName: 'Michael').first_name).to eq 'Michael'.reverse
|
120
|
-
end
|
121
|
-
|
122
|
-
it 'does not translate the value if given with the right property' do
|
123
|
-
expect(TrashTest.new(first_name: 'Michael').first_name).to eq 'Michael'
|
124
|
-
end
|
125
|
-
|
126
|
-
it 'translates the value given as property with the given lambda' do
|
127
|
-
lambda_trash.firstName = 'Michael'
|
128
|
-
expect(lambda_trash.first_name).to eq 'Michael'.reverse
|
129
|
-
end
|
130
|
-
|
131
|
-
it 'does not translate the value given as right property' do
|
132
|
-
lambda_trash.first_name = 'Michael'
|
133
|
-
expect(lambda_trash.first_name).to eq 'Michael'
|
134
|
-
end
|
135
|
-
end
|
136
|
-
|
137
|
-
describe 'translating multiple properties using a proc' do
|
138
|
-
class SomeDataModel < Hashie::Trash
|
139
|
-
property :value_a, from: :config, with: ->(config) { config.a }
|
140
|
-
property :value_b, from: :config, with: ->(config) { config.b }
|
141
|
-
end
|
142
|
-
|
143
|
-
ConfigDataModel = Struct.new(:a, :b)
|
144
|
-
|
145
|
-
subject { SomeDataModel.new(config: ConfigDataModel.new('value in a', 'value in b')) }
|
146
|
-
|
147
|
-
it 'translates the first key' do
|
148
|
-
expect(subject.value_a).to eq 'value in a'
|
149
|
-
end
|
150
|
-
|
151
|
-
it 'translates the second key' do
|
152
|
-
expect(subject.value_b).to eq 'value in b'
|
153
|
-
end
|
154
|
-
|
155
|
-
it 'maintains translations hash mapping from the original to the translated name' do
|
156
|
-
expect(SomeDataModel.translations).to eq(config: [:value_a, :value_b])
|
157
|
-
end
|
158
|
-
end
|
159
|
-
|
160
|
-
describe 'uses with or transform_with interchangeably' do
|
161
|
-
class TrashLambdaTestTransformWith < Hashie::Trash
|
162
|
-
property :first_name, from: :firstName, transform_with: ->(value) { value.reverse }
|
163
|
-
end
|
164
|
-
|
165
|
-
let(:lambda_trash) { TrashLambdaTestTransformWith.new }
|
166
|
-
|
167
|
-
it 'translates the value given as property with the given lambda' do
|
168
|
-
lambda_trash.firstName = 'Michael'
|
169
|
-
expect(lambda_trash.first_name).to eq 'Michael'.reverse
|
170
|
-
end
|
171
|
-
|
172
|
-
it 'does not translate the value given as right property' do
|
173
|
-
lambda_trash.first_name = 'Michael'
|
174
|
-
expect(lambda_trash.first_name).to eq 'Michael'
|
175
|
-
end
|
176
|
-
end
|
177
|
-
|
178
|
-
describe 'translating properties without from option using a proc' do
|
179
|
-
class TrashLambdaTestWithProperties < Hashie::Trash
|
180
|
-
property :first_name, transform_with: ->(value) { value.reverse }
|
181
|
-
end
|
182
|
-
|
183
|
-
let(:lambda_trash) { TrashLambdaTestWithProperties.new }
|
184
|
-
|
185
|
-
it 'translates the value given as property with the given lambda' do
|
186
|
-
lambda_trash.first_name = 'Michael'
|
187
|
-
expect(lambda_trash.first_name).to eq 'Michael'.reverse
|
188
|
-
end
|
189
|
-
|
190
|
-
it 'transforms the value when given in constructor' do
|
191
|
-
expect(TrashLambdaTestWithProperties.new(first_name: 'Michael').first_name).to eq 'Michael'.reverse
|
192
|
-
end
|
193
|
-
|
194
|
-
context 'when :from option is given' do
|
195
|
-
class TrashLambdaTest3 < Hashie::Trash
|
196
|
-
property :first_name, from: :firstName, transform_with: ->(value) { value.reverse }
|
197
|
-
end
|
198
|
-
|
199
|
-
it 'does not override the :from option in the constructor' do
|
200
|
-
expect(TrashLambdaTest3.new(first_name: 'Michael').first_name).to eq 'Michael'
|
201
|
-
end
|
202
|
-
|
203
|
-
it 'does not override the :from option when given as property' do
|
204
|
-
t = TrashLambdaTest3.new
|
205
|
-
t.first_name = 'Michael'
|
206
|
-
expect(t.first_name).to eq 'Michael'
|
207
|
-
end
|
208
|
-
end
|
209
|
-
end
|
210
|
-
|
211
|
-
describe 'inheritable transforms' do
|
212
|
-
class TransformA < Hashie::Trash
|
213
|
-
property :some_value, transform_with: ->(v) { v.to_i }
|
214
|
-
end
|
215
|
-
|
216
|
-
class TransformB < TransformA
|
217
|
-
property :some_other_value, transform_with: ->(v) { v.to_i }
|
218
|
-
end
|
219
|
-
|
220
|
-
class TransformC < TransformB
|
221
|
-
property :some_value, transform_with: ->(v) { -v.to_i }
|
222
|
-
end
|
223
|
-
|
224
|
-
it 'inherit properties transforms' do
|
225
|
-
expect(TransformB.new(some_value: '123', some_other_value: '456').some_value).to eq(123)
|
226
|
-
end
|
227
|
-
|
228
|
-
it 'replaces property transform' do
|
229
|
-
expect(TransformC.new(some_value: '123', some_other_value: '456').some_value).to eq(-123)
|
230
|
-
end
|
231
|
-
end
|
232
|
-
|
233
|
-
describe 'inheritable translations' do
|
234
|
-
class TranslationA < Hashie::Trash
|
235
|
-
property :some_value, from: 'someValue', with: ->(v) { v.to_i }
|
236
|
-
end
|
237
|
-
|
238
|
-
class TranslationB < TranslationA
|
239
|
-
property :some_other_value, from: 'someOtherValue'
|
240
|
-
end
|
241
|
-
|
242
|
-
it 'inherit properties translations' do
|
243
|
-
expect(TranslationB.new('someValue' => '123').some_value).to eq(123)
|
244
|
-
end
|
245
|
-
end
|
246
|
-
|
247
|
-
it 'raises an error when :from have the same value as property' do
|
248
|
-
expect do
|
249
|
-
class WrongTrash < Hashie::Trash
|
250
|
-
property :first_name, from: :first_name
|
251
|
-
end
|
252
|
-
end.to raise_error(ArgumentError)
|
253
|
-
end
|
254
|
-
|
255
|
-
context 'when subclassing' do
|
256
|
-
class Person < Hashie::Trash
|
257
|
-
property :first_name, from: :firstName
|
258
|
-
end
|
259
|
-
|
260
|
-
class Hobbit < Person; end
|
261
|
-
|
262
|
-
subject { Hobbit.new(firstName: 'Frodo') }
|
263
|
-
|
264
|
-
it 'keeps translation definitions in subclasses' do
|
265
|
-
expect(subject.first_name).to eq('Frodo')
|
266
|
-
end
|
267
|
-
end
|
268
|
-
end
|
data/spec/hashie/utils_spec.rb
DELETED
@@ -1,25 +0,0 @@
|
|
1
|
-
require 'spec_helper'
|
2
|
-
|
3
|
-
def a_method_to_match_against
|
4
|
-
'Hello world!'
|
5
|
-
end
|
6
|
-
|
7
|
-
RSpec.describe Hashie::Utils do
|
8
|
-
describe '.method_information' do
|
9
|
-
it 'states the module or class that a native method was defined in' do
|
10
|
-
bound_method = method(:trust)
|
11
|
-
|
12
|
-
message = Hashie::Utils.method_information(bound_method)
|
13
|
-
|
14
|
-
expect(message).to match('Kernel')
|
15
|
-
end
|
16
|
-
|
17
|
-
it 'states the line a Ruby method was defined at' do
|
18
|
-
bound_method = method(:a_method_to_match_against)
|
19
|
-
|
20
|
-
message = Hashie::Utils.method_information(bound_method)
|
21
|
-
|
22
|
-
expect(message).to match('spec/hashie/utils_spec.rb')
|
23
|
-
end
|
24
|
-
end
|
25
|
-
end
|
data/spec/hashie/version_spec.rb
DELETED
data/spec/hashie_spec.rb
DELETED
@@ -1,13 +0,0 @@
|
|
1
|
-
require 'spec_helper'
|
2
|
-
|
3
|
-
RSpec.describe Hashie do
|
4
|
-
describe '.logger' do
|
5
|
-
include_context 'with a logger'
|
6
|
-
|
7
|
-
it 'is available via an accessor' do
|
8
|
-
Hashie.logger.info('Fee fi fo fum')
|
9
|
-
|
10
|
-
expect(logger_output).to match('Fee fi fo fum')
|
11
|
-
end
|
12
|
-
end
|
13
|
-
end
|
@@ -1,38 +0,0 @@
|
|
1
|
-
ENV['RACK_ENV'] = 'test'
|
2
|
-
|
3
|
-
require 'rspec/core'
|
4
|
-
require 'rack/test'
|
5
|
-
|
6
|
-
RSpec.configure do |config|
|
7
|
-
config.expect_with :rspec do |expect|
|
8
|
-
expect.syntax = :expect
|
9
|
-
end
|
10
|
-
end
|
11
|
-
|
12
|
-
RSpec.describe 'omniauth' do
|
13
|
-
include Rack::Test::Methods
|
14
|
-
|
15
|
-
def app
|
16
|
-
MyApplication
|
17
|
-
end
|
18
|
-
|
19
|
-
let(:stdout) { StringIO.new }
|
20
|
-
|
21
|
-
around(:each) do |example|
|
22
|
-
original_stdout = $stdout
|
23
|
-
$stdout = stdout
|
24
|
-
require_relative 'app'
|
25
|
-
example.run
|
26
|
-
$stdout = original_stdout
|
27
|
-
end
|
28
|
-
|
29
|
-
it 'does not log anything to STDOUT when initializing' do
|
30
|
-
expect(stdout.string).to eq('')
|
31
|
-
end
|
32
|
-
|
33
|
-
it 'works' do
|
34
|
-
get '/'
|
35
|
-
expect(last_response).to be_ok
|
36
|
-
expect(last_response.body).to eq 'Hello World'
|
37
|
-
end
|
38
|
-
end
|
@@ -1,53 +0,0 @@
|
|
1
|
-
require 'action_controller/railtie'
|
2
|
-
require 'action_view/railtie'
|
3
|
-
require 'action_view/testing/resolvers'
|
4
|
-
require 'rails/test_unit/railtie'
|
5
|
-
require_relative 'some_site'
|
6
|
-
|
7
|
-
module RailsApp
|
8
|
-
class Application < ::Rails::Application
|
9
|
-
config.eager_load = false
|
10
|
-
config.secret_key_base = 'hashieintegrationtest'
|
11
|
-
|
12
|
-
config.middleware.use OmniAuth::Builder do
|
13
|
-
provider :some_site
|
14
|
-
end
|
15
|
-
|
16
|
-
routes.append do
|
17
|
-
get '/' => 'application#index'
|
18
|
-
end
|
19
|
-
end
|
20
|
-
end
|
21
|
-
|
22
|
-
LAYOUT = <<-HTML
|
23
|
-
<!DOCTYPE html>
|
24
|
-
<html>
|
25
|
-
<head>
|
26
|
-
<title>TestApp</title>
|
27
|
-
<%= csrf_meta_tags %>
|
28
|
-
</head>
|
29
|
-
<body>
|
30
|
-
<%= yield %>
|
31
|
-
</body>
|
32
|
-
</html>
|
33
|
-
HTML
|
34
|
-
|
35
|
-
INDEX = '<h1>Hello, world!</h1>'
|
36
|
-
|
37
|
-
class ApplicationController < ActionController::Base
|
38
|
-
include Rails.application.routes.url_helpers
|
39
|
-
|
40
|
-
layout 'application'
|
41
|
-
|
42
|
-
self.view_paths = [ActionView::FixtureResolver.new(
|
43
|
-
'layouts/application.html.erb' => LAYOUT,
|
44
|
-
'application/index.html.erb' => INDEX
|
45
|
-
)]
|
46
|
-
|
47
|
-
def index
|
48
|
-
end
|
49
|
-
end
|
50
|
-
|
51
|
-
Bundler.require(:default, Rails.env)
|
52
|
-
|
53
|
-
RailsApp::Application.initialize!
|
@@ -1,26 +0,0 @@
|
|
1
|
-
ENV['RAILS_ENV'] = 'test'
|
2
|
-
|
3
|
-
require 'rspec/core'
|
4
|
-
|
5
|
-
RSpec.describe 'omniauth-oauth2 inside of rails', type: :request do
|
6
|
-
let(:stdout) { StringIO.new }
|
7
|
-
|
8
|
-
around(:each) do |example|
|
9
|
-
original_stdout = $stdout
|
10
|
-
$stdout = stdout
|
11
|
-
require_relative 'app'
|
12
|
-
require 'rspec/rails'
|
13
|
-
example.run
|
14
|
-
$stdout = original_stdout
|
15
|
-
end
|
16
|
-
|
17
|
-
it 'does not log anything to STDOUT when initializing a Rails app and is set to Rails logger' do
|
18
|
-
expect(stdout.string).to eq('')
|
19
|
-
expect(Hashie.logger).to eq(Rails.logger)
|
20
|
-
end
|
21
|
-
|
22
|
-
it 'works' do
|
23
|
-
get '/'
|
24
|
-
assert_select 'h1', 'Hello, world!'
|
25
|
-
end
|
26
|
-
end
|
@@ -1,38 +0,0 @@
|
|
1
|
-
require 'omniauth-oauth2'
|
2
|
-
|
3
|
-
module OmniAuth
|
4
|
-
module Strategies
|
5
|
-
class SomeSite < OmniAuth::Strategies::OAuth2
|
6
|
-
# Give your strategy a name.
|
7
|
-
option :name, 'some_site'
|
8
|
-
|
9
|
-
# This is where you pass the options you would pass when
|
10
|
-
# initializing your consumer from the OAuth gem.
|
11
|
-
option :client_options, site: 'https://api.somesite.com'
|
12
|
-
|
13
|
-
# These are called after authentication has succeeded. If
|
14
|
-
# possible, you should try to set the UID without making
|
15
|
-
# additional calls (if the user id is returned with the token
|
16
|
-
# or as a URI parameter). This may not be possible with all
|
17
|
-
# providers.
|
18
|
-
uid { raw_info['id'] }
|
19
|
-
|
20
|
-
info do
|
21
|
-
{
|
22
|
-
:name => raw_info['name'],
|
23
|
-
:email => raw_info['email']
|
24
|
-
}
|
25
|
-
end
|
26
|
-
|
27
|
-
extra do
|
28
|
-
{
|
29
|
-
'raw_info' => raw_info
|
30
|
-
}
|
31
|
-
end
|
32
|
-
|
33
|
-
def raw_info
|
34
|
-
@raw_info ||= access_token.get('/me').parsed
|
35
|
-
end
|
36
|
-
end
|
37
|
-
end
|
38
|
-
end
|
@@ -1,48 +0,0 @@
|
|
1
|
-
require 'action_controller/railtie'
|
2
|
-
require 'action_view/railtie'
|
3
|
-
require 'action_view/testing/resolvers'
|
4
|
-
require 'rails/test_unit/railtie'
|
5
|
-
|
6
|
-
module RailsApp
|
7
|
-
class Application < ::Rails::Application
|
8
|
-
config.eager_load = false
|
9
|
-
config.secret_key_base = 'hashieintegrationtest'
|
10
|
-
|
11
|
-
routes.append do
|
12
|
-
get '/' => 'application#index'
|
13
|
-
end
|
14
|
-
end
|
15
|
-
end
|
16
|
-
|
17
|
-
LAYOUT = <<-HTML
|
18
|
-
<!DOCTYPE html>
|
19
|
-
<html>
|
20
|
-
<head>
|
21
|
-
<title>TestApp</title>
|
22
|
-
<%= csrf_meta_tags %>
|
23
|
-
</head>
|
24
|
-
<body>
|
25
|
-
<%= yield %>
|
26
|
-
</body>
|
27
|
-
</html>
|
28
|
-
HTML
|
29
|
-
|
30
|
-
INDEX = '<h1>Hello, world!</h1>'
|
31
|
-
|
32
|
-
class ApplicationController < ActionController::Base
|
33
|
-
include Rails.application.routes.url_helpers
|
34
|
-
|
35
|
-
layout 'application'
|
36
|
-
|
37
|
-
self.view_paths = [ActionView::FixtureResolver.new(
|
38
|
-
'layouts/application.html.erb' => LAYOUT,
|
39
|
-
'application/index.html.erb' => INDEX
|
40
|
-
)]
|
41
|
-
|
42
|
-
def index
|
43
|
-
end
|
44
|
-
end
|
45
|
-
|
46
|
-
Bundler.require(:default, Rails.env)
|
47
|
-
|
48
|
-
RailsApp::Application.initialize!
|
@@ -1,26 +0,0 @@
|
|
1
|
-
ENV['RAILS_ENV'] = 'test'
|
2
|
-
|
3
|
-
require 'rspec/core'
|
4
|
-
|
5
|
-
RSpec.describe 'rails', type: :request do
|
6
|
-
let(:stdout) { StringIO.new }
|
7
|
-
|
8
|
-
around(:each) do |example|
|
9
|
-
original_stdout = $stdout
|
10
|
-
$stdout = stdout
|
11
|
-
require_relative 'app'
|
12
|
-
require 'rspec/rails'
|
13
|
-
example.run
|
14
|
-
$stdout = original_stdout
|
15
|
-
end
|
16
|
-
|
17
|
-
it 'does not log anything to STDOUT when initializing and sets the Hashie logger to the Rails logger' do
|
18
|
-
expect(stdout.string).to eq('')
|
19
|
-
expect(Hashie.logger).to eq(Rails.logger)
|
20
|
-
end
|
21
|
-
|
22
|
-
it 'works' do
|
23
|
-
get '/'
|
24
|
-
assert_select 'h1', 'Hello, world!'
|
25
|
-
end
|
26
|
-
end
|