mongoid 8.0.7 → 8.0.9
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/Rakefile +65 -41
- data/lib/mongoid/association/accessors.rb +5 -1
- data/lib/mongoid/association/eager_loadable.rb +3 -0
- data/lib/mongoid/atomic.rb +9 -7
- data/lib/mongoid/config.rb +10 -0
- data/lib/mongoid/criteria/queryable/extensions/numeric.rb +15 -1
- data/lib/mongoid/document.rb +8 -1
- data/lib/mongoid/fields.rb +11 -6
- data/lib/mongoid/interceptable.rb +10 -8
- data/lib/mongoid/timestamps/created.rb +8 -1
- data/lib/mongoid/traversable.rb +12 -0
- data/lib/mongoid/validatable/associated.rb +98 -17
- data/lib/mongoid/validatable.rb +8 -0
- data/lib/mongoid/version.rb +1 -1
- data/spec/integration/associations/has_and_belongs_to_many_spec.rb +40 -0
- data/spec/integration/callbacks_models.rb +37 -0
- data/spec/integration/callbacks_spec.rb +27 -0
- data/spec/mongoid/association/eager_spec.rb +24 -2
- data/spec/mongoid/association/embedded/embeds_many_query_spec.rb +4 -0
- data/spec/mongoid/association_spec.rb +60 -0
- data/spec/mongoid/document_spec.rb +27 -0
- data/spec/mongoid/interceptable_spec.rb +100 -0
- data/spec/mongoid/interceptable_spec_models.rb +51 -111
- data/spec/mongoid/serializable_spec.rb +14 -14
- data/spec/mongoid/timestamps/created_spec.rb +23 -0
- data/spec/mongoid/validatable/associated_spec.rb +27 -34
- data/spec/support/models/name.rb +10 -0
- metadata +4 -80
- checksums.yaml.gz.sig +0 -0
- data/spec/shared/LICENSE +0 -20
- data/spec/shared/bin/get-mongodb-download-url +0 -17
- data/spec/shared/bin/s3-copy +0 -45
- data/spec/shared/bin/s3-upload +0 -69
- data/spec/shared/lib/mrss/child_process_helper.rb +0 -80
- data/spec/shared/lib/mrss/cluster_config.rb +0 -231
- data/spec/shared/lib/mrss/constraints.rb +0 -378
- data/spec/shared/lib/mrss/docker_runner.rb +0 -298
- data/spec/shared/lib/mrss/eg_config_utils.rb +0 -51
- data/spec/shared/lib/mrss/event_subscriber.rb +0 -210
- data/spec/shared/lib/mrss/lite_constraints.rb +0 -238
- data/spec/shared/lib/mrss/server_version_registry.rb +0 -113
- data/spec/shared/lib/mrss/session_registry.rb +0 -69
- data/spec/shared/lib/mrss/session_registry_legacy.rb +0 -60
- data/spec/shared/lib/mrss/spec_organizer.rb +0 -179
- data/spec/shared/lib/mrss/utils.rb +0 -37
- data/spec/shared/share/Dockerfile.erb +0 -321
- data/spec/shared/share/haproxy-1.conf +0 -16
- data/spec/shared/share/haproxy-2.conf +0 -17
- data/spec/shared/shlib/config.sh +0 -27
- data/spec/shared/shlib/distro.sh +0 -74
- data/spec/shared/shlib/server.sh +0 -416
- data/spec/shared/shlib/set_env.sh +0 -169
- data.tar.gz.sig +0 -4
- metadata.gz.sig +0 -0
@@ -37,12 +37,18 @@ describe Mongoid::Validatable::AssociatedValidator do
|
|
37
37
|
User.new(name: "test")
|
38
38
|
end
|
39
39
|
|
40
|
-
let(:
|
40
|
+
let(:description1) do
|
41
|
+
Description.new
|
42
|
+
end
|
43
|
+
|
44
|
+
let(:description2) do
|
41
45
|
Description.new
|
42
46
|
end
|
43
47
|
|
44
48
|
before do
|
45
|
-
user.descriptions <<
|
49
|
+
user.descriptions << description1
|
50
|
+
user.descriptions << description2
|
51
|
+
user.valid?
|
46
52
|
end
|
47
53
|
|
48
54
|
it "only validates the parent once" do
|
@@ -50,12 +56,16 @@ describe Mongoid::Validatable::AssociatedValidator do
|
|
50
56
|
end
|
51
57
|
|
52
58
|
it "adds the errors from the relation" do
|
53
|
-
user.valid?
|
54
59
|
expect(user.errors[:descriptions]).to_not be_nil
|
55
60
|
end
|
56
61
|
|
62
|
+
it 'reports all failed validations' do
|
63
|
+
errors = user.descriptions.flat_map { |d| d.errors[:details] }
|
64
|
+
expect(errors.length).to be == 2
|
65
|
+
end
|
66
|
+
|
57
67
|
it "only validates the child once" do
|
58
|
-
expect(
|
68
|
+
expect(description1).to_not be_valid
|
59
69
|
end
|
60
70
|
end
|
61
71
|
|
@@ -75,7 +85,6 @@ describe Mongoid::Validatable::AssociatedValidator do
|
|
75
85
|
end
|
76
86
|
|
77
87
|
it "does not run validation on them" do
|
78
|
-
expect(description).to receive(:valid?).never
|
79
88
|
expect(user).to be_valid
|
80
89
|
end
|
81
90
|
|
@@ -84,14 +93,14 @@ describe Mongoid::Validatable::AssociatedValidator do
|
|
84
93
|
end
|
85
94
|
end
|
86
95
|
|
87
|
-
describe "#
|
96
|
+
describe "#validate" do
|
88
97
|
|
89
98
|
let(:person) do
|
90
99
|
Person.new
|
91
100
|
end
|
92
101
|
|
93
102
|
let(:validator) do
|
94
|
-
described_class.new(attributes: person.
|
103
|
+
described_class.new(attributes: person.relations.keys)
|
95
104
|
end
|
96
105
|
|
97
106
|
context "when the association is a one to one" do
|
@@ -99,7 +108,7 @@ describe Mongoid::Validatable::AssociatedValidator do
|
|
99
108
|
context "when the association is nil" do
|
100
109
|
|
101
110
|
before do
|
102
|
-
validator.
|
111
|
+
validator.validate(person)
|
103
112
|
end
|
104
113
|
|
105
114
|
it "adds no errors" do
|
@@ -108,14 +117,9 @@ describe Mongoid::Validatable::AssociatedValidator do
|
|
108
117
|
end
|
109
118
|
|
110
119
|
context "when the association is valid" do
|
111
|
-
|
112
|
-
let(:associated) do
|
113
|
-
double(valid?: true, flagged_for_destroy?: false)
|
114
|
-
end
|
115
|
-
|
116
120
|
before do
|
117
|
-
|
118
|
-
validator.
|
121
|
+
person.name = Name.new(first_name: 'A', last_name: 'B')
|
122
|
+
validator.validate(person)
|
119
123
|
end
|
120
124
|
|
121
125
|
it "adds no errors" do
|
@@ -125,13 +129,9 @@ describe Mongoid::Validatable::AssociatedValidator do
|
|
125
129
|
|
126
130
|
context "when the association is invalid" do
|
127
131
|
|
128
|
-
let(:associated) do
|
129
|
-
double(valid?: false, flagged_for_destroy?: false)
|
130
|
-
end
|
131
|
-
|
132
132
|
before do
|
133
|
-
|
134
|
-
validator.
|
133
|
+
person.name = Name.new(first_name: 'Jamis', last_name: 'Buck')
|
134
|
+
validator.validate(person)
|
135
135
|
end
|
136
136
|
|
137
137
|
it "adds errors to the parent document" do
|
@@ -149,7 +149,7 @@ describe Mongoid::Validatable::AssociatedValidator do
|
|
149
149
|
context "when the association is empty" do
|
150
150
|
|
151
151
|
before do
|
152
|
-
validator.
|
152
|
+
validator.validate(person)
|
153
153
|
end
|
154
154
|
|
155
155
|
it "adds no errors" do
|
@@ -159,13 +159,9 @@ describe Mongoid::Validatable::AssociatedValidator do
|
|
159
159
|
|
160
160
|
context "when the association has invalid documents" do
|
161
161
|
|
162
|
-
let(:associated) do
|
163
|
-
double(valid?: false, flagged_for_destroy?: false)
|
164
|
-
end
|
165
|
-
|
166
162
|
before do
|
167
|
-
|
168
|
-
validator.
|
163
|
+
person.addresses << Address.new(street: '123')
|
164
|
+
validator.validate(person)
|
169
165
|
end
|
170
166
|
|
171
167
|
it "adds errors to the parent document" do
|
@@ -175,13 +171,10 @@ describe Mongoid::Validatable::AssociatedValidator do
|
|
175
171
|
|
176
172
|
context "when the association has all valid documents" do
|
177
173
|
|
178
|
-
let(:associated) do
|
179
|
-
double(valid?: true, flagged_for_destroy?: false)
|
180
|
-
end
|
181
|
-
|
182
174
|
before do
|
183
|
-
|
184
|
-
|
175
|
+
person.addresses << Address.new(street: '123 First St')
|
176
|
+
person.addresses << Address.new(street: '456 Second St')
|
177
|
+
validator.validate(person)
|
185
178
|
end
|
186
179
|
|
187
180
|
it "adds no errors" do
|
data/spec/support/models/name.rb
CHANGED
@@ -4,6 +4,8 @@ class Name
|
|
4
4
|
include Mongoid::Document
|
5
5
|
include Mongoid::Attributes::Dynamic
|
6
6
|
|
7
|
+
validate :is_not_jamis
|
8
|
+
|
7
9
|
field :_id, type: String, overwrite: true, default: ->{
|
8
10
|
"#{first_name}-#{last_name}"
|
9
11
|
}
|
@@ -23,4 +25,12 @@ class Name
|
|
23
25
|
def set_parent=(set = false)
|
24
26
|
self.parent_title = namable.title if set
|
25
27
|
end
|
28
|
+
|
29
|
+
private
|
30
|
+
|
31
|
+
def is_not_jamis
|
32
|
+
if first_name == 'Jamis' && last_name == 'Buck'
|
33
|
+
errors.add(:base, :invalid)
|
34
|
+
end
|
35
|
+
end
|
26
36
|
end
|
metadata
CHANGED
@@ -1,41 +1,13 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: mongoid
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 8.0.
|
4
|
+
version: 8.0.9
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- The MongoDB Ruby Team
|
8
|
-
autorequire:
|
9
8
|
bindir: bin
|
10
|
-
cert_chain:
|
11
|
-
-
|
12
|
-
-----BEGIN CERTIFICATE-----
|
13
|
-
MIIEeDCCAuCgAwIBAgIBATANBgkqhkiG9w0BAQsFADBBMREwDwYDVQQDDAhkYngt
|
14
|
-
cnVieTEXMBUGCgmSJomT8ixkARkWB21vbmdvZGIxEzARBgoJkiaJk/IsZAEZFgNj
|
15
|
-
b20wHhcNMjMwMTMxMTE1NjM1WhcNMjQwMTMxMTE1NjM1WjBBMREwDwYDVQQDDAhk
|
16
|
-
YngtcnVieTEXMBUGCgmSJomT8ixkARkWB21vbmdvZGIxEzARBgoJkiaJk/IsZAEZ
|
17
|
-
FgNjb20wggGiMA0GCSqGSIb3DQEBAQUAA4IBjwAwggGKAoIBgQC0/Veq9l47cTfX
|
18
|
-
tQ+kHq2NOCwJuJGt1iXWQ/vH/yp7pZ/bLej7gPDl2CfIngAXRjM7r1FkR9ya7VAm
|
19
|
-
IneBFcVU3HhpIXWi4ByXGjBOXFD1Dfbz4C4zedIWRk/hNzXa+rQY4KPwpOwG/hZg
|
20
|
-
id+rSXWSbNlkyN97XfonweVh7JsIa9X/2JY9ADYjhCfEZF+b0+Wl7+jgwzLWb46I
|
21
|
-
0WH0bZBIZ0BbKAwUXIgvq5mQf9PzukmMVYCwnkJ/P4wrHO22HuwnbMyvJuGjVwqi
|
22
|
-
j1NRp/2vjmKBFWxIfhlSXEIiqAmeEVNXzhPvTVeyo+rma+7R3Bo+4WHkcnPpXJJZ
|
23
|
-
Jd63qXMvTB0GplEcMJPztWhrJOmcxIOVoQyigEPSQT8JpzFVXby4SGioizv2eT7l
|
24
|
-
VYSiCHuc3yEDyq5M+98WGX2etbj6esYtzI3rDevpIAHPB6HQmtoJIA4dSl3gjFb+
|
25
|
-
D+YQSuB2qYu021FI9zeY9sbZyWysEXBxhwrmTk+XUV0qz+OQZkMCAwEAAaN7MHkw
|
26
|
-
CQYDVR0TBAIwADALBgNVHQ8EBAMCBLAwHQYDVR0OBBYEFH4nnr4tYlatU57RbExW
|
27
|
-
jG86YM5nMB8GA1UdEQQYMBaBFGRieC1ydWJ5QG1vbmdvZGIuY29tMB8GA1UdEgQY
|
28
|
-
MBaBFGRieC1ydWJ5QG1vbmdvZGIuY29tMA0GCSqGSIb3DQEBCwUAA4IBgQAVSlgM
|
29
|
-
nFDWCCNLOCqG5/Lj4U62XoALkdCI+OZ30+WrA8qiRLSL9ZEziVK9AV7ylez+sriQ
|
30
|
-
m8XKZKsCN5ON4+zXw1S+6Ftz/R4zDg7nTb9Wgw8ibzsoiP6e4pRW3Fls3ZdaG4pW
|
31
|
-
+qMTbae9OiSrgI2bxNTII+v+1FcbQjOlMu8HPZ3ZfXnurXPgN5GxSyyclZI1QONO
|
32
|
-
HbUoKHRirZu0F7JCvQQq4EkSuLWPplRJfYEeJIYm05zhhFeEyqea2B/TTlCtXa42
|
33
|
-
84vxXsxGzumuO8F2Q9m6/p95sNhqCp0B/SkKXIrRGJ7FBzupoORNRXHviS2OC3ty
|
34
|
-
4lwUzOlLTF/yO0wwYYfmtQOALQwKnW838vbYthMXvTjxB0EgVZ5PKto99WbjsXzy
|
35
|
-
wkeAWhd5b+5JS0zgDL4SvGB8/W2IY+y0zELkojBMgJPyrpAWHL/WSsSBMuhyI2Pv
|
36
|
-
xxaBVLklnJJ/qCCOZ3lG2MyVc/Nb0Mmq8ygWNsfwHmKKYuuWcviit0D0Tek=
|
37
|
-
-----END CERTIFICATE-----
|
38
|
-
date: 2023-10-23 00:00:00.000000000 Z
|
9
|
+
cert_chain: []
|
10
|
+
date: 2025-01-29 00:00:00.000000000 Z
|
39
11
|
dependencies:
|
40
12
|
- !ruby/object:Gem::Dependency
|
41
13
|
name: activemodel
|
@@ -858,29 +830,6 @@ files:
|
|
858
830
|
- spec/mongoid_spec.rb
|
859
831
|
- spec/rails/controller_extension/controller_runtime_spec.rb
|
860
832
|
- spec/rails/mongoid_spec.rb
|
861
|
-
- spec/shared/LICENSE
|
862
|
-
- spec/shared/bin/get-mongodb-download-url
|
863
|
-
- spec/shared/bin/s3-copy
|
864
|
-
- spec/shared/bin/s3-upload
|
865
|
-
- spec/shared/lib/mrss/child_process_helper.rb
|
866
|
-
- spec/shared/lib/mrss/cluster_config.rb
|
867
|
-
- spec/shared/lib/mrss/constraints.rb
|
868
|
-
- spec/shared/lib/mrss/docker_runner.rb
|
869
|
-
- spec/shared/lib/mrss/eg_config_utils.rb
|
870
|
-
- spec/shared/lib/mrss/event_subscriber.rb
|
871
|
-
- spec/shared/lib/mrss/lite_constraints.rb
|
872
|
-
- spec/shared/lib/mrss/server_version_registry.rb
|
873
|
-
- spec/shared/lib/mrss/session_registry.rb
|
874
|
-
- spec/shared/lib/mrss/session_registry_legacy.rb
|
875
|
-
- spec/shared/lib/mrss/spec_organizer.rb
|
876
|
-
- spec/shared/lib/mrss/utils.rb
|
877
|
-
- spec/shared/share/Dockerfile.erb
|
878
|
-
- spec/shared/share/haproxy-1.conf
|
879
|
-
- spec/shared/share/haproxy-2.conf
|
880
|
-
- spec/shared/shlib/config.sh
|
881
|
-
- spec/shared/shlib/distro.sh
|
882
|
-
- spec/shared/shlib/server.sh
|
883
|
-
- spec/shared/shlib/set_env.sh
|
884
833
|
- spec/spec_helper.rb
|
885
834
|
- spec/support/authorization.rb
|
886
835
|
- spec/support/client_registry.rb
|
@@ -1163,7 +1112,6 @@ metadata:
|
|
1163
1112
|
documentation_uri: https://docs.mongodb.com/mongoid/
|
1164
1113
|
homepage_uri: https://mongoid.org/
|
1165
1114
|
source_code_uri: https://github.com/mongodb/mongoid
|
1166
|
-
post_install_message:
|
1167
1115
|
rdoc_options: []
|
1168
1116
|
require_paths:
|
1169
1117
|
- lib
|
@@ -1178,8 +1126,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
1178
1126
|
- !ruby/object:Gem::Version
|
1179
1127
|
version: 1.3.6
|
1180
1128
|
requirements: []
|
1181
|
-
rubygems_version: 3.
|
1182
|
-
signing_key:
|
1129
|
+
rubygems_version: 3.6.3
|
1183
1130
|
specification_version: 4
|
1184
1131
|
summary: Elegant Persistence in Ruby for MongoDB.
|
1185
1132
|
test_files:
|
@@ -1573,29 +1520,6 @@ test_files:
|
|
1573
1520
|
- spec/mongoid_spec.rb
|
1574
1521
|
- spec/rails/controller_extension/controller_runtime_spec.rb
|
1575
1522
|
- spec/rails/mongoid_spec.rb
|
1576
|
-
- spec/shared/LICENSE
|
1577
|
-
- spec/shared/bin/get-mongodb-download-url
|
1578
|
-
- spec/shared/bin/s3-copy
|
1579
|
-
- spec/shared/bin/s3-upload
|
1580
|
-
- spec/shared/lib/mrss/child_process_helper.rb
|
1581
|
-
- spec/shared/lib/mrss/cluster_config.rb
|
1582
|
-
- spec/shared/lib/mrss/constraints.rb
|
1583
|
-
- spec/shared/lib/mrss/docker_runner.rb
|
1584
|
-
- spec/shared/lib/mrss/eg_config_utils.rb
|
1585
|
-
- spec/shared/lib/mrss/event_subscriber.rb
|
1586
|
-
- spec/shared/lib/mrss/lite_constraints.rb
|
1587
|
-
- spec/shared/lib/mrss/server_version_registry.rb
|
1588
|
-
- spec/shared/lib/mrss/session_registry.rb
|
1589
|
-
- spec/shared/lib/mrss/session_registry_legacy.rb
|
1590
|
-
- spec/shared/lib/mrss/spec_organizer.rb
|
1591
|
-
- spec/shared/lib/mrss/utils.rb
|
1592
|
-
- spec/shared/share/Dockerfile.erb
|
1593
|
-
- spec/shared/share/haproxy-1.conf
|
1594
|
-
- spec/shared/share/haproxy-2.conf
|
1595
|
-
- spec/shared/shlib/config.sh
|
1596
|
-
- spec/shared/shlib/distro.sh
|
1597
|
-
- spec/shared/shlib/server.sh
|
1598
|
-
- spec/shared/shlib/set_env.sh
|
1599
1523
|
- spec/spec_helper.rb
|
1600
1524
|
- spec/support/authorization.rb
|
1601
1525
|
- spec/support/client_registry.rb
|
checksums.yaml.gz.sig
DELETED
Binary file
|
data/spec/shared/LICENSE
DELETED
@@ -1,20 +0,0 @@
|
|
1
|
-
Copyright (c) 2020 MongoDB, Inc.
|
2
|
-
|
3
|
-
Permission is hereby granted, free of charge, to any person obtaining
|
4
|
-
a copy of this software and associated documentation files (the
|
5
|
-
"Software"), to deal in the Software without restriction, including
|
6
|
-
without limitation the rights to use, copy, modify, merge, publish,
|
7
|
-
distribute, sublicense, and/or sell copies of the Software, and to
|
8
|
-
permit persons to whom the Software is furnished to do so, subject to
|
9
|
-
the following conditions:
|
10
|
-
|
11
|
-
The above copyright notice and this permission notice shall be
|
12
|
-
included in all copies or substantial portions of the Software.
|
13
|
-
|
14
|
-
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
15
|
-
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
16
|
-
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
|
17
|
-
NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
|
18
|
-
LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
|
19
|
-
OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
|
20
|
-
WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
@@ -1,17 +0,0 @@
|
|
1
|
-
#!/usr/bin/env ruby
|
2
|
-
|
3
|
-
desired_version, arch = ARGV
|
4
|
-
if arch.nil?
|
5
|
-
STDERR.puts "Usage: get-mongodb-download-url desired-version arch"
|
6
|
-
exit 1
|
7
|
-
end
|
8
|
-
|
9
|
-
$: << File.join(File.dirname(__FILE__), '../lib')
|
10
|
-
require 'mrss/server_version_registry'
|
11
|
-
|
12
|
-
begin
|
13
|
-
puts Mrss::ServerVersionRegistry.new(desired_version, arch).download_url
|
14
|
-
rescue Mrss::ServerVersionRegistry::Error => exc
|
15
|
-
STDERR.puts "Error: #{exc}"
|
16
|
-
exit 2
|
17
|
-
end
|
data/spec/shared/bin/s3-copy
DELETED
@@ -1,45 +0,0 @@
|
|
1
|
-
#!/usr/bin/env ruby
|
2
|
-
|
3
|
-
require 'optparse'
|
4
|
-
require 'aws-sdk-s3'
|
5
|
-
|
6
|
-
options = {}
|
7
|
-
OptionParser.new do |opts|
|
8
|
-
opts.banner = "Usage: s3-copy options"
|
9
|
-
|
10
|
-
opts.on("-r", "--region=REGION", "AWS region to use (default us-east-1)") do |v|
|
11
|
-
options[:region] = v
|
12
|
-
end
|
13
|
-
|
14
|
-
opts.on("-p", "--param=KEY=VALUE", "Specify parameter for new files") do |v|
|
15
|
-
options[:params] ||= {}
|
16
|
-
k, v = v.split('=', 2)
|
17
|
-
options[:params][k.to_sym] = v
|
18
|
-
end
|
19
|
-
|
20
|
-
opts.on("-f", "--from=BUCKET:PATH", "Bucket name and key (or path) to copy from") do |v|
|
21
|
-
options[:from] = v
|
22
|
-
end
|
23
|
-
|
24
|
-
opts.on("-t", "--to=BUCKET:PATH", "Bucket name and key (or path) to write to (may be specified more than once)") do |v|
|
25
|
-
options[:to] ||= []
|
26
|
-
options[:to] << v
|
27
|
-
end
|
28
|
-
end.parse!
|
29
|
-
|
30
|
-
ENV['AWS_REGION'] ||= options[:region] || 'us-east-1'
|
31
|
-
|
32
|
-
bucket, key = options.fetch(:from).split(':', 2)
|
33
|
-
|
34
|
-
s3 = Aws::S3::Client.new
|
35
|
-
|
36
|
-
options.fetch(:to).each do |dest|
|
37
|
-
STDERR.puts "Copying to #{dest}"
|
38
|
-
dbucket, dkey = dest.split(':', 2)
|
39
|
-
s3.copy_object(
|
40
|
-
bucket: dbucket,
|
41
|
-
key: dkey,
|
42
|
-
copy_source: "/#{bucket}/#{key}",
|
43
|
-
**options[:params] || {},
|
44
|
-
)
|
45
|
-
end
|
data/spec/shared/bin/s3-upload
DELETED
@@ -1,69 +0,0 @@
|
|
1
|
-
#!/usr/bin/env ruby
|
2
|
-
|
3
|
-
require 'optparse'
|
4
|
-
require 'aws-sdk-s3'
|
5
|
-
|
6
|
-
options = {}
|
7
|
-
OptionParser.new do |opts|
|
8
|
-
opts.banner = "Usage: s3-upload options"
|
9
|
-
|
10
|
-
opts.on("-r", "--region=REGION", "AWS region to use (default us-east-1)") do |v|
|
11
|
-
options[:region] = v
|
12
|
-
end
|
13
|
-
|
14
|
-
opts.on("-p", "--param=KEY=VALUE", "Specify parameter for S3 upload") do |v|
|
15
|
-
options[:params] ||= {}
|
16
|
-
k, v = v.split('=', 2)
|
17
|
-
options[:params][k.to_sym] = v
|
18
|
-
end
|
19
|
-
|
20
|
-
opts.on("-f", "--file=PATH", "Path to the file to upload, - to upload standard input") do |v|
|
21
|
-
options[:file] = v
|
22
|
-
end
|
23
|
-
|
24
|
-
opts.on("-w", "--write=BUCKET:PATH", "Bucket name and key (or path) to upload to") do |v|
|
25
|
-
options[:write] = v
|
26
|
-
end
|
27
|
-
|
28
|
-
opts.on("-c", "--copy=BUCKET:PATH", "Bucket name and key (or path) to copy to (may be specified more than once)") do |v|
|
29
|
-
options[:copy] ||= []
|
30
|
-
options[:copy] << v
|
31
|
-
end
|
32
|
-
end.parse!
|
33
|
-
|
34
|
-
ENV['AWS_REGION'] ||= options[:region] || 'us-east-1'
|
35
|
-
|
36
|
-
def upload(f, options)
|
37
|
-
s3 = Aws::S3::Client.new
|
38
|
-
write = options.fetch(:write)
|
39
|
-
STDERR.puts "Writing #{write}"
|
40
|
-
bucket, key = write.split(':', 2)
|
41
|
-
s3.put_object(
|
42
|
-
body: f.read,
|
43
|
-
bucket: bucket,
|
44
|
-
key: key,
|
45
|
-
**options[:params] || {},
|
46
|
-
)
|
47
|
-
if copy = options[:copy]
|
48
|
-
copy.each do |dest|
|
49
|
-
STDERR.puts "Copying to #{dest}"
|
50
|
-
dbucket, dkey = dest.split(':', 2)
|
51
|
-
s3.copy_object(
|
52
|
-
bucket: dbucket,
|
53
|
-
key: dkey,
|
54
|
-
copy_source: "/#{bucket}/#{key}",
|
55
|
-
**options[:params] || {},
|
56
|
-
)
|
57
|
-
end
|
58
|
-
end
|
59
|
-
end
|
60
|
-
|
61
|
-
if options[:file] == '-'
|
62
|
-
upload(STDIN, options)
|
63
|
-
elsif options[:file]
|
64
|
-
File.open(options[:file]) do |f|
|
65
|
-
upload(f, options)
|
66
|
-
end
|
67
|
-
else
|
68
|
-
upload(STDIN, options)
|
69
|
-
end
|
@@ -1,80 +0,0 @@
|
|
1
|
-
# frozen_string_literal: true
|
2
|
-
# encoding: utf-8
|
3
|
-
|
4
|
-
autoload :ChildProcess, 'childprocess'
|
5
|
-
autoload :Tempfile, 'tempfile'
|
6
|
-
|
7
|
-
module Mrss
|
8
|
-
module ChildProcessHelper
|
9
|
-
class SpawnError < StandardError; end
|
10
|
-
|
11
|
-
module_function def call(cmd, env: nil, cwd: nil)
|
12
|
-
process = ChildProcess.new(*cmd)
|
13
|
-
process.io.inherit!
|
14
|
-
if cwd
|
15
|
-
process.cwd = cwd
|
16
|
-
end
|
17
|
-
if env
|
18
|
-
env.each do |k, v|
|
19
|
-
process.environment[k.to_s] = v
|
20
|
-
end
|
21
|
-
end
|
22
|
-
process.start
|
23
|
-
process.wait
|
24
|
-
process
|
25
|
-
end
|
26
|
-
|
27
|
-
module_function def check_call(cmd, env: nil, cwd: nil)
|
28
|
-
process = call(cmd, env: env, cwd: cwd)
|
29
|
-
unless process.exit_code == 0
|
30
|
-
raise SpawnError, "Failed to execute: #{cmd}"
|
31
|
-
end
|
32
|
-
end
|
33
|
-
|
34
|
-
module_function def get_output(cmd, env: nil, cwd: nil)
|
35
|
-
process = ChildProcess.new(*cmd)
|
36
|
-
process.io.inherit!
|
37
|
-
if cwd
|
38
|
-
process.cwd = cwd
|
39
|
-
end
|
40
|
-
if env
|
41
|
-
env.each do |k, v|
|
42
|
-
process.environment[k.to_s] = v
|
43
|
-
end
|
44
|
-
end
|
45
|
-
|
46
|
-
output = ''
|
47
|
-
r, w = IO.pipe
|
48
|
-
|
49
|
-
begin
|
50
|
-
process.io.stdout = w
|
51
|
-
process.start
|
52
|
-
w.close
|
53
|
-
|
54
|
-
thread = Thread.new do
|
55
|
-
begin
|
56
|
-
loop do
|
57
|
-
output << r.readpartial(16384)
|
58
|
-
end
|
59
|
-
rescue EOFError
|
60
|
-
end
|
61
|
-
end
|
62
|
-
|
63
|
-
process.wait
|
64
|
-
thread.join
|
65
|
-
ensure
|
66
|
-
r.close
|
67
|
-
end
|
68
|
-
|
69
|
-
[process, output]
|
70
|
-
end
|
71
|
-
|
72
|
-
module_function def check_output(*args)
|
73
|
-
process, output = get_output(*args)
|
74
|
-
unless process.exit_code == 0
|
75
|
-
raise SpawnError,"Failed to execute: #{args}"
|
76
|
-
end
|
77
|
-
output
|
78
|
-
end
|
79
|
-
end
|
80
|
-
end
|