segiddins-test-gem 0.0.0.14

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.
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: []