2018-11-02 19:07:56 -04:00
|
|
|
# frozen_string_literal: true
|
|
|
|
|
|
|
|
RSpec.describe "real world edgecases", :realworld => true, :sometimes => true do
|
|
|
|
def rubygems_version(name, requirement)
|
2020-06-03 14:47:59 -04:00
|
|
|
ruby <<-RUBY
|
2019-11-11 03:57:45 -05:00
|
|
|
require "#{spec_dir}/support/artifice/vcr"
|
|
|
|
require "#{lib_dir}/bundler"
|
|
|
|
require "#{lib_dir}/bundler/source/rubygems/remote"
|
|
|
|
require "#{lib_dir}/bundler/fetcher"
|
|
|
|
rubygem = Bundler.ui.silence do
|
2019-12-14 05:49:16 -05:00
|
|
|
source = Bundler::Source::Rubygems::Remote.new(Bundler::URI("https://rubygems.org"))
|
2019-11-11 03:57:45 -05:00
|
|
|
fetcher = Bundler::Fetcher.new(source)
|
|
|
|
index = fetcher.specs([#{name.dump}], nil)
|
|
|
|
index.search(Gem::Dependency.new(#{name.dump}, #{requirement.dump})).last
|
|
|
|
end
|
2018-11-02 19:07:56 -04:00
|
|
|
if rubygem.nil?
|
|
|
|
raise "Could not find #{name} (#{requirement}) on rubygems.org!\n" \
|
|
|
|
"Found specs:\n\#{index.send(:specs).inspect}"
|
|
|
|
end
|
2019-11-11 03:57:45 -05:00
|
|
|
puts "#{name} (\#{rubygem.version})"
|
2018-11-02 19:07:56 -04:00
|
|
|
RUBY
|
|
|
|
end
|
|
|
|
|
2019-04-14 02:01:35 -04:00
|
|
|
it "resolves dependencies correctly" do
|
2018-11-02 19:07:56 -04:00
|
|
|
gemfile <<-G
|
|
|
|
source "https://rubygems.org"
|
|
|
|
|
2019-04-14 02:01:35 -04:00
|
|
|
gem 'rails', '~> 5.0'
|
2018-11-02 19:07:56 -04:00
|
|
|
gem 'capybara', '~> 2.2.0'
|
|
|
|
gem 'rack-cache', '1.2.0' # last version that works on Ruby 1.9
|
|
|
|
G
|
2020-06-03 14:45:36 -04:00
|
|
|
bundle :lock
|
2019-04-14 02:01:35 -04:00
|
|
|
expect(lockfile).to include(rubygems_version("rails", "~> 5.0"))
|
2018-11-02 19:07:56 -04:00
|
|
|
expect(lockfile).to include("capybara (2.2.1)")
|
|
|
|
end
|
|
|
|
|
2019-04-14 02:01:35 -04:00
|
|
|
it "installs the latest version of gxapi_rails" do
|
2018-11-02 19:07:56 -04:00
|
|
|
gemfile <<-G
|
|
|
|
source "https://rubygems.org"
|
|
|
|
|
|
|
|
gem "sass-rails"
|
2019-04-14 02:01:35 -04:00
|
|
|
gem "rails", "~> 5"
|
2018-11-02 19:07:56 -04:00
|
|
|
gem "gxapi_rails", "< 0.1.0" # 0.1.0 was released way after the test was written
|
|
|
|
gem 'rack-cache', '1.2.0' # last version that works on Ruby 1.9
|
|
|
|
G
|
2020-06-03 14:45:36 -04:00
|
|
|
bundle :lock
|
2018-11-02 19:07:56 -04:00
|
|
|
expect(lockfile).to include("gxapi_rails (0.0.6)")
|
|
|
|
end
|
|
|
|
|
|
|
|
it "installs the latest version of i18n" do
|
|
|
|
gemfile <<-G
|
|
|
|
source "https://rubygems.org"
|
|
|
|
|
|
|
|
gem "i18n", "~> 0.6.0"
|
|
|
|
gem "activesupport", "~> 3.0"
|
|
|
|
gem "activerecord", "~> 3.0"
|
|
|
|
gem "builder", "~> 2.1.2"
|
|
|
|
G
|
2020-06-03 14:45:36 -04:00
|
|
|
bundle :lock
|
2018-11-02 19:07:56 -04:00
|
|
|
expect(lockfile).to include(rubygems_version("i18n", "~> 0.6.0"))
|
|
|
|
expect(lockfile).to include(rubygems_version("activesupport", "~> 3.0"))
|
|
|
|
end
|
|
|
|
|
2019-04-14 02:01:35 -04:00
|
|
|
it "is able to update a top-level dependency when there is a conflict on a shared transitive child" do
|
2020-05-08 01:19:04 -04:00
|
|
|
# from https://github.com/rubygems/bundler/issues/5031
|
2018-11-02 19:07:56 -04:00
|
|
|
|
|
|
|
gemfile <<-G
|
|
|
|
source "https://rubygems.org"
|
|
|
|
gem 'rails', '~> 4.2.7.1'
|
|
|
|
gem 'paperclip', '~> 5.1.0'
|
|
|
|
G
|
|
|
|
|
|
|
|
lockfile <<-L
|
|
|
|
GEM
|
|
|
|
remote: https://rubygems.org/
|
|
|
|
specs:
|
|
|
|
actionmailer (4.2.7.1)
|
|
|
|
actionpack (= 4.2.7.1)
|
|
|
|
actionview (= 4.2.7.1)
|
|
|
|
activejob (= 4.2.7.1)
|
|
|
|
mail (~> 2.5, >= 2.5.4)
|
|
|
|
rails-dom-testing (~> 1.0, >= 1.0.5)
|
|
|
|
actionpack (4.2.7.1)
|
|
|
|
actionview (= 4.2.7.1)
|
|
|
|
activesupport (= 4.2.7.1)
|
|
|
|
rack (~> 1.6)
|
|
|
|
rack-test (~> 0.6.2)
|
|
|
|
rails-dom-testing (~> 1.0, >= 1.0.5)
|
|
|
|
rails-html-sanitizer (~> 1.0, >= 1.0.2)
|
|
|
|
actionview (4.2.7.1)
|
|
|
|
activesupport (= 4.2.7.1)
|
|
|
|
builder (~> 3.1)
|
|
|
|
erubis (~> 2.7.0)
|
|
|
|
rails-dom-testing (~> 1.0, >= 1.0.5)
|
|
|
|
rails-html-sanitizer (~> 1.0, >= 1.0.2)
|
|
|
|
activejob (4.2.7.1)
|
|
|
|
activesupport (= 4.2.7.1)
|
|
|
|
globalid (>= 0.3.0)
|
|
|
|
activemodel (4.2.7.1)
|
|
|
|
activesupport (= 4.2.7.1)
|
|
|
|
builder (~> 3.1)
|
|
|
|
activerecord (4.2.7.1)
|
|
|
|
activemodel (= 4.2.7.1)
|
|
|
|
activesupport (= 4.2.7.1)
|
|
|
|
arel (~> 6.0)
|
|
|
|
activesupport (4.2.7.1)
|
|
|
|
i18n (~> 0.7)
|
|
|
|
json (~> 1.7, >= 1.7.7)
|
|
|
|
minitest (~> 5.1)
|
|
|
|
thread_safe (~> 0.3, >= 0.3.4)
|
|
|
|
tzinfo (~> 1.1)
|
|
|
|
arel (6.0.3)
|
|
|
|
builder (3.2.2)
|
|
|
|
climate_control (0.0.3)
|
|
|
|
activesupport (>= 3.0)
|
|
|
|
cocaine (0.5.8)
|
|
|
|
climate_control (>= 0.0.3, < 1.0)
|
|
|
|
concurrent-ruby (1.0.2)
|
|
|
|
erubis (2.7.0)
|
|
|
|
globalid (0.3.7)
|
|
|
|
activesupport (>= 4.1.0)
|
|
|
|
i18n (0.7.0)
|
|
|
|
json (1.8.3)
|
|
|
|
loofah (2.0.3)
|
|
|
|
nokogiri (>= 1.5.9)
|
|
|
|
mail (2.6.4)
|
|
|
|
mime-types (>= 1.16, < 4)
|
|
|
|
mime-types (3.1)
|
|
|
|
mime-types-data (~> 3.2015)
|
|
|
|
mime-types-data (3.2016.0521)
|
|
|
|
mimemagic (0.3.2)
|
|
|
|
mini_portile2 (2.1.0)
|
|
|
|
minitest (5.9.1)
|
|
|
|
nokogiri (1.6.8)
|
|
|
|
mini_portile2 (~> 2.1.0)
|
|
|
|
pkg-config (~> 1.1.7)
|
|
|
|
paperclip (5.1.0)
|
|
|
|
activemodel (>= 4.2.0)
|
|
|
|
activesupport (>= 4.2.0)
|
|
|
|
cocaine (~> 0.5.5)
|
|
|
|
mime-types
|
|
|
|
mimemagic (~> 0.3.0)
|
|
|
|
pkg-config (1.1.7)
|
|
|
|
rack (1.6.4)
|
|
|
|
rack-test (0.6.3)
|
|
|
|
rack (>= 1.0)
|
|
|
|
rails (4.2.7.1)
|
|
|
|
actionmailer (= 4.2.7.1)
|
|
|
|
actionpack (= 4.2.7.1)
|
|
|
|
actionview (= 4.2.7.1)
|
|
|
|
activejob (= 4.2.7.1)
|
|
|
|
activemodel (= 4.2.7.1)
|
|
|
|
activerecord (= 4.2.7.1)
|
|
|
|
activesupport (= 4.2.7.1)
|
2019-01-04 08:10:58 -05:00
|
|
|
bundler (>= 1.3.0, < 3.0)
|
2018-11-02 19:07:56 -04:00
|
|
|
railties (= 4.2.7.1)
|
|
|
|
sprockets-rails
|
|
|
|
rails-deprecated_sanitizer (1.0.3)
|
|
|
|
activesupport (>= 4.2.0.alpha)
|
|
|
|
rails-dom-testing (1.0.7)
|
|
|
|
activesupport (>= 4.2.0.beta, < 5.0)
|
|
|
|
nokogiri (~> 1.6.0)
|
|
|
|
rails-deprecated_sanitizer (>= 1.0.1)
|
|
|
|
rails-html-sanitizer (1.0.3)
|
|
|
|
loofah (~> 2.0)
|
|
|
|
railties (4.2.7.1)
|
|
|
|
actionpack (= 4.2.7.1)
|
|
|
|
activesupport (= 4.2.7.1)
|
|
|
|
rake (>= 0.8.7)
|
|
|
|
thor (>= 0.18.1, < 2.0)
|
|
|
|
rake (11.3.0)
|
|
|
|
sprockets (3.7.0)
|
|
|
|
concurrent-ruby (~> 1.0)
|
|
|
|
rack (> 1, < 3)
|
|
|
|
sprockets-rails (3.2.0)
|
|
|
|
actionpack (>= 4.0)
|
|
|
|
activesupport (>= 4.0)
|
|
|
|
sprockets (>= 3.0.0)
|
|
|
|
thor (0.19.1)
|
|
|
|
thread_safe (0.3.5)
|
|
|
|
tzinfo (1.2.2)
|
|
|
|
thread_safe (~> 0.1)
|
|
|
|
|
|
|
|
PLATFORMS
|
|
|
|
ruby
|
|
|
|
|
|
|
|
DEPENDENCIES
|
|
|
|
paperclip (~> 5.1.0)
|
|
|
|
rails (~> 4.2.7.1)
|
|
|
|
L
|
|
|
|
|
2020-06-03 14:45:36 -04:00
|
|
|
bundle "lock --update paperclip"
|
2018-11-02 19:07:56 -04:00
|
|
|
|
|
|
|
expect(lockfile).to include(rubygems_version("paperclip", "~> 5.1.0"))
|
|
|
|
end
|
|
|
|
|
2020-05-08 01:19:04 -04:00
|
|
|
# https://github.com/rubygems/bundler/issues/1500
|
2018-11-02 19:07:56 -04:00
|
|
|
it "does not fail install because of gem plugins" do
|
|
|
|
realworld_system_gems("open_gem --version 1.4.2", "rake --version 0.9.2")
|
|
|
|
gemfile <<-G
|
|
|
|
source "https://rubygems.org"
|
|
|
|
|
|
|
|
gem 'rack', '1.0.1'
|
|
|
|
G
|
|
|
|
|
2019-04-14 02:01:35 -04:00
|
|
|
bundle "config set --local path vendor/bundle"
|
2020-06-03 14:45:36 -04:00
|
|
|
bundle :install
|
2018-11-02 19:07:56 -04:00
|
|
|
expect(err).not_to include("Could not find rake")
|
2019-06-01 05:49:40 -04:00
|
|
|
expect(err).to be_empty
|
2018-11-02 19:07:56 -04:00
|
|
|
end
|
|
|
|
|
|
|
|
it "checks out git repos when the lockfile is corrupted" do
|
|
|
|
gemfile <<-G
|
|
|
|
source "https://rubygems.org"
|
|
|
|
git_source(:github) {|repo| "https://github.com/\#{repo}.git" }
|
|
|
|
|
|
|
|
gem 'activerecord', :github => 'carlhuda/rails-bundler-test', :branch => 'master'
|
|
|
|
gem 'activesupport', :github => 'carlhuda/rails-bundler-test', :branch => 'master'
|
|
|
|
gem 'actionpack', :github => 'carlhuda/rails-bundler-test', :branch => 'master'
|
|
|
|
G
|
|
|
|
|
|
|
|
lockfile <<-L
|
|
|
|
GIT
|
|
|
|
remote: https://github.com/carlhuda/rails-bundler-test.git
|
|
|
|
revision: 369e28a87419565f1940815219ea9200474589d4
|
|
|
|
branch: master
|
|
|
|
specs:
|
|
|
|
actionpack (3.2.2)
|
|
|
|
activemodel (= 3.2.2)
|
|
|
|
activesupport (= 3.2.2)
|
|
|
|
builder (~> 3.0.0)
|
|
|
|
erubis (~> 2.7.0)
|
|
|
|
journey (~> 1.0.1)
|
|
|
|
rack (~> 1.4.0)
|
|
|
|
rack-cache (~> 1.2)
|
|
|
|
rack-test (~> 0.6.1)
|
|
|
|
sprockets (~> 2.1.2)
|
|
|
|
activemodel (3.2.2)
|
|
|
|
activesupport (= 3.2.2)
|
|
|
|
builder (~> 3.0.0)
|
|
|
|
activerecord (3.2.2)
|
|
|
|
activemodel (= 3.2.2)
|
|
|
|
activesupport (= 3.2.2)
|
|
|
|
arel (~> 3.0.2)
|
|
|
|
tzinfo (~> 0.3.29)
|
|
|
|
activesupport (3.2.2)
|
|
|
|
i18n (~> 0.6)
|
|
|
|
multi_json (~> 1.0)
|
|
|
|
|
|
|
|
GIT
|
|
|
|
remote: https://github.com/carlhuda/rails-bundler-test.git
|
|
|
|
revision: 369e28a87419565f1940815219ea9200474589d4
|
|
|
|
branch: master
|
|
|
|
specs:
|
|
|
|
actionpack (3.2.2)
|
|
|
|
activemodel (= 3.2.2)
|
|
|
|
activesupport (= 3.2.2)
|
|
|
|
builder (~> 3.0.0)
|
|
|
|
erubis (~> 2.7.0)
|
|
|
|
journey (~> 1.0.1)
|
|
|
|
rack (~> 1.4.0)
|
|
|
|
rack-cache (~> 1.2)
|
|
|
|
rack-test (~> 0.6.1)
|
|
|
|
sprockets (~> 2.1.2)
|
|
|
|
activemodel (3.2.2)
|
|
|
|
activesupport (= 3.2.2)
|
|
|
|
builder (~> 3.0.0)
|
|
|
|
activerecord (3.2.2)
|
|
|
|
activemodel (= 3.2.2)
|
|
|
|
activesupport (= 3.2.2)
|
|
|
|
arel (~> 3.0.2)
|
|
|
|
tzinfo (~> 0.3.29)
|
|
|
|
activesupport (3.2.2)
|
|
|
|
i18n (~> 0.6)
|
|
|
|
multi_json (~> 1.0)
|
|
|
|
|
|
|
|
GIT
|
|
|
|
remote: https://github.com/carlhuda/rails-bundler-test.git
|
|
|
|
revision: 369e28a87419565f1940815219ea9200474589d4
|
|
|
|
branch: master
|
|
|
|
specs:
|
|
|
|
actionpack (3.2.2)
|
|
|
|
activemodel (= 3.2.2)
|
|
|
|
activesupport (= 3.2.2)
|
|
|
|
builder (~> 3.0.0)
|
|
|
|
erubis (~> 2.7.0)
|
|
|
|
journey (~> 1.0.1)
|
|
|
|
rack (~> 1.4.0)
|
|
|
|
rack-cache (~> 1.2)
|
|
|
|
rack-test (~> 0.6.1)
|
|
|
|
sprockets (~> 2.1.2)
|
|
|
|
activemodel (3.2.2)
|
|
|
|
activesupport (= 3.2.2)
|
|
|
|
builder (~> 3.0.0)
|
|
|
|
activerecord (3.2.2)
|
|
|
|
activemodel (= 3.2.2)
|
|
|
|
activesupport (= 3.2.2)
|
|
|
|
arel (~> 3.0.2)
|
|
|
|
tzinfo (~> 0.3.29)
|
|
|
|
activesupport (3.2.2)
|
|
|
|
i18n (~> 0.6)
|
|
|
|
multi_json (~> 1.0)
|
|
|
|
|
|
|
|
GEM
|
|
|
|
remote: https://rubygems.org/
|
|
|
|
specs:
|
|
|
|
arel (3.0.2)
|
|
|
|
builder (3.0.0)
|
|
|
|
erubis (2.7.0)
|
|
|
|
hike (1.2.1)
|
|
|
|
i18n (0.6.0)
|
|
|
|
journey (1.0.3)
|
|
|
|
multi_json (1.1.0)
|
|
|
|
rack (1.4.1)
|
|
|
|
rack-cache (1.2)
|
|
|
|
rack (>= 0.4)
|
|
|
|
rack-test (0.6.1)
|
|
|
|
rack (>= 1.0)
|
|
|
|
sprockets (2.1.2)
|
|
|
|
hike (~> 1.2)
|
|
|
|
rack (~> 1.0)
|
|
|
|
tilt (~> 1.1, != 1.3.0)
|
|
|
|
tilt (1.3.3)
|
|
|
|
tzinfo (0.3.32)
|
|
|
|
|
|
|
|
PLATFORMS
|
|
|
|
ruby
|
|
|
|
|
|
|
|
DEPENDENCIES
|
|
|
|
actionpack!
|
|
|
|
activerecord!
|
|
|
|
activesupport!
|
|
|
|
L
|
|
|
|
|
2020-06-03 14:45:36 -04:00
|
|
|
bundle :lock
|
2019-06-01 05:49:40 -04:00
|
|
|
expect(err).to be_empty
|
2018-11-02 19:07:56 -04:00
|
|
|
end
|
|
|
|
|
|
|
|
it "outputs a helpful error message when gems have invalid gemspecs" do
|
2020-06-03 12:43:17 -04:00
|
|
|
install_gemfile <<-G, :standalone => true, :raise_on_error => false
|
2018-11-02 19:07:56 -04:00
|
|
|
source 'https://rubygems.org'
|
|
|
|
gem "resque-scheduler", "2.2.0"
|
2020-05-25 13:45:22 -04:00
|
|
|
gem "redis-namespace", "1.6.0" # for a consistent resolution including ruby 2.3.0
|
2018-11-02 19:07:56 -04:00
|
|
|
G
|
2019-04-14 02:01:35 -04:00
|
|
|
expect(err).to include("You have one or more invalid gemspecs that need to be fixed.")
|
|
|
|
expect(err).to include("resque-scheduler 2.2.0 has an invalid gemspec")
|
2018-11-02 19:07:56 -04:00
|
|
|
end
|
2020-12-14 18:32:54 -05:00
|
|
|
|
|
|
|
it "doesn't hang on big gemfile" do
|
|
|
|
skip "Only for ruby 2.7.2" if RUBY_VERSION != "2.7.2"
|
|
|
|
|
|
|
|
gemfile <<~G
|
|
|
|
# frozen_string_literal: true
|
|
|
|
|
|
|
|
source "https://rubygems.org"
|
|
|
|
|
|
|
|
ruby "2.7.2"
|
|
|
|
|
|
|
|
gem "rails"
|
|
|
|
gem "pg", ">= 0.18", "< 2.0"
|
|
|
|
gem "goldiloader"
|
|
|
|
gem "awesome_nested_set"
|
|
|
|
gem "circuitbox"
|
|
|
|
gem "passenger"
|
|
|
|
gem "globalid"
|
|
|
|
gem "rack-cors"
|
|
|
|
gem "rails-pg-extras"
|
|
|
|
gem "linear_regression_trend"
|
|
|
|
gem "rack-protection"
|
|
|
|
gem "pundit"
|
|
|
|
gem "remote_ip_proxy_scrubber"
|
|
|
|
gem "bcrypt"
|
|
|
|
gem "searchkick"
|
|
|
|
gem "excon"
|
|
|
|
gem "faraday_middleware-aws-sigv4"
|
|
|
|
gem "typhoeus"
|
|
|
|
gem "sidekiq"
|
|
|
|
gem "sidekiq-undertaker"
|
|
|
|
gem "sidekiq-cron"
|
|
|
|
gem "storext"
|
|
|
|
gem "appsignal"
|
|
|
|
gem "fcm"
|
|
|
|
gem "business_time"
|
|
|
|
gem "tzinfo"
|
|
|
|
gem "holidays"
|
|
|
|
gem "bigdecimal"
|
|
|
|
gem "progress_bar"
|
|
|
|
gem "redis"
|
|
|
|
gem "hiredis"
|
|
|
|
gem "state_machines"
|
|
|
|
gem "state_machines-audit_trail"
|
|
|
|
gem "state_machines-activerecord"
|
|
|
|
gem "interactor"
|
|
|
|
gem "ar_transaction_changes"
|
|
|
|
gem "redis-rails"
|
|
|
|
gem "seed_migration"
|
|
|
|
gem "lograge"
|
|
|
|
gem "graphiql-rails", group: :development
|
|
|
|
gem "graphql"
|
|
|
|
gem "pusher"
|
|
|
|
gem "rbnacl"
|
|
|
|
gem "jwt"
|
|
|
|
gem "json-schema"
|
|
|
|
gem "discard"
|
|
|
|
gem "money"
|
|
|
|
gem "strip_attributes"
|
|
|
|
gem "validates_email_format_of"
|
|
|
|
gem "audited"
|
|
|
|
gem "concurrent-ruby"
|
|
|
|
gem "with_advisory_lock"
|
|
|
|
|
|
|
|
group :test do
|
|
|
|
gem "rspec-sidekiq"
|
|
|
|
gem "simplecov", require: false
|
|
|
|
end
|
|
|
|
|
|
|
|
group :development, :test do
|
|
|
|
gem "byebug", platform: :mri
|
|
|
|
gem "guard"
|
|
|
|
gem "guard-bundler"
|
|
|
|
gem "guard-rspec"
|
|
|
|
gem "rb-fsevent"
|
|
|
|
gem "rspec_junit_formatter"
|
|
|
|
gem "rspec-collection_matchers"
|
|
|
|
gem "rspec-rails"
|
|
|
|
gem "rspec-retry"
|
|
|
|
gem "state_machines-rspec"
|
|
|
|
gem "dotenv-rails"
|
|
|
|
gem "database_cleaner-active_record"
|
|
|
|
gem "database_cleaner-redis"
|
|
|
|
gem "timecop"
|
|
|
|
end
|
|
|
|
|
|
|
|
gem "factory_bot_rails"
|
|
|
|
gem "faker"
|
|
|
|
|
|
|
|
group :development do
|
|
|
|
gem "listen"
|
|
|
|
gem "sql_queries_count"
|
|
|
|
gem "rubocop"
|
|
|
|
gem "rubocop-performance"
|
|
|
|
gem "rubocop-rspec"
|
|
|
|
gem "rubocop-rails"
|
|
|
|
gem "brakeman"
|
|
|
|
gem "bundler-audit"
|
|
|
|
gem "solargraph"
|
|
|
|
gem "annotate"
|
|
|
|
end
|
|
|
|
G
|
|
|
|
|
|
|
|
bundle :lock, :env => { "DEBUG_RESOLVER" => "1" }
|
|
|
|
|
|
|
|
if Bundler.feature_flag.bundler_3_mode?
|
|
|
|
expect(out).to include("BUNDLER: Finished resolution (2492 steps)")
|
|
|
|
else
|
|
|
|
expect(out).to include("BUNDLER: Finished resolution (2722 steps)")
|
|
|
|
end
|
|
|
|
end
|
2018-11-02 19:07:56 -04:00
|
|
|
end
|