Я написал это расширение в Синатре:
#extension.rb
require 'sinatra/base'
require 'json'
module Sinatra
module Ibaf
module Helpers
def test
payload = settings.my_json.dup
payload["test"] << "DONE"
puts payload
"OK"
end
end
def self.registered(app)
app.helpers Ibaf::Helpers
app.set :my_json, JSON.parse('{"test":[]}')
app.get "/" do
test
end
end
end
register Ibaf
end
и myapp.rb
#app.rb
require 'sinatra'
require './extension.rb'
и работает как jruby -S app.rb -p 80
При первом вызове http://localhost переменная payload
содержит один элемент "DONE"
.
Во втором вызове payload
содержит два элемента, почему?
Я ожидаю, что settings.my_json.dup
возвратит новый объект, почему модифицируется?
Это вывод:
== Sinatra (v2.0.0) has taken the stage on 80 for development with backup from T
rinidad
Deploying from C:/Users/adminlocale/Desktop as /
Initializing ProtocolHandler ["http-bio-127.0.0.1-80"]
Starting ProtocolHandler ["http-bio-127.0.0.1-80"]
{"test"=>["DONE"]}
127.0.0.1 - [16/Oct/2018:17:08:42 +0200] "GET / " 200 2 0.1110
{"test"=>["DONE", "DONE"]}
127.0.0.1 - [16/Oct/2018:17:08:51 +0200] "GET / " 200 2 0.0250