share_notify 0.1.1 → 0.2.0
Sign up to get free protection for your applications and to get access to all the features.
- 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
|
+
[![Gem Version](https://badge.fury.io/rb/share_notify.svg)](https://badge.fury.io/rb/share_notify)
|
4
|
+
[![Build Status](https://api.travis-ci.org/projecthydra-labs/share_notify.png?branch=master)](https://travis-ci.org/projecthydra-labs/share_notify)
|
5
|
+
[![Apache 2.0 License](http://img.shields.io/badge/APACHE2-license-blue.svg)](./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
|