segiddins-test-gem 0.0.0.14

Sign up to get free protection for your applications and to get access to all the features.
Files changed (3) hide show
  1. checksums.yaml +7 -0
  2. data/app.rb +93 -0
  3. metadata +57 -0
checksums.yaml ADDED
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA1:
3
+ metadata.gz: 4fd86f2018915fcd8c216a2ef71c92335b543cbe
4
+ data.tar.gz: ad42838df3929e169040a93c928be0231b14ea7a
5
+ SHA512:
6
+ metadata.gz: 0bf0e6676016dc02d19489a94442a08eeee70bcda79d7a13c442b0ae794815b016afff4b297c0fdd0e264d45db559fc582bcbf0d6a8fed58bf97434b1fac566b
7
+ data.tar.gz: 6f24f1907adfa690288905170a56e797150fb4f7a1959e4e420c8dca596ec9bd83e976e6345e409c18d0dd2ed60a188bc78319a97b55c16e4232e2c52927366f
data/app.rb ADDED
@@ -0,0 +1,93 @@
1
+ require "bundler/setup"
2
+
3
+ require "dotenv"
4
+ require "sinatra"
5
+ require "json"
6
+ require "rubygems/package"
7
+ require 'rubygems/commands/push_command'
8
+
9
+ Dotenv.load
10
+
11
+ Gem::DefaultUserInteraction.ui = Gem::ConsoleUI.new
12
+ Gem.configuration.rubygems_api_key = ENV.fetch("RUBYGEMS_API_KEY")
13
+
14
+ def get_json(host, path)
15
+ json = Net::HTTP.get(host, path)
16
+ JSON.load(json)
17
+ rescue
18
+ raise "Failed to load JSON from #{host}/#{path}:\n#{json}"
19
+ end
20
+
21
+ def push!(name, version)
22
+ spec = Gem::Specification.new do |s|
23
+ s.name = name
24
+ s.version = version
25
+ s.authors = ['example@example.com']
26
+ s.files = [__FILE__]
27
+ s.summary = 'test'
28
+ s.required_ruby_version = '~> 2.0'
29
+ s.required_rubygems_version = '~> 2.6'
30
+ s.add_dependency 'foo', '~> 1.0'
31
+ end
32
+ file = Gem::Package.build(spec)
33
+ Gem::Commands::PushCommand.new.send_gem(file)
34
+ ensure
35
+ File.delete(file)
36
+ end
37
+
38
+ def get_dependency_api(gem_name)
39
+ get_json('bundler.rubygems.org', "/api/v1/dependencies.json?gems=#{gem_name}")
40
+ end
41
+
42
+ def get_versions
43
+ Net::HTTP.get('index.rubygems.org', '/versions')
44
+ end
45
+
46
+ def get_info(name)
47
+ Net::HTTP.get('index.rubygems.org', "/info/#{name}")
48
+ end
49
+
50
+ post "/" do
51
+ halt 401, "token does not match" unless ENV["TOKEN"] == params['token']
52
+
53
+ version = params.fetch('version') { Time.now.strftime("%Y.%m.%d.%H.%M.%S") }
54
+ gem_name = ENV.fetch('GEM_NAME') { 'segiddins-test-gem' }
55
+
56
+ dependency_endpoint = get_dependency_api(gem_name)
57
+ versions = get_versions.lines
58
+ info = get_info(gem_name).lines
59
+
60
+ if dependency_endpoint.find { |g| g['version'] == version }
61
+ halt 422, "#{gem_name}-#{version} already was pushed"
62
+ end
63
+
64
+ begin
65
+ push!(gem_name, version)
66
+ rescue Gem::SystemExitException
67
+ halt 500, "Failed to push: #{$!}"
68
+ end
69
+
70
+ new_gem = get_dependency_api(gem_name) - dependency_endpoint
71
+ case new_gem.size
72
+ when 0 then halt 404, "gem not added to dependency API"
73
+ when 1
74
+ unless new_gem.first.values_at('name', 'number', 'platform', 'dependencies') == [gem_name, version, 'ruby', [['foo', '~> 1.0']]]
75
+ halt 404, "wrong gem added: #{new_gem}"
76
+ end
77
+ else halt 404, "too many new gems added: #{new_gem}"
78
+ end
79
+
80
+ new_versions = versions - get_versions.lines
81
+ unless new_versions.find { |l| l == "#{gem_name} #{version}" }
82
+ halt 404, "gem not added to versions file"
83
+ end
84
+
85
+ new_info = get_info(gem_name).lines - info
86
+ case new_info.size
87
+ when 0 then halt 404, "gem not added to dependency API"
88
+ when 1 then halt 404, "wrong gem added: #{new_info}" unless new_info =~ /^#{version} /
89
+ else halt 404, "too many new gems added: #{new_info}"
90
+ end
91
+
92
+ halt "successfully pushed #{gem_name}-#{version}"
93
+ end
metadata ADDED
@@ -0,0 +1,57 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: segiddins-test-gem
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.0.0.14
5
+ platform: ruby
6
+ authors:
7
+ - example@example.com
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2016-06-10 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: foo
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - "~>"
18
+ - !ruby/object:Gem::Version
19
+ version: '1.0'
20
+ type: :runtime
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - "~>"
25
+ - !ruby/object:Gem::Version
26
+ version: '1.0'
27
+ description:
28
+ email:
29
+ executables: []
30
+ extensions: []
31
+ extra_rdoc_files: []
32
+ files:
33
+ - app.rb
34
+ homepage:
35
+ licenses: []
36
+ metadata: {}
37
+ post_install_message:
38
+ rdoc_options: []
39
+ require_paths:
40
+ - lib
41
+ required_ruby_version: !ruby/object:Gem::Requirement
42
+ requirements:
43
+ - - "~>"
44
+ - !ruby/object:Gem::Version
45
+ version: '2.0'
46
+ required_rubygems_version: !ruby/object:Gem::Requirement
47
+ requirements:
48
+ - - "~>"
49
+ - !ruby/object:Gem::Version
50
+ version: '2.6'
51
+ requirements: []
52
+ rubyforge_project:
53
+ rubygems_version: 2.6.4
54
+ signing_key:
55
+ specification_version: 4
56
+ summary: test
57
+ test_files: []