zuora_connect_ui 0.10.2 → 0.10.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.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 1886f2f1471c4e35f9ae706758dc8e90439f510d4eafd9a1339e961c885102f7
4
- data.tar.gz: f6ae8fcd775612cb2d692f26a08343c2331a2137f3b1c15ff781a06324d453ac
3
+ metadata.gz: b8a9c79d0859807d72b8c481bcd4e60dd45bc51385919cfa26ffb0c15663fe1f
4
+ data.tar.gz: 26ca79e92d1f25230c09266a626d1e19b8f6093924b99932ed88fca7e3ad75a4
5
5
  SHA512:
6
- metadata.gz: 3a553ca47ce36211b62bb0c8bebd7cdfdf4be6a048eedb29f5abdab984ead5efb1d374b5f1b48a2a413a3798047d48c0aecf3fcf70ca2982d00ac7df28a63e84
7
- data.tar.gz: 610d62cf603f05af53fb9e33db78b09fa184e9b0b78ad96119e0371ca61e541dcf013bfa10a5e0f4519ad16108098c06acbac3c158438d56f44a7a4458cb23bf
6
+ metadata.gz: 749dc08d67f909d8a573f6120f2eeb09b783909730053896bda3c4288e61b849b0151fbbc4ba0f606726331d5662a008f8fc9c45f4109b01209ed40faab08474
7
+ data.tar.gz: e5ef2639f583a652a2b253c002c0bba7d433db02fbdbb6e81fbfeb88513d370a9fa0b9256632212d04938938a6bf867d4f34944f98a29dacd07c1a13e880eaa2
@@ -14,6 +14,8 @@ module ZuoraConnectUi
14
14
  def zuo_include_tag
15
15
  script_tag(type: 'module', src: anjuna(ANJUNA_VERSION, true)) +
16
16
  script_tag(nomodule: '', src: anjuna(ANJUNA_VERSION, false)) +
17
+ script_tag(type: 'module', src: charts(ANJUNA_VERSION, true)) +
18
+ script_tag(nomodule: '', src: charts(ANJUNA_VERSION, false)) +
17
19
  link_tag(href: theme(THEME_VERSION, 'application'), rel: 'stylesheet') +
18
20
  link_tag(href: theme(THEME_VERSION, 'theme'), rel: 'stylesheet') +
19
21
  link_tag(href: theme(THEME_VERSION, 'icons'), rel: 'stylesheet')
@@ -30,6 +32,11 @@ module ZuoraConnectUi
30
32
  "/anjuna-core/anjuna-core#{'.esm' if esm}.js"
31
33
  end
32
34
 
35
+ def charts(version, esm)
36
+ "https://cdn.zuora.com/@anjuna/charts@#{version}" \
37
+ "/anjuna-charts/anjuna-charts#{'.esm' if esm}.js"
38
+ end
39
+
33
40
  def link_tag(attrs)
34
41
  attr_map = attrs.map { |key, value| " #{key}=\"#{value}\"" }
35
42
 
@@ -40,7 +47,7 @@ module ZuoraConnectUi
40
47
  "https://cdn.zuora.com/@anjuna/theme@#{version}/css/#{file}.css"
41
48
  end
42
49
 
43
- ANJUNA_VERSION = '1.0.0-rc.36'
44
- THEME_VERSION = '1.0.0-rc.11'
50
+ ANJUNA_VERSION = '1.2.3'
51
+ THEME_VERSION = '1.2.3'
45
52
  end
46
53
  end
@@ -1,14 +1,24 @@
1
1
  # frozen_string_literal: true
2
2
 
3
+ require 'active_support/core_ext/string'
4
+ require 'zuora_connect_ui/serializer/relationship'
5
+
3
6
  module ZuoraConnectUi
4
7
  # Take a resource and dump it to Google Style JSON, really fast
5
8
  class Serializer
6
9
  def initialize(resource, options = {})
7
10
  @resource = resource
8
11
  @kind = options[:kind]
9
- @fields = options[:fields]
10
12
  @is_collection = options[:is_collection]
11
13
 
14
+ @record_type = parse_record_type(@kind, @resource)
15
+
16
+ @associations = parse_associations(
17
+ options[:has_many], options[:belongs_to], options[:has_one]
18
+ )
19
+
20
+ @fields = parse_fields(options[:fields])
21
+
12
22
  # TODO: if an attribute given is reserved, throw an error
13
23
  end
14
24
 
@@ -16,10 +26,10 @@ module ZuoraConnectUi
16
26
  require 'oj'
17
27
  # Enable to show Oj working in console
18
28
  # Oj.default_options = { trace: true }
19
- Oj.dump(serialized_hash, mode: :compat, time_format: :ruby)
29
+ Oj.dump(serializable_hash, mode: :compat, time_format: :ruby)
20
30
  end
21
31
 
22
- def serialized_hash
32
+ def serializable_hash
23
33
  return hash_for_collection if collection?(@resource)
24
34
 
25
35
  hash_for_one
@@ -30,27 +40,37 @@ module ZuoraConnectUi
30
40
 
31
41
  return hash unless @resource
32
42
 
33
- hash[:data] = record_hash(@resource)
43
+ hash[:data] = record_hash(@resource, @record_type)
44
+
45
+ return hash if @associations.empty?
46
+
47
+ hash[:data][:relationships] = @associations.each_with_object({}) do |a, h|
48
+ h[a.plural_type] = a.serialize([@resource], @fields[a.record_type])
49
+ end
50
+
34
51
  hash
35
52
  end
36
53
 
37
54
  def hash_for_collection
38
55
  hash = { data: {} }
39
56
 
40
- items = []
57
+ hash[:data][:items] = @resource.each_with_object([]) do |resource, items|
58
+ items << record_hash(resource, @record_type)
59
+ end
60
+
61
+ return hash if @associations.empty?
41
62
 
42
- @resource.each do |resource|
43
- items << record_hash(resource)
63
+ hash[:data][:relationships] = @associations.each_with_object({}) do |a, h|
64
+ h[a.plural_type] = a.serialize(@resource, @fields[a.record_type])
44
65
  end
45
66
 
46
- hash[:data][:items] = items
47
67
  hash
48
68
  end
49
69
 
50
70
  private
51
71
 
52
72
  def key_transform(input)
53
- input.to_s.camelize(:lower)
73
+ input.to_s.camelize(:lower).to_sym
54
74
  end
55
75
 
56
76
  def collection?(resource)
@@ -59,14 +79,55 @@ module ZuoraConnectUi
59
79
  resource.respond_to?(:size) && !resource.respond_to?(:each_pair)
60
80
  end
61
81
 
62
- def record_hash(resource)
63
- hash = { kind: key_transform(@kind), id: resource.id }
64
- @fields.each do |field|
82
+ def record_hash(resource, record_type)
83
+ hash = @kind.nil? ? {} : { kind: record_type }
84
+ hash[:id] = resource.id
85
+ @fields[record_type].each do |field|
86
+ hash[key_transform(field)] = resource.public_send(field)
87
+ end
88
+ @associations.each do |association|
89
+ field = association.id_method_name
65
90
  hash[key_transform(field)] = resource.public_send(field)
66
91
  end
67
92
  hash
68
93
  end
69
94
 
95
+ def parse_fields(fields)
96
+ if fields.is_a? Array
97
+ Hash[@record_type, filter_associations(fields)]
98
+ elsif fields.is_a? Hash
99
+ fields[@record_type] = filter_associations(fields[@record_type])
100
+ fields
101
+ end
102
+ end
103
+
104
+ def filter_associations(fields)
105
+ fields.select { |field| @associations.none? { |a| a.key == field } }
106
+ end
107
+
108
+ def parse_associations(has_many, belongs_to, has_one)
109
+ [
110
+ *(has_many || []).map { |k| create_association(k, :has_many) },
111
+ *(belongs_to || []).map { |k| create_association(k, :belongs_to) },
112
+ *(has_one || []).map { |k| create_association(k, :has_one) }
113
+ ]
114
+ end
115
+
116
+ def create_association(key, relationship_type)
117
+ Relationship.new(
118
+ key: key_transform(key),
119
+ relationship_type: relationship_type
120
+ )
121
+ end
122
+
123
+ def parse_record_type(kind, resource)
124
+ return key_transform(kind) if kind
125
+
126
+ return key_transform(resource.class.name) unless collection?(resource)
127
+
128
+ key_transform(resource.first.class.name)
129
+ end
130
+
70
131
  # TODO: hold reserved words
71
132
 
72
133
  # see https://google.github.io/styleguide/jsoncstyleguide.xml
@@ -0,0 +1,62 @@
1
+ # frozen_string_literal: true
2
+
3
+ module ZuoraConnectUi
4
+ class Serializer
5
+ # The configuration for a relationship between models
6
+ class Relationship
7
+ # key may be plural, record_type will always be singular
8
+ attr_reader :key, :relationship_type, :id_method_name,
9
+ :record_type, :plural_type
10
+
11
+ def initialize(key:, relationship_type:)
12
+ @key = key
13
+ @relationship_type = relationship_type
14
+
15
+ set_id_method_name
16
+ end
17
+
18
+ def serialize(resources, fields)
19
+ resources.each_with_object({}) do |resource, hash|
20
+ relations = resource.public_send(key)
21
+ relations = [relations] unless @relationship_type == :has_many
22
+
23
+ relations.each do |relation|
24
+ next if hash.key? relation.id.to_s.to_sym
25
+
26
+ hash[relation.id.to_s.to_sym] = record_hash(relation, fields)
27
+ end
28
+ end
29
+ end
30
+
31
+ private
32
+
33
+ def record_hash(resource, fields)
34
+ hash = { id: resource.id }
35
+
36
+ fields.each do |field|
37
+ hash[key_transform(field)] = resource.public_send(field)
38
+ end
39
+
40
+ hash
41
+ end
42
+
43
+ def set_id_method_name
44
+ if @relationship_type == :has_many
45
+ singular_key = @key.to_s.singularize
46
+ id_postfix = '_ids'
47
+ else
48
+ singular_key = @key
49
+ id_postfix = '_id'
50
+ end
51
+
52
+ @record_type = singular_key.to_sym
53
+ @plural_type = singular_key.pluralize.to_sym
54
+ @id_method_name = "#{singular_key}#{id_postfix}".to_sym
55
+ end
56
+
57
+ def key_transform(input)
58
+ input.to_s.camelize(:lower).to_sym
59
+ end
60
+ end
61
+ end
62
+ end
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module ZuoraConnectUi
4
- VERSION = '0.10.2'
4
+ VERSION = '0.10.3'
5
5
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: zuora_connect_ui
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.10.2
4
+ version: 0.10.3
5
5
  platform: ruby
6
6
  authors:
7
7
  - Connect Team
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2020-01-23 00:00:00.000000000 Z
11
+ date: 2020-03-23 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bootstrap-sass
@@ -81,33 +81,33 @@ dependencies:
81
81
  - !ruby/object:Gem::Version
82
82
  version: '3.8'
83
83
  - !ruby/object:Gem::Dependency
84
- name: bundler
84
+ name: activesupport
85
85
  requirement: !ruby/object:Gem::Requirement
86
86
  requirements:
87
- - - ">"
87
+ - - ">="
88
88
  - !ruby/object:Gem::Version
89
- version: '1.16'
90
- type: :development
89
+ version: '4.2'
90
+ type: :runtime
91
91
  prerelease: false
92
92
  version_requirements: !ruby/object:Gem::Requirement
93
93
  requirements:
94
- - - ">"
94
+ - - ">="
95
95
  - !ruby/object:Gem::Version
96
- version: '1.16'
96
+ version: '4.2'
97
97
  - !ruby/object:Gem::Dependency
98
- name: rake
98
+ name: bundler
99
99
  requirement: !ruby/object:Gem::Requirement
100
100
  requirements:
101
- - - "~>"
101
+ - - ">"
102
102
  - !ruby/object:Gem::Version
103
- version: '10.0'
103
+ version: '1.16'
104
104
  type: :development
105
105
  prerelease: false
106
106
  version_requirements: !ruby/object:Gem::Requirement
107
107
  requirements:
108
- - - "~>"
108
+ - - ">"
109
109
  - !ruby/object:Gem::Version
110
- version: '10.0'
110
+ version: '1.16'
111
111
  - !ruby/object:Gem::Dependency
112
112
  name: rspec
113
113
  requirement: !ruby/object:Gem::Requirement
@@ -194,6 +194,7 @@ files:
194
194
  - lib/peek/views/connect.rb
195
195
  - lib/zuora_connect_ui.rb
196
196
  - lib/zuora_connect_ui/serializer.rb
197
+ - lib/zuora_connect_ui/serializer/relationship.rb
197
198
  - lib/zuora_connect_ui/version.rb
198
199
  - vendor/assets/anjuna/css/anjuna-icons.css
199
200
  - vendor/assets/awesome-bootstrap-checkbox/css/awesome-bootstrap-checkbox.scss