openactive-dataset_site 0.1.0 → 0.1.1

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
  SHA1:
3
- metadata.gz: 06c3edb6feeae3a16036a6cc50150d5b7da364b0
4
- data.tar.gz: c01bacae3dc20e6fdd5103e4e9549add20d648ac
3
+ metadata.gz: 27bda3050fa7bc5b745fe5f70a05bccd414031dc
4
+ data.tar.gz: 67d724394a705936913b5cbcddcf18ef1b34146a
5
5
  SHA512:
6
- metadata.gz: c5b93fe8bf15a3e9e8557905e802c19a5e995466710ba5913a278a1c4650cd95f3973e7c5027bcde087af04bf6d19fe07387bd9aed3ffafebf737eccc9c0ddb2
7
- data.tar.gz: 49aeee97614d863c02fed3340d802819a8ba746e500ea7c6c6f409d114c319a7c72098985ac5ca139e32adf1785551750ec8c82cb9485ea0a9fd9dd5abcd6762
6
+ metadata.gz: ae03e4c8ef2033020fb154a9d0987a6b656007276c489632596cae4d81548780b44ac1fcfbe2db228a168176578f2bb9454187ec2d2bbf983acd0ce8668bb048
7
+ data.tar.gz: 1078436fecde29e78b4ae0d77fb8892908278c57ad62f36050521348984c61c576a9dae043a10fa1549a729d088e6a22adae93b9e6569724eb794c90edddba3a
data/README.md CHANGED
@@ -62,6 +62,140 @@ settings = OpenActive::DatasetSite::Settings.new(
62
62
  )
63
63
  ```
64
64
 
65
+
66
+ ### Feed-level customisation
67
+ If you need to do feed specific overrides, then you may do this by overriding the method.
68
+ ```ruby
69
+ settings = Class.new(OpenActive::DatasetSite::Settings) do
70
+ def data_download(feed_type)
71
+ val = super(feed_type)
72
+
73
+ case feed_type
74
+ when OpenActive::DatasetSite::FeedType::SESSION_SERIES
75
+ val.content_url = open_data_feed_base_url + "session_series"
76
+ end
77
+
78
+ val
79
+ end
80
+ end.new(
81
+ data_feed_types: [
82
+ OpenActive::DatasetSite::FeedType::FACILITY_USE,
83
+ OpenActive::DatasetSite::FeedType::SCHEDULED_SESSION,
84
+ OpenActive::DatasetSite::FeedType::SESSION_SERIES,
85
+ OpenActive::DatasetSite::FeedType::SLOT,
86
+ ],
87
+ # rest of your settings here.
88
+ )
89
+ ```
90
+
91
+ To match the PHP/.NET usage, you may alternatively use this approach, however it's less advised as there are more details to get right (and it risks a mismatch between the downloads and the advertised feed types):
92
+ ```ruby
93
+ settings = OpenActive::DatasetSite::Settings.new(
94
+ # your settings here,
95
+ data_feed_types: [
96
+ OpenActive::DatasetSite::FeedType::SESSION_SERIES,
97
+ ],
98
+ data_downloads: [
99
+ OpenActive::Models::DataDownload.new(
100
+ name: "SessionSeries",
101
+ additional_type: "https://openactive.io/SessionSeries",
102
+ encoding_format: OpenActive::DatasetSite::Meta.RPDE_MEDIA_TYPE,
103
+ content_url: open_data_feed_base_url + "session-series",
104
+ )
105
+ ]
106
+ )
107
+ ```
108
+
109
+ ### Dataset
110
+ ```ruby
111
+ dataset = OpenActive::Models::Dataset.new(
112
+ id: "http://example.com/dataset/",
113
+ description:
114
+ "Near real-time availability and rich descriptions relating to the facilities and sessions available from Simpleweb",
115
+ url: "http://example.com/dataset/",
116
+ dateModified: "2019-12-09T15:36:15+00:00",
117
+ keywords:
118
+ ["Facilities",
119
+ "Sessions",
120
+ "Activities",
121
+ "Sports",
122
+ "Physical Activity",
123
+ "OpenActive"],
124
+ schemaVersion: "https://www.openactive.io/modelling-opportunity-data/2.0/",
125
+ license: "https://creativecommons.org/licenses/by/4.0/",
126
+ publisher:
127
+ OpenActive::Models::Organization.new(
128
+ name: "Simpleweb",
129
+ description:
130
+ "Simpleweb is a purpose driven software company that specialises in new technologies, product development, and human interaction.",
131
+ url: "https://www.simpleweb.co.uk/",
132
+ legalName: "Simpleweb Ltd",
133
+ logo:
134
+ OpenActive::Models::ImageObject.new(
135
+ url:
136
+ "https://simpleweb.co.uk/wp-content/uploads/2015/07/facebook-default.png",
137
+ ),
138
+ email: "spam@simpleweb.co.uk",
139
+ ),
140
+ discussionUrl: "https://github.com/simpleweb/sw-oa-php-test-site",
141
+ datePublished: "2019-11-05T00:00:00+00:00",
142
+ inLanguage: ["en-GB"],
143
+ distribution:
144
+ [OpenActive::Models::DataDownload.new(
145
+ name: "FacilityUse",
146
+ additionalType: "https://openactive.io/FacilityUse",
147
+ encodingFormat: "application/vnd.openactive.rpde+json; version=1",
148
+ contentUrl: "http://example.com/feed/facility-uses",
149
+ ),
150
+ OpenActive::Models::DataDownload.new(
151
+ name: "ScheduledSession",
152
+ additionalType: "https://openactive.io/ScheduledSession",
153
+ encodingFormat: "application/vnd.openactive.rpde+json; version=1",
154
+ contentUrl: "http://example.com/feed/scheduled-sessions",
155
+ ),
156
+ OpenActive::Models::DataDownload.new(
157
+ name: "SessionSeries",
158
+ additionalType: "https://openactive.io/SessionSeries",
159
+ encodingFormat: "application/vnd.openactive.rpde+json; version=1",
160
+ contentUrl: "http://example.com/feed/session_series",
161
+ ),
162
+ OpenActive::Models::DataDownload.new(
163
+ name: "Slot",
164
+ additionalType: "https://openactive.io/Slot",
165
+ encodingFormat: "application/vnd.openactive.rpde+json; version=1",
166
+ contentUrl: "http://example.com/feed/slots",
167
+ )],
168
+ backgroundImage:
169
+ OpenActive::Models::ImageObject.new(
170
+ url:
171
+ "https://simpleweb.co.uk/wp-content/uploads/2017/06/IMG_8994-500x500-c-default.jpg",
172
+ ),
173
+ documentation: "https://developer.openactive.io/",
174
+ name: "Simpleweb Facilities and Sessions",
175
+ )
176
+
177
+ renderer = OpenActive::DatasetSite::TemplateRenderer.new(dataset)
178
+
179
+ puts renderer.render
180
+ ```
181
+
182
+ ### Dataset patching
183
+ The dataset generation should already be good for most purposes, if needing to change just a couple of fields then
184
+ you may be better of patching just those fields.
185
+ ```ruby
186
+ settings = OpenActive::DatasetSite::Settings.new(
187
+ # your settings here
188
+ )
189
+
190
+ dataset = settings.to_dataset
191
+
192
+ dataset.description = "Some better non-generated description here."
193
+
194
+ renderer = OpenActive::DatasetSite::TemplateRenderer.new(dataset)
195
+
196
+ puts renderer.render
197
+ ```
198
+
65
199
  ### API
66
200
 
67
201
  #### OpenActive::DatasetSite::Settings
@@ -0,0 +1,74 @@
1
+ require 'rubygems'
2
+ require 'bundler/setup'
3
+
4
+ require "openactive/dataset_site"
5
+
6
+ dataset = OpenActive::Models::Dataset.new(
7
+ id: "http://example.com/dataset/",
8
+ description:
9
+ "Near real-time availability and rich descriptions relating to the facilities and sessions available from Simpleweb",
10
+ url: "http://example.com/dataset/",
11
+ date_modified: "2019-12-09T15:36:15+00:00",
12
+ keywords:
13
+ ["Facilities",
14
+ "Sessions",
15
+ "Activities",
16
+ "Sports",
17
+ "Physical Activity",
18
+ "OpenActive"],
19
+ schema_version: "https://www.openactive.io/modelling-opportunity-data/2.0/",
20
+ license: "https://creativecommons.org/licenses/by/4.0/",
21
+ publisher:
22
+ OpenActive::Models::Organization.new(
23
+ name: "Simpleweb",
24
+ description:
25
+ "Simpleweb is a purpose driven software company that specialises in new technologies, product development, and human interaction.",
26
+ url: "https://www.simpleweb.co.uk/",
27
+ legalName: "Simpleweb Ltd",
28
+ logo:
29
+ OpenActive::Models::ImageObject.new(
30
+ url:
31
+ "https://simpleweb.co.uk/wp-content/uploads/2015/07/facebook-default.png",
32
+ ),
33
+ email: "spam@simpleweb.co.uk",
34
+ ),
35
+ discussion_url: "https://github.com/simpleweb/sw-oa-php-test-site",
36
+ date_published: "2019-11-05T00:00:00+00:00",
37
+ in_language: ["en-GB"],
38
+ distribution:
39
+ [OpenActive::Models::DataDownload.new(
40
+ name: "FacilityUse",
41
+ additional_type: "https://openactive.io/FacilityUse",
42
+ encoding_format: "application/vnd.openactive.rpde+json; version=1",
43
+ content_url: "http://example.com/feed/facility-uses",
44
+ ),
45
+ OpenActive::Models::DataDownload.new(
46
+ name: "ScheduledSession",
47
+ additional_type: "https://openactive.io/ScheduledSession",
48
+ encoding_format: "application/vnd.openactive.rpde+json; version=1",
49
+ content_url: "http://example.com/feed/scheduled-sessions",
50
+ ),
51
+ OpenActive::Models::DataDownload.new(
52
+ name: "SessionSeries",
53
+ additional_type: "https://openactive.io/SessionSeries",
54
+ encoding_format: "application/vnd.openactive.rpde+json; version=1",
55
+ content_url: "http://example.com/feed/session_series",
56
+ ),
57
+ OpenActive::Models::DataDownload.new(
58
+ name: "Slot",
59
+ additional_type: "https://openactive.io/Slot",
60
+ encoding_format: "application/vnd.openactive.rpde+json; version=1",
61
+ content_url: "http://example.com/feed/slots",
62
+ )],
63
+ background_image:
64
+ OpenActive::Models::ImageObject.new(
65
+ url:
66
+ "https://simpleweb.co.uk/wp-content/uploads/2017/06/IMG_8994-500x500-c-default.jpg",
67
+ ),
68
+ documentation: "https://developer.openactive.io/",
69
+ name: "Simpleweb Facilities and Sessions",
70
+ )
71
+
72
+ renderer = OpenActive::DatasetSite::TemplateRenderer.new(dataset)
73
+
74
+ puts renderer.render
@@ -0,0 +1,37 @@
1
+ require 'rubygems'
2
+ require 'bundler/setup'
3
+
4
+ require "openactive/dataset_site"
5
+
6
+ feed_types = [
7
+ OpenActive::DatasetSite::FeedType::FACILITY_USE,
8
+ OpenActive::DatasetSite::FeedType::SCHEDULED_SESSION,
9
+ OpenActive::DatasetSite::FeedType::SESSION_SERIES,
10
+ OpenActive::DatasetSite::FeedType::SLOT,
11
+ ]
12
+
13
+ settings = OpenActive::DatasetSite::Settings.new(
14
+ open_data_feed_base_url: "http://example.com/feed/",
15
+ dataset_site_url: "http://example.com/dataset/",
16
+ dataset_discussion_url: "https://github.com/simpleweb/sw-oa-php-test-site",
17
+ dataset_documentation_url: "https://developer.openactive.io/",
18
+ dataset_languages: ["en-GB"],
19
+ organisation_name: "Simpleweb",
20
+ organisation_url: "https://www.simpleweb.co.uk/",
21
+ organisation_legal_entity: "Simpleweb Ltd",
22
+ organisation_plain_text_description: "Simpleweb is a purpose driven software company that specialises in new "\
23
+ "technologies, product development, and human interaction.",
24
+ organisation_logo_url: "https://simpleweb.co.uk/wp-content/uploads/2015/07/facebook-default.png",
25
+ organisation_email: "spam@simpleweb.co.uk",
26
+ background_image_url: "https://simpleweb.co.uk/wp-content/uploads/2017/06/IMG_8994-500x500-c-default.jpg",
27
+ date_first_published: "2019-11-05", # remember, remember the fifth of November...
28
+ data_feed_types: feed_types,
29
+ )
30
+
31
+ dataset = settings.to_dataset
32
+
33
+ dataset.description = "Some better non-generated description here."
34
+
35
+ renderer = OpenActive::DatasetSite::TemplateRenderer.new(dataset)
36
+
37
+ puts renderer.render
@@ -0,0 +1,44 @@
1
+ require 'rubygems'
2
+ require 'bundler/setup'
3
+
4
+ require "openactive/dataset_site"
5
+
6
+ feed_types = [
7
+ OpenActive::DatasetSite::FeedType::FACILITY_USE,
8
+ OpenActive::DatasetSite::FeedType::SCHEDULED_SESSION,
9
+ OpenActive::DatasetSite::FeedType::SESSION_SERIES,
10
+ OpenActive::DatasetSite::FeedType::SLOT,
11
+ ]
12
+
13
+ settings = Class.new(OpenActive::DatasetSite::Settings) do
14
+ def data_download(feed_type)
15
+ val = super(feed_type)
16
+
17
+ case feed_type
18
+ when OpenActive::DatasetSite::FeedType::SESSION_SERIES
19
+ val.content_url = open_data_feed_base_url + "session_series"
20
+ end
21
+
22
+ val
23
+ end
24
+ end.new(
25
+ open_data_feed_base_url: "http://example.com/feed/",
26
+ dataset_site_url: "http://example.com/dataset/",
27
+ dataset_discussion_url: "https://github.com/simpleweb/sw-oa-php-test-site",
28
+ dataset_documentation_url: "https://developer.openactive.io/",
29
+ dataset_languages: ["en-GB"],
30
+ organisation_name: "Simpleweb",
31
+ organisation_url: "https://www.simpleweb.co.uk/",
32
+ organisation_legal_entity: "Simpleweb Ltd",
33
+ organisation_plain_text_description: "Simpleweb is a purpose driven software company that specialises in new "\
34
+ "technologies, product development, and human interaction.",
35
+ organisation_logo_url: "https://simpleweb.co.uk/wp-content/uploads/2015/07/facebook-default.png",
36
+ organisation_email: "spam@simpleweb.co.uk",
37
+ background_image_url: "https://simpleweb.co.uk/wp-content/uploads/2017/06/IMG_8994-500x500-c-default.jpg",
38
+ date_first_published: "2019-11-05", # remember, remember the fifth of November...
39
+ data_feed_types: feed_types,
40
+ )
41
+
42
+ renderer = OpenActive::DatasetSite::TemplateRenderer.new(settings)
43
+
44
+ puts renderer.render
@@ -0,0 +1,46 @@
1
+ require 'rubygems'
2
+ require 'bundler/setup'
3
+
4
+ require "openactive/dataset_site"
5
+
6
+ feed_types = [
7
+ OpenActive::DatasetSite::FeedType::FACILITY_USE,
8
+ OpenActive::DatasetSite::FeedType::SCHEDULED_SESSION,
9
+ OpenActive::DatasetSite::FeedType::SESSION_SERIES,
10
+ OpenActive::DatasetSite::FeedType::SLOT,
11
+ ]
12
+
13
+ class CustomDatasetSettings < OpenActive::DatasetSite::Settings
14
+ def data_download(feed_type)
15
+ val = super(feed_type)
16
+
17
+ case feed_type
18
+ when OpenActive::DatasetSite::FeedType::SESSION_SERIES
19
+ val.content_url = open_data_feed_base_url + "session_series"
20
+ end
21
+
22
+ val
23
+ end
24
+ end
25
+
26
+ settings = CustomDatasetSettings.new(
27
+ open_data_feed_base_url: "http://example.com/feed/",
28
+ dataset_site_url: "http://example.com/dataset/",
29
+ dataset_discussion_url: "https://github.com/simpleweb/sw-oa-php-test-site",
30
+ dataset_documentation_url: "https://developer.openactive.io/",
31
+ dataset_languages: ["en-GB"],
32
+ organisation_name: "Simpleweb",
33
+ organisation_url: "https://www.simpleweb.co.uk/",
34
+ organisation_legal_entity: "Simpleweb Ltd",
35
+ organisation_plain_text_description: "Simpleweb is a purpose driven software company that specialises in new "\
36
+ "technologies, product development, and human interaction.",
37
+ organisation_logo_url: "https://simpleweb.co.uk/wp-content/uploads/2015/07/facebook-default.png",
38
+ organisation_email: "spam@simpleweb.co.uk",
39
+ background_image_url: "https://simpleweb.co.uk/wp-content/uploads/2017/06/IMG_8994-500x500-c-default.jpg",
40
+ date_first_published: "2019-11-05", # remember, remember the fifth of November...
41
+ data_feed_types: feed_types,
42
+ )
43
+
44
+ renderer = OpenActive::DatasetSite::TemplateRenderer.new(settings)
45
+
46
+ puts renderer.render
@@ -1,7 +1,7 @@
1
1
  module OpenActive
2
2
  module DatasetSite
3
3
  class Meta < TypesafeEnum::Base
4
- new :RPDE_MEDIA_TYPE, "application/vnd.openactive.rpde+json; version=1"
4
+ RPDE_MEDIA_TYPE = "application/vnd.openactive.rpde+json; version=1".freeze
5
5
  end
6
6
  end
7
7
  end
@@ -2,6 +2,8 @@ module OpenActive
2
2
  module DatasetSite
3
3
  class Settings
4
4
  def initialize(**params)
5
+ super()
6
+
5
7
  params.each do |k, v|
6
8
  setter_method = "#{k}="
7
9
 
@@ -33,6 +35,7 @@ module OpenActive
33
35
  attr_accessor :platform_software_version
34
36
 
35
37
  attr_accessor :data_feed_types
38
+ attr_accessor :data_downloads
36
39
 
37
40
  def data_feed_descriptions
38
41
  data_feed_types.map do |description|
@@ -48,6 +51,7 @@ module OpenActive
48
51
  data_feed_descriptions.to_sentence.downcase
49
52
  end
50
53
 
54
+ # @return [Array<String>] An array of keywords.
51
55
  def keywords
52
56
  [
53
57
  *data_feed_descriptions,
@@ -64,15 +68,30 @@ module OpenActive
64
68
  "#{organisation_name}"
65
69
  end
66
70
 
71
+ # @return [OpenActive::Models::DataDownload] A DataDownload object.
72
+ def data_download(feed_type)
73
+ OpenActive::Models::DataDownload.new(
74
+ name: feed_type.name,
75
+ additional_type: feed_type.same_as,
76
+ encoding_format: OpenActive::DatasetSite::Meta::RPDE_MEDIA_TYPE,
77
+ content_url: open_data_feed_base_url + feed_type.default_feed_path,
78
+ )
79
+ end
80
+
81
+ # @return [Array<OpenActive::Models::DataDownload>] An array of DataDownload objects.
67
82
  def data_downloads
68
- data_feed_types.map do |feed_type|
69
- OpenActive::Models::DataDownload.new(
70
- name: feed_type.name,
71
- additional_type: feed_type.same_as,
72
- encoding_format: "application/vnd.openactive.rpde+json; version=1",
73
- content_url: open_data_feed_base_url + feed_type.default_feed_path,
74
- )
75
- end
83
+ @data_downloads || data_feed_types.map { |feed_type| data_download(feed_type) }
84
+ end
85
+
86
+ # @return [OpenActive::Models::BookingService, nil]
87
+ def booking_service
88
+ return unless platform_name && !platform_name.empty?
89
+
90
+ OpenActive::Models::BookingService.new(
91
+ name: platform_name,
92
+ url: platform_url,
93
+ software_version: platform_software_version,
94
+ )
76
95
  end
77
96
 
78
97
  def to_dataset # rubocop:disable Metrics/MethodLength
@@ -105,12 +124,8 @@ module OpenActive
105
124
  date_published: date_first_published,
106
125
  )
107
126
 
108
- if platform_name && !platform_name.empty?
109
- dataset.booking_service = OpenActive::Models::BookingService.new(
110
- name: platform_name,
111
- url: platform_url,
112
- software_version: platform_software_version,
113
- )
127
+ if (booking_service_val = booking_service)
128
+ dataset.booking_service = booking_service_val
114
129
  end
115
130
 
116
131
  dataset
@@ -16,7 +16,7 @@ module OpenActive
16
16
  end
17
17
 
18
18
  def json
19
- dataset.to_json(schema: true)
19
+ dataset.to_json(schema: true, pretty: true)
20
20
  end
21
21
 
22
22
  def method_missing(orig_method_name, *args)
@@ -1,5 +1,5 @@
1
1
  module OpenActive
2
2
  module DatasetSite
3
- VERSION = "0.1.0".freeze
3
+ VERSION = "0.1.1".freeze
4
4
  end
5
5
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: openactive-dataset_site
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.0
4
+ version: 0.1.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - OpenActive Community
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2019-12-03 00:00:00.000000000 Z
11
+ date: 2019-12-10 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: mustache
@@ -137,7 +137,11 @@ files:
137
137
  - README.md
138
138
  - bin/console
139
139
  - bin/setup
140
- - examples/example.rb
140
+ - examples/basic_example.rb
141
+ - examples/dataset_example.rb
142
+ - examples/dataset_patch.rb
143
+ - examples/specific_feed_override_example.rb
144
+ - examples/specific_feed_override_example2.rb
141
145
  - lib/openactive/dataset_site.rb
142
146
  - lib/openactive/dataset_site/datasetsite.mustache
143
147
  - lib/openactive/dataset_site/feed_type.rb