api_diff 0.3.1 → 0.3.4

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: 310a7da2f0d41ae551be866edc09039b488c7128a9ca5337acaf0902aa4beecd
4
- data.tar.gz: cfe5d1f1cdc4daf8eba8f1c5b8e6b1b7945fd3f0bd629c65b82cd9755f5bea60
3
+ metadata.gz: da95c670b708585e0f5a7dc1c1ffff7a003bf9e283dfe0189a7456e279fd8aeb
4
+ data.tar.gz: 84a0502b97dc4aa46e54d7f7d112900beaae001af293aa5c0b427937b17bf552
5
5
  SHA512:
6
- metadata.gz: 00e2213f1595896419c9e3ca890eed716d8ad25cb36e127795ae8cf7bc394af09e4322ab81a382ff4080fae8c0d8d7bf7fdcb8e3a8a634a61d6fcc0112689192
7
- data.tar.gz: e1ec8e8cd85683fef1c6e0a823136f0b79389cd1b64084d1b369a7e00b38728498aa52e7f52315ab9f70620a1fdea57213a35617acbb2773f26e0a998cb042a0
6
+ metadata.gz: 6f5b05ba569e101be84e9f144324c50ae0f7dce7e44c6c3052f355bb5b0f60067f9eee7f5f2a2af26b8066006c4b509fe1d92fe65610a90ed71108bd132cc649
7
+ data.tar.gz: d2ff8b714d6b441d1b11375e0fed18b893d2768f9a54cb106ef1f3382e1154a241e17dd805ea3257c144c7440579617a8e148a720db921aec3c7eba35f0ff39f
data/lib/api_diff/api.rb CHANGED
@@ -1,9 +1,10 @@
1
1
  module ApiDiff
2
2
  class Api
3
- attr_accessor :classes, :interfaces, :enums
3
+ attr_accessor :classes, :structs, :interfaces, :enums
4
4
 
5
5
  def initialize
6
6
  @classes = []
7
+ @structs = []
7
8
  @interfaces = []
8
9
  @enums = []
9
10
  end
@@ -12,6 +13,10 @@ module ApiDiff
12
13
  classes.find { |c| c.name == named || c.fully_qualified_name == fully_qualified_name }
13
14
  end
14
15
 
16
+ def struct(named: nil, fully_qualified_name: nil)
17
+ structs.find { |s| s.name == named || s.fully_qualified_name == fully_qualified_name }
18
+ end
19
+
15
20
  def interface(named: nil, fully_qualified_name: nil)
16
21
  interfaces.find { |i| i.name == named || i.fully_qualified_name == fully_qualified_name }
17
22
  end
@@ -0,0 +1,4 @@
1
+ module ApiDiff
2
+ class Struct < Type
3
+ end
4
+ end
@@ -17,9 +17,11 @@ module ApiDiff
17
17
  first_line = section.split("\n")[0]
18
18
  if first_line.include? "public class"
19
19
  parse_class(section, container_types)
20
+ elsif first_line.include? "public struct"
21
+ parse_struct(section, container_types)
20
22
  elsif first_line.include? "public protocol"
21
23
  parse_ptotocol(section, container_types)
22
- elsif first_line.include? "extension"
24
+ elsif first_line.start_with? "extension"
23
25
  parse_extension(section, container_types)
24
26
  elsif first_line.include? "public enum"
25
27
  parse_enum(section, container_types)
@@ -46,6 +48,18 @@ module ApiDiff
46
48
  parse_nested_types(class_content, [*container_types, name])
47
49
  end
48
50
 
51
+ def parse_struct(struct_content, container_types)
52
+ name = struct_content.match(/public struct (\w+)/)[1]
53
+
54
+ struct = Struct.new(name, qualified_name(name, container_types))
55
+ struct.parents = parse_parents(struct_content)
56
+ struct.properties = parse_properties(struct_content)
57
+ struct.functions = parse_functions(struct_content)
58
+ api.structs << struct
59
+
60
+ parse_nested_types(struct_content, [*container_types, name])
61
+ end
62
+
49
63
  def parse_ptotocol(protocol_content, container_types)
50
64
  name = protocol_content.match(/public protocol (\w+)/)[1]
51
65
 
@@ -61,9 +75,10 @@ module ApiDiff
61
75
  def parse_extension(content, container_types)
62
76
  name = content.match(/extension ([\w\.]+)/)[1]
63
77
 
64
- base_type = api.class(fully_qualified_name: qualified_name(name, container_types))
65
- base_type ||= api.interface(fully_qualified_name: qualified_name(name, container_types))
66
- base_type ||= api.enum(fully_qualified_name: qualified_name(name, container_types))
78
+ base_type = api.class(fully_qualified_name: name)
79
+ base_type ||= api.struct(fully_qualified_name: name)
80
+ base_type ||= api.interface(fully_qualified_name: name)
81
+ base_type ||= api.enum(fully_qualified_name: name)
67
82
  raise Error.new "Unable to find base type for extension `#{name}`" if base_type.nil?
68
83
  base_type.parents.append(*parse_parents(content)).uniq!
69
84
  base_type.properties.append(*parse_properties(content)).uniq!
@@ -1,3 +1,3 @@
1
1
  module ApiDiff
2
- VERSION = "0.3.1"
2
+ VERSION = "0.3.4"
3
3
  end
data/lib/api_diff.rb CHANGED
@@ -2,6 +2,7 @@ require "api_diff/version"
2
2
  require "api_diff/api"
3
3
  require "api_diff/type"
4
4
  require "api_diff/class"
5
+ require "api_diff/struct"
5
6
  require "api_diff/interface"
6
7
  require "api_diff/enum"
7
8
  require "api_diff/function"
@@ -43,6 +43,26 @@ class SwiftInterfaceParserTest < Minitest::Test
43
43
  assert_equal "class Fourth : Codable, Hashable", fourth.declaration
44
44
  end
45
45
 
46
+ def test_struct
47
+ input = <<~EOF
48
+ public struct First {
49
+ }
50
+ public struct Second : Package.Parent {
51
+ }
52
+ EOF
53
+
54
+ api = parse(input)
55
+ structs = api.structs
56
+
57
+ first = structs[0]
58
+ assert_equal "First", first.name
59
+ assert_equal "struct First", first.declaration
60
+
61
+ second = structs[1]
62
+ assert_equal "Second", second.name
63
+ assert_equal "struct Second : Parent", second.declaration
64
+ end
65
+
46
66
  def test_properties
47
67
  input = <<~EOF
48
68
  public class FirstClass {
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: api_diff
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.3.1
4
+ version: 0.3.4
5
5
  platform: ruby
6
6
  authors:
7
7
  - Sebastian Ludwig
8
- autorequire:
8
+ autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2021-03-30 00:00:00.000000000 Z
11
+ date: 2022-07-19 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: minitest
@@ -38,7 +38,7 @@ dependencies:
38
38
  - - "~>"
39
39
  - !ruby/object:Gem::Version
40
40
  version: '11'
41
- description:
41
+ description:
42
42
  email:
43
43
  - sebastian@lurado.de
44
44
  executables:
@@ -60,6 +60,7 @@ files:
60
60
  - lib/api_diff/kotlin_bcv_parser.rb
61
61
  - lib/api_diff/parser.rb
62
62
  - lib/api_diff/property.rb
63
+ - lib/api_diff/struct.rb
63
64
  - lib/api_diff/swift_interface_parser.rb
64
65
  - lib/api_diff/type.rb
65
66
  - lib/api_diff/version.rb
@@ -72,7 +73,7 @@ licenses:
72
73
  metadata:
73
74
  homepage_uri: https://github.com/sebastianludwig/api-diff
74
75
  source_code_uri: https://github.com/sebastianludwig/api_diff
75
- post_install_message:
76
+ post_install_message:
76
77
  rdoc_options: []
77
78
  require_paths:
78
79
  - lib
@@ -87,11 +88,11 @@ required_rubygems_version: !ruby/object:Gem::Requirement
87
88
  - !ruby/object:Gem::Version
88
89
  version: '0'
89
90
  requirements: []
90
- rubygems_version: 3.0.3
91
- signing_key:
91
+ rubygems_version: 3.3.11
92
+ signing_key:
92
93
  specification_version: 4
93
94
  summary: Bring APIs into an easily diff-able format
94
95
  test_files:
96
+ - test/kotlin_bcv_parser_test.rb
95
97
  - test/swift_interface_parser_test.rb
96
98
  - test/test_helper.rb
97
- - test/kotlin_bcv_parser_test.rb