openactive 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 +4 -4
- data/README.md +75 -0
- data/lib/openactive/base_model.rb +8 -2
- data/lib/openactive/helpers/json_ld.rb +21 -1
- data/lib/openactive/validators/time_validator.rb +1 -1
- data/lib/openactive/version.rb +1 -1
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 82b696d4a30a021350671e17b0a73704ae990789611057b175e9dfb7ac1360dc
|
4
|
+
data.tar.gz: 9fa2f6b38f7a0a841b4e0a6104ad6bbc2eff6054afe94cd2e856d75ea93525f1
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 957654bbfcbac075430bcf3842e4853b2477540522484e22f3ba95dc5ee6c2800532a9bb77b9e0c9b79257792187bfbc1c0b3d86d3e3dae0920e1159719ab5aa
|
7
|
+
data.tar.gz: e1e39a7cfdc09372b4f257e252fda4a45254502facda28e91c2e4c2e33b9c06145ce053add03268026b83c268aa0357b374231c27bb6783c39983d1f705d553b
|
data/README.md
CHANGED
@@ -60,6 +60,81 @@ The OpenActive data model builds on top of Schema.org, which means that you are
|
|
60
60
|
|
61
61
|
To reflect this, OpenActive uses inheritance to build ontop of a copy of Schema.org, these are available within the OpenActive::Models::Schema and OpenActive::Enums::Schema namespaces. And so makes it easy to use additional properties from schema.org on any given type.
|
62
62
|
|
63
|
+
### Full Models Example
|
64
|
+
```ruby
|
65
|
+
session_series = OpenActive::Models::SessionSeries.new(
|
66
|
+
name: "Virtual BODYPUMP",
|
67
|
+
description: "This is the virtual version of the original barbell class, which will help you get lean, toned and fit - fast",
|
68
|
+
start_date: "2017-04-24T19:30:00-08:00",
|
69
|
+
end_date: "2017-04-24T23:00:00-08:00",
|
70
|
+
location: OpenActive::Models::Place.new(
|
71
|
+
name: "Raynes Park High School, 46A West Barnes Lane",
|
72
|
+
geo: OpenActive::Models::GeoCoordinates.new(
|
73
|
+
latitude: 51.4034423828125,
|
74
|
+
longitude: -0.2369088977575302,
|
75
|
+
)
|
76
|
+
),
|
77
|
+
activity: OpenActive::Models::Concept.new(
|
78
|
+
id: "https://openactive.io/activity-list#5e78bcbe-36db-425a-9064-bf96d09cc351",
|
79
|
+
pref_label: "Bodypump™",
|
80
|
+
in_scheme: "https://openactive.io/activity-list"
|
81
|
+
),
|
82
|
+
organizer: OpenActive::Models::Organization.new(
|
83
|
+
name: "Central Speedball Association",
|
84
|
+
url: "http://www.speedball-world.com"
|
85
|
+
),
|
86
|
+
offers: [OpenActive::Models::Offer.new(
|
87
|
+
identifier: "OX-AD",
|
88
|
+
name: "Adult",
|
89
|
+
price: 3.30,
|
90
|
+
price_currency: "GBP",
|
91
|
+
url: "https://profile.everyoneactive.com/booking?Site=0140&Activities=1402CBP20150217&Culture=en-GB"
|
92
|
+
)]
|
93
|
+
)
|
94
|
+
|
95
|
+
session_series.to_json
|
96
|
+
```
|
97
|
+
This results in
|
98
|
+
|
99
|
+
```json
|
100
|
+
{
|
101
|
+
"@context": ["https://openactive.io/", "https://openactive.io/ns-beta"],
|
102
|
+
"@type": "SessionSeries",
|
103
|
+
"description": "This is the virtual version of the original barbell class, which will help you get lean, toned and fit - fast",
|
104
|
+
"offers": [{
|
105
|
+
"@type": "Offer",
|
106
|
+
"name": "Adult",
|
107
|
+
"url": "https://profile.everyoneactive.com/booking?Site=0140&Activities=1402CBP20150217&Culture=en-GB",
|
108
|
+
"price": "3.33",
|
109
|
+
"priceCurrency": "GBP",
|
110
|
+
"identifier": "OX-AD"
|
111
|
+
}],
|
112
|
+
"startDate": "2017-04-24T19:30:00-08:00",
|
113
|
+
"endDate": "2017-04-24T23:00:00-08:00",
|
114
|
+
"location": {
|
115
|
+
"@type": "Place",
|
116
|
+
"name": "Raynes Park High School, 46A West Barnes Lane",
|
117
|
+
"geo": {
|
118
|
+
"@type": "GeoCoordinates",
|
119
|
+
"longitude": "-0.2369088977575302e0",
|
120
|
+
"latitude": "0.514034423828125e2"
|
121
|
+
}
|
122
|
+
},
|
123
|
+
"organizer": {
|
124
|
+
"@type": "Organization",
|
125
|
+
"name": "Central Speedball Association",
|
126
|
+
"url": "http://www.speedball-world.com"
|
127
|
+
},
|
128
|
+
"activity": {
|
129
|
+
"@type": "Concept",
|
130
|
+
"@id": "https://openactive.io/activity-list#5e78bcbe-36db-425a-9064-bf96d09cc351",
|
131
|
+
"inScheme": "https://openactive.io/activity-list",
|
132
|
+
"prefLabel": "Bodypump™"
|
133
|
+
},
|
134
|
+
"name": "Virtual BODYPUMP"
|
135
|
+
}
|
136
|
+
```
|
137
|
+
|
63
138
|
## RPDE Feed Publishing
|
64
139
|
|
65
140
|
To publish an OpenActive data feed (see this [video explainer](https://developer.openactive.io/publishing-data/data-feeds/how-a-data-feed-works)), The OpenActive gem provides a drop-in solution to render the feed pages. This also includes validation for the underlying feed query.
|
@@ -1,3 +1,5 @@
|
|
1
|
+
require 'json'
|
2
|
+
|
1
3
|
module OpenActive
|
2
4
|
class BaseModel
|
3
5
|
include OpenActive::Concerns::JsonLdSerializable
|
@@ -112,8 +114,12 @@ module OpenActive
|
|
112
114
|
self.class.serialize(self, **kwargs)
|
113
115
|
end
|
114
116
|
|
115
|
-
def to_json(
|
116
|
-
serialize(schema: schema)
|
117
|
+
def to_json(schema: false, pretty: false)
|
118
|
+
serialized = serialize(schema: schema)
|
119
|
+
|
120
|
+
return JSON.pretty_generate(serialized) if pretty
|
121
|
+
|
122
|
+
serialized.to_json
|
117
123
|
end
|
118
124
|
end
|
119
125
|
end
|
@@ -28,11 +28,29 @@ module OpenActive
|
|
28
28
|
|
29
29
|
data["@context"] =
|
30
30
|
[
|
31
|
+
*(schema ? ["https://schema.org"] : []),
|
31
32
|
*obj.context,
|
32
|
-
*(schema ? ["https://schema.org"] : [])
|
33
33
|
]
|
34
34
|
end
|
35
35
|
|
36
|
+
# push @'s to the start
|
37
|
+
data = data.sort_by do |k, _v|
|
38
|
+
case k
|
39
|
+
when '@context'
|
40
|
+
0
|
41
|
+
when '@type'
|
42
|
+
1
|
43
|
+
when '@id'
|
44
|
+
2
|
45
|
+
else
|
46
|
+
if k.start_with?('@')
|
47
|
+
3
|
48
|
+
else
|
49
|
+
4
|
50
|
+
end
|
51
|
+
end
|
52
|
+
end
|
53
|
+
|
36
54
|
# Loop all class methods, find the getters
|
37
55
|
# and map defined attributes, normalizing attribute name
|
38
56
|
data = Hash[data.map do |method_name, attr_value|
|
@@ -68,6 +86,8 @@ module OpenActive
|
|
68
86
|
parent,
|
69
87
|
**kwargs,
|
70
88
|
)
|
89
|
+
elsif value.is_a?(BigDecimal)
|
90
|
+
value.to_s('F')
|
71
91
|
elsif value.is_a?(Numeric)
|
72
92
|
value
|
73
93
|
elsif value.nil? # let nil be nil
|
@@ -5,7 +5,7 @@ module OpenActive
|
|
5
5
|
class TimeValidator < BaseValidator
|
6
6
|
# https://www.oreilly.com/library/view/regular-expressions-cookbook/9781449327453/ch04s07.html#id2175516
|
7
7
|
# Minor additions to make second values and timezone optional
|
8
|
-
REGEX = /(?<hour>2[0-3]|[01][0-9]):?(?<minute>[0-5][0-9]):?(?<second>[0-5][0-9])?(?<timezone>Z|[+-](?:2[0-3]|[01][0-9])(?::?(?:[0-5][0-9]))?)
|
8
|
+
REGEX = /(?<hour>2[0-3]|[01][0-9]):?(?<minute>[0-5][0-9]):?(?<second>[0-5][0-9])?(?<timezone>Z|[+-](?:2[0-3]|[01][0-9])(?::?(?:[0-5][0-9]))?)?/.freeze
|
9
9
|
|
10
10
|
# Coerce given value to the type the validator is validating against.
|
11
11
|
# PLEASE NOTE: no checks are performed on the given value.
|
data/lib/openactive/version.rb
CHANGED
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: openactive
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.1.
|
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-
|
11
|
+
date: 2019-12-10 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bundler
|