ur 0.1.1 → 0.2.0

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: 20d9f65430cb5e9571314e578ec2c6ec838e694eef3970d02005e4f1589db0d0
4
- data.tar.gz: e3bcf5550424177a7036ca7eafe91d32ed73c4b7a2c855dfbabd36d7606bebbd
3
+ metadata.gz: '08e517b90ad97d890764bc228d8836e7e48d7f8250ed7c3a4878368b77b2deb2'
4
+ data.tar.gz: e87aedb3a622a5606bff0370cc1a06f43d98be53488389c1902e989226760cd1
5
5
  SHA512:
6
- metadata.gz: fbd253924bb53b4f78a368c97b51ec643694faa7770b5b1d1931791deb14f5d5bdbedff7d19197f478da540105c52ebea6b4eb3397cfa799c50f13c985b980a7
7
- data.tar.gz: e5a7adeeefbb79feeb23cde88fe441ba6bab2520dd37485ad456d2f62c66d5e7eb0638d6b9da7156eaf28a0344a822dce9dd5bdfec11059e0c7ba8d13883fcc8
6
+ metadata.gz: '069f50e6768b41beb13830308fd3a3d18845c32fc38f6e95755b8f929ba88e20efcfce8f84abf50ed393a93f9c2971bb7b280e5793d43098c06dc034f136487c'
7
+ data.tar.gz: 42c005bf4853f4bb946a2bd143696c84fa84c6f933b71a6425505722aab150f290ab21265ac2b6e9fdaa313e0207becb46f5a14ff20a7cd2c18e4daa53d12084
@@ -1,3 +1,7 @@
1
+ # v0.2.0
2
+
3
+ - Ur uses JSI schema modules instead of classes
4
+
1
5
  # v0.1.1
2
6
  - minor fixes
3
7
 
data/lib/ur.rb CHANGED
@@ -8,8 +8,8 @@ require 'addressable/uri'
8
8
  require 'pathname'
9
9
 
10
10
  UR_ROOT = Pathname.new(__FILE__).dirname.parent.expand_path
11
- Ur = JSI.class_for_schema(YAML.load_file(UR_ROOT.join('resources/ur.schema.yml')))
12
- class Ur
11
+ Ur = JSI::Schema.new(YAML.load_file(UR_ROOT.join('resources/ur.schema.yml'))).jsi_schema_module
12
+ module Ur
13
13
  VERSION = UR_VERSION
14
14
 
15
15
  autoload :SubUr, 'ur/sub_ur'
@@ -19,9 +19,9 @@ class Ur
19
19
  autoload :RackMiddleware, 'ur/middleware'
20
20
  autoload :Faraday, 'ur/faraday'
21
21
 
22
- Request = JSI.class_for_schema(self.schema['properties']['request'])
23
- Response = JSI.class_for_schema(self.schema['properties']['response'])
24
- Metadata = JSI.class_for_schema(self.schema['properties']['metadata'])
22
+ Request = self.schema.properties['request'].jsi_schema_module
23
+ Response = self.schema.properties['response'].jsi_schema_module
24
+ Metadata = self.schema.properties['metadata'].jsi_schema_module
25
25
  require 'ur/request'
26
26
  require 'ur/response'
27
27
  require 'ur/metadata'
@@ -29,7 +29,20 @@ class Ur
29
29
  autoload :ContentType, 'ur/content_type'
30
30
 
31
31
  class << self
32
- def from_rack_request(request_env)
32
+ def new(instance = {}, schemas: Set[], **options)
33
+ unless instance.respond_to?(:to_hash)
34
+ raise(TypeError, "expected hash for ur instance. got: #{instance.pretty_inspect.chomp}")
35
+ end
36
+
37
+ ur_class = JSI.class_for_schemas(Set[schema] + schemas)
38
+ ur_class.new(instance, options).tap do |ur|
39
+ ur.request = {} if ur.request.nil?
40
+ ur.response = {} if ur.response.nil?
41
+ ur.metadata = {} if ur.metadata.nil?
42
+ end
43
+ end
44
+
45
+ def from_rack_request(request_env, **options)
33
46
  if request_env.is_a?(Rack::Request)
34
47
  rack_request = request_env
35
48
  env = request_env.env
@@ -38,7 +51,7 @@ class Ur
38
51
  env = request_env
39
52
  end
40
53
 
41
- new({'bound' => 'inbound'}).tap do |ur|
54
+ new({'bound' => 'inbound'}, options).tap do |ur|
42
55
  ur.request['method'] = rack_request.request_method
43
56
 
44
57
  ur.request.addressable_uri = Addressable::URI.new(
@@ -68,8 +81,8 @@ class Ur
68
81
  end
69
82
  end
70
83
 
71
- def from_faraday_request(request_env)
72
- new({'bound' => 'outbound'}).tap do |ur|
84
+ def from_faraday_request(request_env, **options)
85
+ new({'bound' => 'outbound'}, options).tap do |ur|
73
86
  ur.request['method'] = request_env[:method].to_s
74
87
  ur.request.uri = request_env[:url].normalize.to_s
75
88
  ur.request.headers = request_env[:request_headers]
@@ -78,16 +91,6 @@ class Ur
78
91
  end
79
92
  end
80
93
 
81
- def initialize(ur = {}, **opt, &b)
82
- super(ur, **opt, &b)
83
- unless instance.respond_to?(:to_hash)
84
- raise(TypeError, "expected hash argument. got: #{ur.pretty_inspect.chomp}")
85
- end
86
- self.request = {} if self.request.nil?
87
- self.response = {} if self.response.nil?
88
- self.metadata = {} if self.metadata.nil?
89
- end
90
-
91
94
  # Ur#logger_tags applies tags from a tagged logger to this ur's metadata.
92
95
  # note: ur does not log anything and this logger is not stored.
93
96
  # @param [logger] a tagged logger
@@ -2,7 +2,7 @@
2
2
 
3
3
  require 'ur' unless Object.const_defined?(:Ur)
4
4
 
5
- class Ur
5
+ module Ur
6
6
  # Ur::ContentType represents a Content-Type header field.
7
7
  # it parses the media type and its components, as well as any parameters.
8
8
  #
@@ -2,7 +2,7 @@
2
2
 
3
3
  require 'faraday'
4
4
 
5
- class Ur
5
+ module Ur
6
6
  module Faraday
7
7
  autoload :YieldUr, 'ur/faraday/yield_ur'
8
8
  end
@@ -1,24 +1,12 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- class Ur
3
+ module Ur
4
4
  module Faraday
5
5
  # Faraday middleware which yields an Ur to the given block
6
6
  class YieldUr < ::Ur::FaradayMiddleware
7
- def initialize(app, options = {}, &block)
7
+ def initialize(app, **options, &block)
8
8
  raise(ArgumentError, "no block given to yield ur") unless block
9
- raise(TypeError, "options must be a Hash") unless options.respond_to?(:to_hash)
10
- @app = app
11
- @options = options
12
- @yield_to = block
13
- end
14
-
15
- def call(request_env)
16
- ur = (@options[:ur_class] || Ur).from_faraday_request(request_env)
17
- begin_request(ur)
18
- ur.faraday_on_complete(@app, request_env) do |response_env|
19
- finish_request(ur)
20
- @yield_to.call(ur)
21
- end
9
+ super(app, options.merge(after_response: block))
22
10
  end
23
11
  end
24
12
  end
@@ -2,8 +2,8 @@
2
2
 
3
3
  require 'ur' unless Object.const_defined?(:Ur)
4
4
 
5
- class Ur
6
- class Metadata
5
+ module Ur
6
+ module Metadata
7
7
  include SubUr
8
8
 
9
9
  def began_at
@@ -17,8 +17,8 @@ class Ur
17
17
 
18
18
  # sets began_at from the current time
19
19
  def begin!
20
- self.began_at ||= Time.now
21
- self.began_at_ns ||= Process.clock_gettime(Process::CLOCK_MONOTONIC, :nanosecond)
20
+ self.began_at = Time.now
21
+ self.began_at_ns = Process.clock_gettime(Process::CLOCK_MONOTONIC, :nanosecond)
22
22
  end
23
23
 
24
24
  # sets the duration from the current time and began_at
@@ -2,7 +2,7 @@
2
2
 
3
3
  require 'ur' unless Object.const_defined?(:Ur)
4
4
 
5
- class Ur
5
+ module Ur
6
6
  module Middleware
7
7
  def initialize(app, options = {})
8
8
  @app = app
@@ -30,7 +30,7 @@ class Ur
30
30
  class FaradayMiddleware < ::Faraday::Middleware
31
31
  include Ur::Middleware
32
32
  def call(request_env)
33
- ur = Ur.from_faraday_request(request_env)
33
+ ur = Ur.from_faraday_request(request_env, @options.select { |k, _| [:schemas].include?(k) })
34
34
  invoke_callback(:before_request, ur)
35
35
  begin_request(ur)
36
36
  ur.faraday_on_complete(@app, request_env) do |response_env|
@@ -43,7 +43,7 @@ class Ur
43
43
  class RackMiddleware
44
44
  include Ur::Middleware
45
45
  def call(env)
46
- ur = Ur.from_rack_request(env)
46
+ ur = Ur.from_rack_request(env, @options.select { |k, _| [:schemas].include?(k) })
47
47
  invoke_callback(:before_request, ur)
48
48
  begin_request(ur)
49
49
  ur.with_rack_response(@app, env) do
@@ -2,8 +2,8 @@
2
2
 
3
3
  require 'ur' unless Object.const_defined?(:Ur)
4
4
 
5
- class Ur
6
- class Request
5
+ module Ur
6
+ module Request
7
7
  include RequestAndResponse
8
8
  include SubUr
9
9
 
@@ -2,7 +2,7 @@
2
2
 
3
3
  require 'ur' unless Object.const_defined?(:Ur)
4
4
 
5
- class Ur
5
+ module Ur
6
6
  # functionality common to Request and Response
7
7
  module RequestAndResponse
8
8
  # functionality for handling request/response entities from Faraday
@@ -2,8 +2,8 @@
2
2
 
3
3
  require 'ur' unless Object.const_defined?(:Ur)
4
4
 
5
- class Ur
6
- class Response
5
+ module Ur
6
+ module Response
7
7
  include RequestAndResponse
8
8
  include SubUr
9
9
 
@@ -2,10 +2,10 @@
2
2
 
3
3
  require 'ur' unless Object.const_defined?(:Ur)
4
4
 
5
- class Ur
5
+ module Ur
6
6
  module SubUr
7
7
  def ur
8
- parents.detect { |p| p.is_a?(::Ur) }
8
+ parent_jsis.detect { |p| p.is_a?(::Ur) }
9
9
  end
10
10
  end
11
11
  end
@@ -1 +1 @@
1
- UR_VERSION = "0.1.1".freeze
1
+ UR_VERSION = "0.2.0".freeze
@@ -9,11 +9,11 @@ describe 'Ur faraday integration' do
9
9
  builder.use(Ur::FaradayMiddleware,
10
10
  after_response: -> (ur_) { ur = ur_ },
11
11
  )
12
- builder.use(Faraday::Adapter::Rack, -> (env) { [200, {'Content-Type' => 'text/plain'}, ['ᚒ']] })
12
+ builder.adapter(:rack, -> (env) { [200, {'Content-Type' => 'text/plain'}, ['ᚒ']] })
13
13
  end
14
14
  res = faraday_conn.get('/')
15
15
  assert_equal('ᚒ', res.body)
16
- assert_instance_of(Ur, ur)
16
+ assert_kind_of(Ur, ur)
17
17
  assert_equal('get', ur.request['method'])
18
18
  assert_equal('text/plain', ur.response.headers['Content-Type'])
19
19
  assert_equal('ᚒ', ur.response.body)
@@ -25,11 +25,11 @@ describe 'Ur faraday integration' do
25
25
  builder.use(Ur::FaradayMiddleware,
26
26
  after_response: -> (ur_) { ur = ur_ },
27
27
  )
28
- builder.use(Faraday::Adapter::Rack, -> (env) { [200, {'Content-Type' => 'text/plain'}, ['☺']] })
28
+ builder.adapter(:rack, -> (env) { [200, {'Content-Type' => 'text/plain'}, ['☺']] })
29
29
  end
30
30
  res = faraday_conn.post('/', StringIO.new('hello!'))
31
31
  assert_equal('☺', res.body)
32
- assert_instance_of(Ur, ur)
32
+ assert_kind_of(Ur, ur)
33
33
  assert_equal('post', ur.request['method'])
34
34
  assert_equal('hello!', ur.request.body)
35
35
  assert_equal('text/plain', ur.response.headers['Content-Type'])
@@ -44,11 +44,11 @@ describe 'Ur faraday integration' do
44
44
  after_response: -> (ur_) { ur = ur_ },
45
45
  )
46
46
  builder.response :json, preserve_raw: true
47
- builder.use(Faraday::Adapter::Rack, -> (env) { [200, {'Content-Type' => 'application/json'}, ['{}']] })
47
+ builder.adapter(:rack, -> (env) { [200, {'Content-Type' => 'application/json'}, ['{}']] })
48
48
  end
49
49
  res = faraday_conn.post('/', {'a' => 'b'})
50
50
  assert_equal({}, res.body)
51
- assert_instance_of(Ur, ur)
51
+ assert_kind_of(Ur, ur)
52
52
  assert_equal('post', ur.request['method'])
53
53
  assert_equal('{"a":"b"}', ur.request.body)
54
54
  assert_equal('application/json', ur.response.headers['Content-Type'])
@@ -63,11 +63,11 @@ describe 'Ur faraday integration' do
63
63
  )
64
64
  builder.request :json
65
65
  builder.response :json
66
- builder.use(Faraday::Adapter::Rack, -> (env) { [200, {'Content-Type' => 'application/json'}, ['{}']] })
66
+ builder.adapter(:rack, -> (env) { [200, {'Content-Type' => 'application/json'}, ['{}']] })
67
67
  end
68
68
  res = faraday_conn.post('/', {'a' => 'b'})
69
69
  assert_equal({}, res.body)
70
- assert_instance_of(Ur, ur)
70
+ assert_kind_of(Ur, ur)
71
71
  assert_equal('post', ur.request['method'])
72
72
  assert_nil(ur.request.body) # no good
73
73
  assert_json_equal({"a" => "b"}, ur.request['body_parsed']) # best we get here
@@ -8,7 +8,7 @@ describe 'Ur' do
8
8
  end
9
9
 
10
10
  it 'initializes' do
11
- Ur.new({})
11
+ Ur.new_jsi({})
12
12
  end
13
13
 
14
14
  it 'would prefer not to initialize' do
@@ -92,7 +92,7 @@ describe 'Ur' do
92
92
  assert(ur.validate)
93
93
  end,
94
94
  )
95
- builder.use(Faraday::Adapter::Rack, rack_app)
95
+ builder.adapter(:rack, rack_app)
96
96
  end
97
97
  res = faraday_conn.get('/', nil, {'Foo' => 'bar'})
98
98
  assert(called_rack_before_request)
data/ur.gemspec CHANGED
@@ -19,7 +19,7 @@ Gem::Specification.new do |spec|
19
19
  spec.test_files = `git ls-files -z test`.split("\x0") + ['.simplecov']
20
20
  spec.require_paths = ["lib"]
21
21
 
22
- spec.add_dependency "jsi", ">= 0.2.0", "< 0.4.0"
22
+ spec.add_dependency "jsi", "~> 0.4"
23
23
  spec.add_dependency "addressable", "~> 2.0"
24
24
  spec.add_development_dependency "rack"
25
25
  spec.add_development_dependency "rack-test"
metadata CHANGED
@@ -1,35 +1,29 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: ur
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.1
4
+ version: 0.2.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Ethan
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2020-02-09 00:00:00.000000000 Z
11
+ date: 2020-07-06 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: jsi
15
15
  requirement: !ruby/object:Gem::Requirement
16
16
  requirements:
17
- - - ">="
18
- - !ruby/object:Gem::Version
19
- version: 0.2.0
20
- - - "<"
17
+ - - "~>"
21
18
  - !ruby/object:Gem::Version
22
- version: 0.4.0
19
+ version: '0.4'
23
20
  type: :runtime
24
21
  prerelease: false
25
22
  version_requirements: !ruby/object:Gem::Requirement
26
23
  requirements:
27
- - - ">="
28
- - !ruby/object:Gem::Version
29
- version: 0.2.0
30
- - - "<"
24
+ - - "~>"
31
25
  - !ruby/object:Gem::Version
32
- version: 0.4.0
26
+ version: '0.4'
33
27
  - !ruby/object:Gem::Dependency
34
28
  name: addressable
35
29
  requirement: !ruby/object:Gem::Requirement