diver_down 0.0.1.alpha17 → 0.0.1.alpha18

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: 9a2f7ed8cc7afd42927d7456860430b3349c9a597925bfbf50a8510da47051dc
4
- data.tar.gz: 6f204f7954c88becbedf9a04983a4be8b195ac4ef45d2e7dc8ec50f5d80094de
3
+ metadata.gz: 8bf67c52d7bafe08d7dfd22e48f2fedcec23c2d5410da3968d6e697edeaeb68b
4
+ data.tar.gz: 7319431059c715b0d83cf7b577522d47115ff1fe7d77ac04faa543355468f024
5
5
  SHA512:
6
- metadata.gz: 7653069f6d81577ce96f4b4488d194e625562056f98dbf366b87700fa50eb1444ae0eea53ef6307c9879a326e0962c6bb1f654bdf1220d9983166422a092a0a0
7
- data.tar.gz: 6449971ce4909626c376a1f36efc233b3995f05f6d3bed73dab792791fc645be56e02425578b3bd3e7d29c66b1b4b702609af7de46ada16bcea6a262e27e0cc3
6
+ metadata.gz: 659ab2212ababae04182c7cdf23d56dfb79877aeab7ae4ff419c417f56602fc6c446bdf94ce338944abf28b6f01b720ba3cb595bb7006d9f6cf3479ceb785869
7
+ data.tar.gz: 71118322b5bb69d6014f72f545957bd401de06ef5f695fec7273a0465f34fce3cdfb699e4130d263c4fc1031475549f1b137f53ceeef894f2840212669308401
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module DiverDown
4
- VERSION = '0.0.1.alpha17'
4
+ VERSION = '0.0.1.alpha18'
5
5
  end
@@ -124,6 +124,7 @@ module DiverDown
124
124
  {
125
125
  source_name: dependency.source_name,
126
126
  module: @metadata.source(dependency.source_name).module,
127
+ dependency_type: @metadata.source(source.source_name).dependency_type(dependency.source_name),
127
128
  method_ids: dependency.method_ids.sort.map do |method_id|
128
129
  {
129
130
  context: method_id.context,
@@ -144,13 +145,7 @@ module DiverDown
144
145
  {
145
146
  source_name: dependency.source_name,
146
147
  module: @metadata.source(dependency.source_name).module,
147
- method_ids: dependency.method_ids.sort.map do |method_id|
148
- {
149
- context: method_id.context,
150
- name: method_id.name,
151
- paths: method_id.paths.sort,
152
- }
153
- end,
148
+ dependency_type: @metadata.source(source.source_name).dependency_type(dependency.source_name),
154
149
  }
155
150
  end,
156
151
  }
@@ -191,6 +186,44 @@ module DiverDown
191
186
  )
192
187
  end
193
188
 
189
+ # POST /api/modules/:from_module/dependency_types/:to_module.json
190
+ def update_module_dependency_type(from_module, to_module, dependency_type)
191
+ module_dependency_map = fetch_module_dependency_map
192
+
193
+ unless module_dependency_map.key?(from_module) && module_dependency_map.key?(to_module)
194
+ return not_found
195
+ end
196
+
197
+ module_dependency = module_dependency_map.fetch(from_module)
198
+ module_dependency.sources.each do |source|
199
+ source_metadata = @metadata.source(source.source_name)
200
+
201
+ source.dependencies.each do |dependency|
202
+ next unless @metadata.source(dependency.source_name).module == to_module
203
+
204
+ source_metadata.update_dependency_type(dependency.source_name, dependency_type)
205
+ end
206
+ end
207
+
208
+ @metadata.flush
209
+
210
+ json({})
211
+ end
212
+
213
+ # POST /api/sources/:from_source_name/dependency_types/:to_source_name.json
214
+ def update_source_dependency_type(from_source_name, to_source_name, dependency_type)
215
+ source = @metadata.source(from_source_name)
216
+
217
+ begin
218
+ source.update_dependency_type(to_source_name, dependency_type)
219
+ rescue ArgumentError => e
220
+ return json_error(e.message)
221
+ end
222
+
223
+ @metadata.flush
224
+ json({})
225
+ end
226
+
194
227
  # GET /api/pid.json
195
228
  def pid
196
229
  json(
@@ -64,11 +64,9 @@ module DiverDown
64
64
  end
65
65
 
66
66
  # Add source reverse dependencies
67
- definition_source = dependency_module_dependency.source_reverse_dependency_map[dependency.source_name] ||= DiverDown::Definition::Source.new(source_name: dependency.source_name)
68
- definition_dependency = definition_source.find_or_build_dependency(source.source_name)
69
- dependency.method_ids.each do |method_id|
70
- definition_dependency.find_or_build_method_id(name: method_id.name, context: method_id.context).add_path(*method_id.paths)
71
- end
67
+ # NOTE: Reverse dependencies's method_ids are not added because they are difficult to understand and not used.
68
+ definition_source = dependency_module_dependency.source_reverse_dependency_map[source.source_name] ||= DiverDown::Definition::Source.new(source_name: source.source_name)
69
+ definition_source.find_or_build_dependency(dependency.source_name)
72
70
  end
73
71
  end
74
72
 
@@ -9,13 +9,16 @@ module DiverDown
9
9
  private_constant(:BLANK_MEMO)
10
10
  private_constant(:BLANK_RE)
11
11
 
12
- attr_reader :memo, :module
12
+ DEPENDENCY_TYPES = %w[valid invalid todo ignore].freeze
13
+
14
+ attr_reader :memo, :module, :dependency_types
13
15
 
14
16
  # @param source_name [String]
15
17
  # NOTE: `module` is a reserved keyword in Ruby
16
- def initialize(memo: BLANK_MEMO, modulee: nil)
18
+ def initialize(memo: BLANK_MEMO, modulee: nil, dependency_types: {})
17
19
  @memo = memo
18
20
  @module = modulee
21
+ @dependency_types = dependency_types
19
22
  end
20
23
 
21
24
  # @param memo [String]
@@ -34,6 +37,35 @@ module DiverDown
34
37
  end
35
38
  end
36
39
 
40
+ # @param to_source [String]
41
+ # @return [String, nil]
42
+ def dependency_type(to_source)
43
+ @dependency_types[to_source]
44
+ end
45
+
46
+ # @param dependency_types [Hash]
47
+ # @return [void]
48
+ def dependency_types=(dependency_types)
49
+ @dependency_types.clear
50
+
51
+ dependency_types.each do |to_source, dependency_type|
52
+ update_dependency_type(to_source, dependency_type)
53
+ end
54
+ end
55
+
56
+ # @param to_source [String]
57
+ # @param dependency_type [String]
58
+ # @return [void]
59
+ def update_dependency_type(to_source, dependency_type)
60
+ if dependency_type.to_s.empty?
61
+ @dependency_types.delete(to_source)
62
+ else
63
+ raise ArgumentError, "invalid dependency_type: #{dependency_type}" unless DEPENDENCY_TYPES.include?(dependency_type)
64
+
65
+ @dependency_types[to_source] = dependency_type
66
+ end
67
+ end
68
+
37
69
  # @return [Boolean]
38
70
  def module?
39
71
  !@module.nil?
@@ -45,15 +77,10 @@ module DiverDown
45
77
 
46
78
  hash[:memo] = memo unless memo == BLANK_MEMO
47
79
  hash[:module] = @module unless @module.nil?
80
+ hash[:dependency_types] = @dependency_types unless @dependency_types.empty?
48
81
 
49
82
  hash
50
83
  end
51
-
52
- private
53
-
54
- def by_source_name(source_name)
55
- @store[source_name] ||= {}
56
- end
57
84
  end
58
85
  end
59
86
  end
@@ -54,6 +54,7 @@ module DiverDown
54
54
  loaded[:sources]&.each do |source_name, source_hash|
55
55
  source(source_name).memo = source_hash[:memo] if source_hash[:memo]
56
56
  source(source_name).module = source_hash[:module] if source_hash[:module]
57
+ source(source_name).dependency_types = source_hash[:dependency_types] if source_hash[:dependency_types]
57
58
  end
58
59
 
59
60
  loaded[:source_alias]&.each do |alias_name, source_names|
@@ -88,6 +88,18 @@ module DiverDown
88
88
  source = Regexp.last_match[:source]
89
89
  memo = request.params['memo'] || ''
90
90
  @action.set_memo(source, memo)
91
+ in ['POST', %r{\A/api/modules/(?<from_module>[^/]+)/dependency_types/(?<to_module>[^/]+)\.json\z}]
92
+ from_module = CGI.unescape(Regexp.last_match[:from_module])
93
+ to_module = CGI.unescape(Regexp.last_match[:to_module])
94
+ dependency_type = request.params['dependency_type']
95
+
96
+ @action.update_module_dependency_type(from_module, to_module, dependency_type)
97
+ in ['POST', %r{\A/api/sources/(?<from_source>[^/]+)/dependency_types/(?<to_source>[^/]+)\.json\z}]
98
+ from_source = Regexp.last_match[:from_source]
99
+ to_source = Regexp.last_match[:to_source]
100
+ dependency_type = request.params['dependency_type']
101
+
102
+ @action.update_source_dependency_type(from_source, to_source, dependency_type)
91
103
  in ['GET', %r{\A/api/pid\.json\z}]
92
104
  @action.pid
93
105
  in ['GET', %r{\A/api/initialization_status\.json\z}]