ur 0.1.1 → 0.2.0

Sign up to get free protection for your applications and to get access to all the features.
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