diaspora_federation 0.1.6 → 0.1.7
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/Changelog.md +14 -0
- data/README.md +1 -1
- data/lib/diaspora_federation/discovery/host_meta.rb +1 -1
- data/lib/diaspora_federation/entities.rb +4 -0
- data/lib/diaspora_federation/entities/event.rb +55 -0
- data/lib/diaspora_federation/entities/event_participation.rb +27 -0
- data/lib/diaspora_federation/entities/message.rb +5 -0
- data/lib/diaspora_federation/entities/status_message.rb +5 -0
- data/lib/diaspora_federation/entity.rb +9 -9
- data/lib/diaspora_federation/federation/fetcher.rb +1 -1
- data/lib/diaspora_federation/validators.rb +2 -0
- data/lib/diaspora_federation/validators/event_participation_validator.rb +12 -0
- data/lib/diaspora_federation/validators/event_validator.rb +21 -0
- data/lib/diaspora_federation/version.rb +1 -1
- data/lib/tasks/tests.rake +2 -2
- metadata +6 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: bccc4300ee15d68f43e71ba93c0f5e5f9946b65d
|
4
|
+
data.tar.gz: ba2a345fbf4775253d8cecd0a56618eb2acbc4d8
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 58c1303160966d0fd6e82f7383aaa073f518fe3905a4975fd8a799473a3802abbf9af10d97d3b6d683211d094a999f3dd9c8d907f456982f085e8843baa38868
|
7
|
+
data.tar.gz: 387570d4c545ae549afa95647c1c5e9648c0be32065b2ac2cbe1e14fae4a7b169b6243a82ba893ff7eb5d1c2e8718e6fbf946bb29b6dc43924717a104f93f4dc
|
data/Changelog.md
CHANGED
@@ -1,3 +1,17 @@
|
|
1
|
+
# 0.1.7
|
2
|
+
|
3
|
+
## Feature
|
4
|
+
|
5
|
+
* Add event entities [#44](https://github.com/diaspora/diaspora_federation/pull/44)
|
6
|
+
|
7
|
+
## Refactor
|
8
|
+
|
9
|
+
* Add generated signatures of relayables to `#to_h` [#48](https://github.com/diaspora/diaspora_federation/pull/48)
|
10
|
+
|
11
|
+
## Bug fixes
|
12
|
+
|
13
|
+
* Fix parsing of false value [9a7fd27](https://github.com/diaspora/diaspora_federation/commit/9a7fd278b528c809b3a8c53b86c5fa8d6efaf8aa)
|
14
|
+
|
1
15
|
# 0.1.6
|
2
16
|
|
3
17
|
## Feature
|
data/README.md
CHANGED
@@ -11,7 +11,7 @@
|
|
11
11
|
[](https://badge.fury.io/rb/diaspora_federation)
|
12
12
|
|
13
13
|
[Gem Documentation](http://www.rubydoc.info/gems/diaspora_federation/) |
|
14
|
-
[Protocol Documentation](
|
14
|
+
[Protocol Documentation](https://diaspora.github.io/diaspora_federation/) |
|
15
15
|
[Bugtracker](https://github.com/diaspora/diaspora_federation/issues)
|
16
16
|
|
17
17
|
This repository contains two gems:
|
@@ -76,7 +76,7 @@ module DiasporaFederation
|
|
76
76
|
# @param [String] url validation subject
|
77
77
|
# @return [Boolean] validation result
|
78
78
|
private_class_method def self.webfinger_url_valid?(url)
|
79
|
-
!url.nil? && url.instance_of?(String) && url =~ %r{
|
79
|
+
!url.nil? && url.instance_of?(String) && url =~ %r{\Ahttps?:\/\/.*\/.*\{uri\}.*}i
|
80
80
|
end
|
81
81
|
|
82
82
|
# Gets the webfinger url from an XRD data structure
|
@@ -28,6 +28,10 @@ require "diaspora_federation/entities/poll"
|
|
28
28
|
require "diaspora_federation/entities/poll_participation"
|
29
29
|
|
30
30
|
require "diaspora_federation/entities/location"
|
31
|
+
|
32
|
+
require "diaspora_federation/entities/event"
|
33
|
+
require "diaspora_federation/entities/event_participation"
|
34
|
+
|
31
35
|
require "diaspora_federation/entities/photo"
|
32
36
|
require "diaspora_federation/entities/status_message"
|
33
37
|
require "diaspora_federation/entities/reshare"
|
@@ -0,0 +1,55 @@
|
|
1
|
+
module DiasporaFederation
|
2
|
+
module Entities
|
3
|
+
# This entity represents an event and it is federated as a part of a status message.
|
4
|
+
#
|
5
|
+
# @see Validators::EventValidator
|
6
|
+
class Event < Entity
|
7
|
+
# @!attribute [r] author
|
8
|
+
# The diaspora* ID of the person who created the event
|
9
|
+
# @see Person#author
|
10
|
+
# @return [String] author diaspora* ID
|
11
|
+
property :author, :string
|
12
|
+
|
13
|
+
# @!attribute [r] guid
|
14
|
+
# A random string of at least 16 chars
|
15
|
+
# @see Validation::Rule::Guid
|
16
|
+
# @return [String] guid
|
17
|
+
property :guid, :string
|
18
|
+
|
19
|
+
# @!attribute [r] summary
|
20
|
+
# The summary of the event
|
21
|
+
# @return [String] event summary
|
22
|
+
property :summary, :string
|
23
|
+
|
24
|
+
# @!attribute [r] description
|
25
|
+
# Description of the event
|
26
|
+
# @return [String] event description
|
27
|
+
property :description, :string, default: nil
|
28
|
+
|
29
|
+
# @!attribute [r] start
|
30
|
+
# The start time of the event
|
31
|
+
# @return [String] event start
|
32
|
+
property :start, :timestamp
|
33
|
+
|
34
|
+
# @!attribute [r] end
|
35
|
+
# The end time of the event
|
36
|
+
# @return [String] event end
|
37
|
+
property :end, :timestamp, default: nil
|
38
|
+
|
39
|
+
# @!attribute [r] all_day
|
40
|
+
# Points if the event is an all day event
|
41
|
+
# @return [Boolean] is it an all day event
|
42
|
+
property :all_day, :boolean, default: false
|
43
|
+
|
44
|
+
# @!attribute [r] timezone
|
45
|
+
# Timezone to which the event is fixed to
|
46
|
+
# @return [String] timezone
|
47
|
+
property :timezone, :string, default: nil
|
48
|
+
|
49
|
+
# @!attribute [r] location
|
50
|
+
# Location of the event
|
51
|
+
# @return [Entities::Location] location
|
52
|
+
entity :location, Entities::Location, default: nil
|
53
|
+
end
|
54
|
+
end
|
55
|
+
end
|
@@ -0,0 +1,27 @@
|
|
1
|
+
module DiasporaFederation
|
2
|
+
module Entities
|
3
|
+
# This entity represents a participation in an event, i.e. it is issued when a user responds to en event.
|
4
|
+
#
|
5
|
+
# @see Validators::EventParticipationValidator
|
6
|
+
class EventParticipation < Entity
|
7
|
+
# Old signature order
|
8
|
+
# @deprecated
|
9
|
+
LEGACY_SIGNATURE_ORDER = %i(author guid parent_guid status).freeze
|
10
|
+
|
11
|
+
# The {EventParticipation} parent is an {Event}
|
12
|
+
PARENT_TYPE = "Event".freeze
|
13
|
+
|
14
|
+
include Relayable
|
15
|
+
|
16
|
+
# Redefine the author property without +diaspora_handle+ +xml_name+
|
17
|
+
# @deprecated Can be removed after XMLs are generated with new names
|
18
|
+
property :author, :string
|
19
|
+
|
20
|
+
# @!attribute [r] status
|
21
|
+
# The participation status of the user
|
22
|
+
# "accepted", "declined" or "tentative"
|
23
|
+
# @return [String] event participation status
|
24
|
+
property :status, :string
|
25
|
+
end
|
26
|
+
end
|
27
|
+
end
|
@@ -33,6 +33,11 @@ module DiasporaFederation
|
|
33
33
|
sender == author || (sender == parent_author && verify_author_signature)
|
34
34
|
end
|
35
35
|
|
36
|
+
# @deprecated remove after {Message} doesn't include {Relayable} anymore
|
37
|
+
def to_h
|
38
|
+
super.tap {|hash| hash[:created_at] = created_at.utc.iso8601 }
|
39
|
+
end
|
40
|
+
|
36
41
|
private
|
37
42
|
|
38
43
|
# @deprecated remove after {Message} doesn't include {Relayable} anymore
|
@@ -26,6 +26,11 @@ module DiasporaFederation
|
|
26
26
|
# @return [Entities::Poll] poll
|
27
27
|
entity :poll, Entities::Poll, default: nil
|
28
28
|
|
29
|
+
# @!attribute [r] event
|
30
|
+
# Optional event attached to the status message
|
31
|
+
# @return [Entities::Event] event
|
32
|
+
entity :event, Entities::Event, default: nil
|
33
|
+
|
29
34
|
# @!attribute [r] public
|
30
35
|
# Shows whether the status message is visible to everyone or only to some aspects
|
31
36
|
# @return [Boolean] is it public
|
@@ -73,7 +73,7 @@ module DiasporaFederation
|
|
73
73
|
# Nested entities are also converted to a Hash.
|
74
74
|
# @return [Hash] entity data (mostly equal to the hash used for initialization).
|
75
75
|
def to_h
|
76
|
-
|
76
|
+
enriched_properties.map {|key, value|
|
77
77
|
type = self.class.class_props[key]
|
78
78
|
|
79
79
|
if type.instance_of?(Symbol) || value.nil?
|
@@ -135,8 +135,8 @@ module DiasporaFederation
|
|
135
135
|
# @param [String] entity_name "snake_case" class name
|
136
136
|
# @return [Class] entity class
|
137
137
|
def self.entity_class(entity_name)
|
138
|
-
raise InvalidEntityName, "'#{entity_name}' is invalid" unless entity_name =~
|
139
|
-
class_name = entity_name.sub(
|
138
|
+
raise InvalidEntityName, "'#{entity_name}' is invalid" unless entity_name =~ /\A[a-z]*(_[a-z]*)*\z/
|
139
|
+
class_name = entity_name.sub(/\A[a-z]/, &:upcase)
|
140
140
|
class_name.gsub!(/_([a-z])/) { Regexp.last_match[1].upcase }
|
141
141
|
|
142
142
|
raise UnknownEntity, "'#{class_name}' not found" unless Entities.const_defined?(class_name)
|
@@ -275,7 +275,7 @@ module DiasporaFederation
|
|
275
275
|
private_class_method def self.entity_data(root_node)
|
276
276
|
class_props.map {|name, type|
|
277
277
|
value = parse_element_from_node(name, type, root_node)
|
278
|
-
[name, value]
|
278
|
+
[name, value] unless value.nil?
|
279
279
|
}.compact.to_h
|
280
280
|
end
|
281
281
|
|
@@ -302,13 +302,13 @@ module DiasporaFederation
|
|
302
302
|
private_class_method def self.parse_string_from_node(name, type, root_node)
|
303
303
|
node = root_node.xpath(name.to_s)
|
304
304
|
node = root_node.xpath(xml_names[name].to_s) if node.empty?
|
305
|
-
|
305
|
+
parse_string(type, node.first.text) if node.any?
|
306
306
|
end
|
307
307
|
|
308
308
|
# @param [Symbol] type target type to parse
|
309
309
|
# @param [String] text data as string
|
310
310
|
# @return [String, Boolean, Integer, Time] data
|
311
|
-
private_class_method def self.
|
311
|
+
private_class_method def self.parse_string(type, text)
|
312
312
|
case type
|
313
313
|
when :timestamp
|
314
314
|
begin
|
@@ -317,10 +317,10 @@ module DiasporaFederation
|
|
317
317
|
nil
|
318
318
|
end
|
319
319
|
when :integer
|
320
|
-
text.to_i if text =~
|
320
|
+
text.to_i if text =~ /\A\d+\z/
|
321
321
|
when :boolean
|
322
|
-
return true if text =~
|
323
|
-
false if text =~
|
322
|
+
return true if text =~ /\A(true|t|yes|y|1)\z/i
|
323
|
+
false if text =~ /\A(false|f|no|n|0)\z/i
|
324
324
|
else
|
325
325
|
text
|
326
326
|
end
|
@@ -21,7 +21,7 @@ module DiasporaFederation
|
|
21
21
|
end
|
22
22
|
|
23
23
|
private_class_method def self.entity_name(class_name)
|
24
|
-
return class_name if class_name =~
|
24
|
+
return class_name if class_name =~ /\A[a-z]*(_[a-z]*)*\z/
|
25
25
|
|
26
26
|
raise DiasporaFederation::Entity::UnknownEntity, class_name unless Entities.const_defined?(class_name)
|
27
27
|
|
@@ -44,6 +44,8 @@ require "diaspora_federation/validators/account_deletion_validator"
|
|
44
44
|
require "diaspora_federation/validators/comment_validator"
|
45
45
|
require "diaspora_federation/validators/contact_validator"
|
46
46
|
require "diaspora_federation/validators/conversation_validator"
|
47
|
+
require "diaspora_federation/validators/event_participation_validator"
|
48
|
+
require "diaspora_federation/validators/event_validator"
|
47
49
|
require "diaspora_federation/validators/h_card_validator"
|
48
50
|
require "diaspora_federation/validators/like_validator"
|
49
51
|
require "diaspora_federation/validators/location_validator"
|
@@ -0,0 +1,12 @@
|
|
1
|
+
module DiasporaFederation
|
2
|
+
module Validators
|
3
|
+
# This validates a {Entities::EventParticipation}.
|
4
|
+
class EventParticipationValidator < Validation::Validator
|
5
|
+
include Validation
|
6
|
+
|
7
|
+
include RelayableValidator
|
8
|
+
|
9
|
+
rule :status, regular_expression: {regex: /\A(accepted|declined|tentative)\z/}
|
10
|
+
end
|
11
|
+
end
|
12
|
+
end
|
@@ -0,0 +1,21 @@
|
|
1
|
+
module DiasporaFederation
|
2
|
+
module Validators
|
3
|
+
# This validates a {Entities::Event}.
|
4
|
+
class EventValidator < Validation::Validator
|
5
|
+
include Validation
|
6
|
+
|
7
|
+
rule :author, %i(not_empty diaspora_id)
|
8
|
+
|
9
|
+
rule :guid, :guid
|
10
|
+
|
11
|
+
rule :summary, [:not_empty, length: {maximum: 255}]
|
12
|
+
rule :description, length: {maximum: 65_535}
|
13
|
+
|
14
|
+
rule :start, :not_nil
|
15
|
+
|
16
|
+
rule :all_day, :boolean
|
17
|
+
|
18
|
+
rule :timezone, regular_expression: {regex: %r{\A[A-Za-z_-]{,14}(/[A-Za-z_-]{,14}){1,2}\z}}
|
19
|
+
end
|
20
|
+
end
|
21
|
+
end
|
data/lib/tasks/tests.rake
CHANGED
@@ -1,6 +1,6 @@
|
|
1
1
|
if defined?(RSpec)
|
2
2
|
namespace :spec do
|
3
|
-
task prepare_db: %w(db:create db:
|
3
|
+
task prepare_db: %w(db:create db:test:load)
|
4
4
|
task :prepare_fixtures do
|
5
5
|
ENV["NO_COVERAGE"] = "true"
|
6
6
|
Rake::Task["spec:generate_fixtures"].invoke
|
@@ -8,7 +8,7 @@ if defined?(RSpec)
|
|
8
8
|
end
|
9
9
|
|
10
10
|
desc "Prepare for rspec"
|
11
|
-
task prepare: %w(prepare_db prepare_fixtures)
|
11
|
+
task prepare: %w(db:environment:set prepare_db prepare_fixtures)
|
12
12
|
|
13
13
|
desc "Run all specs that generate fixtures for rspec"
|
14
14
|
RSpec::Core::RakeTask.new(:generate_fixtures) do |t|
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: diaspora_federation
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.1.
|
4
|
+
version: 0.1.7
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Benjamin Neff
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2017-01-08 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: nokogiri
|
@@ -118,6 +118,8 @@ files:
|
|
118
118
|
- lib/diaspora_federation/entities/comment.rb
|
119
119
|
- lib/diaspora_federation/entities/contact.rb
|
120
120
|
- lib/diaspora_federation/entities/conversation.rb
|
121
|
+
- lib/diaspora_federation/entities/event.rb
|
122
|
+
- lib/diaspora_federation/entities/event_participation.rb
|
121
123
|
- lib/diaspora_federation/entities/like.rb
|
122
124
|
- lib/diaspora_federation/entities/location.rb
|
123
125
|
- lib/diaspora_federation/entities/message.rb
|
@@ -163,6 +165,8 @@ files:
|
|
163
165
|
- lib/diaspora_federation/validators/comment_validator.rb
|
164
166
|
- lib/diaspora_federation/validators/contact_validator.rb
|
165
167
|
- lib/diaspora_federation/validators/conversation_validator.rb
|
168
|
+
- lib/diaspora_federation/validators/event_participation_validator.rb
|
169
|
+
- lib/diaspora_federation/validators/event_validator.rb
|
166
170
|
- lib/diaspora_federation/validators/h_card_validator.rb
|
167
171
|
- lib/diaspora_federation/validators/like_validator.rb
|
168
172
|
- lib/diaspora_federation/validators/location_validator.rb
|