draper 0.18.0 → 1.1.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.
- data/.gitignore +3 -0
- data/.travis.yml +11 -0
- data/.yardopts +1 -1
- data/CHANGELOG.md +164 -0
- data/CONTRIBUTING.md +15 -0
- data/Gemfile +34 -0
- data/LICENSE +7 -0
- data/README.md +416 -0
- data/Rakefile +53 -31
- data/draper.gemspec +11 -9
- data/lib/draper/automatic_delegation.rb +50 -0
- data/lib/draper/collection_decorator.rb +107 -0
- data/lib/draper/decoratable/equality.rb +14 -0
- data/lib/draper/decoratable.rb +79 -0
- data/lib/draper/decorated_association.rb +74 -0
- data/lib/draper/decorator.rb +235 -0
- data/lib/draper/delegation.rb +13 -0
- data/lib/draper/finders.rb +37 -0
- data/lib/draper/helper_proxy.rb +36 -0
- data/lib/draper/lazy_helpers.rb +10 -6
- data/lib/draper/railtie.rb +27 -21
- data/lib/draper/tasks/test.rake +22 -0
- data/lib/draper/test/devise_helper.rb +30 -0
- data/lib/draper/test/minitest_integration.rb +2 -3
- data/lib/draper/test/rspec_integration.rb +7 -13
- data/lib/draper/test_case.rb +53 -0
- data/lib/draper/version.rb +1 -1
- data/lib/draper/view_context/build_strategy.rb +48 -0
- data/lib/draper/view_context.rb +81 -24
- data/lib/draper/view_helpers.rb +37 -0
- data/lib/draper.rb +50 -8
- data/lib/generators/decorator/decorator_generator.rb +10 -2
- data/lib/generators/decorator/templates/decorator.rb +12 -27
- data/lib/generators/mini_test/decorator_generator.rb +20 -0
- data/lib/generators/mini_test/templates/decorator_spec.rb +4 -0
- data/lib/generators/mini_test/templates/decorator_test.rb +4 -0
- data/lib/generators/test_unit/templates/decorator_test.rb +1 -1
- data/spec/draper/collection_decorator_spec.rb +259 -0
- data/spec/draper/decoratable/equality_spec.rb +10 -0
- data/spec/draper/decoratable_spec.rb +167 -0
- data/spec/draper/decorated_association_spec.rb +145 -0
- data/spec/draper/decorator_spec.rb +598 -0
- data/spec/draper/finders_spec.rb +166 -0
- data/spec/draper/helper_proxy_spec.rb +42 -0
- data/spec/draper/view_context/build_strategy_spec.rb +116 -0
- data/spec/draper/view_context_spec.rb +154 -0
- data/spec/draper/view_helpers_spec.rb +8 -0
- data/spec/dummy/.rspec +2 -0
- data/spec/dummy/Rakefile +7 -0
- data/spec/dummy/app/controllers/application_controller.rb +4 -0
- data/spec/dummy/app/controllers/localized_urls.rb +5 -0
- data/spec/dummy/app/controllers/posts_controller.rb +18 -0
- data/spec/dummy/app/decorators/post_decorator.rb +56 -0
- data/spec/dummy/app/helpers/application_helper.rb +5 -0
- data/spec/dummy/app/mailers/application_mailer.rb +3 -0
- data/spec/dummy/app/mailers/post_mailer.rb +19 -0
- data/spec/dummy/app/models/admin.rb +5 -0
- data/spec/dummy/app/models/mongoid_post.rb +5 -0
- data/spec/dummy/app/models/post.rb +3 -0
- data/spec/dummy/app/models/user.rb +5 -0
- data/spec/dummy/app/views/layouts/application.html.erb +11 -0
- data/spec/dummy/app/views/post_mailer/decorated_email.html.erb +1 -0
- data/spec/dummy/app/views/posts/_post.html.erb +34 -0
- data/spec/dummy/app/views/posts/show.html.erb +1 -0
- data/spec/dummy/bin/rails +4 -0
- data/spec/dummy/config/application.rb +70 -0
- data/spec/dummy/config/boot.rb +5 -0
- data/spec/dummy/config/database.yml +25 -0
- data/spec/dummy/config/environment.rb +5 -0
- data/spec/dummy/config/environments/development.rb +33 -0
- data/spec/dummy/config/environments/production.rb +57 -0
- data/spec/dummy/config/environments/test.rb +31 -0
- data/spec/dummy/config/initializers/backtrace_silencers.rb +7 -0
- data/spec/dummy/config/initializers/inflections.rb +15 -0
- data/spec/dummy/config/initializers/mime_types.rb +5 -0
- data/spec/dummy/config/initializers/secret_token.rb +8 -0
- data/spec/dummy/config/initializers/session_store.rb +8 -0
- data/spec/dummy/config/locales/en.yml +5 -0
- data/spec/dummy/config/mongoid.yml +80 -0
- data/spec/dummy/config/routes.rb +9 -0
- data/spec/dummy/config.ru +4 -0
- data/spec/dummy/db/migrate/20121019115657_create_posts.rb +8 -0
- data/spec/dummy/db/schema.rb +21 -0
- data/spec/dummy/db/seeds.rb +2 -0
- data/spec/dummy/fast_spec/post_decorator_spec.rb +38 -0
- data/spec/dummy/lib/tasks/test.rake +16 -0
- data/spec/dummy/log/.gitkeep +0 -0
- data/spec/dummy/public/404.html +26 -0
- data/spec/dummy/public/422.html +26 -0
- data/spec/dummy/public/500.html +25 -0
- data/spec/dummy/public/favicon.ico +0 -0
- data/spec/dummy/script/rails +6 -0
- data/spec/dummy/spec/decorators/devise_spec.rb +64 -0
- data/spec/dummy/spec/decorators/helpers_spec.rb +21 -0
- data/spec/dummy/spec/decorators/post_decorator_spec.rb +46 -0
- data/spec/dummy/spec/decorators/spec_type_spec.rb +7 -0
- data/spec/dummy/spec/decorators/view_context_spec.rb +22 -0
- data/spec/dummy/spec/mailers/post_mailer_spec.rb +33 -0
- data/spec/dummy/spec/models/mongoid_post_spec.rb +10 -0
- data/spec/dummy/spec/models/post_spec.rb +14 -0
- data/spec/dummy/spec/spec_helper.rb +9 -0
- data/spec/dummy/test/decorators/minitest/devise_test.rb +64 -0
- data/spec/dummy/test/decorators/minitest/helpers_test.rb +21 -0
- data/spec/dummy/test/decorators/minitest/spec_type_test.rb +52 -0
- data/spec/dummy/test/decorators/minitest/view_context_test.rb +24 -0
- data/spec/dummy/test/decorators/test_unit/devise_test.rb +64 -0
- data/spec/dummy/test/decorators/test_unit/helpers_test.rb +21 -0
- data/spec/dummy/test/decorators/test_unit/view_context_test.rb +24 -0
- data/spec/dummy/test/minitest_helper.rb +4 -0
- data/spec/dummy/test/test_helper.rb +3 -0
- data/spec/generators/decorator/decorator_generator_spec.rb +48 -7
- data/spec/integration/integration_spec.rb +58 -0
- data/{performance → spec/performance}/decorators.rb +2 -4
- data/spec/spec_helper.rb +25 -43
- data/spec/support/dummy_app.rb +85 -0
- data/spec/support/matchers/have_text.rb +50 -0
- data/spec/support/shared_examples/decoratable_equality.rb +40 -0
- data/spec/support/shared_examples/view_helpers.rb +39 -0
- metadata +253 -87
- data/CHANGELOG.markdown +0 -57
- data/Readme.markdown +0 -387
- data/lib/draper/active_model_support.rb +0 -27
- data/lib/draper/base.rb +0 -312
- data/lib/draper/decorated_enumerable_proxy.rb +0 -90
- data/lib/draper/model_support.rb +0 -25
- data/lib/draper/rspec_integration.rb +0 -2
- data/lib/draper/system.rb +0 -18
- data/spec/draper/base_spec.rb +0 -873
- data/spec/draper/decorated_enumerable_proxy_spec.rb +0 -45
- data/spec/draper/model_support_spec.rb +0 -48
- data/spec/minitest-rails/spec_type_spec.rb +0 -63
- data/spec/support/samples/active_record.rb +0 -17
- data/spec/support/samples/decorator.rb +0 -5
- data/spec/support/samples/decorator_with_allows.rb +0 -3
- data/spec/support/samples/decorator_with_application_helper.rb +0 -25
- data/spec/support/samples/decorator_with_denies.rb +0 -3
- data/spec/support/samples/decorator_with_denies_all.rb +0 -3
- data/spec/support/samples/decorator_with_multiple_allows.rb +0 -4
- data/spec/support/samples/decorator_with_special_methods.rb +0 -13
- data/spec/support/samples/enumerable_proxy.rb +0 -3
- data/spec/support/samples/namespaced_product.rb +0 -51
- data/spec/support/samples/namespaced_product_decorator.rb +0 -7
- data/spec/support/samples/non_active_model_product.rb +0 -2
- data/spec/support/samples/product.rb +0 -80
- data/spec/support/samples/product_decorator.rb +0 -7
- data/spec/support/samples/products_decorator.rb +0 -10
- data/spec/support/samples/sequel_product.rb +0 -13
- data/spec/support/samples/some_thing.rb +0 -2
- data/spec/support/samples/some_thing_decorator.rb +0 -3
- data/spec/support/samples/specific_product_decorator.rb +0 -4
- data/spec/support/samples/widget.rb +0 -2
- data/spec/support/samples/widget_decorator.rb +0 -2
- /data/{performance → spec/performance}/active_record.rb +0 -0
- /data/{performance/bechmark.rb → spec/performance/benchmark.rb} +0 -0
- /data/{performance → spec/performance}/models.rb +0 -0
|
@@ -1,45 +0,0 @@
|
|
|
1
|
-
require 'spec_helper'
|
|
2
|
-
|
|
3
|
-
describe Draper::DecoratedEnumerableProxy do
|
|
4
|
-
before(:each){ ApplicationController.new.view_context }
|
|
5
|
-
subject{ ProductsDecorator.new(source, ProductDecorator) }
|
|
6
|
-
let(:source){ Product.new }
|
|
7
|
-
let(:non_active_model_source){ NonActiveModelProduct.new }
|
|
8
|
-
|
|
9
|
-
context(".helpers") do
|
|
10
|
-
it "have a valid view_context" do
|
|
11
|
-
subject.helpers.should be
|
|
12
|
-
end
|
|
13
|
-
|
|
14
|
-
it "is aliased to .h" do
|
|
15
|
-
subject.h.should == subject.helpers
|
|
16
|
-
end
|
|
17
|
-
|
|
18
|
-
it "build a new view context" do
|
|
19
|
-
Thread.current[:current_view_context] = nil
|
|
20
|
-
subject.helpers.should be
|
|
21
|
-
end
|
|
22
|
-
end
|
|
23
|
-
|
|
24
|
-
context(".decorates") do
|
|
25
|
-
it "sets the model for the decorated" do
|
|
26
|
-
EnumerableProxy.new([source], ProductDecorator).first.model.should == source
|
|
27
|
-
end
|
|
28
|
-
|
|
29
|
-
it "decorates an empty array with the class" do
|
|
30
|
-
EnumerableProxy.decorates([], class: ProductDecorator).should be
|
|
31
|
-
end
|
|
32
|
-
|
|
33
|
-
it "discerns collection items decorator by the name of the decorator" do
|
|
34
|
-
ProductsDecorator.decorates([]).should be
|
|
35
|
-
end
|
|
36
|
-
|
|
37
|
-
it "methods in decorated empty array should work" do
|
|
38
|
-
ProductsDecorator.decorates([]).some_method.should == "some method works"
|
|
39
|
-
end
|
|
40
|
-
|
|
41
|
-
it "raises when decorates an empty array without the klass" do
|
|
42
|
-
lambda{EnumerableProxy.decorates([])}.should raise_error
|
|
43
|
-
end
|
|
44
|
-
end
|
|
45
|
-
end
|
|
@@ -1,48 +0,0 @@
|
|
|
1
|
-
require 'spec_helper'
|
|
2
|
-
|
|
3
|
-
describe Draper::ModelSupport do
|
|
4
|
-
subject { Product.new }
|
|
5
|
-
|
|
6
|
-
describe '#decorator' do
|
|
7
|
-
its(:decorator) { should be_kind_of(ProductDecorator) }
|
|
8
|
-
its(:decorator) { should be(subject.decorator) }
|
|
9
|
-
|
|
10
|
-
it 'have abillity to pass block' do
|
|
11
|
-
a = Product.new.decorator { |d| d.awesome_title }
|
|
12
|
-
a.should eql "Awesome Title"
|
|
13
|
-
end
|
|
14
|
-
|
|
15
|
-
it 'is aliased to .decorate' do
|
|
16
|
-
subject.decorator.model.should == subject.decorate.model
|
|
17
|
-
end
|
|
18
|
-
end
|
|
19
|
-
|
|
20
|
-
describe Draper::ModelSupport::ClassMethods do
|
|
21
|
-
shared_examples_for "a call to Draper::ModelSupport::ClassMethods#decorate" do
|
|
22
|
-
subject { klass.limit }
|
|
23
|
-
|
|
24
|
-
its(:decorate) { should be_kind_of(Draper::DecoratedEnumerableProxy) }
|
|
25
|
-
|
|
26
|
-
it "decorate the collection" do
|
|
27
|
-
subject.decorate.size.should == 1
|
|
28
|
-
subject.decorate.to_ary[0].model.should be_a(klass)
|
|
29
|
-
end
|
|
30
|
-
|
|
31
|
-
it "return a new instance each time it is called" do
|
|
32
|
-
subject.decorate.should_not == subject.decorate
|
|
33
|
-
end
|
|
34
|
-
end
|
|
35
|
-
|
|
36
|
-
describe '#decorate - decorate collections of AR objects' do
|
|
37
|
-
let(:klass) { Product }
|
|
38
|
-
|
|
39
|
-
it_should_behave_like "a call to Draper::ModelSupport::ClassMethods#decorate"
|
|
40
|
-
end
|
|
41
|
-
|
|
42
|
-
describe '#decorate - decorate collections of namespaced AR objects' do
|
|
43
|
-
let(:klass) { Namespace::Product }
|
|
44
|
-
|
|
45
|
-
it_should_behave_like "a call to Draper::ModelSupport::ClassMethods#decorate"
|
|
46
|
-
end
|
|
47
|
-
end
|
|
48
|
-
end
|
|
@@ -1,63 +0,0 @@
|
|
|
1
|
-
require 'spec_helper'
|
|
2
|
-
require 'minitest/rails/active_support'
|
|
3
|
-
require 'draper/test/minitest_integration'
|
|
4
|
-
|
|
5
|
-
describe "minitest-rails spec_type Lookup Integration" do
|
|
6
|
-
context "ProductDecorator" do
|
|
7
|
-
it "resolves constants" do
|
|
8
|
-
klass = MiniTest::Spec.spec_type(ProductDecorator)
|
|
9
|
-
klass.should == MiniTest::Rails::ActiveSupport::TestCase
|
|
10
|
-
end
|
|
11
|
-
|
|
12
|
-
it "resolves strings" do
|
|
13
|
-
klass = MiniTest::Spec.spec_type("ProductDecorator")
|
|
14
|
-
klass.should == MiniTest::Rails::ActiveSupport::TestCase
|
|
15
|
-
end
|
|
16
|
-
end
|
|
17
|
-
|
|
18
|
-
context "WidgetDecorator" do
|
|
19
|
-
it "resolves constants" do
|
|
20
|
-
klass = MiniTest::Spec.spec_type(WidgetDecorator)
|
|
21
|
-
klass.should == MiniTest::Rails::ActiveSupport::TestCase
|
|
22
|
-
end
|
|
23
|
-
|
|
24
|
-
it "resolves strings" do
|
|
25
|
-
klass = MiniTest::Spec.spec_type("WidgetDecorator")
|
|
26
|
-
klass.should == MiniTest::Rails::ActiveSupport::TestCase
|
|
27
|
-
end
|
|
28
|
-
end
|
|
29
|
-
|
|
30
|
-
context "decorator strings" do
|
|
31
|
-
it "resolves DoesNotExistDecorator" do
|
|
32
|
-
klass = MiniTest::Spec.spec_type("DoesNotExistDecorator")
|
|
33
|
-
klass.should == MiniTest::Rails::ActiveSupport::TestCase
|
|
34
|
-
end
|
|
35
|
-
|
|
36
|
-
it "resolves DoesNotExistDecoratorTest" do
|
|
37
|
-
klass = MiniTest::Spec.spec_type("DoesNotExistDecoratorTest")
|
|
38
|
-
klass.should == MiniTest::Rails::ActiveSupport::TestCase
|
|
39
|
-
end
|
|
40
|
-
|
|
41
|
-
it "resolves Does Not Exist Decorator" do
|
|
42
|
-
klass = MiniTest::Spec.spec_type("Does Not Exist Decorator")
|
|
43
|
-
klass.should == MiniTest::Rails::ActiveSupport::TestCase
|
|
44
|
-
end
|
|
45
|
-
|
|
46
|
-
it "resolves Does Not Exist Decorator Test" do
|
|
47
|
-
klass = MiniTest::Spec.spec_type("Does Not Exist Decorator Test")
|
|
48
|
-
klass.should == MiniTest::Rails::ActiveSupport::TestCase
|
|
49
|
-
end
|
|
50
|
-
end
|
|
51
|
-
|
|
52
|
-
context "non-decorators" do
|
|
53
|
-
it "doesn't resolve constants" do
|
|
54
|
-
klass = MiniTest::Spec.spec_type(Draper::HelperSupport)
|
|
55
|
-
klass.should == MiniTest::Spec
|
|
56
|
-
end
|
|
57
|
-
|
|
58
|
-
it "doesn't resolve strings" do
|
|
59
|
-
klass = MiniTest::Spec.spec_type("Nothing to see here...")
|
|
60
|
-
klass.should == MiniTest::Spec
|
|
61
|
-
end
|
|
62
|
-
end
|
|
63
|
-
end
|
|
@@ -1,17 +0,0 @@
|
|
|
1
|
-
module ActiveRecord
|
|
2
|
-
class Base
|
|
3
|
-
include ActiveModel::Validations
|
|
4
|
-
include ActiveModel::Conversion
|
|
5
|
-
|
|
6
|
-
attr_reader :errors, :to_model
|
|
7
|
-
|
|
8
|
-
def initialize
|
|
9
|
-
@errors = ActiveModel::Errors.new(self)
|
|
10
|
-
end
|
|
11
|
-
|
|
12
|
-
def self.limit
|
|
13
|
-
self
|
|
14
|
-
end
|
|
15
|
-
|
|
16
|
-
end
|
|
17
|
-
end
|
|
@@ -1,25 +0,0 @@
|
|
|
1
|
-
class DecoratorWithApplicationHelper < Draper::Base
|
|
2
|
-
def uses_hello_world
|
|
3
|
-
h.hello_world
|
|
4
|
-
end
|
|
5
|
-
|
|
6
|
-
def sample_content
|
|
7
|
-
h.content_tag :span, "Hello, World!"
|
|
8
|
-
end
|
|
9
|
-
|
|
10
|
-
def sample_link
|
|
11
|
-
h.link_to "Hello", "/World"
|
|
12
|
-
end
|
|
13
|
-
|
|
14
|
-
def sample_truncate
|
|
15
|
-
h.truncate("Once upon a time", :length => 7)
|
|
16
|
-
end
|
|
17
|
-
|
|
18
|
-
def length
|
|
19
|
-
"overridden"
|
|
20
|
-
end
|
|
21
|
-
|
|
22
|
-
def sample_html_escaped_text
|
|
23
|
-
h.html_escape '<script>danger</script>'
|
|
24
|
-
end
|
|
25
|
-
end
|
|
@@ -1,51 +0,0 @@
|
|
|
1
|
-
require './spec/support/samples/product'
|
|
2
|
-
|
|
3
|
-
module Namespace
|
|
4
|
-
class Product < ActiveRecord::Base
|
|
5
|
-
include Draper::ModelSupport
|
|
6
|
-
|
|
7
|
-
def self.first
|
|
8
|
-
@@first ||= Namespace::Product.new
|
|
9
|
-
end
|
|
10
|
-
|
|
11
|
-
def self.last
|
|
12
|
-
@@last ||= Namespace::Product.new
|
|
13
|
-
end
|
|
14
|
-
|
|
15
|
-
def self.all
|
|
16
|
-
[Namespace::Product.new, Namespace::Product.new]
|
|
17
|
-
end
|
|
18
|
-
|
|
19
|
-
def self.scoped
|
|
20
|
-
[Namespace::Product.new]
|
|
21
|
-
end
|
|
22
|
-
|
|
23
|
-
def self.model_name
|
|
24
|
-
"Namespace::Product"
|
|
25
|
-
end
|
|
26
|
-
|
|
27
|
-
def self.find(id)
|
|
28
|
-
return Namespace::Product.new
|
|
29
|
-
end
|
|
30
|
-
|
|
31
|
-
def self.sample_class_method
|
|
32
|
-
"sample class method"
|
|
33
|
-
end
|
|
34
|
-
|
|
35
|
-
def hello_world
|
|
36
|
-
"Hello, World"
|
|
37
|
-
end
|
|
38
|
-
|
|
39
|
-
def goodnight_moon
|
|
40
|
-
"Goodnight, Moon"
|
|
41
|
-
end
|
|
42
|
-
|
|
43
|
-
def title
|
|
44
|
-
"Sample Title"
|
|
45
|
-
end
|
|
46
|
-
|
|
47
|
-
def block
|
|
48
|
-
yield
|
|
49
|
-
end
|
|
50
|
-
end
|
|
51
|
-
end
|
|
@@ -1,80 +0,0 @@
|
|
|
1
|
-
class Product < ActiveRecord::Base
|
|
2
|
-
include Draper::ModelSupport
|
|
3
|
-
|
|
4
|
-
def self.find_by_name(name)
|
|
5
|
-
@@dummy ||= Product.new
|
|
6
|
-
end
|
|
7
|
-
|
|
8
|
-
def self.first
|
|
9
|
-
@@first ||= Product.new
|
|
10
|
-
end
|
|
11
|
-
|
|
12
|
-
def self.last
|
|
13
|
-
@@last ||= Product.new
|
|
14
|
-
end
|
|
15
|
-
|
|
16
|
-
def self.all
|
|
17
|
-
[Product.new, Product.new]
|
|
18
|
-
end
|
|
19
|
-
|
|
20
|
-
def self.scoped
|
|
21
|
-
[Product.new]
|
|
22
|
-
end
|
|
23
|
-
|
|
24
|
-
def self.model_name
|
|
25
|
-
"Product"
|
|
26
|
-
end
|
|
27
|
-
|
|
28
|
-
def self.find(id)
|
|
29
|
-
return Product.new
|
|
30
|
-
end
|
|
31
|
-
|
|
32
|
-
def self.sample_class_method
|
|
33
|
-
"sample class method"
|
|
34
|
-
end
|
|
35
|
-
|
|
36
|
-
def hello_world
|
|
37
|
-
"Hello, World"
|
|
38
|
-
end
|
|
39
|
-
|
|
40
|
-
def goodnight_moon
|
|
41
|
-
"Goodnight, Moon"
|
|
42
|
-
end
|
|
43
|
-
|
|
44
|
-
def title
|
|
45
|
-
"Sample Title"
|
|
46
|
-
end
|
|
47
|
-
|
|
48
|
-
def some_action
|
|
49
|
-
self.nonexistant_method
|
|
50
|
-
end
|
|
51
|
-
|
|
52
|
-
def block
|
|
53
|
-
yield
|
|
54
|
-
end
|
|
55
|
-
|
|
56
|
-
def self.reflect_on_association(association_symbol)
|
|
57
|
-
association_symbol.to_s.starts_with?("poro") ? nil : OpenStruct.new(:klass => self)
|
|
58
|
-
end
|
|
59
|
-
|
|
60
|
-
def similar_products
|
|
61
|
-
[Product.new, Product.new]
|
|
62
|
-
end
|
|
63
|
-
|
|
64
|
-
def previous_version
|
|
65
|
-
Product.new
|
|
66
|
-
end
|
|
67
|
-
|
|
68
|
-
def thing
|
|
69
|
-
SomeThing.new
|
|
70
|
-
end
|
|
71
|
-
|
|
72
|
-
def poro_similar_products
|
|
73
|
-
[Product.new, Product.new]
|
|
74
|
-
end
|
|
75
|
-
|
|
76
|
-
def poro_previous_version
|
|
77
|
-
Product.new
|
|
78
|
-
end
|
|
79
|
-
|
|
80
|
-
end
|
|
File without changes
|
|
File without changes
|
|
File without changes
|