scorn 0.3.1 → 0.4.1

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.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: cebb2eff53282bd30d083de64a8ed4ed2beba5fe05b6b61d2faf2c32dea4ed91
4
- data.tar.gz: bfd2381a856f11c5ebe4f278a25d207b76ef1ab5415ac2c448e68f5766c259ec
3
+ metadata.gz: db81b43557f802f076a4b23664f3b5700eb1a0700390b89965db7f587af64a1f
4
+ data.tar.gz: c1f31b4118e4a7d2e97cf22fecbaed95837fc20b6afd821cbfc2b629a528b566
5
5
  SHA512:
6
- metadata.gz: 45151e4ce0f25e4213d6fdd645bf09ce93df55f1a5bbe9036927884cbe555fc45189a3fa0b0724efc8520eded294944e38d76395cf05bcc07ff52276c33049a5
7
- data.tar.gz: 1523769e1a4bf6efa6132d0e3c9bedb81cb7580c28d48918f226cdc5ca73c128937440df6fbafb7ce468fd10b3127cdbdaadf2080442e3b23bdd25128c30cdbd
6
+ metadata.gz: 74f488814ae0260f156dbd56cf482eea5ef495671d2b0ab9c62fce6ee87d7380b79c7d1b047b9441e6f6e633c61265d2e431e4464a7d7da46cfa51a1abd5057c
7
+ data.tar.gz: 5017773301fc3459c46da16ae3b971b4fd0bf56b62912d4011deaef5c8911e21eba52a80907a5f413275b2bab3337c6f4a76335de50f3ada4b0f3fad61efec6a
data/CHANGELOG.md CHANGED
@@ -2,6 +2,19 @@
2
2
  # CHANGELOG.md
3
3
 
4
4
 
5
+ ## scorn 0.4.1 released 2026-09-02
6
+
7
+ * Tidy dependencies
8
+
9
+
10
+ ## scorn 0.4.0 released 2025-08-01
11
+
12
+ * Parse "[]" JSON arrays too
13
+ * Accept :auth or :authentication
14
+ * Fix :verify or :ssl_verify client option
15
+ * Add HEAD requests
16
+
17
+
5
18
  ## scorn 0.3.1 released 2021-01-12
6
19
 
7
20
  * Fix duplicate Content-Type headers when POSTing
data/LICENSE.txt CHANGED
@@ -1,5 +1,5 @@
1
1
 
2
- Copyright (c) 2021-2021, John Mettraux, jmettraux@gmail.com
2
+ Copyright (c) 2021-2026, John Mettraux, jmettraux@gmail.com
3
3
 
4
4
  Permission is hereby granted, free of charge, to any person obtaining a copy
5
5
  of this software and associated documentation files (the "Software"), to deal
data/README.md CHANGED
@@ -1,7 +1,7 @@
1
1
 
2
2
  # scorn
3
3
 
4
- [![tests](https://github.com/jmettraux/scorn/workflows/test/badge.svg)](https://github.com/jmettraux/scorn/actions)
4
+ <!--[![tests](https://github.com/jmettraux/scorn/workflows/test/badge.svg)](https://github.com/jmettraux/scorn/actions)-->
5
5
  [![gem version](https://badge.fury.io/rb/scorn.svg)](http://badge.fury.io/rb/scorn)
6
6
 
7
7
  A stupid HTTP client library.
data/lib/scorn.rb CHANGED
@@ -10,10 +10,15 @@ require 'net/http'
10
10
 
11
11
  module Scorn
12
12
 
13
- VERSION = '0.3.1'
13
+ VERSION = '0.4.1'.freeze
14
14
 
15
15
  class << self
16
16
 
17
+ def head(uri, opts={})
18
+
19
+ Scorn::Client.new(opts).head(uri, opts)
20
+ end
21
+
17
22
  def get(uri, opts={})
18
23
 
19
24
  Scorn::Client.new(opts).get(uri, opts)
@@ -39,11 +44,23 @@ module Scorn
39
44
  [ 'Ruby', RUBY_VERSION, RUBY_RELEASE_DATE, RUBY_PLATFORM ].join(' ')
40
45
 
41
46
  @ssl_verify_mode =
42
- (opts[:ssl_verify_none] == :none || opts[:verify_none] == :none) ?
47
+ (
48
+ opts[:ssl_verify] == :none || opts[:verify] == :none ||
49
+ opts[:ssl_verify] == false || opts[:verify] == false
50
+ ) ?
43
51
  OpenSSL::SSL::VERIFY_NONE : # :-(
44
52
  OpenSSL::SSL::VERIFY_PEER
45
53
  end
46
54
 
55
+ def head(uri, opts={})
56
+
57
+ u = uri.is_a?(String) ? URI(uri) : uri
58
+
59
+ res = request(u, make_head_req(u, opts))
60
+
61
+ opts[:res] ? res : read_response(res)
62
+ end
63
+
47
64
  def get(uri, opts={})
48
65
 
49
66
  u = uri.is_a?(String) ? URI(uri) : uri
@@ -64,25 +81,19 @@ module Scorn
64
81
 
65
82
  protected
66
83
 
67
- def make_get_req(uri, opts)
84
+ def make_head_req(uri, opts)
68
85
 
69
- accept =
70
- opts[:accept] ||
71
- (opts[:json] && 'application/json') ||
72
- '*/*'
86
+ make_req(:head, uri, gather_headers(:head, opts))
87
+ end
73
88
 
74
- make_req(
75
- :get, uri,
76
- agent: opts[:user_agent] || user_agent,
77
- accept: accept)
89
+ def make_get_req(uri, opts)
90
+
91
+ make_req(:get, uri, gather_headers(:get, opts))
78
92
  end
79
93
 
80
94
  def make_post_req(uri, opts)
81
95
 
82
- req = make_req(
83
- :post, uri,
84
- agent: opts[:user_agent] || user_agent,
85
- type: opts[:content_type] || 'application/x-www-form-urlencoded')
96
+ req = make_req(:post, uri, gather_headers(:post, opts))
86
97
 
87
98
  data = opts[:data]
88
99
  req.set_form_data(data) if data
@@ -90,6 +101,32 @@ module Scorn
90
101
  req
91
102
  end
92
103
 
104
+ def gather_headers(verb, opts)
105
+
106
+ h = {}
107
+
108
+ h['Accept'] =
109
+ opts[:accept] ||
110
+ (opts[:json] && 'application/json') ||
111
+ '*/*'
112
+ h['Agent'] =
113
+ opts[:user_agent] || user_agent
114
+ h['Authorization'] =
115
+ opts[:authorization] || opts[:auth]
116
+
117
+ h['Content-Type'] =
118
+ opts[:content_type] || 'application/x-www-form-urlencoded' \
119
+ if verb == :post
120
+
121
+ opts.each do |k, v|
122
+ h[k] = v if k.start_with?(/X-/)
123
+ end
124
+
125
+ h.compact!
126
+
127
+ h
128
+ end
129
+
93
130
  def make_req(type, uri, headers)
94
131
 
95
132
  u = [ uri.path, uri.query ].compact.join('?')
@@ -97,21 +134,13 @@ module Scorn
97
134
 
98
135
  req =
99
136
  case type
137
+ when :head then Net::HTTP::Head.new(u)
100
138
  when :get then Net::HTTP::Get.new(u)
101
139
  when :post then Net::HTTP::Post.new(u)
102
140
  else fail ArgumentError.new("HTTP #{type} not implemented")
103
141
  end
104
142
 
105
- headers.each do |k, v|
106
- hk =
107
- case k
108
- when :accept then 'Accept'
109
- when :agent then 'User-Agent'
110
- when :type then 'Content-Type'
111
- else k.to_s
112
- end
113
- req[hk] = v
114
- end
143
+ headers.each { |k, v| req[k] = v }
115
144
 
116
145
  req
117
146
  end
@@ -162,11 +191,15 @@ module Scorn
162
191
  def read_response(res)
163
192
 
164
193
  s = res.body
165
- st = s.strip
194
+ st = s ? s.strip : ''
195
+
196
+ a_z = "#{st[0, 1]}#{st[-1, 1]}"
166
197
 
167
198
  r =
168
- if st[0, 1] == '{' && st[-1, 1] == '}'
199
+ if a_z == '{}' || a_z == '[]'
169
200
  JSON.parse(st) rescue s
201
+ elsif s == nil
202
+ ''
170
203
  else
171
204
  s
172
205
  end
data/scorn.gemspec CHANGED
@@ -22,24 +22,26 @@ A stupid HTTP client library. Consider with scorn.
22
22
  'changelog_uri' => s.homepage + '/blob/master/CHANGELOG.md',
23
23
  'documentation_uri' => s.homepage,
24
24
  'bug_tracker_uri' => s.homepage + '/issues',
25
- #'mailing_list_uri' => 'https://groups.google.com/forum/#!forum/floraison',
26
25
  'homepage_uri' => s.homepage,
27
26
  'source_code_uri' => s.homepage,
27
+ #'mailing_list_uri' => 'https://groups.google.com/forum/#!forum/floraison',
28
28
  #'wiki_uri' => s.homepage + '/wiki',
29
+ 'rubygems_mfa_required' => 'true',
29
30
  }
30
31
 
31
32
  #s.files = `git ls-files`.split("\n")
32
33
  s.files = Dir[
33
- 'README.{md,txt}',
34
- 'CHANGELOG.{md,txt}', 'CREDITS.{md,txt}', 'LICENSE.{md,txt}',
35
- 'Makefile',
34
+ '{README,CHANGELOG,CREDITS,LICENSE}.{md,txt}',
35
+ #'Makefile',
36
36
  'lib/**/*.rb', #'spec/**/*.rb', 'test/**/*.rb',
37
37
  "#{s.name}.gemspec",
38
38
  ]
39
39
 
40
- #s.add_runtime_dependency 'raabro', '~> 1.4'
40
+ s.add_runtime_dependency 'base64'
41
+ s.add_runtime_dependency 'webrick'
42
+ s.add_runtime_dependency 'ostruct'
41
43
 
42
- s.add_development_dependency 'rspec', '~> 3.8'
44
+ s.add_development_dependency 'probatio', '~> 1.6'
43
45
 
44
46
  s.require_path = 'lib'
45
47
  end
metadata CHANGED
@@ -1,29 +1,70 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: scorn
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.3.1
4
+ version: 0.4.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - John Mettraux
8
- autorequire:
9
8
  bindir: bin
10
9
  cert_chain: []
11
- date: 2021-01-12 00:00:00.000000000 Z
10
+ date: 1980-01-02 00:00:00.000000000 Z
12
11
  dependencies:
13
12
  - !ruby/object:Gem::Dependency
14
- name: rspec
13
+ name: base64
14
+ requirement: !ruby/object:Gem::Requirement
15
+ requirements:
16
+ - - ">="
17
+ - !ruby/object:Gem::Version
18
+ version: '0'
19
+ type: :runtime
20
+ prerelease: false
21
+ version_requirements: !ruby/object:Gem::Requirement
22
+ requirements:
23
+ - - ">="
24
+ - !ruby/object:Gem::Version
25
+ version: '0'
26
+ - !ruby/object:Gem::Dependency
27
+ name: webrick
28
+ requirement: !ruby/object:Gem::Requirement
29
+ requirements:
30
+ - - ">="
31
+ - !ruby/object:Gem::Version
32
+ version: '0'
33
+ type: :runtime
34
+ prerelease: false
35
+ version_requirements: !ruby/object:Gem::Requirement
36
+ requirements:
37
+ - - ">="
38
+ - !ruby/object:Gem::Version
39
+ version: '0'
40
+ - !ruby/object:Gem::Dependency
41
+ name: ostruct
42
+ requirement: !ruby/object:Gem::Requirement
43
+ requirements:
44
+ - - ">="
45
+ - !ruby/object:Gem::Version
46
+ version: '0'
47
+ type: :runtime
48
+ prerelease: false
49
+ version_requirements: !ruby/object:Gem::Requirement
50
+ requirements:
51
+ - - ">="
52
+ - !ruby/object:Gem::Version
53
+ version: '0'
54
+ - !ruby/object:Gem::Dependency
55
+ name: probatio
15
56
  requirement: !ruby/object:Gem::Requirement
16
57
  requirements:
17
58
  - - "~>"
18
59
  - !ruby/object:Gem::Version
19
- version: '3.8'
60
+ version: '1.6'
20
61
  type: :development
21
62
  prerelease: false
22
63
  version_requirements: !ruby/object:Gem::Requirement
23
64
  requirements:
24
65
  - - "~>"
25
66
  - !ruby/object:Gem::Version
26
- version: '3.8'
67
+ version: '1.6'
27
68
  description: A stupid HTTP client library. Consider with scorn.
28
69
  email:
29
70
  - jmettraux@gmail.com
@@ -34,7 +75,6 @@ files:
34
75
  - CHANGELOG.md
35
76
  - CREDITS.md
36
77
  - LICENSE.txt
37
- - Makefile
38
78
  - README.md
39
79
  - lib/scorn.rb
40
80
  - scorn.gemspec
@@ -47,7 +87,7 @@ metadata:
47
87
  bug_tracker_uri: https://github.com/jmettraux/scorn/issues
48
88
  homepage_uri: https://github.com/jmettraux/scorn
49
89
  source_code_uri: https://github.com/jmettraux/scorn
50
- post_install_message:
90
+ rubygems_mfa_required: 'true'
51
91
  rdoc_options: []
52
92
  require_paths:
53
93
  - lib
@@ -62,8 +102,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
62
102
  - !ruby/object:Gem::Version
63
103
  version: '0'
64
104
  requirements: []
65
- rubygems_version: 3.0.3
66
- signing_key:
105
+ rubygems_version: 3.6.9
67
106
  specification_version: 4
68
107
  summary: stupid HTTP client
69
108
  test_files: []
data/Makefile DELETED
@@ -1,45 +0,0 @@
1
-
2
- ## gem tasks ##
3
-
4
- NAME = \
5
- $(shell ruby -e "s = eval(File.read(Dir['*.gemspec'][0])); puts s.name")
6
- VERSION = \
7
- $(shell ruby -e "s = eval(File.read(Dir['*.gemspec'][0])); puts s.version")
8
-
9
- count_lines:
10
- find lib -name "*.rb" | xargs cat | ruby -e "p STDIN.readlines.count { |l| l = l.strip; l[0, 1] != '#' && l != '' }"
11
- find spec -name "*_spec.rb" | xargs cat | ruby -e "p STDIN.readlines.count { |l| l = l.strip; l[0, 1] != '#' && l != '' }"
12
- cl: count_lines
13
-
14
- scan:
15
- scan lib/**/*.rb
16
-
17
- gemspec_validate:
18
- @echo "---"
19
- ruby -e "s = eval(File.read(Dir['*.gemspec'].first)); p s.validate"
20
- @echo "---"
21
-
22
- name: gemspec_validate
23
- @echo "$(NAME) $(VERSION)"
24
-
25
- cw:
26
- find lib -name "*.rb" -exec ruby -cw {} \;
27
-
28
- build: gemspec_validate
29
- gem build $(NAME).gemspec
30
- mkdir -p pkg
31
- mv $(NAME)-$(VERSION).gem pkg/
32
-
33
- push: build
34
- gem push --otp "$(OTP)" pkg/$(NAME)-$(VERSION).gem
35
-
36
- spec:
37
- bundle exec rspec
38
- test: spec
39
-
40
-
41
- ## specific to project ##
42
-
43
-
44
- .PHONY: count_lines scan gemspec_validate name cw build push spec
45
-