factory_girl 3.2.0 → 3.3.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.
Files changed (80) hide show
  1. data/Appraisals +3 -3
  2. data/GETTING_STARTED.md +74 -15
  3. data/Gemfile.lock +38 -44
  4. data/NEWS +12 -0
  5. data/gemfiles/3.0.gemfile +1 -1
  6. data/gemfiles/3.0.gemfile.lock +23 -24
  7. data/gemfiles/3.1.gemfile +1 -1
  8. data/gemfiles/3.1.gemfile.lock +19 -19
  9. data/gemfiles/3.2.gemfile +1 -1
  10. data/gemfiles/3.2.gemfile.lock +10 -10
  11. data/lib/factory_girl.rb +39 -37
  12. data/lib/factory_girl/aliases.rb +3 -4
  13. data/lib/factory_girl/attribute.rb +33 -11
  14. data/lib/factory_girl/attribute/association.rb +3 -2
  15. data/lib/factory_girl/attribute/dynamic.rb +3 -2
  16. data/lib/factory_girl/attribute/sequence.rb +1 -2
  17. data/lib/factory_girl/attribute/static.rb +3 -2
  18. data/lib/factory_girl/attribute_assigner.rb +6 -5
  19. data/lib/factory_girl/attribute_list.rb +16 -3
  20. data/lib/factory_girl/callback.rb +7 -3
  21. data/lib/factory_girl/callbacks_observer.rb +1 -0
  22. data/lib/factory_girl/configuration.rb +24 -0
  23. data/lib/factory_girl/declaration.rb +5 -4
  24. data/lib/factory_girl/declaration/association.rb +1 -0
  25. data/lib/factory_girl/declaration/dynamic.rb +1 -0
  26. data/lib/factory_girl/declaration/implicit.rb +1 -0
  27. data/lib/factory_girl/declaration/static.rb +1 -0
  28. data/lib/factory_girl/declaration_list.rb +1 -0
  29. data/lib/factory_girl/definition.rb +22 -3
  30. data/lib/factory_girl/definition_list.rb +31 -0
  31. data/lib/factory_girl/definition_proxy.rb +19 -4
  32. data/lib/factory_girl/evaluation.rb +3 -3
  33. data/lib/factory_girl/evaluator.rb +24 -14
  34. data/lib/factory_girl/evaluator_class_definer.rb +2 -13
  35. data/lib/factory_girl/factory.rb +22 -24
  36. data/lib/factory_girl/factory_runner.rb +6 -3
  37. data/lib/factory_girl/find_definitions.rb +2 -2
  38. data/lib/factory_girl/null_factory.rb +3 -1
  39. data/lib/factory_girl/null_object.rb +1 -0
  40. data/lib/factory_girl/reload.rb +4 -6
  41. data/lib/factory_girl/sequence.rb +3 -2
  42. data/lib/factory_girl/step_definitions.rb +1 -0
  43. data/lib/factory_girl/strategy/attributes_for.rb +1 -1
  44. data/lib/factory_girl/strategy/stub.rb +6 -6
  45. data/lib/factory_girl/strategy_calculator.rb +1 -0
  46. data/lib/factory_girl/strategy_syntax_method_registrar.rb +37 -0
  47. data/lib/factory_girl/syntax.rb +5 -4
  48. data/lib/factory_girl/syntax/blueprint.rb +5 -8
  49. data/lib/factory_girl/syntax/default.rb +18 -6
  50. data/lib/factory_girl/syntax/generate.rb +10 -13
  51. data/lib/factory_girl/syntax/make.rb +8 -11
  52. data/lib/factory_girl/syntax/methods.rb +76 -36
  53. data/lib/factory_girl/syntax/sham.rb +3 -2
  54. data/lib/factory_girl/syntax/vintage.rb +9 -9
  55. data/lib/factory_girl/syntax_runner.rb +1 -0
  56. data/lib/factory_girl/trait.rb +5 -4
  57. data/lib/factory_girl/version.rb +1 -2
  58. data/spec/acceptance/activesupport_instrumentation_spec.rb +15 -2
  59. data/spec/acceptance/callbacks_spec.rb +113 -9
  60. data/spec/acceptance/create_list_spec.rb +1 -1
  61. data/spec/acceptance/global_initialize_with_spec.rb +82 -0
  62. data/spec/acceptance/global_to_create_spec.rb +122 -0
  63. data/spec/acceptance/modify_factories_spec.rb +2 -2
  64. data/spec/acceptance/parent_spec.rb +1 -1
  65. data/spec/acceptance/register_strategies_spec.rb +8 -0
  66. data/spec/acceptance/syntax/vintage_spec.rb +8 -8
  67. data/spec/acceptance/traits_spec.rb +145 -3
  68. data/spec/acceptance/transient_attributes_spec.rb +1 -1
  69. data/spec/factory_girl/attribute_list_spec.rb +66 -1
  70. data/spec/factory_girl/attribute_spec.rb +1 -1
  71. data/spec/factory_girl/definition_proxy_spec.rb +6 -6
  72. data/spec/factory_girl/definition_spec.rb +22 -16
  73. data/spec/factory_girl/factory_spec.rb +6 -4
  74. data/spec/factory_girl/strategy/build_spec.rb +2 -2
  75. data/spec/factory_girl/strategy/create_spec.rb +1 -1
  76. data/spec/factory_girl/strategy/stub_spec.rb +2 -2
  77. data/spec/factory_girl/strategy_calculator_spec.rb +20 -14
  78. data/spec/support/shared_examples/strategy.rb +8 -9
  79. metadata +94 -29
  80. data/gemfiles/2.3.gemfile +0 -7
@@ -1,7 +1,7 @@
1
1
  require "spec_helper"
2
2
 
3
3
  describe FactoryGirl::Strategy::Build do
4
- it_should_behave_like "strategy with association support", FactoryGirl::Strategy::Create
4
+ it_should_behave_like "strategy with association support", :create
5
5
  it_should_behave_like "strategy with callbacks", :after_build
6
- it_should_behave_like "strategy with strategy: :build", FactoryGirl::Strategy::Build
6
+ it_should_behave_like "strategy with strategy: :build", :build
7
7
  end
@@ -1,7 +1,7 @@
1
1
  require 'spec_helper'
2
2
 
3
3
  describe FactoryGirl::Strategy::Create do
4
- it_should_behave_like "strategy with association support", FactoryGirl::Strategy::Create
4
+ it_should_behave_like "strategy with association support", :create
5
5
  it_should_behave_like "strategy with callbacks", :after_build, :before_create, :after_create
6
6
 
7
7
  it "runs a custom create block" do
@@ -1,9 +1,9 @@
1
1
  require 'spec_helper'
2
2
 
3
3
  describe FactoryGirl::Strategy::Stub do
4
- it_should_behave_like "strategy with association support", FactoryGirl::Strategy::Stub
4
+ it_should_behave_like "strategy with association support", :build_stubbed
5
5
  it_should_behave_like "strategy with callbacks", :after_stub
6
- it_should_behave_like "strategy with strategy: :build", FactoryGirl::Strategy::Stub
6
+ it_should_behave_like "strategy with strategy: :build", :build_stubbed
7
7
 
8
8
  context "asking for a result" do
9
9
  before { Timecop.freeze(Time.now) }
@@ -1,23 +1,29 @@
1
1
  require "spec_helper"
2
2
 
3
- describe FactoryGirl::StrategyCalculator, "with a FactoryGirl::Strategy object" do
4
- let(:strategy) { FactoryGirl::Strategy::Build }
5
-
6
- it "returns the strategy object" do
7
- FactoryGirl::StrategyCalculator.new(strategy).strategy.should == strategy
8
- end
9
- end
10
-
11
3
  describe FactoryGirl::StrategyCalculator do
12
- it "returns the correct strategy object for :build" do
13
- FactoryGirl::StrategyCalculator.new(:build).strategy.should == FactoryGirl::Strategy::Build
4
+ let(:strategy) do
5
+ define_class("MyAwesomeClass")
14
6
  end
15
7
 
16
- it "returns the correct strategy object for :create" do
17
- FactoryGirl::StrategyCalculator.new(:create).strategy.should == FactoryGirl::Strategy::Create
8
+ context "when a class" do
9
+ subject { FactoryGirl::StrategyCalculator.new(strategy).strategy }
10
+
11
+ it "returns the class passed" do
12
+ subject.should == strategy
13
+ end
18
14
  end
19
15
 
20
- it "raises when passing a bogus strategy" do
21
- expect { FactoryGirl::StrategyCalculator.new(:bogus_strategy).strategy }.to raise_error(ArgumentError, /bogus_strategy/)
16
+ context "when a symbol" do
17
+ before { FactoryGirl.stubs(:strategy_by_name).returns(strategy) }
18
+ subject { FactoryGirl::StrategyCalculator.new(:build).strategy }
19
+
20
+ it "finds the strategy by name" do
21
+ subject
22
+ FactoryGirl.should have_received(:strategy_by_name).with(:build)
23
+ end
24
+
25
+ it "returns the strategy found" do
26
+ subject.should == strategy
27
+ end
22
28
  end
23
29
  end
@@ -3,7 +3,7 @@ shared_examples_for "strategy without association support" do
3
3
  let(:attribute) { FactoryGirl::Attribute::Association.new(:user, :user, {}) }
4
4
 
5
5
  def association_named(name, overrides)
6
- runner = FactoryGirl::FactoryRunner.new(name, FactoryGirl::Strategy::Build, [overrides])
6
+ runner = FactoryGirl::FactoryRunner.new(name, :build, [overrides])
7
7
  subject.association(runner)
8
8
  end
9
9
 
@@ -18,7 +18,7 @@ shared_examples_for "strategy without association support" do
18
18
  end
19
19
  end
20
20
 
21
- shared_examples_for "strategy with association support" do |factory_girl_strategy_class|
21
+ shared_examples_for "strategy with association support" do |factory_girl_strategy_name|
22
22
  let(:factory) { stub("associate_factory") }
23
23
 
24
24
  def association_named(name, strategy, overrides)
@@ -33,22 +33,21 @@ shared_examples_for "strategy with association support" do |factory_girl_strateg
33
33
  end
34
34
 
35
35
  it "runs the factory with the correct overrides" do
36
- association_named(:author, factory_girl_strategy_class, great: "value")
37
- factory.should have_received(:run).with(factory_girl_strategy_class, great: "value")
36
+ association_named(:author, factory_girl_strategy_name, great: "value")
37
+ factory.should have_received(:run).with(factory_girl_strategy_name, great: "value")
38
38
  end
39
39
 
40
40
  it "finds the factory with the correct factory name" do
41
- association_named(:author, factory_girl_strategy_class, great: "value")
41
+ association_named(:author, factory_girl_strategy_name, great: "value")
42
42
  FactoryGirl.should have_received(:factory_by_name).with(:author)
43
43
  end
44
44
  end
45
45
 
46
- shared_examples_for "strategy with strategy: :build" do |factory_girl_strategy_class|
46
+ shared_examples_for "strategy with strategy: :build" do |factory_girl_strategy_name|
47
47
  let(:factory) { stub("associate_factory") }
48
48
 
49
49
  def association_named(name, overrides)
50
- strategy = FactoryGirl::StrategyCalculator.new(overrides[:strategy]).strategy
51
- runner = FactoryGirl::FactoryRunner.new(name, strategy, [overrides.except(:strategy)])
50
+ runner = FactoryGirl::FactoryRunner.new(name, overrides[:strategy], [overrides.except(:strategy)])
52
51
  subject.association(runner)
53
52
  end
54
53
 
@@ -60,7 +59,7 @@ shared_examples_for "strategy with strategy: :build" do |factory_girl_strategy_c
60
59
 
61
60
  it "runs the factory with the correct overrides" do
62
61
  association_named(:author, strategy: :build, great: "value")
63
- factory.should have_received(:run).with(factory_girl_strategy_class, { great: "value" })
62
+ factory.should have_received(:run).with(factory_girl_strategy_name, { great: "value" })
64
63
  end
65
64
 
66
65
  it "finds the factory with the correct factory name" do
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: factory_girl
3
3
  version: !ruby/object:Gem::Version
4
- version: 3.2.0
4
+ version: 3.3.0
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -10,11 +10,11 @@ authors:
10
10
  autorequire:
11
11
  bindir: bin
12
12
  cert_chain: []
13
- date: 2012-04-24 00:00:00.000000000Z
13
+ date: 2012-05-13 00:00:00.000000000 Z
14
14
  dependencies:
15
15
  - !ruby/object:Gem::Dependency
16
16
  name: activesupport
17
- requirement: &70135979934020 !ruby/object:Gem::Requirement
17
+ requirement: !ruby/object:Gem::Requirement
18
18
  none: false
19
19
  requirements:
20
20
  - - ! '>='
@@ -22,10 +22,15 @@ dependencies:
22
22
  version: 3.0.0
23
23
  type: :runtime
24
24
  prerelease: false
25
- version_requirements: *70135979934020
25
+ version_requirements: !ruby/object:Gem::Requirement
26
+ none: false
27
+ requirements:
28
+ - - ! '>='
29
+ - !ruby/object:Gem::Version
30
+ version: 3.0.0
26
31
  - !ruby/object:Gem::Dependency
27
32
  name: rspec
28
- requirement: &70135979933560 !ruby/object:Gem::Requirement
33
+ requirement: !ruby/object:Gem::Requirement
29
34
  none: false
30
35
  requirements:
31
36
  - - ~>
@@ -33,10 +38,15 @@ dependencies:
33
38
  version: '2.0'
34
39
  type: :development
35
40
  prerelease: false
36
- version_requirements: *70135979933560
41
+ version_requirements: !ruby/object:Gem::Requirement
42
+ none: false
43
+ requirements:
44
+ - - ~>
45
+ - !ruby/object:Gem::Version
46
+ version: '2.0'
37
47
  - !ruby/object:Gem::Dependency
38
48
  name: cucumber
39
- requirement: &70135979933100 !ruby/object:Gem::Requirement
49
+ requirement: !ruby/object:Gem::Requirement
40
50
  none: false
41
51
  requirements:
42
52
  - - ~>
@@ -44,10 +54,15 @@ dependencies:
44
54
  version: '1.1'
45
55
  type: :development
46
56
  prerelease: false
47
- version_requirements: *70135979933100
57
+ version_requirements: !ruby/object:Gem::Requirement
58
+ none: false
59
+ requirements:
60
+ - - ~>
61
+ - !ruby/object:Gem::Version
62
+ version: '1.1'
48
63
  - !ruby/object:Gem::Dependency
49
64
  name: timecop
50
- requirement: &70135979932720 !ruby/object:Gem::Requirement
65
+ requirement: !ruby/object:Gem::Requirement
51
66
  none: false
52
67
  requirements:
53
68
  - - ! '>='
@@ -55,10 +70,15 @@ dependencies:
55
70
  version: '0'
56
71
  type: :development
57
72
  prerelease: false
58
- version_requirements: *70135979932720
73
+ version_requirements: !ruby/object:Gem::Requirement
74
+ none: false
75
+ requirements:
76
+ - - ! '>='
77
+ - !ruby/object:Gem::Version
78
+ version: '0'
59
79
  - !ruby/object:Gem::Dependency
60
80
  name: simplecov
61
- requirement: &70135979932260 !ruby/object:Gem::Requirement
81
+ requirement: !ruby/object:Gem::Requirement
62
82
  none: false
63
83
  requirements:
64
84
  - - ! '>='
@@ -66,10 +86,15 @@ dependencies:
66
86
  version: '0'
67
87
  type: :development
68
88
  prerelease: false
69
- version_requirements: *70135979932260
89
+ version_requirements: !ruby/object:Gem::Requirement
90
+ none: false
91
+ requirements:
92
+ - - ! '>='
93
+ - !ruby/object:Gem::Version
94
+ version: '0'
70
95
  - !ruby/object:Gem::Dependency
71
96
  name: aruba
72
- requirement: &70135979931840 !ruby/object:Gem::Requirement
97
+ requirement: !ruby/object:Gem::Requirement
73
98
  none: false
74
99
  requirements:
75
100
  - - ! '>='
@@ -77,10 +102,15 @@ dependencies:
77
102
  version: '0'
78
103
  type: :development
79
104
  prerelease: false
80
- version_requirements: *70135979931840
105
+ version_requirements: !ruby/object:Gem::Requirement
106
+ none: false
107
+ requirements:
108
+ - - ! '>='
109
+ - !ruby/object:Gem::Version
110
+ version: '0'
81
111
  - !ruby/object:Gem::Dependency
82
112
  name: mocha
83
- requirement: &70135979931420 !ruby/object:Gem::Requirement
113
+ requirement: !ruby/object:Gem::Requirement
84
114
  none: false
85
115
  requirements:
86
116
  - - ! '>='
@@ -88,10 +118,15 @@ dependencies:
88
118
  version: '0'
89
119
  type: :development
90
120
  prerelease: false
91
- version_requirements: *70135979931420
121
+ version_requirements: !ruby/object:Gem::Requirement
122
+ none: false
123
+ requirements:
124
+ - - ! '>='
125
+ - !ruby/object:Gem::Version
126
+ version: '0'
92
127
  - !ruby/object:Gem::Dependency
93
128
  name: bourne
94
- requirement: &70135979931000 !ruby/object:Gem::Requirement
129
+ requirement: !ruby/object:Gem::Requirement
95
130
  none: false
96
131
  requirements:
97
132
  - - ! '>='
@@ -99,10 +134,15 @@ dependencies:
99
134
  version: '0'
100
135
  type: :development
101
136
  prerelease: false
102
- version_requirements: *70135979931000
137
+ version_requirements: !ruby/object:Gem::Requirement
138
+ none: false
139
+ requirements:
140
+ - - ! '>='
141
+ - !ruby/object:Gem::Version
142
+ version: '0'
103
143
  - !ruby/object:Gem::Dependency
104
144
  name: appraisal
105
- requirement: &70135968969860 !ruby/object:Gem::Requirement
145
+ requirement: !ruby/object:Gem::Requirement
106
146
  none: false
107
147
  requirements:
108
148
  - - ~>
@@ -110,10 +150,15 @@ dependencies:
110
150
  version: '0.4'
111
151
  type: :development
112
152
  prerelease: false
113
- version_requirements: *70135968969860
153
+ version_requirements: !ruby/object:Gem::Requirement
154
+ none: false
155
+ requirements:
156
+ - - ~>
157
+ - !ruby/object:Gem::Version
158
+ version: '0.4'
114
159
  - !ruby/object:Gem::Dependency
115
160
  name: sqlite3-ruby
116
- requirement: &70135968969440 !ruby/object:Gem::Requirement
161
+ requirement: !ruby/object:Gem::Requirement
117
162
  none: false
118
163
  requirements:
119
164
  - - ! '>='
@@ -121,10 +166,15 @@ dependencies:
121
166
  version: '0'
122
167
  type: :development
123
168
  prerelease: false
124
- version_requirements: *70135968969440
169
+ version_requirements: !ruby/object:Gem::Requirement
170
+ none: false
171
+ requirements:
172
+ - - ! '>='
173
+ - !ruby/object:Gem::Version
174
+ version: '0'
125
175
  - !ruby/object:Gem::Dependency
126
176
  name: yard
127
- requirement: &70135968968980 !ruby/object:Gem::Requirement
177
+ requirement: !ruby/object:Gem::Requirement
128
178
  none: false
129
179
  requirements:
130
180
  - - ! '>='
@@ -132,10 +182,15 @@ dependencies:
132
182
  version: '0'
133
183
  type: :development
134
184
  prerelease: false
135
- version_requirements: *70135968968980
185
+ version_requirements: !ruby/object:Gem::Requirement
186
+ none: false
187
+ requirements:
188
+ - - ! '>='
189
+ - !ruby/object:Gem::Version
190
+ version: '0'
136
191
  - !ruby/object:Gem::Dependency
137
192
  name: bluecloth
138
- requirement: &70135968968560 !ruby/object:Gem::Requirement
193
+ requirement: !ruby/object:Gem::Requirement
139
194
  none: false
140
195
  requirements:
141
196
  - - ! '>='
@@ -143,7 +198,12 @@ dependencies:
143
198
  version: '0'
144
199
  type: :development
145
200
  prerelease: false
146
- version_requirements: *70135968968560
201
+ version_requirements: !ruby/object:Gem::Requirement
202
+ none: false
203
+ requirements:
204
+ - - ! '>='
205
+ - !ruby/object:Gem::Version
206
+ version: '0'
147
207
  description: ! "factory_girl provides a framework and DSL for defining and\n using
148
208
  factories - less error-prone, more explicit, and\n all-around
149
209
  easier to work with than fixtures."
@@ -177,7 +237,6 @@ files:
177
237
  - features/step_definitions/factory_girl_steps.rb
178
238
  - features/support/env.rb
179
239
  - features/support/factories.rb
180
- - gemfiles/2.3.gemfile
181
240
  - gemfiles/3.0.gemfile
182
241
  - gemfiles/3.0.gemfile.lock
183
242
  - gemfiles/3.1.gemfile
@@ -195,6 +254,7 @@ files:
195
254
  - lib/factory_girl/attribute_list.rb
196
255
  - lib/factory_girl/callback.rb
197
256
  - lib/factory_girl/callbacks_observer.rb
257
+ - lib/factory_girl/configuration.rb
198
258
  - lib/factory_girl/declaration.rb
199
259
  - lib/factory_girl/declaration/association.rb
200
260
  - lib/factory_girl/declaration/dynamic.rb
@@ -202,6 +262,7 @@ files:
202
262
  - lib/factory_girl/declaration/static.rb
203
263
  - lib/factory_girl/declaration_list.rb
204
264
  - lib/factory_girl/definition.rb
265
+ - lib/factory_girl/definition_list.rb
205
266
  - lib/factory_girl/definition_proxy.rb
206
267
  - lib/factory_girl/disallows_duplicates_registry.rb
207
268
  - lib/factory_girl/errors.rb
@@ -223,6 +284,7 @@ files:
223
284
  - lib/factory_girl/strategy/null.rb
224
285
  - lib/factory_girl/strategy/stub.rb
225
286
  - lib/factory_girl/strategy_calculator.rb
287
+ - lib/factory_girl/strategy_syntax_method_registrar.rb
226
288
  - lib/factory_girl/syntax.rb
227
289
  - lib/factory_girl/syntax/blueprint.rb
228
290
  - lib/factory_girl/syntax/default.rb
@@ -250,6 +312,8 @@ files:
250
312
  - spec/acceptance/define_child_before_parent_spec.rb
251
313
  - spec/acceptance/definition_spec.rb
252
314
  - spec/acceptance/definition_without_block_spec.rb
315
+ - spec/acceptance/global_initialize_with_spec.rb
316
+ - spec/acceptance/global_to_create_spec.rb
253
317
  - spec/acceptance/initialize_with_spec.rb
254
318
  - spec/acceptance/modify_factories_spec.rb
255
319
  - spec/acceptance/modify_inherited_spec.rb
@@ -321,7 +385,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
321
385
  version: '0'
322
386
  requirements: []
323
387
  rubyforge_project:
324
- rubygems_version: 1.8.10
388
+ rubygems_version: 1.8.23
325
389
  signing_key:
326
390
  specification_version: 3
327
391
  summary: factory_girl provides a framework and DSL for defining and using model instance
@@ -334,7 +398,6 @@ test_files:
334
398
  - features/step_definitions/factory_girl_steps.rb
335
399
  - features/support/env.rb
336
400
  - features/support/factories.rb
337
- - gemfiles/2.3.gemfile
338
401
  - gemfiles/3.0.gemfile
339
402
  - gemfiles/3.0.gemfile.lock
340
403
  - gemfiles/3.1.gemfile
@@ -357,6 +420,8 @@ test_files:
357
420
  - spec/acceptance/define_child_before_parent_spec.rb
358
421
  - spec/acceptance/definition_spec.rb
359
422
  - spec/acceptance/definition_without_block_spec.rb
423
+ - spec/acceptance/global_initialize_with_spec.rb
424
+ - spec/acceptance/global_to_create_spec.rb
360
425
  - spec/acceptance/initialize_with_spec.rb
361
426
  - spec/acceptance/modify_factories_spec.rb
362
427
  - spec/acceptance/modify_inherited_spec.rb
data/gemfiles/2.3.gemfile DELETED
@@ -1,7 +0,0 @@
1
- # This file was generated by Appraisal
2
-
3
- source "http://rubygems.org"
4
-
5
- gem "activerecord", "~> 2.3"
6
-
7
- gemspec :path=>"../"