Class: Teams::Cards::GeneratedCard
- Inherits:
-
Object
- Object
- Teams::Cards::GeneratedCard
- Defined in:
- lib/teams/cards/generated_base.rb
Overview
Base class for the generated Adaptive Card models. Serialization matches the other Teams SDKs' generated card classes: non-nil fields (including defaults) are emitted under their camelCase aliases, unknown extra fields pass through verbatim.
Direct Known Subclasses
Constant Summary collapse
- OMIT =
Object.new.freeze
Class Method Summary collapse
- .array_adder(method_name, field_name) ⇒ Object
- .card_fields ⇒ Object
- .field(name, alias_name, default = nil, mutable: false) ⇒ Object
-
.positional_field(name) ⇒ Object
Ruby convenience preserved from the original hand-written classes: allows the first constructor argument to set the given field.
-
.splat_field(name) ⇒ Object
Same, for classes whose hand-written predecessors took a splat.
Instance Method Summary collapse
-
#initialize(**values) ⇒ GeneratedCard
constructor
A new instance of GeneratedCard.
- #to_h ⇒ Object
- #to_json(*args) ⇒ Object
Constructor Details
#initialize(**values) ⇒ GeneratedCard
Returns a new instance of GeneratedCard.
55 56 57 58 59 60 61 62 63 64 65 66 67 |
# File 'lib/teams/cards/generated_base.rb', line 55 def initialize(**values) @values = {} self.class.card_fields.each do |name, spec| @values[name] = if values.key?(name) values.delete(name) elsif spec[:mutable] deep_dup(spec[:default]) else spec[:default] end end values.each { |key, value| @values[key] = value } end |
Class Method Details
.array_adder(method_name, field_name) ⇒ Object
47 48 49 50 51 52 |
# File 'lib/teams/cards/generated_base.rb', line 47 def array_adder(method_name, field_name) define_method(method_name) do |item| (@values[field_name] ||= []) << item self end end |
.card_fields ⇒ Object
15 16 17 |
# File 'lib/teams/cards/generated_base.rb', line 15 def card_fields @card_fields ||= superclass.respond_to?(:card_fields) ? superclass.card_fields.dup : {} end |
.field(name, alias_name, default = nil, mutable: false) ⇒ Object
19 20 21 22 23 24 25 26 27 28 |
# File 'lib/teams/cards/generated_base.rb', line 19 def field(name, alias_name, default = nil, mutable: false) card_fields[name] = { alias: alias_name, default:, mutable: } define_method(name) { @values[name] } define_method("#{name}=") { |value| @values[name] = value } define_method("with_#{name}") do |value| @values[name] = value self end end |
.positional_field(name) ⇒ Object
Ruby convenience preserved from the original hand-written classes: allows the first constructor argument to set the given field.
32 33 34 35 36 37 |
# File 'lib/teams/cards/generated_base.rb', line 32 def positional_field(name) define_method(:initialize) do |positional = OMIT, **values| values[name] = positional unless positional.equal?(OMIT) super(**values) end end |
.splat_field(name) ⇒ Object
Same, for classes whose hand-written predecessors took a splat.
40 41 42 43 44 45 |
# File 'lib/teams/cards/generated_base.rb', line 40 def splat_field(name) define_method(:initialize) do |*positional, **values| values[name] = positional.flatten unless positional.empty? super(**values) end end |
Instance Method Details
#to_h ⇒ Object
69 70 71 72 73 74 75 76 |
# File 'lib/teams/cards/generated_base.rb', line 69 def to_h @values.each_with_object({}) do |(name, value), body| next if value.nil? spec = self.class.card_fields[name] body[spec ? spec[:alias] : camelize(name.to_s)] = serialize(value) end end |
#to_json(*args) ⇒ Object
78 79 80 |
# File 'lib/teams/cards/generated_base.rb', line 78 def to_json(*args) JSON.generate(to_h, *args) end |