zuora_connect_ui 0.10.2 → 0.10.3

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: 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