etwin 0.0.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.
Files changed (77) hide show
  1. checksums.yaml +7 -0
  2. data/.gitignore +11 -0
  3. data/.rspec +3 -0
  4. data/.rubocop.yml +11 -0
  5. data/.travis.yml +6 -0
  6. data/Gemfile +9 -0
  7. data/Gemfile.lock +82 -0
  8. data/README.md +30 -0
  9. data/Rakefile +8 -0
  10. data/bin/console +15 -0
  11. data/bin/setup +8 -0
  12. data/etwin.gemspec +37 -0
  13. data/lib/etwin.rb +27 -0
  14. data/lib/etwin/_auth.rb +4 -0
  15. data/lib/etwin/auth.rb +14 -0
  16. data/lib/etwin/auth/_auth_context.rb +30 -0
  17. data/lib/etwin/auth/auth_context.rb +9 -0
  18. data/lib/etwin/auth/auth_scope.rb +25 -0
  19. data/lib/etwin/auth/auth_type.rb +26 -0
  20. data/lib/etwin/auth/guest_auth_context.rb +71 -0
  21. data/lib/etwin/auth/user_auth_context.rb +83 -0
  22. data/lib/etwin/client.rb +11 -0
  23. data/lib/etwin/client/auth.rb +66 -0
  24. data/lib/etwin/client/etwin_client.rb +17 -0
  25. data/lib/etwin/client/http_etwin_client.rb +36 -0
  26. data/lib/etwin/core.rb +10 -0
  27. data/lib/etwin/core/object_type.rb +35 -0
  28. data/lib/etwin/hammerfest.rb +13 -0
  29. data/lib/etwin/hammerfest/hammerfest_server.rb +27 -0
  30. data/lib/etwin/hammerfest/hammerfest_user_id.rb +57 -0
  31. data/lib/etwin/hammerfest/hammerfest_username.rb +57 -0
  32. data/lib/etwin/hammerfest/short_hammerfest_user.rb +103 -0
  33. data/lib/etwin/link.rb +15 -0
  34. data/lib/etwin/link/hammerfest_link.rb +106 -0
  35. data/lib/etwin/link/link_action.rb +93 -0
  36. data/lib/etwin/link/twinoid_link.rb +106 -0
  37. data/lib/etwin/link/versioned_hammerfest_link.rb +93 -0
  38. data/lib/etwin/link/versioned_links.rb +123 -0
  39. data/lib/etwin/link/versioned_twinoid_link.rb +93 -0
  40. data/lib/etwin/twinoid.rb +12 -0
  41. data/lib/etwin/twinoid/short_twinoid_user.rb +93 -0
  42. data/lib/etwin/twinoid/twinoid_user_display_name.rb +57 -0
  43. data/lib/etwin/twinoid/twinoid_user_id.rb +57 -0
  44. data/lib/etwin/user.rb +15 -0
  45. data/lib/etwin/user/short_user.rb +93 -0
  46. data/lib/etwin/user/user.rb +123 -0
  47. data/lib/etwin/user/user_display_name.rb +57 -0
  48. data/lib/etwin/user/user_display_name_version.rb +83 -0
  49. data/lib/etwin/user/user_display_name_versions.rb +83 -0
  50. data/lib/etwin/user/user_id.rb +57 -0
  51. data/lib/etwin/version.rb +6 -0
  52. data/sorbet/config +2 -0
  53. data/sorbet/rbi/gems/ast.rbi +48 -0
  54. data/sorbet/rbi/gems/debase.rbi +67 -0
  55. data/sorbet/rbi/gems/irb.rbi +352 -0
  56. data/sorbet/rbi/gems/parallel.rbi +83 -0
  57. data/sorbet/rbi/gems/parser.rbi +1405 -0
  58. data/sorbet/rbi/gems/rainbow.rbi +118 -0
  59. data/sorbet/rbi/gems/rake.rbi +644 -0
  60. data/sorbet/rbi/gems/regexp_parser.rbi +914 -0
  61. data/sorbet/rbi/gems/reline.rbi +556 -0
  62. data/sorbet/rbi/gems/rexml.rbi +605 -0
  63. data/sorbet/rbi/gems/rspec-core.rbi +1920 -0
  64. data/sorbet/rbi/gems/rspec-expectations.rbi +1148 -0
  65. data/sorbet/rbi/gems/rspec-mocks.rbi +1090 -0
  66. data/sorbet/rbi/gems/rspec-support.rbi +280 -0
  67. data/sorbet/rbi/gems/rspec.rbi +15 -0
  68. data/sorbet/rbi/gems/rubocop-ast.rbi +1338 -0
  69. data/sorbet/rbi/gems/rubocop.rbi +7491 -0
  70. data/sorbet/rbi/gems/ruby-debug-ide.rbi +608 -0
  71. data/sorbet/rbi/gems/ruby-progressbar.rbi +305 -0
  72. data/sorbet/rbi/gems/unicode-display_width.rbi +17 -0
  73. data/sorbet/rbi/hidden-definitions/errors.txt +4905 -0
  74. data/sorbet/rbi/hidden-definitions/hidden.rbi +9193 -0
  75. data/sorbet/rbi/sorbet-typed/lib/rainbow/all/rainbow.rbi +276 -0
  76. data/sorbet/rbi/todo.rbi +7 -0
  77. metadata +220 -0
@@ -0,0 +1,15 @@
1
+ # typed: strict
2
+ # frozen_string_literal: true
3
+
4
+ module Etwin
5
+ # Account links module
6
+ module Link
7
+ end
8
+ end
9
+
10
+ require_relative './link/hammerfest_link'
11
+ require_relative './link/link_action'
12
+ require_relative './link/twinoid_link'
13
+ require_relative './link/versioned_hammerfest_link'
14
+ require_relative './link/versioned_links'
15
+ require_relative './link/versioned_twinoid_link'
@@ -0,0 +1,106 @@
1
+ # typed: strict
2
+ # frozen_string_literal: true
3
+
4
+ module Etwin
5
+ module Link
6
+ # Link to a Hammerfest user from an Eternal-Twin user
7
+ class HammerfestLink
8
+ extend T::Helpers
9
+ extend T::Sig
10
+
11
+ final!
12
+
13
+ sig(:final) { returns(LinkAction) }
14
+ attr_reader :link
15
+
16
+ sig(:final) { returns(T.nilable(LinkAction)) }
17
+ attr_reader :unlink
18
+
19
+ sig(:final) { returns(Etwin::Hammerfest::ShortHammerfestUser) }
20
+ attr_reader :user
21
+
22
+ sig(:final) do
23
+ params(link: LinkAction, unlink: T.nilable(LinkAction), user: Etwin::Hammerfest::ShortHammerfestUser).void
24
+ end
25
+ def initialize(link, unlink, user)
26
+ @link = T.let(link, LinkAction)
27
+ @unlink = T.let(unlink, T.nilable(LinkAction))
28
+ @user = T.let(user, Etwin::Hammerfest::ShortHammerfestUser)
29
+ freeze
30
+ end
31
+
32
+ sig(:final) { params(other: BasicObject).returns(T::Boolean) }
33
+ def ==(other)
34
+ case other
35
+ when HammerfestLink
36
+ @link == other.link && @unlink == other.unlink && @user == other.user
37
+ else
38
+ false
39
+ end
40
+ end
41
+
42
+ sig(:final) { returns(Integer) }
43
+ def hash
44
+ [@link, @unlink, @user].hash
45
+ end
46
+
47
+ # https://github.com/sorbet/sorbet/blob/master/rbi/stdlib/json.rbi#L194
48
+ sig(:final) { params(opts: T.untyped).returns(String) }
49
+ def to_json(opts = nil)
50
+ JSON.generate(as_json, opts)
51
+ end
52
+
53
+ sig(:final) { returns(T::Hash[String, T.untyped]) }
54
+ def as_json
55
+ {
56
+ 'link' => @link.as_json,
57
+ 'unlink' => @unlink.nil? ? nil : @unlink.as_json,
58
+ 'user' => @user.as_json
59
+ }
60
+ end
61
+
62
+ sig(:final) { returns(String) }
63
+ def inspect
64
+ PP.singleline_pp(self, String.new)
65
+ end
66
+
67
+ sig(:final) { params(pp: T.untyped).returns(T.untyped) }
68
+ def pretty_print(pp) # rubocop:disable Metrics/MethodLength
69
+ pp.group(0, "#{self.class.name}(", ')') do
70
+ pp.nest 1 do
71
+ pp.breakable ''
72
+ pp.text 'link='
73
+ pp.pp @link
74
+ pp.text ','
75
+ pp.breakable ''
76
+ pp.text 'unlink='
77
+ pp.pp @unlink
78
+ pp.text ','
79
+ pp.breakable ''
80
+ pp.text 'user='
81
+ pp.pp @user
82
+ end
83
+ pp.breakable ''
84
+ end
85
+ end
86
+
87
+ class << self
88
+ extend T::Sig
89
+
90
+ sig(:final) { params(json_str: String).returns(T.attached_class) }
91
+ def from_json(json_str)
92
+ deserialize JSON.parse(json_str)
93
+ end
94
+
95
+ sig(:final) { params(raw: T.untyped).returns(T.attached_class) }
96
+ def deserialize(raw)
97
+ link = LinkAction.deserialize(raw['link'])
98
+ raw_unlink = raw['unlink']
99
+ unlink = raw_unlink.nil? ? nil : LinkAction.deserialize(raw_unlink)
100
+ user = Etwin::Hammerfest::ShortHammerfestUser.deserialize(raw['user'])
101
+ new(link, unlink, user)
102
+ end
103
+ end
104
+ end
105
+ end
106
+ end
@@ -0,0 +1,93 @@
1
+ # typed: strict
2
+ # frozen_string_literal: true
3
+
4
+ module Etwin
5
+ module Link
6
+ # Metadata about a link/unlink action
7
+ class LinkAction
8
+ extend T::Helpers
9
+ extend T::Sig
10
+
11
+ final!
12
+
13
+ sig(:final) { returns(Time) }
14
+ attr_reader :time
15
+
16
+ sig(:final) { returns(User::ShortUser) }
17
+ attr_reader :user
18
+
19
+ sig(:final) { params(time: Time, user: User::ShortUser).void }
20
+ def initialize(time, user)
21
+ @time = T.let(time, Time)
22
+ @user = T.let(user, User::ShortUser)
23
+ freeze
24
+ end
25
+
26
+ sig(:final) { params(other: BasicObject).returns(T::Boolean) }
27
+ def ==(other)
28
+ case other
29
+ when LinkAction
30
+ @time == other.time && @user == other.user
31
+ else
32
+ false
33
+ end
34
+ end
35
+
36
+ sig(:final) { returns(Integer) }
37
+ def hash
38
+ [@time, @user].hash
39
+ end
40
+
41
+ # https://github.com/sorbet/sorbet/blob/master/rbi/stdlib/json.rbi#L194
42
+ sig(:final) { params(opts: T.untyped).returns(String) }
43
+ def to_json(opts = nil)
44
+ JSON.generate(as_json, opts)
45
+ end
46
+
47
+ sig(:final) { returns(T::Hash[String, T.untyped]) }
48
+ def as_json
49
+ {
50
+ 'time' => @time,
51
+ 'user' => @user.as_json
52
+ }
53
+ end
54
+
55
+ sig(:final) { returns(String) }
56
+ def inspect
57
+ PP.singleline_pp(self, String.new)
58
+ end
59
+
60
+ sig(:final) { params(pp: T.untyped).returns(T.untyped) }
61
+ def pretty_print(pp) # rubocop:disable Metrics/MethodLength
62
+ pp.group(0, "#{self.class.name}(", ')') do
63
+ pp.nest 1 do
64
+ pp.breakable ''
65
+ pp.text 'time='
66
+ pp.pp @time
67
+ pp.text ','
68
+ pp.breakable ''
69
+ pp.text 'user='
70
+ pp.pp @user
71
+ end
72
+ pp.breakable ''
73
+ end
74
+ end
75
+
76
+ class << self
77
+ extend T::Sig
78
+
79
+ sig(:final) { params(json_str: String).returns(T.attached_class) }
80
+ def from_json(json_str)
81
+ deserialize JSON.parse(json_str)
82
+ end
83
+
84
+ sig(:final) { params(raw: T.untyped).returns(T.attached_class) }
85
+ def deserialize(raw)
86
+ time = Time.iso8601(raw['time'])
87
+ user = User::ShortUser.deserialize(raw['user'])
88
+ new(time, user)
89
+ end
90
+ end
91
+ end
92
+ end
93
+ end
@@ -0,0 +1,106 @@
1
+ # typed: strict
2
+ # frozen_string_literal: true
3
+
4
+ module Etwin
5
+ module Link
6
+ # Link to a Twinoid user from an Eternal-Twin user
7
+ class TwinoidLink
8
+ extend T::Helpers
9
+ extend T::Sig
10
+
11
+ final!
12
+
13
+ sig(:final) { returns(LinkAction) }
14
+ attr_reader :link
15
+
16
+ sig(:final) { returns(T.nilable(LinkAction)) }
17
+ attr_reader :unlink
18
+
19
+ sig(:final) { returns(Etwin::Twinoid::ShortTwinoidUser) }
20
+ attr_reader :user
21
+
22
+ sig(:final) do
23
+ params(link: LinkAction, unlink: T.nilable(LinkAction), user: Etwin::Twinoid::ShortTwinoidUser).void
24
+ end
25
+ def initialize(link, unlink, user)
26
+ @link = T.let(link, LinkAction)
27
+ @unlink = T.let(unlink, T.nilable(LinkAction))
28
+ @user = T.let(user, Etwin::Twinoid::ShortTwinoidUser)
29
+ freeze
30
+ end
31
+
32
+ sig(:final) { params(other: BasicObject).returns(T::Boolean) }
33
+ def ==(other)
34
+ case other
35
+ when TwinoidLink
36
+ @link == other.link && @unlink == other.unlink && @user == other.user
37
+ else
38
+ false
39
+ end
40
+ end
41
+
42
+ sig(:final) { returns(Integer) }
43
+ def hash
44
+ [@link, @unlink, @user].hash
45
+ end
46
+
47
+ # https://github.com/sorbet/sorbet/blob/master/rbi/stdlib/json.rbi#L194
48
+ sig(:final) { params(opts: T.untyped).returns(String) }
49
+ def to_json(opts = nil)
50
+ JSON.generate(as_json, opts)
51
+ end
52
+
53
+ sig(:final) { returns(T::Hash[String, T.untyped]) }
54
+ def as_json
55
+ {
56
+ 'link' => @link.as_json,
57
+ 'unlink' => @unlink.nil? ? nil : @unlink.as_json,
58
+ 'user' => @user.as_json
59
+ }
60
+ end
61
+
62
+ sig(:final) { returns(String) }
63
+ def inspect
64
+ PP.singleline_pp(self, String.new)
65
+ end
66
+
67
+ sig(:final) { params(pp: T.untyped).returns(T.untyped) }
68
+ def pretty_print(pp) # rubocop:disable Metrics/MethodLength
69
+ pp.group(0, "#{self.class.name}(", ')') do
70
+ pp.nest 1 do
71
+ pp.breakable ''
72
+ pp.text 'link='
73
+ pp.pp @link
74
+ pp.text ','
75
+ pp.breakable ''
76
+ pp.text 'unlink='
77
+ pp.pp @unlink
78
+ pp.text ','
79
+ pp.breakable ''
80
+ pp.text 'user='
81
+ pp.pp @user
82
+ end
83
+ pp.breakable ''
84
+ end
85
+ end
86
+
87
+ class << self
88
+ extend T::Sig
89
+
90
+ sig(:final) { params(json_str: String).returns(T.attached_class) }
91
+ def from_json(json_str)
92
+ deserialize JSON.parse(json_str)
93
+ end
94
+
95
+ sig(:final) { params(raw: T.untyped).returns(T.attached_class) }
96
+ def deserialize(raw)
97
+ link = LinkAction.deserialize(raw['link'])
98
+ raw_unlink = raw['unlink']
99
+ unlink = raw_unlink.nil? ? nil : LinkAction.deserialize(raw_unlink)
100
+ user = Etwin::Twinoid::ShortTwinoidUser.deserialize(raw['user'])
101
+ new(link, unlink, user)
102
+ end
103
+ end
104
+ end
105
+ end
106
+ end
@@ -0,0 +1,93 @@
1
+ # typed: strict
2
+ # frozen_string_literal: true
3
+
4
+ module Etwin
5
+ module Link
6
+ # Versioned Hammerfest link
7
+ class VersionedHammerfestLink
8
+ extend T::Helpers
9
+ extend T::Sig
10
+
11
+ final!
12
+
13
+ sig(:final) { returns(T.nilable(HammerfestLink)) }
14
+ attr_reader :current
15
+
16
+ sig(:final) { returns(T::Array[HammerfestLink]) }
17
+ attr_reader :old
18
+
19
+ sig(:final) { params(current: T.nilable(HammerfestLink), old: T::Array[HammerfestLink]).void }
20
+ def initialize(current, old)
21
+ @current = T.let(current, T.nilable(HammerfestLink))
22
+ @old = T.let(old.freeze, T::Array[HammerfestLink])
23
+ freeze
24
+ end
25
+
26
+ sig(:final) { params(other: BasicObject).returns(T::Boolean) }
27
+ def ==(other)
28
+ case other
29
+ when VersionedHammerfestLink
30
+ @current == other.current && @old == other.old
31
+ else
32
+ false
33
+ end
34
+ end
35
+
36
+ sig(:final) { returns(Integer) }
37
+ def hash
38
+ [@current, @old].hash
39
+ end
40
+
41
+ # https://github.com/sorbet/sorbet/blob/master/rbi/stdlib/json.rbi#L194
42
+ sig(:final) { params(opts: T.untyped).returns(String) }
43
+ def to_json(opts = nil)
44
+ JSON.generate(as_json, opts)
45
+ end
46
+
47
+ sig(:final) { returns(T::Hash[String, T.untyped]) }
48
+ def as_json
49
+ {
50
+ 'current' => @current.nil? ? nil : @current.as_json,
51
+ 'old' => @old.map(&:as_json)
52
+ }
53
+ end
54
+
55
+ sig(:final) { returns(String) }
56
+ def inspect
57
+ PP.singleline_pp(self, String.new)
58
+ end
59
+
60
+ sig(:final) { params(pp: T.untyped).returns(T.untyped) }
61
+ def pretty_print(pp) # rubocop:disable Metrics/MethodLength
62
+ pp.group(0, "#{self.class.name}(", ')') do
63
+ pp.nest 1 do
64
+ pp.breakable ''
65
+ pp.text 'current='
66
+ pp.pp @current
67
+ pp.text ','
68
+ pp.breakable ''
69
+ pp.text 'old='
70
+ pp.pp @old
71
+ end
72
+ pp.breakable ''
73
+ end
74
+ end
75
+
76
+ class << self
77
+ extend T::Sig
78
+
79
+ sig(:final) { params(json_str: String).returns(T.attached_class) }
80
+ def from_json(json_str)
81
+ deserialize JSON.parse(json_str)
82
+ end
83
+
84
+ sig(:final) { params(raw: T.untyped).returns(T.attached_class) }
85
+ def deserialize(raw)
86
+ raw_current = raw['current']
87
+ current = raw_current.nil? ? nil : HammerfestLink.deserialize(raw_current)
88
+ new(current, [])
89
+ end
90
+ end
91
+ end
92
+ end
93
+ end
@@ -0,0 +1,123 @@
1
+ # typed: strict
2
+ # frozen_string_literal: true
3
+
4
+ module Etwin
5
+ module Link
6
+ # Versioned Eternal-Twin links
7
+ class VersionedLinks
8
+ extend T::Helpers
9
+ extend T::Sig
10
+
11
+ final!
12
+
13
+ sig(:final) { returns(VersionedHammerfestLink) }
14
+ attr_reader :hammerfest_es
15
+
16
+ sig(:final) { returns(VersionedHammerfestLink) }
17
+ attr_reader :hammerfest_fr
18
+
19
+ sig(:final) { returns(VersionedHammerfestLink) }
20
+ attr_reader :hfest_net
21
+
22
+ sig(:final) { returns(VersionedTwinoidLink) }
23
+ attr_reader :twinoid
24
+
25
+ sig(:final) do
26
+ params(
27
+ hammerfest_es: VersionedHammerfestLink,
28
+ hammerfest_fr: VersionedHammerfestLink,
29
+ hfest_net: VersionedHammerfestLink,
30
+ twinoid: VersionedTwinoidLink
31
+ ).void
32
+ end
33
+ def initialize(hammerfest_es, hammerfest_fr, hfest_net, twinoid)
34
+ @hammerfest_es = T.let(hammerfest_es, VersionedHammerfestLink)
35
+ @hammerfest_fr = T.let(hammerfest_fr, VersionedHammerfestLink)
36
+ @hfest_net = T.let(hfest_net, VersionedHammerfestLink)
37
+ @twinoid = T.let(twinoid, VersionedTwinoidLink)
38
+ freeze
39
+ end
40
+
41
+ sig(:final) { params(other: BasicObject).returns(T::Boolean) }
42
+ def ==(other)
43
+ case other
44
+ when VersionedLinks
45
+ @hammerfest_es == other.hammerfest_es &&
46
+ @hammerfest_fr == other.hammerfest_fr &&
47
+ @hfest_net == other.hfest_net &&
48
+ @twinoid == other.twinoid
49
+ else
50
+ false
51
+ end
52
+ end
53
+
54
+ sig(:final) { returns(Integer) }
55
+ def hash
56
+ [@hammerfest_es, @hammerfest_fr, @hfest_net, @twinoid].hash
57
+ end
58
+
59
+ # https://github.com/sorbet/sorbet/blob/master/rbi/stdlib/json.rbi#L194
60
+ sig(:final) { params(opts: T.untyped).returns(String) }
61
+ def to_json(opts = nil)
62
+ JSON.generate(as_json, opts)
63
+ end
64
+
65
+ sig(:final) { returns(T::Hash[String, T.untyped]) }
66
+ def as_json
67
+ {
68
+ 'hammerfest_es' => @hammerfest_es.as_json,
69
+ 'hammerfest_fr' => @hammerfest_fr.as_json,
70
+ 'hfest_net' => @hfest_net.as_json,
71
+ 'twinoid' => @twinoid.as_json
72
+ }
73
+ end
74
+
75
+ sig(:final) { returns(String) }
76
+ def inspect
77
+ PP.singleline_pp(self, String.new)
78
+ end
79
+
80
+ sig(:final) { params(pp: T.untyped).returns(T.untyped) }
81
+ def pretty_print(pp) # rubocop:disable Metrics/AbcSize, Metrics/MethodLength
82
+ pp.group(0, "#{self.class.name}(", ')') do
83
+ pp.nest 1 do
84
+ pp.breakable ''
85
+ pp.text 'hammerfest_es='
86
+ pp.pp @hammerfest_es
87
+ pp.text ','
88
+ pp.breakable ''
89
+ pp.text 'hammerfest_fr='
90
+ pp.pp @hammerfest_fr
91
+ pp.text ','
92
+ pp.breakable ''
93
+ pp.text 'hfest_net='
94
+ pp.pp @hfest_net
95
+ pp.text ','
96
+ pp.breakable ''
97
+ pp.text 'twinoid='
98
+ pp.pp @twinoid
99
+ end
100
+ pp.breakable ''
101
+ end
102
+ end
103
+
104
+ class << self
105
+ extend T::Sig
106
+
107
+ sig(:final) { params(json_str: String).returns(T.attached_class) }
108
+ def from_json(json_str)
109
+ deserialize JSON.parse(json_str)
110
+ end
111
+
112
+ sig(:final) { params(raw: T.untyped).returns(T.attached_class) }
113
+ def deserialize(raw)
114
+ hammerfest_es = VersionedHammerfestLink.deserialize(raw['hammerfest_es'])
115
+ hammerfest_fr = VersionedHammerfestLink.deserialize(raw['hammerfest_fr'])
116
+ hfest_net = VersionedHammerfestLink.deserialize(raw['hfest_net'])
117
+ twinoid = VersionedTwinoidLink.deserialize(raw['twinoid'])
118
+ new(hammerfest_es, hammerfest_fr, hfest_net, twinoid)
119
+ end
120
+ end
121
+ end
122
+ end
123
+ end