3scale_toolbox 0.16.0 → 0.18.3

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 (103) hide show
  1. checksums.yaml +4 -4
  2. data/3scale_toolbox.gemspec +2 -2
  3. data/README.md +11 -8
  4. data/lib/3scale_toolbox.rb +3 -0
  5. data/lib/3scale_toolbox/3scale_client_factory.rb +3 -4
  6. data/lib/3scale_toolbox/cli/error_handler.rb +17 -14
  7. data/lib/3scale_toolbox/commands.rb +2 -0
  8. data/lib/3scale_toolbox/commands/backend_command/copy_command/copy_mapping_rules_task.rb +11 -27
  9. data/lib/3scale_toolbox/commands/backend_command/copy_command/copy_methods_task.rb +5 -10
  10. data/lib/3scale_toolbox/commands/backend_command/copy_command/copy_metrics_task.rb +4 -4
  11. data/lib/3scale_toolbox/commands/backend_command/copy_command/create_or_update_target_backend_task.rb +3 -2
  12. data/lib/3scale_toolbox/commands/backend_command/copy_command/task.rb +10 -32
  13. data/lib/3scale_toolbox/commands/import_command/issuer_type_transformer.rb +16 -0
  14. data/lib/3scale_toolbox/commands/import_command/openapi.rb +3 -0
  15. data/lib/3scale_toolbox/commands/import_command/openapi/create_activedocs_step.rb +3 -2
  16. data/lib/3scale_toolbox/commands/import_command/openapi/create_mapping_rule_step.rb +2 -1
  17. data/lib/3scale_toolbox/commands/import_command/openapi/create_method_step.rb +5 -14
  18. data/lib/3scale_toolbox/commands/import_command/openapi/step.rb +4 -0
  19. data/lib/3scale_toolbox/commands/import_command/openapi/update_service_proxy_step.rb +1 -0
  20. data/lib/3scale_toolbox/commands/methods_command/apply_command.rb +2 -4
  21. data/lib/3scale_toolbox/commands/methods_command/create_command.rb +0 -2
  22. data/lib/3scale_toolbox/commands/methods_command/delete_command.rb +1 -1
  23. data/lib/3scale_toolbox/commands/methods_command/list_command.rb +1 -9
  24. data/lib/3scale_toolbox/commands/metrics_command/list_command.rb +1 -1
  25. data/lib/3scale_toolbox/commands/plans_command/export/read_plan_limits_step.rb +1 -1
  26. data/lib/3scale_toolbox/commands/plans_command/export/read_plan_methods_step.rb +2 -2
  27. data/lib/3scale_toolbox/commands/plans_command/export/read_plan_metrics_step.rb +2 -2
  28. data/lib/3scale_toolbox/commands/plans_command/export/read_plan_pricing_rules_step.rb +1 -2
  29. data/lib/3scale_toolbox/commands/plans_command/export/step.rb +8 -20
  30. data/lib/3scale_toolbox/commands/plans_command/import/import_plan_limits_step.rb +12 -14
  31. data/lib/3scale_toolbox/commands/plans_command/import/import_plan_metrics_step.rb +6 -13
  32. data/lib/3scale_toolbox/commands/plans_command/import/import_plan_pricing_rules_step.rb +12 -20
  33. data/lib/3scale_toolbox/commands/plans_command/import/step.rb +2 -22
  34. data/lib/3scale_toolbox/commands/plans_command/list_command.rb +1 -1
  35. data/lib/3scale_toolbox/commands/plans_command/show_command.rb +1 -1
  36. data/lib/3scale_toolbox/commands/policies_command.rb +24 -0
  37. data/lib/3scale_toolbox/commands/policies_command/export_command.rb +98 -0
  38. data/lib/3scale_toolbox/commands/policies_command/import_command.rb +61 -0
  39. data/lib/3scale_toolbox/commands/product_command.rb +4 -0
  40. data/lib/3scale_toolbox/commands/product_command/copy_command.rb +7 -3
  41. data/lib/3scale_toolbox/commands/product_command/copy_command/copy_backends_task.rb +22 -5
  42. data/lib/3scale_toolbox/commands/product_command/export_command.rb +81 -0
  43. data/lib/3scale_toolbox/commands/product_command/import_command.rb +125 -0
  44. data/lib/3scale_toolbox/commands/proxy_config_command.rb +5 -0
  45. data/lib/3scale_toolbox/commands/proxy_config_command/deploy_command.rb +54 -0
  46. data/lib/3scale_toolbox/commands/proxy_config_command/export_command.rb +74 -0
  47. data/lib/3scale_toolbox/commands/proxy_config_command/helper.rb +15 -0
  48. data/lib/3scale_toolbox/commands/service_command/copy_command/copy_activedocs_task.rb +15 -12
  49. data/lib/3scale_toolbox/commands/service_command/copy_command/copy_app_plans_task.rb +15 -15
  50. data/lib/3scale_toolbox/commands/service_command/copy_command/copy_limits_task.rb +12 -13
  51. data/lib/3scale_toolbox/commands/service_command/copy_command/copy_mapping_rules_task.rb +11 -11
  52. data/lib/3scale_toolbox/commands/service_command/copy_command/copy_methods_task.rb +9 -12
  53. data/lib/3scale_toolbox/commands/service_command/copy_command/copy_metrics_task.rb +8 -8
  54. data/lib/3scale_toolbox/commands/service_command/copy_command/copy_policies_task.rb +1 -1
  55. data/lib/3scale_toolbox/commands/service_command/copy_command/copy_pricingrules_task.rb +15 -18
  56. data/lib/3scale_toolbox/commands/service_command/copy_command/copy_service_proxy_task.rb +17 -2
  57. data/lib/3scale_toolbox/commands/service_command/copy_command/create_or_update_service_task.rb +2 -1
  58. data/lib/3scale_toolbox/commands/service_command/copy_command/destroy_mapping_rules_task.rb +9 -5
  59. data/lib/3scale_toolbox/commands/service_command/copy_command/task.rb +20 -34
  60. data/lib/3scale_toolbox/commands/update_command.rb +1 -1
  61. data/lib/3scale_toolbox/commands/update_command/service_command.rb +3 -2
  62. data/lib/3scale_toolbox/commands/update_command/service_command/delete_activedocs_task.rb +1 -3
  63. data/lib/3scale_toolbox/crds.rb +16 -0
  64. data/lib/3scale_toolbox/crds/application_plan_dump.rb +19 -0
  65. data/lib/3scale_toolbox/crds/backend_dump.rb +39 -0
  66. data/lib/3scale_toolbox/crds/backend_mapping_rule_dump.rb +26 -0
  67. data/lib/3scale_toolbox/crds/backend_method_dump.rb +12 -0
  68. data/lib/3scale_toolbox/crds/backend_metric_dump.rb +13 -0
  69. data/lib/3scale_toolbox/crds/backend_parser.rb +55 -0
  70. data/lib/3scale_toolbox/crds/backend_usage_dump.rb +11 -0
  71. data/lib/3scale_toolbox/crds/limit_dump.rb +37 -0
  72. data/lib/3scale_toolbox/crds/mapping_rule_dump.rb +26 -0
  73. data/lib/3scale_toolbox/crds/method_dump.rb +12 -0
  74. data/lib/3scale_toolbox/crds/metric_dump.rb +13 -0
  75. data/lib/3scale_toolbox/crds/pricing_rule_dump.rb +38 -0
  76. data/lib/3scale_toolbox/crds/product_deployment_parser.rb +329 -0
  77. data/lib/3scale_toolbox/crds/product_dump.rb +157 -0
  78. data/lib/3scale_toolbox/crds/product_parser.rb +114 -0
  79. data/lib/3scale_toolbox/crds/remote.rb +682 -0
  80. data/lib/3scale_toolbox/entities.rb +3 -0
  81. data/lib/3scale_toolbox/entities/activedocs.rb +12 -0
  82. data/lib/3scale_toolbox/entities/application_plan.rb +74 -39
  83. data/lib/3scale_toolbox/entities/backend.rb +65 -30
  84. data/lib/3scale_toolbox/entities/backend_mapping_rule.rb +29 -3
  85. data/lib/3scale_toolbox/entities/backend_method.rb +25 -16
  86. data/lib/3scale_toolbox/entities/backend_metric.rb +12 -2
  87. data/lib/3scale_toolbox/entities/backend_usage.rb +7 -1
  88. data/lib/3scale_toolbox/entities/limit.rb +71 -0
  89. data/lib/3scale_toolbox/entities/mapping_rule.rb +90 -0
  90. data/lib/3scale_toolbox/entities/method.rb +33 -19
  91. data/lib/3scale_toolbox/entities/metric.rb +29 -18
  92. data/lib/3scale_toolbox/entities/pricing_rule.rb +63 -0
  93. data/lib/3scale_toolbox/entities/proxy_config.rb +0 -1
  94. data/lib/3scale_toolbox/entities/service.rb +149 -46
  95. data/lib/3scale_toolbox/error.rb +50 -0
  96. data/lib/3scale_toolbox/helper.rb +13 -16
  97. data/lib/3scale_toolbox/openapi/oas3.rb +1 -1
  98. data/lib/3scale_toolbox/proxy_logger.rb +4 -0
  99. data/lib/3scale_toolbox/remote_cache.rb +157 -0
  100. data/lib/3scale_toolbox/remotes.rb +2 -2
  101. data/lib/3scale_toolbox/version.rb +1 -1
  102. data/licenses.xml +113 -45
  103. metadata +37 -8
@@ -7,7 +7,8 @@ module ThreeScaleToolbox
7
7
 
8
8
  def call
9
9
  operations.each do |op|
10
- service.create_mapping_rule(op.mapping_rule)
10
+ Entities::MappingRule.create(service: service,
11
+ attrs: op.mapping_rule)
11
12
  puts "Created #{op.http_method} #{op.pattern} endpoint"
12
13
  end
13
14
  end
@@ -7,18 +7,13 @@ module ThreeScaleToolbox
7
7
 
8
8
  def call
9
9
  missing_operations.each do |op|
10
- method = Entities::Method.create(service: service, parent_id: hits_metric_id,
11
- attrs: op.method)
10
+ method = Entities::Method.create(service: service, attrs: op.method)
12
11
  op.set(:metric_id, method.id)
13
12
  end
14
13
 
15
14
  existing_operations.each do |op|
16
- method_attrs = methods_index.fetch(op.method['system_name'])
17
- method = Entities::Method.new(
18
- id: method_attrs.fetch('id'),
19
- parent_id: hits_metric_id,
20
- service: service
21
- )
15
+ method_attrs = methods_index.fetch(op.method['system_name']).attrs
16
+ method = Entities::Method.new(id: method_attrs.fetch('id'), service: service)
22
17
  method.update(op.method)
23
18
  op.set(:metric_id, method.id)
24
19
  end
@@ -26,13 +21,9 @@ module ThreeScaleToolbox
26
21
 
27
22
  private
28
23
 
29
- def hits_metric_id
30
- @hits_metric_id ||= service.hits['id']
31
- end
32
-
33
24
  def methods_index
34
- @methods_index ||= service.methods(hits_metric_id).each_with_object({}) do |method, acc|
35
- acc[method['system_name']] = method
25
+ @methods_index ||= service.methods.each_with_object({}) do |method, acc|
26
+ acc[method.system_name] = method
36
27
  end
37
28
  end
38
29
 
@@ -57,6 +57,10 @@ module ThreeScaleToolbox
57
57
  context[:api_spec_resource]
58
58
  end
59
59
 
60
+ def oidc_issuer_type
61
+ context[:oidc_issuer_type]
62
+ end
63
+
60
64
  def oidc_issuer_endpoint
61
65
  context[:oidc_issuer_endpoint]
62
66
  end
@@ -52,6 +52,7 @@ module ThreeScaleToolbox
52
52
  case (type = api_spec.security[:type])
53
53
  when 'oauth2'
54
54
  settings[:credentials_location] = 'headers'
55
+ settings[:oidc_issuer_type] = oidc_issuer_type unless oidc_issuer_type.nil?
55
56
  settings[:oidc_issuer_endpoint] = oidc_issuer_endpoint unless oidc_issuer_endpoint.nil?
56
57
  when 'apiKey'
57
58
  settings[:credentials_location] = credentials_location
@@ -47,11 +47,9 @@ module ThreeScaleToolbox
47
47
  def run
48
48
  validate_option_params
49
49
  hits = service.hits
50
- method = Entities::Method.find(service: service, parent_id: hits.fetch('id'),
51
- ref: method_ref)
50
+ method = Entities::Method.find(service: service, ref: method_ref)
52
51
  if method.nil?
53
- method = Entities::Method.create(service: service, parent_id: hits.fetch('id'),
54
- attrs: create_method_attrs)
52
+ method = Entities::Method.create(service: service, attrs: create_method_attrs)
55
53
  else
56
54
  method.update(method_attrs) unless method_attrs.empty?
57
55
  end
@@ -40,10 +40,8 @@ module ThreeScaleToolbox
40
40
  end
41
41
 
42
42
  def run
43
- hits = service.hits
44
43
  method = ThreeScaleToolbox::Entities::Method.create(
45
44
  service: service,
46
- parent_id: hits.fetch('id'),
47
45
  attrs: method_attrs
48
46
  )
49
47
  method.disable if option_disabled
@@ -44,7 +44,7 @@ module ThreeScaleToolbox
44
44
 
45
45
  def find_method
46
46
  hits = service.hits
47
- Entities::Method.find(service: service, parent_id: hits.fetch('id'), ref: method_ref).tap do |p|
47
+ Entities::Method.find(service: service, ref: method_ref).tap do |p|
48
48
  raise ThreeScaleToolbox::Error, "Method #{method_ref} does not exist" if p.nil?
49
49
  end
50
50
  end
@@ -23,19 +23,11 @@ module ThreeScaleToolbox
23
23
  end
24
24
 
25
25
  def run
26
- printer.print_collection service_methods
26
+ printer.print_collection service.methods.map(&:attrs)
27
27
  end
28
28
 
29
29
  private
30
30
 
31
- def service_methods
32
- @service_methods ||= service.methods service_hits_id
33
- end
34
-
35
- def service_hits_id
36
- @service_hits_id ||= service.hits.fetch('id')
37
- end
38
-
39
31
  def service
40
32
  @service ||= find_service
41
33
  end
@@ -23,7 +23,7 @@ module ThreeScaleToolbox
23
23
  end
24
24
 
25
25
  def run
26
- printer.print_collection service.metrics
26
+ printer.print_collection service.metrics.map(&:attrs)
27
27
  end
28
28
 
29
29
  private
@@ -9,7 +9,7 @@ module ThreeScaleToolbox
9
9
  # add metric system_name out of metric_id
10
10
  def call
11
11
  result[:limits] = plan.limits.map do |limit|
12
- limit.tap { |l| l['metric'] = metric_info(l, 'Limit') }
12
+ limit.attrs.merge('metric' => metric_info(limit, 'Limit'))
13
13
  end
14
14
  end
15
15
  end
@@ -21,7 +21,7 @@ module ThreeScaleToolbox
21
21
  filtered_limit_methods.each_with_object({}) do |elem, acc|
22
22
  # find_method should not return nil.
23
23
  # It is assumed that metric_id refers to existing element from previous steps
24
- acc[elem['metric_id']] = find_method(elem['metric_id'])
24
+ acc[elem['metric_id']] = find_method(elem['metric_id']).attrs
25
25
  end
26
26
  end
27
27
 
@@ -33,7 +33,7 @@ module ThreeScaleToolbox
33
33
  filtered_pricing_rule_methods.each_with_object({}) do |elem, acc|
34
34
  # find_method should not return nil.
35
35
  # It is assumed that metric_id refers to existing element from previous steps
36
- acc[elem['metric_id']] = find_method(elem['metric_id'])
36
+ acc[elem['metric_id']] = find_method(elem['metric_id']).attrs
37
37
  end
38
38
  end
39
39
 
@@ -21,7 +21,7 @@ module ThreeScaleToolbox
21
21
  filtered_limit_metrics.each_with_object({}) do |elem, acc|
22
22
  # find_metric should not return nil.
23
23
  # It is assumed that metric_id refers to existing element from previous steps
24
- acc[elem['metric_id']] = find_metric(elem['metric_id'])
24
+ acc[elem['metric_id']] = find_metric(elem['metric_id']).attrs
25
25
  end
26
26
  end
27
27
 
@@ -33,7 +33,7 @@ module ThreeScaleToolbox
33
33
  filtered_pricing_rule_metrics.each_with_object({}) do |elem, acc|
34
34
  # find_metric should not return nil.
35
35
  # It is assumed that metric_id refers to existing element from previous steps
36
- acc[elem['metric_id']] = find_metric(elem['metric_id'])
36
+ acc[elem['metric_id']] = find_metric(elem['metric_id']).attrs
37
37
  end
38
38
  end
39
39
 
@@ -9,8 +9,7 @@ module ThreeScaleToolbox
9
9
  # add metric system_name out of metric_id
10
10
  def call
11
11
  result[:pricingrules] = plan.pricing_rules.map do |pr|
12
- pr.merge('metric' => metric_info(pr, 'PricingRule'),
13
- 'cost_per_unit' => pr.fetch('cost_per_unit').to_f)
12
+ pr.attrs.merge('metric' => metric_info(pr, 'PricingRule'), 'cost_per_unit' => pr.cost_per_unit.to_f)
14
13
  end
15
14
  end
16
15
  end
@@ -45,22 +45,14 @@ module ThreeScaleToolbox
45
45
  context[:plan] ||= find_plan
46
46
  end
47
47
 
48
- def service_metrics
49
- context[:service_metrics] ||= service.metrics
50
- end
51
-
52
- def service_methods
53
- context[:service_methods] ||= service.methods(service_hits['id'])
54
- end
55
-
56
48
  def metric_info(elem, elem_name)
57
- if (method = find_method(elem.fetch('metric_id')))
58
- { 'type' => 'method', 'system_name' => method.fetch('system_name') }
59
- elsif (metric = find_metric(elem.fetch('metric_id')))
60
- { 'type' => 'metric', 'system_name' => metric.fetch('system_name') }
49
+ if (method = find_method(elem.metric_id))
50
+ { 'type' => 'method', 'system_name' => method.system_name }
51
+ elsif (metric = find_metric(elem.metric_id))
52
+ { 'type' => 'metric', 'system_name' => metric.system_name }
61
53
  else
62
- raise ThreeScaleToolbox::Error, "Unexpected error. #{elem_name} #{elem['id']} " \
63
- "referencing to metric id #{elem.fetch('metric_id')} which has not been found"
54
+ raise ThreeScaleToolbox::Error, "Unexpected error. #{elem_name} #{elem.id} " \
55
+ "referencing to metric id #{elem.metric_id} which has not been found"
64
56
  end
65
57
  end
66
58
 
@@ -80,15 +72,11 @@ module ThreeScaleToolbox
80
72
  end
81
73
 
82
74
  def find_metric(id)
83
- service_metrics.find { |metric| metric['id'] == id }
75
+ service.metrics.find { |metric| metric.id == id }
84
76
  end
85
77
 
86
78
  def find_method(id)
87
- service_methods.find { |method| method['id'] == id }
88
- end
89
-
90
- def service_hits
91
- context[:service_hits] ||= service.hits
79
+ service.methods.find { |method| method.id == id }
92
80
  end
93
81
  end
94
82
  end
@@ -7,31 +7,29 @@ module ThreeScaleToolbox
7
7
  ##
8
8
  # Writes Plan limits
9
9
  def call
10
- missing_limits.each do |limit|
11
- metric_id = limit.delete('metric_id')
12
- limit_obj = plan.create_limit(metric_id, limit)
13
- if (errors = limit_obj['errors'])
14
- raise ThreeScaleToolbox::Error, "Plan limit has not been created. #{errors}"
15
- end
10
+ # SET semantics
11
+ # First, delete existing limits
12
+ # Second, add new limits
13
+ plan.limits.each do |limit|
14
+ limit.delete()
15
+ puts "Deleted existing plan limit: [metric: #{limit.metric_id}, #{limit.attrs}]"
16
+ end
16
17
 
17
- puts "Created plan limit: [metric: #{metric_id}, #{limit}]"
18
+ resource_limits_processed.each do |limit_attrs|
19
+ metric_id = limit_attrs.delete('metric_id')
20
+ plan.create_limit(metric_id, limit_attrs)
21
+ puts "Created plan limit: [metric: #{metric_id}, #{limit_attrs}]"
18
22
  end
19
23
  end
20
24
 
21
25
  private
22
26
 
23
- def missing_limits
24
- ThreeScaleToolbox::Helper.array_difference(resource_limits_processed, plan.limits) do |a, b|
25
- ThreeScaleToolbox::Helper.compare_hashes(a, b, %w[metric_id period])
26
- end
27
- end
28
-
29
27
  def resource_limits_processed
30
28
  resource_limits.map do |limit|
31
29
  metric = find_metric_by_system_name(limit.delete('metric_system_name'))
32
30
  # this ImportMetricLimitsStep step is assuming all metrics/methods have been created
33
31
  # in previous step, so finding metric should always succeed.
34
- limit.merge('metric_id' => metric.fetch('id'))
32
+ limit.merge('metric_id' => metric.id)
35
33
  end
36
34
  end
37
35
  end
@@ -9,36 +9,29 @@ module ThreeScaleToolbox
9
9
  def call
10
10
  missing_metrics.each(&method(:create_metric))
11
11
  missing_methods.each(&method(:create_method))
12
-
13
- # invalidate memoized methods and metrics
14
- invalidate_service_methods
15
- invalidate_service_metrics
16
12
  end
17
13
 
18
14
  private
19
15
 
20
16
  def missing_metrics
21
- ThreeScaleToolbox::Helper.array_difference(resource_metrics, service_metrics) do |a, b|
22
- ThreeScaleToolbox::Helper.compare_hashes(a, b, ['system_name'])
17
+ ThreeScaleToolbox::Helper.array_difference(resource_metrics, service.metrics) do |a, b|
18
+ a['system_name'] == b.system_name
23
19
  end
24
20
  end
25
21
 
26
22
  def missing_methods
27
- ThreeScaleToolbox::Helper.array_difference(resource_methods, service_methods) do |a, b|
28
- ThreeScaleToolbox::Helper.compare_hashes(a, b, ['system_name'])
23
+ ThreeScaleToolbox::Helper.array_difference(resource_methods, service.methods) do |a, b|
24
+ a['system_name'] == b.system_name
29
25
  end
30
26
  end
31
27
 
32
28
  def create_metric(metric_attrs)
33
- metric = ThreeScaleToolbox::Entities::Metric.create(service: service,
34
- attrs: metric_attrs)
29
+ metric = ThreeScaleToolbox::Entities::Metric.create(service: service, attrs: metric_attrs)
35
30
  puts "Created metric: #{metric.attrs['system_name']}"
36
31
  end
37
32
 
38
33
  def create_method(method_attrs)
39
- method = ThreeScaleToolbox::Entities::Method.create(service: service,
40
- parent_id: service_hits['id'],
41
- attrs: method_attrs)
34
+ method = ThreeScaleToolbox::Entities::Method.create(service: service, attrs: method_attrs)
42
35
  puts "Created method: #{method.attrs['system_name']}"
43
36
  end
44
37
  end
@@ -7,35 +7,27 @@ module ThreeScaleToolbox
7
7
  ##
8
8
  # Writes Plan pricing rules
9
9
  def call
10
- missing_pricing_rules.each do |pr|
11
- metric_id = pr.delete('metric_id')
12
- resp = plan.create_pricing_rule(metric_id, pr)
13
- if (errors = resp['errors'])
14
- raise ThreeScaleToolbox::Error, "Plan pricing rule has not been created. #{errors}"
15
- end
16
-
17
- puts "Created plan pricing rule: [metric: #{metric_id}, #{pr}]"
10
+ # SET semantics
11
+ # First, delete existing pricing rules
12
+ # Second, add new pricing rules
13
+ plan.pricing_rules.each do |pr|
14
+ pr.delete()
15
+ puts "Deleted existing plan pricing rule: [metric: #{pr.metric_id}, #{pr.attrs}]"
18
16
  end
19
- end
20
-
21
- private
22
17
 
23
- def missing_pricing_rules
24
- ThreeScaleToolbox::Helper.array_difference(resource_pr_processed, remote_pr_processed) do |a, b|
25
- ThreeScaleToolbox::Helper.compare_hashes(a, b, %w[metric_id cost_per_unit min max])
18
+ resource_pr_processed.each do |pr_attrs|
19
+ metric_id = pr_attrs.delete('metric_id')
20
+ plan.create_pricing_rule(metric_id, pr_attrs)
21
+ puts "Created plan pricing rule: [metric: #{metric_id}, #{pr_attrs}]"
26
22
  end
27
23
  end
28
24
 
29
- def remote_pr_processed
30
- plan.pricing_rules.map do |pr|
31
- pr.merge('cost_per_unit' => pr.fetch('cost_per_unit').to_f)
32
- end
33
- end
25
+ private
34
26
 
35
27
  def resource_pr_processed
36
28
  resource_pricing_rules.map do |pr|
37
29
  metric = find_metric_by_system_name(pr.delete('metric_system_name'))
38
- pr.merge('metric_id' => metric.fetch('id'),
30
+ pr.merge('metric_id' => metric.id,
39
31
  'cost_per_unit' => pr.fetch('cost_per_unit').to_f)
40
32
  end
41
33
  end
@@ -65,28 +65,8 @@ module ThreeScaleToolbox
65
65
  artifacts_resource['plan_features'] || []
66
66
  end
67
67
 
68
- def service_metrics
69
- context[:service_metrics] ||= service.metrics
70
- end
71
-
72
- def invalidate_service_metrics
73
- context[:service_metrics] = nil
74
- end
75
-
76
- def service_hits
77
- context[:service_hits] ||= service.hits
78
- end
79
-
80
- def service_methods
81
- context[:service_methods] ||= service.methods(service_hits['id'])
82
- end
83
-
84
68
  def service_metrics_and_methods
85
- service_metrics + service_methods
86
- end
87
-
88
- def invalidate_service_methods
89
- context[:service_methods] = nil
69
+ service.metrics + service.methods
90
70
  end
91
71
 
92
72
  def service_features
@@ -103,7 +83,7 @@ module ThreeScaleToolbox
103
83
  end
104
84
 
105
85
  def find_metric_by_system_name(system_name)
106
- service_metrics_and_methods.find { |metric| metric['system_name'] == system_name }
86
+ service_metrics_and_methods.find { |metric| metric.system_name == system_name }
107
87
  end
108
88
 
109
89
  private
@@ -23,7 +23,7 @@ module ThreeScaleToolbox
23
23
  end
24
24
 
25
25
  def run
26
- printer.print_collection service.plans
26
+ printer.print_collection service.plans.map(&:attrs)
27
27
  end
28
28
 
29
29
  private
@@ -5,7 +5,7 @@ module ThreeScaleToolbox
5
5
  class ShowSubcommand < Cri::CommandRunner
6
6
  include ThreeScaleToolbox::Command
7
7
 
8
- FIELDS_TO_SHOW = %w[id name system_name approval_required end_user_required
8
+ FIELDS_TO_SHOW = %w[id name system_name approval_required
9
9
  cost_per_month setup_fee trial_period_days].freeze
10
10
 
11
11
  def self.command
@@ -0,0 +1,24 @@
1
+ require '3scale_toolbox/commands/policies_command/export_command'
2
+ require '3scale_toolbox/commands/policies_command/import_command'
3
+
4
+ module ThreeScaleToolbox
5
+ module Commands
6
+ module PoliciesCommand
7
+ include ThreeScaleToolbox::Command
8
+ def self.command
9
+ Cri::Command.define do
10
+ name 'policies'
11
+ usage 'policies <sub-command> [options]'
12
+ summary 'policies super command'
13
+ description 'Policies commands'
14
+
15
+ run do |_opts, _args, cmd|
16
+ puts cmd.help
17
+ end
18
+ end
19
+ end
20
+ add_subcommand(ExportSubcommand)
21
+ add_subcommand(ImportSubcommand)
22
+ end
23
+ end
24
+ end