share_notify 0.1.1 → 0.2.0
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/.rubocop.yml +0 -2
- data/Gemfile +3 -2
- data/README.md +17 -1
- data/Rakefile +1 -1
- data/lib/share_notify.rb +1 -0
- data/lib/share_notify/exceptions.rb +10 -0
- data/lib/share_notify/metadata.rb +6 -15
- data/lib/share_notify/notification_query_service.rb +38 -0
- data/lib/share_notify/push_document.rb +43 -4
- data/lib/share_notify/version.rb +1 -1
- data/share_notify.gemspec +1 -0
- metadata +18 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 19538bad0fafdc5a725b731da4c8d5867c902af6
|
4
|
+
data.tar.gz: 1d67b18db273434e8f609b95752419e40c1bc2aa
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 5e2ea02ee49d794049bd4342444783f7984303894a42b0b061ec82269000d5eca1b7edfe6e0928e540178ed979e5322eb6eea2b3cabb2f79e750e612dd729b87
|
7
|
+
data.tar.gz: 3c4071b8d2167cc9235683946300cb9dfe2dcc9a097a36e4c9fb55075bc56bcc763f2c8e3c457e447b8ff7163cf85f15e1f4cb3b633b1a8fffc6b87342c0bbf7
|
data/.rubocop.yml
CHANGED
data/Gemfile
CHANGED
@@ -3,6 +3,7 @@ source 'https://rubygems.org'
|
|
3
3
|
# Specify your gem's dependencies in share_notify.gemspec
|
4
4
|
gemspec
|
5
5
|
|
6
|
-
gem 'byebug'
|
6
|
+
gem 'byebug', require: false
|
7
7
|
gem 'rubocop', require: false
|
8
|
-
|
8
|
+
# Removed until https://github.com/nevir/rubocop-rspec/issues/78 is resolved
|
9
|
+
#gem 'rubocop-rspec', require: false
|
data/README.md
CHANGED
@@ -1,5 +1,9 @@
|
|
1
1
|
# ShareNotify
|
2
2
|
|
3
|
+
[](https://badge.fury.io/rb/share_notify)
|
4
|
+
[](https://travis-ci.org/projecthydra-labs/share_notify)
|
5
|
+
[](./LICENSE)
|
6
|
+
|
3
7
|
Provides basic tools for creating documents to send to SHARENotify's Push API as well as query for documents
|
4
8
|
using SHARE Search.
|
5
9
|
|
@@ -45,6 +49,18 @@ Then send the document to Share using the `API` class:
|
|
45
49
|
api = ShareNotify::API.new
|
46
50
|
api.post(document.to_share.to_json)
|
47
51
|
|
52
|
+
### Deleting Data
|
53
|
+
|
54
|
+
Same as above, but adding an additional "delete" property informs the Share API that this
|
55
|
+
document should be delete from the Search API:
|
56
|
+
|
57
|
+
> document = ShareNotify::PushDocument.new("http://my.document.id/1234")
|
58
|
+
> document.title = "Some Title"
|
59
|
+
> document.add_contributor(name: "My Name", email: "myemail@example.com")
|
60
|
+
> document.delete
|
61
|
+
> api = ShareNotify::API.new
|
62
|
+
> api.post(document.to_share.to_json)
|
63
|
+
|
48
64
|
### Querying
|
49
65
|
|
50
66
|
You can query Share's Search API using the terms outlined in <https://osf.io/dajtq/wiki/SHARE%20Search>
|
@@ -71,7 +87,7 @@ if the document is already present in ShareNotify's Search API.
|
|
71
87
|
=> true
|
72
88
|
|
73
89
|
Note: It may take 24 hours or more before documents that have been initially pushed to Share will appear
|
74
|
-
in the Search API.
|
90
|
+
in or be deleted from the Search API.
|
75
91
|
|
76
92
|
## Contributing
|
77
93
|
|
data/Rakefile
CHANGED
data/lib/share_notify.rb
CHANGED
@@ -8,6 +8,7 @@ module ShareNotify
|
|
8
8
|
autoload :Metadata, 'share_notify/metadata'
|
9
9
|
autoload :PushDocument, 'share_notify/push_document'
|
10
10
|
autoload :SearchResponse, 'share_notify/search_response'
|
11
|
+
autoload :NotificationQueryService, 'share_notify/notification_query_service'
|
11
12
|
|
12
13
|
class << self
|
13
14
|
def configure(value)
|
@@ -1,26 +1,17 @@
|
|
1
1
|
# Queries the SHARE search api for an existing record. This assumes the class into which this
|
2
2
|
# module is included responds to #url and that in turn is mapped to the docID of the Share
|
3
3
|
# document that was originally uploaded via the SHARE push API.
|
4
|
+
#
|
5
|
+
# @see ShareNotify::NotificationQueryService for details of interface expectations
|
4
6
|
module ShareNotify::Metadata
|
5
7
|
extend ActiveSupport::Concern
|
8
|
+
extend Forwardable
|
6
9
|
|
7
|
-
|
8
|
-
return if response.status != 200
|
9
|
-
return false if response.count < 1
|
10
|
-
response.docs.first.doc_id == url
|
11
|
-
end
|
12
|
-
|
13
|
-
def call
|
14
|
-
api.search("shareProperties.docID:\"#{url}\"")
|
15
|
-
end
|
10
|
+
def_delegator :notification_query_service, :share_notified?
|
16
11
|
|
17
12
|
private
|
18
13
|
|
19
|
-
def
|
20
|
-
@
|
21
|
-
end
|
22
|
-
|
23
|
-
def api
|
24
|
-
@api ||= ShareNotify::API.new
|
14
|
+
def notification_query_service
|
15
|
+
@notification_query_service ||= ShareNotify::NotificationQueryService.new(self)
|
25
16
|
end
|
26
17
|
end
|
@@ -0,0 +1,38 @@
|
|
1
|
+
require 'share_notify/exceptions'
|
2
|
+
|
3
|
+
module ShareNotify
|
4
|
+
# Queries the SHARE search api for an existing record. This assumes the class into which this
|
5
|
+
# module is included responds to #url and that in turn is mapped to the docID of the Share
|
6
|
+
# document that was originally uploaded via the SHARE push API.
|
7
|
+
#
|
8
|
+
# @see ShareNotify::PushDocument
|
9
|
+
class NotificationQueryService
|
10
|
+
def initialize(context)
|
11
|
+
self.context = context
|
12
|
+
end
|
13
|
+
|
14
|
+
def share_notified?
|
15
|
+
response = search("shareProperties.docID:\"#{context.url}\"")
|
16
|
+
return if response.status != 200
|
17
|
+
return false if response.count < 1
|
18
|
+
response.docs.first.doc_id == context.url
|
19
|
+
end
|
20
|
+
|
21
|
+
private
|
22
|
+
|
23
|
+
def search(string)
|
24
|
+
ShareNotify::SearchResponse.new(api.search(string))
|
25
|
+
end
|
26
|
+
|
27
|
+
def api
|
28
|
+
ShareNotify::API.new
|
29
|
+
end
|
30
|
+
|
31
|
+
attr_reader :context
|
32
|
+
|
33
|
+
def context=(input)
|
34
|
+
raise ShareNotify::InitializationError.new(input, [:url]) unless input.respond_to?(:url)
|
35
|
+
@context = input
|
36
|
+
end
|
37
|
+
end
|
38
|
+
end
|
@@ -1,12 +1,20 @@
|
|
1
1
|
module ShareNotify
|
2
2
|
class PushDocument
|
3
|
-
attr_reader :uris,
|
4
|
-
|
3
|
+
attr_reader :uris,
|
4
|
+
:contributors,
|
5
|
+
:providerUpdatedDateTime,
|
6
|
+
:version,
|
7
|
+
:publisher,
|
8
|
+
:languages,
|
9
|
+
:tags,
|
10
|
+
:otherProperties
|
11
|
+
attr_accessor :title, :description
|
5
12
|
|
6
13
|
# @param [String] uri that identifies the resource
|
7
|
-
def initialize(uri)
|
14
|
+
def initialize(uri, datetime = nil)
|
15
|
+
datetime = (datetime.is_a?(Time) || datetime.is_a?(DateTime)) ? datetime : Time.now
|
8
16
|
@uris = ShareUri.new(uri)
|
9
|
-
@providerUpdatedDateTime =
|
17
|
+
@providerUpdatedDateTime = datetime.utc.strftime('%Y-%m-%dT%H:%M:%SZ')
|
10
18
|
@contributors = []
|
11
19
|
end
|
12
20
|
|
@@ -35,10 +43,32 @@ module ShareNotify
|
|
35
43
|
@contributors << contributor
|
36
44
|
end
|
37
45
|
|
46
|
+
# @param [Hash] publisher containing required keys for publisher
|
47
|
+
def publisher=(publisher)
|
48
|
+
return false unless publisher.keys.include?(:name)
|
49
|
+
@publisher = publisher
|
50
|
+
end
|
51
|
+
|
52
|
+
# @param [Array<String>] languages list of languages
|
53
|
+
def languages=(languages)
|
54
|
+
return false unless languages.is_a?(Array)
|
55
|
+
@languages = languages
|
56
|
+
end
|
57
|
+
|
58
|
+
# @param [Array<String>] tags list of tags
|
59
|
+
def tags=(tags)
|
60
|
+
return false unless tags.is_a?(Array)
|
61
|
+
@tags = tags
|
62
|
+
end
|
63
|
+
|
38
64
|
def to_share
|
39
65
|
{ jsonData: self }
|
40
66
|
end
|
41
67
|
|
68
|
+
def delete
|
69
|
+
@otherProperties = [OtherProperty.new("status", status: ["deleted"])]
|
70
|
+
end
|
71
|
+
|
42
72
|
class ShareUri
|
43
73
|
attr_reader :canonicalUri, :providerUris
|
44
74
|
|
@@ -47,5 +77,14 @@ module ShareNotify
|
|
47
77
|
@providerUris = [uri]
|
48
78
|
end
|
49
79
|
end
|
80
|
+
|
81
|
+
class OtherProperty
|
82
|
+
attr_reader :name, :property
|
83
|
+
|
84
|
+
def initialize(*args)
|
85
|
+
@name = args.shift
|
86
|
+
@properties = args.shift
|
87
|
+
end
|
88
|
+
end
|
50
89
|
end
|
51
90
|
end
|
data/lib/share_notify/version.rb
CHANGED
data/share_notify.gemspec
CHANGED
@@ -23,6 +23,7 @@ Gem::Specification.new do |spec|
|
|
23
23
|
spec.add_dependency 'httparty'
|
24
24
|
|
25
25
|
spec.add_development_dependency 'bundler', '~> 1.11'
|
26
|
+
spec.add_development_dependency 'factory_girl'
|
26
27
|
spec.add_development_dependency 'rake', '~> 10.0'
|
27
28
|
spec.add_development_dependency 'rspec', '~> 3.0'
|
28
29
|
spec.add_development_dependency 'rspec-its'
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: share_notify
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.2.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Adam Wead
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date: 2016-
|
11
|
+
date: 2016-03-29 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: activesupport
|
@@ -52,6 +52,20 @@ dependencies:
|
|
52
52
|
- - "~>"
|
53
53
|
- !ruby/object:Gem::Version
|
54
54
|
version: '1.11'
|
55
|
+
- !ruby/object:Gem::Dependency
|
56
|
+
name: factory_girl
|
57
|
+
requirement: !ruby/object:Gem::Requirement
|
58
|
+
requirements:
|
59
|
+
- - ">="
|
60
|
+
- !ruby/object:Gem::Version
|
61
|
+
version: '0'
|
62
|
+
type: :development
|
63
|
+
prerelease: false
|
64
|
+
version_requirements: !ruby/object:Gem::Requirement
|
65
|
+
requirements:
|
66
|
+
- - ">="
|
67
|
+
- !ruby/object:Gem::Version
|
68
|
+
version: '0'
|
55
69
|
- !ruby/object:Gem::Dependency
|
56
70
|
name: rake
|
57
71
|
requirement: !ruby/object:Gem::Requirement
|
@@ -140,7 +154,9 @@ files:
|
|
140
154
|
- config/share_notify.yml
|
141
155
|
- lib/share_notify.rb
|
142
156
|
- lib/share_notify/api.rb
|
157
|
+
- lib/share_notify/exceptions.rb
|
143
158
|
- lib/share_notify/metadata.rb
|
159
|
+
- lib/share_notify/notification_query_service.rb
|
144
160
|
- lib/share_notify/push_document.rb
|
145
161
|
- lib/share_notify/search_response.rb
|
146
162
|
- lib/share_notify/version.rb
|