flowcommerce 0.0.22 → 0.0.23
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/lib/flow_commerce/flow_api_v0_client.rb +105 -69
- metadata +1 -1
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 1cfa65a9bf67ec6615f71dab03639fa4aa448f8b
|
4
|
+
data.tar.gz: 385346b70cfb4a10050572139ce61e0d8fa59753
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 4c747fa5afe81b6238d3bc546c433bb6f4c17d464cb9f411b43f32350c258556642aa3837e16ec19fe37437d8ef4214e9cb96bfa68fb0534dd0c1750d16c2e92
|
7
|
+
data.tar.gz: 1b012bd86c20def9b4d873a5401f4725b584bdd68c5281189dedfe9ffaac3758b3dea6c2786f157716ac39f8b49d9007981c0974b200e925377827a1824c6e45
|
@@ -1,6 +1,6 @@
|
|
1
1
|
# Generated by apidoc - http://www.apidoc.me
|
2
|
-
# Service version: 0.0.
|
3
|
-
# apidoc:0.11.33 http://www.apidoc.me/flow/api/0.0.
|
2
|
+
# Service version: 0.0.67
|
3
|
+
# apidoc:0.11.33 http://www.apidoc.me/flow/api/0.0.67/ruby_client
|
4
4
|
|
5
5
|
require 'cgi'
|
6
6
|
require 'net/http'
|
@@ -25,8 +25,8 @@ module Io
|
|
25
25
|
|
26
26
|
BASE_URL = 'https://api.flow.io' unless defined?(Constants::BASE_URL)
|
27
27
|
NAMESPACE = 'io.flow.v0' unless defined?(Constants::NAMESPACE)
|
28
|
-
USER_AGENT = 'apidoc:0.11.33 http://www.apidoc.me/flow/api/0.0.
|
29
|
-
VERSION = '0.0.
|
28
|
+
USER_AGENT = 'apidoc:0.11.33 http://www.apidoc.me/flow/api/0.0.67/ruby_client' unless defined?(Constants::USER_AGENT)
|
29
|
+
VERSION = '0.0.67' unless defined?(Constants::VERSION)
|
30
30
|
VERSION_MAJOR = 0 unless defined?(VERSION_MAJOR)
|
31
31
|
|
32
32
|
end
|
@@ -865,6 +865,14 @@ module Io
|
|
865
865
|
nil
|
866
866
|
end
|
867
867
|
|
868
|
+
# Get statistics for the specified subcatalog. Always paginated.
|
869
|
+
def get_statistics_by_subcatalog_id(organization, subcatalog_id)
|
870
|
+
HttpClient::Preconditions.assert_class('organization', organization, String)
|
871
|
+
HttpClient::Preconditions.assert_class('subcatalog_id', subcatalog_id, String)
|
872
|
+
r = @client.request("/#{CGI.escape(organization)}/catalog/subcatalogs/#{CGI.escape(subcatalog_id)}/statistics").get
|
873
|
+
::Io::Flow::V0::Models::SubcatalogStatistics.new(r)
|
874
|
+
end
|
875
|
+
|
868
876
|
# Provides visibility into recent changes of each object, including deletion
|
869
877
|
def get_versions(organization, incoming={})
|
870
878
|
HttpClient::Preconditions.assert_class('organization', organization, String)
|
@@ -943,7 +951,6 @@ module Io
|
|
943
951
|
opts = HttpClient::Helper.symbolize_keys(incoming)
|
944
952
|
query = {
|
945
953
|
:id => (x = opts.delete(:id); x.nil? ? nil : HttpClient::Preconditions.assert_class('id', x, Array).map { |v| HttpClient::Preconditions.assert_class('id', v, String) }),
|
946
|
-
:key => (x = opts.delete(:key); x.nil? ? nil : HttpClient::Preconditions.assert_class('key', x, Array).map { |v| HttpClient::Preconditions.assert_class('key', v, String) }),
|
947
954
|
:subcatalog => (x = opts.delete(:subcatalog); x.nil? ? nil : HttpClient::Preconditions.assert_class('subcatalog', x, String)),
|
948
955
|
:limit => HttpClient::Preconditions.assert_class('limit', (x = opts.delete(:limit); x.nil? ? 25 : x), Integer),
|
949
956
|
:offset => HttpClient::Preconditions.assert_class('offset', (x = opts.delete(:offset); x.nil? ? 0 : x), Integer),
|
@@ -962,27 +969,18 @@ module Io
|
|
962
969
|
end
|
963
970
|
|
964
971
|
# Returns information about a specific function.
|
965
|
-
def
|
966
|
-
HttpClient::Preconditions.assert_class('organization', organization, String)
|
967
|
-
HttpClient::Preconditions.assert_class('key', key, String)
|
968
|
-
r = @client.request("/#{CGI.escape(organization)}/functions/#{CGI.escape(key)}").get
|
969
|
-
::Io::Flow::V0::Models::Function.new(r)
|
970
|
-
end
|
971
|
-
|
972
|
-
# Update function with the specified key, creating if it does not exist.
|
973
|
-
def put_by_key(organization, key, function_form)
|
972
|
+
def get_by_id(organization, id)
|
974
973
|
HttpClient::Preconditions.assert_class('organization', organization, String)
|
975
|
-
HttpClient::Preconditions.assert_class('
|
976
|
-
|
977
|
-
r = @client.request("/#{CGI.escape(organization)}/functions/#{CGI.escape(key)}").with_json(function_form.to_json).put
|
974
|
+
HttpClient::Preconditions.assert_class('id', id, String)
|
975
|
+
r = @client.request("/#{CGI.escape(organization)}/functions/#{CGI.escape(id)}").get
|
978
976
|
::Io::Flow::V0::Models::Function.new(r)
|
979
977
|
end
|
980
978
|
|
981
|
-
# Delete the function with this
|
982
|
-
def
|
979
|
+
# Delete the function with this id
|
980
|
+
def delete_by_id(organization, id)
|
983
981
|
HttpClient::Preconditions.assert_class('organization', organization, String)
|
984
|
-
HttpClient::Preconditions.assert_class('
|
985
|
-
r = @client.request("/#{CGI.escape(organization)}/functions/#{CGI.escape(
|
982
|
+
HttpClient::Preconditions.assert_class('id', id, String)
|
983
|
+
r = @client.request("/#{CGI.escape(organization)}/functions/#{CGI.escape(id)}").delete
|
986
984
|
nil
|
987
985
|
end
|
988
986
|
|
@@ -992,8 +990,6 @@ module Io
|
|
992
990
|
opts = HttpClient::Helper.symbolize_keys(incoming)
|
993
991
|
query = {
|
994
992
|
:id => (x = opts.delete(:id); x.nil? ? nil : HttpClient::Preconditions.assert_class('id', x, Array).map { |v| HttpClient::Preconditions.assert_class('id', v, String) }),
|
995
|
-
:key => (x = opts.delete(:key); x.nil? ? nil : HttpClient::Preconditions.assert_class('key', x, Array).map { |v| HttpClient::Preconditions.assert_class('key', v, String) }),
|
996
|
-
:name => (x = opts.delete(:name); x.nil? ? nil : HttpClient::Preconditions.assert_class('name', x, Array).map { |v| HttpClient::Preconditions.assert_class('name', v, String) }),
|
997
993
|
:limit => HttpClient::Preconditions.assert_class('limit', (x = opts.delete(:limit); x.nil? ? 25 : x), Integer),
|
998
994
|
:offset => HttpClient::Preconditions.assert_class('offset', (x = opts.delete(:offset); x.nil? ? 0 : x), Integer),
|
999
995
|
:sort => HttpClient::Preconditions.assert_class('sort', (x = opts.delete(:sort); x.nil? ? "journal_timestamp" : x), String)
|
@@ -1860,7 +1856,7 @@ module Io
|
|
1860
1856
|
query = {
|
1861
1857
|
:id => (x = opts.delete(:id); x.nil? ? nil : HttpClient::Preconditions.assert_class('id', x, Array).map { |v| HttpClient::Preconditions.assert_class('id', v, String) }),
|
1862
1858
|
:center => (x = opts.delete(:center); x.nil? ? nil : HttpClient::Preconditions.assert_class('center', x, Array).map { |v| HttpClient::Preconditions.assert_class('center', v, String) }),
|
1863
|
-
:
|
1859
|
+
:item_number => (x = opts.delete(:item_number); x.nil? ? nil : HttpClient::Preconditions.assert_class('item_number', x, Array).map { |v| HttpClient::Preconditions.assert_class('item_number', v, String) }),
|
1864
1860
|
:limit => HttpClient::Preconditions.assert_class('limit', (x = opts.delete(:limit); x.nil? ? 25 : x), Integer),
|
1865
1861
|
:offset => HttpClient::Preconditions.assert_class('offset', (x = opts.delete(:offset); x.nil? ? 0 : x), Integer),
|
1866
1862
|
:sort => HttpClient::Preconditions.assert_class('sort', (x = opts.delete(:sort); x.nil? ? "-created_at" : x), String)
|
@@ -1904,7 +1900,7 @@ module Io
|
|
1904
1900
|
query = {
|
1905
1901
|
:id => (x = opts.delete(:id); x.nil? ? nil : HttpClient::Preconditions.assert_class('id', x, Array).map { |v| HttpClient::Preconditions.assert_class('id', v, String) }),
|
1906
1902
|
:center => (x = opts.delete(:center); x.nil? ? nil : HttpClient::Preconditions.assert_class('center', x, Array).map { |v| HttpClient::Preconditions.assert_class('center', v, String) }),
|
1907
|
-
:
|
1903
|
+
:item_number => (x = opts.delete(:item_number); x.nil? ? nil : HttpClient::Preconditions.assert_class('item_number', x, Array).map { |v| HttpClient::Preconditions.assert_class('item_number', v, String) }),
|
1908
1904
|
:limit => HttpClient::Preconditions.assert_class('limit', (x = opts.delete(:limit); x.nil? ? 25 : x), Integer),
|
1909
1905
|
:offset => HttpClient::Preconditions.assert_class('offset', (x = opts.delete(:offset); x.nil? ? 0 : x), Integer),
|
1910
1906
|
:sort => HttpClient::Preconditions.assert_class('sort', (x = opts.delete(:sort); x.nil? ? "-created_at" : x), String)
|
@@ -6305,6 +6301,36 @@ module Io
|
|
6305
6301
|
|
6306
6302
|
end
|
6307
6303
|
|
6304
|
+
# Statistics covering product catalog item information, including total catalog
|
6305
|
+
# item count, number of distinct categories, etc.
|
6306
|
+
class CatalogStatistics
|
6307
|
+
|
6308
|
+
attr_reader :number_items, :number_categories
|
6309
|
+
|
6310
|
+
def initialize(incoming={})
|
6311
|
+
opts = HttpClient::Helper.symbolize_keys(incoming)
|
6312
|
+
HttpClient::Preconditions.require_keys(opts, [:number_items, :number_categories], 'CatalogStatistics')
|
6313
|
+
@number_items = HttpClient::Preconditions.assert_class('number_items', opts.delete(:number_items), Integer)
|
6314
|
+
@number_categories = HttpClient::Preconditions.assert_class('number_categories', opts.delete(:number_categories), Integer)
|
6315
|
+
end
|
6316
|
+
|
6317
|
+
def to_json
|
6318
|
+
JSON.dump(to_hash)
|
6319
|
+
end
|
6320
|
+
|
6321
|
+
def copy(incoming={})
|
6322
|
+
CatalogStatistics.new(to_hash.merge(HttpClient::Helper.symbolize_keys(incoming)))
|
6323
|
+
end
|
6324
|
+
|
6325
|
+
def to_hash
|
6326
|
+
{
|
6327
|
+
:number_items => number_items,
|
6328
|
+
:number_categories => number_categories
|
6329
|
+
}
|
6330
|
+
end
|
6331
|
+
|
6332
|
+
end
|
6333
|
+
|
6308
6334
|
class CatalogVersion
|
6309
6335
|
|
6310
6336
|
attr_reader :id, :timestamp, :type, :catalog
|
@@ -7678,20 +7704,20 @@ module Io
|
|
7678
7704
|
# functions if needed.
|
7679
7705
|
class Function < ExpandableFunction
|
7680
7706
|
|
7681
|
-
attr_reader :id, :subcatalog_id, :
|
7707
|
+
attr_reader :id, :subcatalog_id, :name, :position, :adjustments, :levies, :code, :q
|
7682
7708
|
|
7683
7709
|
def initialize(incoming={})
|
7684
7710
|
super(:name => ExpandableFunction::Types::FUNCTION)
|
7685
7711
|
opts = HttpClient::Helper.symbolize_keys(incoming)
|
7686
|
-
HttpClient::Preconditions.require_keys(opts, [:id, :subcatalog_id, :
|
7712
|
+
HttpClient::Preconditions.require_keys(opts, [:id, :subcatalog_id, :name, :position, :adjustments, :levies, :code, :q], 'Function')
|
7687
7713
|
@id = HttpClient::Preconditions.assert_class('id', opts.delete(:id), String)
|
7688
7714
|
@subcatalog_id = HttpClient::Preconditions.assert_class('subcatalog_id', opts.delete(:subcatalog_id), String)
|
7689
|
-
@key = HttpClient::Preconditions.assert_class('key', opts.delete(:key), String)
|
7690
7715
|
@name = HttpClient::Preconditions.assert_class('name', opts.delete(:name), String)
|
7691
7716
|
@position = HttpClient::Preconditions.assert_class('position', opts.delete(:position), Integer)
|
7692
|
-
@
|
7717
|
+
@adjustments = HttpClient::Preconditions.assert_class('adjustments', opts.delete(:adjustments), Array).map { |v| (x = v; x.is_a?(::Io::Flow::V0::Models::Adjustment) ? x : ::Io::Flow::V0::Models::Adjustment.from_json(x)) }
|
7718
|
+
@levies = HttpClient::Preconditions.assert_class('levies', opts.delete(:levies), Array).map { |v| (x = v; x.is_a?(::Io::Flow::V0::Models::Levy) ? x : ::Io::Flow::V0::Models::Levy.apply(x)) }
|
7693
7719
|
@code = HttpClient::Preconditions.assert_class('code', opts.delete(:code), String)
|
7694
|
-
@q =
|
7720
|
+
@q = HttpClient::Preconditions.assert_class('q', opts.delete(:q), String)
|
7695
7721
|
end
|
7696
7722
|
|
7697
7723
|
def to_json
|
@@ -7706,10 +7732,10 @@ module Io
|
|
7706
7732
|
{
|
7707
7733
|
:id => id,
|
7708
7734
|
:subcatalog_id => subcatalog_id,
|
7709
|
-
:key => key,
|
7710
7735
|
:name => name,
|
7711
7736
|
:position => position,
|
7712
|
-
:
|
7737
|
+
:adjustments => adjustments.map { |o| o.to_hash },
|
7738
|
+
:levies => levies.map { |o| o.value },
|
7713
7739
|
:code => code,
|
7714
7740
|
:q => q
|
7715
7741
|
}
|
@@ -7728,17 +7754,18 @@ module Io
|
|
7728
7754
|
# functions if needed.
|
7729
7755
|
class FunctionForm
|
7730
7756
|
|
7731
|
-
attr_reader :name, :subcatalog_id, :q, :
|
7757
|
+
attr_reader :name, :subcatalog_id, :q, :adjustments, :levies, :code, :position
|
7732
7758
|
|
7733
7759
|
def initialize(incoming={})
|
7734
7760
|
opts = HttpClient::Helper.symbolize_keys(incoming)
|
7735
|
-
HttpClient::Preconditions.require_keys(opts, [:name, :subcatalog_id
|
7761
|
+
HttpClient::Preconditions.require_keys(opts, [:name, :subcatalog_id], 'FunctionForm')
|
7736
7762
|
@name = HttpClient::Preconditions.assert_class('name', opts.delete(:name), String)
|
7737
7763
|
@subcatalog_id = HttpClient::Preconditions.assert_class('subcatalog_id', opts.delete(:subcatalog_id), String)
|
7738
7764
|
@q = (x = opts.delete(:q); x.nil? ? nil : HttpClient::Preconditions.assert_class('q', x, String))
|
7739
|
-
@
|
7765
|
+
@adjustments = (x = opts.delete(:adjustments); x.nil? ? nil : HttpClient::Preconditions.assert_class('adjustments', x, Array).map { |v| (x = v; x.is_a?(::Io::Flow::V0::Models::Adjustment) ? x : ::Io::Flow::V0::Models::Adjustment.from_json(x)) })
|
7766
|
+
@levies = (x = opts.delete(:levies); x.nil? ? nil : HttpClient::Preconditions.assert_class('levies', x, Array).map { |v| (x = v; x.is_a?(::Io::Flow::V0::Models::Levy) ? x : ::Io::Flow::V0::Models::Levy.apply(x)) })
|
7740
7767
|
@code = (x = opts.delete(:code); x.nil? ? nil : HttpClient::Preconditions.assert_class('code', x, String))
|
7741
|
-
@position = HttpClient::Preconditions.assert_class('position',
|
7768
|
+
@position = (x = opts.delete(:position); x.nil? ? nil : HttpClient::Preconditions.assert_class('position', x, Integer))
|
7742
7769
|
end
|
7743
7770
|
|
7744
7771
|
def to_json
|
@@ -7754,7 +7781,8 @@ module Io
|
|
7754
7781
|
:name => name,
|
7755
7782
|
:subcatalog_id => subcatalog_id,
|
7756
7783
|
:q => q,
|
7757
|
-
:
|
7784
|
+
:adjustments => adjustments.nil? ? nil : adjustments.map { |o| o.to_hash },
|
7785
|
+
:levies => levies.nil? ? nil : levies.map { |o| o.value },
|
7758
7786
|
:code => code,
|
7759
7787
|
:position => position
|
7760
7788
|
}
|
@@ -8856,14 +8884,14 @@ module Io
|
|
8856
8884
|
# not been previously created, a new row is created for the center/item tuple.
|
8857
8885
|
class InventoryUpdateForm
|
8858
8886
|
|
8859
|
-
attr_reader :center, :idempotency_key, :
|
8887
|
+
attr_reader :center, :idempotency_key, :item_number, :quantity, :type, :notes
|
8860
8888
|
|
8861
8889
|
def initialize(incoming={})
|
8862
8890
|
opts = HttpClient::Helper.symbolize_keys(incoming)
|
8863
|
-
HttpClient::Preconditions.require_keys(opts, [:center, :idempotency_key, :
|
8891
|
+
HttpClient::Preconditions.require_keys(opts, [:center, :idempotency_key, :item_number, :quantity, :type], 'InventoryUpdateForm')
|
8864
8892
|
@center = HttpClient::Preconditions.assert_class('center', opts.delete(:center), String)
|
8865
8893
|
@idempotency_key = HttpClient::Preconditions.assert_class('idempotency_key', opts.delete(:idempotency_key), String)
|
8866
|
-
@
|
8894
|
+
@item_number = HttpClient::Preconditions.assert_class('item_number', opts.delete(:item_number), String)
|
8867
8895
|
@quantity = HttpClient::Preconditions.assert_class('quantity', opts.delete(:quantity), Integer)
|
8868
8896
|
@type = (x = opts.delete(:type); x.is_a?(::Io::Flow::V0::Models::UpdateType) ? x : ::Io::Flow::V0::Models::UpdateType.apply(x))
|
8869
8897
|
@notes = (x = opts.delete(:notes); x.nil? ? nil : HttpClient::Preconditions.assert_class('notes', HttpClient::Helper.to_object(x), Hash))
|
@@ -8881,7 +8909,7 @@ module Io
|
|
8881
8909
|
{
|
8882
8910
|
:center => center,
|
8883
8911
|
:idempotency_key => idempotency_key,
|
8884
|
-
:
|
8912
|
+
:item_number => item_number,
|
8885
8913
|
:quantity => quantity,
|
8886
8914
|
:type => type.value,
|
8887
8915
|
:notes => notes
|
@@ -10525,34 +10553,6 @@ module Io
|
|
10525
10553
|
|
10526
10554
|
end
|
10527
10555
|
|
10528
|
-
# Presentation for UI that is used to generate a localized price function
|
10529
|
-
class Presets
|
10530
|
-
|
10531
|
-
attr_reader :adjustments, :levies
|
10532
|
-
|
10533
|
-
def initialize(incoming={})
|
10534
|
-
opts = HttpClient::Helper.symbolize_keys(incoming)
|
10535
|
-
@adjustments = HttpClient::Preconditions.assert_class('adjustments', (x = opts.delete(:adjustments); x.nil? ? [] : x), Array).map { |v| (x = v; x.is_a?(::Io::Flow::V0::Models::Adjustment) ? x : ::Io::Flow::V0::Models::Adjustment.from_json(x)) }
|
10536
|
-
@levies = HttpClient::Preconditions.assert_class('levies', (x = opts.delete(:levies); x.nil? ? [] : x), Array).map { |v| (x = v; x.is_a?(::Io::Flow::V0::Models::Levy) ? x : ::Io::Flow::V0::Models::Levy.apply(x)) }
|
10537
|
-
end
|
10538
|
-
|
10539
|
-
def to_json
|
10540
|
-
JSON.dump(to_hash)
|
10541
|
-
end
|
10542
|
-
|
10543
|
-
def copy(incoming={})
|
10544
|
-
Presets.new(to_hash.merge(HttpClient::Helper.symbolize_keys(incoming)))
|
10545
|
-
end
|
10546
|
-
|
10547
|
-
def to_hash
|
10548
|
-
{
|
10549
|
-
:adjustments => adjustments.map { |o| o.to_hash },
|
10550
|
-
:levies => levies.map { |o| o.value }
|
10551
|
-
}
|
10552
|
-
end
|
10553
|
-
|
10554
|
-
end
|
10555
|
-
|
10556
10556
|
# Represents an amount-currency pair for a basic price
|
10557
10557
|
class Price
|
10558
10558
|
|
@@ -11773,6 +11773,42 @@ module Io
|
|
11773
11773
|
|
11774
11774
|
end
|
11775
11775
|
|
11776
|
+
# Statistics related to the items in this subcatalog, including item count,
|
11777
|
+
# number of distinct categories, etc.
|
11778
|
+
class SubcatalogStatistics
|
11779
|
+
|
11780
|
+
attr_reader :number_items, :number_categories, :number_additions_queued, :number_updates_queued, :catalog
|
11781
|
+
|
11782
|
+
def initialize(incoming={})
|
11783
|
+
opts = HttpClient::Helper.symbolize_keys(incoming)
|
11784
|
+
HttpClient::Preconditions.require_keys(opts, [:number_items, :number_categories, :number_additions_queued, :number_updates_queued, :catalog], 'SubcatalogStatistics')
|
11785
|
+
@number_items = HttpClient::Preconditions.assert_class('number_items', opts.delete(:number_items), Integer)
|
11786
|
+
@number_categories = HttpClient::Preconditions.assert_class('number_categories', opts.delete(:number_categories), Integer)
|
11787
|
+
@number_additions_queued = HttpClient::Preconditions.assert_class('number_additions_queued', opts.delete(:number_additions_queued), Integer)
|
11788
|
+
@number_updates_queued = HttpClient::Preconditions.assert_class('number_updates_queued', opts.delete(:number_updates_queued), Integer)
|
11789
|
+
@catalog = (x = opts.delete(:catalog); x.is_a?(::Io::Flow::V0::Models::CatalogStatistics) ? x : ::Io::Flow::V0::Models::CatalogStatistics.new(x))
|
11790
|
+
end
|
11791
|
+
|
11792
|
+
def to_json
|
11793
|
+
JSON.dump(to_hash)
|
11794
|
+
end
|
11795
|
+
|
11796
|
+
def copy(incoming={})
|
11797
|
+
SubcatalogStatistics.new(to_hash.merge(HttpClient::Helper.symbolize_keys(incoming)))
|
11798
|
+
end
|
11799
|
+
|
11800
|
+
def to_hash
|
11801
|
+
{
|
11802
|
+
:number_items => number_items,
|
11803
|
+
:number_categories => number_categories,
|
11804
|
+
:number_additions_queued => number_additions_queued,
|
11805
|
+
:number_updates_queued => number_updates_queued,
|
11806
|
+
:catalog => catalog.to_hash
|
11807
|
+
}
|
11808
|
+
end
|
11809
|
+
|
11810
|
+
end
|
11811
|
+
|
11776
11812
|
class SubcatalogVersion
|
11777
11813
|
|
11778
11814
|
attr_reader :id, :timestamp, :type, :subcatalog
|