share_notify 0.1.0 → 0.1.1

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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 5b42f6d940f0d9698aab18209fda3281fa075b22
4
- data.tar.gz: 97b9636b7251fa113ec6d17b6180dacb835c49e5
3
+ metadata.gz: 992d71908ef077371053a44b67c63bb32fceae00
4
+ data.tar.gz: ae4841bd49c0c2f381da680e374684060cfc8004
5
5
  SHA512:
6
- metadata.gz: 466c07b62a15401a679a8b6de8b1a6d2f51925761c7cb6c0f02e64397f8e886ac20481d2e8a54d7725b82dfa2bef60e76a6e68cba2a6a9656925085ee83b171a
7
- data.tar.gz: 6915142aa07475d78d524e3bbf2dbe484cd9f4f4c8e991b563f6f3a2ce4e7d6b1947dc892fc724b345b03a1a0d6b1eb30a09dbfaff10500393c742982983ffb9
6
+ metadata.gz: 8970e6026ce4d30738cff7ea4f4914066ad108f8483665ffa4d619c018497049d7d924d3b498826fe7ec69d316e462079b755bd88d75fe8da83182254aacac8f
7
+ data.tar.gz: 99efeef394b0ffbfb8c002e30a933b38ee7edcac5bbce895493e02f57d526d4c94a4c240d556da660b56eefe48e4371191dcb3f90bc9e4bf22d750c24138eec3
data/.gitignore CHANGED
@@ -8,3 +8,4 @@
8
8
  /spec/reports/
9
9
  /tmp/
10
10
  /bin/
11
+ .ruby-version
data/.rubocop.yml ADDED
@@ -0,0 +1,112 @@
1
+ require: rubocop-rspec
2
+
3
+ AllCops:
4
+ DisplayCopNames: true
5
+ Include:
6
+ - '**/Rakefile'
7
+
8
+ Metrics/LineLength:
9
+ Enabled: false
10
+
11
+ Metrics/AbcSize:
12
+ Enabled: false
13
+
14
+ Metrics/CyclomaticComplexity:
15
+ Exclude:
16
+
17
+ Metrics/PerceivedComplexity:
18
+ Exclude:
19
+
20
+ Metrics/MethodLength:
21
+ Enabled: false
22
+
23
+ Metrics/ClassLength:
24
+ Exclude:
25
+
26
+ Metrics/ModuleLength:
27
+ Exclude:
28
+
29
+ Style/BlockDelimiters:
30
+ Exclude:
31
+ - 'spec/**/*'
32
+
33
+ Style/BlockEndNewline:
34
+ Exclude:
35
+ - 'spec/**/*'
36
+
37
+ Style/MultilineBlockLayout:
38
+ Exclude:
39
+ - 'spec/**/*'
40
+
41
+ Style/IndentationConsistency:
42
+ EnforcedStyle: rails
43
+
44
+ Style/CollectionMethods:
45
+ PreferredMethods:
46
+ collect: 'map'
47
+ collect!: 'map!'
48
+ inject: 'reduce'
49
+ detect: 'find'
50
+ find_all: 'select'
51
+
52
+ Style/WordArray:
53
+ Enabled: false
54
+
55
+ Style/RegexpLiteral:
56
+ Enabled: false
57
+
58
+ Style/StringLiterals:
59
+ Enabled: false
60
+
61
+ Style/ClassAndModuleChildren:
62
+ Enabled: false
63
+
64
+ Style/Documentation:
65
+ Enabled: false
66
+
67
+ Style/HashSyntax:
68
+ Exclude:
69
+
70
+ Style/LineEndConcatenation:
71
+ Exclude:
72
+
73
+ Style/PredicateName:
74
+ Exclude:
75
+
76
+ Style/GlobalVars:
77
+ Exclude:
78
+ - 'spec/**/*'
79
+
80
+ Style/SingleLineBlockParams:
81
+ Enabled: false
82
+
83
+ Style/ClassVars:
84
+ Exclude:
85
+
86
+ Style/SignalException:
87
+ Enabled: false
88
+
89
+ RSpec/ExampleWording:
90
+ CustomTransform:
91
+ be: is
92
+ have: has
93
+ not: does not
94
+ NOT: does NOT
95
+ IgnoredWords:
96
+ - only
97
+
98
+ RSpec/FilePath:
99
+ Enabled: false
100
+
101
+ RSpec/InstanceVariable:
102
+ Enabled: false
103
+
104
+ RSpec/DescribeClass:
105
+ Exclude:
106
+
107
+ Style/FileName:
108
+ Exclude:
109
+
110
+ Style/VariableName:
111
+ Exclude:
112
+ - 'lib/share_notify/push_document.rb'
data/.travis.yml CHANGED
@@ -1,4 +1,8 @@
1
1
  language: ruby
2
+ cache: bundler
2
3
  rvm:
3
- - 2.2.3
4
- before_install: gem install bundler -v 1.11.2
4
+ - 2.3.0
5
+ notifications:
6
+ irc:
7
+ channels:
8
+ - "irc.freenode.org#projecthydra"
data/Gemfile CHANGED
@@ -4,3 +4,5 @@ source 'https://rubygems.org'
4
4
  gemspec
5
5
 
6
6
  gem 'byebug'
7
+ gem 'rubocop', require: false
8
+ gem 'rubocop-rspec', require: false
data/README.md CHANGED
@@ -1,8 +1,7 @@
1
1
  # ShareNotify
2
2
 
3
- Welcome to your new gem! In this directory, you'll find the files you need to be able to package up your Ruby library into a gem. Put your Ruby code in the file `lib/share_notify`. To experiment with that code, run `bin/console` for an interactive prompt.
4
-
5
- TODO: Delete this and the text above, and describe your gem
3
+ Provides basic tools for creating documents to send to SHARENotify's Push API as well as query for documents
4
+ using SHARE Search.
6
5
 
7
6
  ## Installation
8
7
 
@@ -22,20 +21,77 @@ Or install it yourself as:
22
21
 
23
22
  ## Usage
24
23
 
25
- TODO: Write usage instructions here
24
+ ### Configuration
25
+
26
+ In order to push data to Share, you will need a token from OSF. Once obtained, you'll put this in a config folder
27
+ in your Rails application or project as `config/share_notify.yml`:
28
+
29
+ ---
30
+ host: "https://osf.io"
31
+ token: "MY_TOKEN"
32
+
33
+ ### Pushing Data
34
+
35
+ First, create a `PushDocument` with the required metadata:
36
+
37
+ > document = ShareNotify::PushDocument.new("http://my.document.id/1234")
38
+ > document.title = "Some Title"
39
+ > document.add_contributor(name: "My Name", email: "myemail@example.com")
40
+ > document.valid?
41
+ => true
42
+
43
+ Then send the document to Share using the `API` class:
44
+
45
+ api = ShareNotify::API.new
46
+ api.post(document.to_share.to_json)
47
+
48
+ ### Querying
49
+
50
+ You can query Share's Search API using the terms outlined in <https://osf.io/dajtq/wiki/SHARE%20Search>
51
+
52
+ api = ShareNotify::API.new
53
+ api.search([query terms])
54
+
55
+ #### Extending Your Classes
56
+
57
+ Assuming your data class has a `#url` method, and that url is used to create the initial `PushDocument`
58
+ that's sent to Share, you can include `ShareNotify::Metadata` to query Share and determine
59
+ if the document is already present in ShareNotify's Search API.
60
+
61
+ class MyDataClass
62
+ include ShareNotify::Metadata
26
63
 
27
- ## Development
64
+ def url
65
+ "http://my.document.id/1234"
66
+ end
67
+ end
28
68
 
29
- After checking out the repo, run `bin/setup` to install dependencies. Then, run `rake spec` to run the tests. You can also run `bin/console` for an interactive prompt that will allow you to experiment.
69
+ > document = MyDataClass.find("1234")
70
+ > document.share_notified?
71
+ => true
30
72
 
31
- To install this gem onto your local machine, run `bundle exec rake install`. To release a new version, update the version number in `version.rb`, and then run `bundle exec rake release`, which will create a git tag for the version, push git commits and tags, and push the `.gem` file to [rubygems.org](https://rubygems.org).
73
+ Note: It may take 24 hours or more before documents that have been initially pushed to Share will appear
74
+ in the Search API.
32
75
 
33
76
  ## Contributing
34
77
 
35
- Bug reports and pull requests are welcome on GitHub at https://github.com/[USERNAME]/share_notify. This project is intended to be a safe, welcoming space for collaboration, and contributors are expected to adhere to the [Contributor Covenant](http://contributor-covenant.org) code of conduct.
78
+ ### Hydra Developers
36
79
 
80
+ For Hydra developers, or anyone with a signed CLA, please clone the repo and submit PRs via
81
+ feature branches. If you don't have rights to projecthydra-labs and do have a signed
82
+ CLA, please send a note to hydra-tech@googlegroups.com.
37
83
 
38
- ## License
84
+ 1. Clone it
85
+ 2. Create your feature branch (`git checkout -b my-new-feature`)
86
+ 3. Commit your changes (`git commit -am 'Add some feature'`)
87
+ 4. Push to the branch (`git push origin my-new-feature`)
88
+ 5. Create a new Pull Request
39
89
 
40
- The gem is available as open source under the terms of the [MIT License](http://opensource.org/licenses/MIT).
90
+ ### Non-Hydra Developers
41
91
 
92
+ Anyone is welcome to use this software and report issues.
93
+ In order to merge any work contributed, you'll need to sign a contributor license agreement.
94
+ For more information on signing a CLA, please contact `legal@projecthyra.org`
95
+ # Project Hydra
96
+ This software has been developed by and is brought to you by the Hydra community. Learn more at the
97
+ [Project Hydra website](http://projecthydra.org)
data/Rakefile CHANGED
@@ -1,6 +1,16 @@
1
- require "bundler/gem_tasks"
2
- require "rspec/core/rake_task"
1
+ require 'bundler/gem_tasks'
2
+ require 'rspec/core/rake_task'
3
+ require 'rubocop/rake_task'
3
4
 
4
5
  RSpec::Core::RakeTask.new(:spec)
5
6
 
6
- task :default => :spec
7
+ desc "Run style checker"
8
+ RuboCop::RakeTask.new(:rubocop) do |task|
9
+ task.requires << 'rubocop-rspec'
10
+ task.fail_on_error = true
11
+ end
12
+
13
+ desc "Run continuous integration tests"
14
+ task ci: [:rubocop, :spec]
15
+
16
+ task default: :ci
@@ -9,13 +9,13 @@ class ShareNotify::API
9
9
 
10
10
  attr_reader :headers, :response
11
11
 
12
- base_uri ShareNotify.config.fetch("host", "https://staging.osf.io")
12
+ base_uri ShareNotify.config.fetch('host', 'https://staging.osf.io')
13
13
 
14
14
  # @param [String] token is optional but some actions will not be successful without it
15
15
  def initialize(_token = nil)
16
16
  @headers = {
17
- "Authorization" => "Token #{ShareNotify.config.fetch('token', nil)}",
18
- "Content-Type" => "application/json"
17
+ 'Authorization' => "Token #{ShareNotify.config.fetch('token', nil)}",
18
+ 'Content-Type' => 'application/json'
19
19
  }
20
20
  end
21
21
 
@@ -37,11 +37,11 @@ class ShareNotify::API
37
37
  private
38
38
 
39
39
  def api_data_point
40
- "/api/v1/share/data"
40
+ '/api/v1/share/data'
41
41
  end
42
42
 
43
43
  def api_search_point
44
- "/api/v1/share/search/"
44
+ '/api/v1/share/search/'
45
45
  end
46
46
 
47
47
  def with_timeout(&_block)
@@ -6,7 +6,7 @@ module ShareNotify
6
6
  # @param [String] uri that identifies the resource
7
7
  def initialize(uri)
8
8
  @uris = ShareUri.new(uri)
9
- @providerUpdatedDateTime = Time.now.utc.strftime("%Y-%m-%dT%H:%M:%SZ")
9
+ @providerUpdatedDateTime = Time.now.utc.strftime('%Y-%m-%dT%H:%M:%SZ')
10
10
  @contributors = []
11
11
  end
12
12
 
@@ -21,7 +21,7 @@ module ShareNotify
21
21
  # @param [DateTime or Time] time object that can be formatted in to the correct representation
22
22
  def updated=(time)
23
23
  return unless time.respond_to?(:strftime)
24
- @providerUpdatedDateTime = time.utc.strftime("%Y-%m-%dT%H:%M:%SZ")
24
+ @providerUpdatedDateTime = time.utc.strftime('%Y-%m-%dT%H:%M:%SZ')
25
25
  end
26
26
 
27
27
  # @param [String] version identifying the version of the resource
@@ -5,17 +5,17 @@ module ShareNotify
5
5
 
6
6
  # @param [HTTParty::Response] response returned from ShareNotify::API
7
7
  def initialize(response)
8
- raise ArgumentError, "API response is nil" if response.nil?
8
+ fail ArgumentError, 'API response is nil' if response.nil?
9
9
  @status = response.code
10
10
  @response = response.parsed_response
11
11
  end
12
12
 
13
13
  def count
14
- response.fetch("count", 0)
14
+ response.fetch('count', 0)
15
15
  end
16
16
 
17
17
  def docs
18
- @docs ||= response.fetch("results", []).map { |d| Document.new(d) }
18
+ @docs ||= response.fetch('results', []).map { |d| Document.new(d) }
19
19
  end
20
20
 
21
21
  class Document
@@ -26,45 +26,45 @@ module ShareNotify
26
26
  end
27
27
 
28
28
  def contributors
29
- doc.fetch("contributors", [])
29
+ doc.fetch('contributors', [])
30
30
  end
31
31
 
32
32
  def title
33
- doc.fetch("title", nil)
33
+ doc.fetch('title', nil)
34
34
  end
35
35
 
36
36
  def properties
37
- doc.fetch("shareProperties", nil)
37
+ doc.fetch('shareProperties', nil)
38
38
  end
39
39
 
40
40
  def doc_id
41
41
  return if properties.nil?
42
- properties.fetch("docID", nil)
42
+ properties.fetch('docID', nil)
43
43
  end
44
44
 
45
45
  def source
46
46
  return if properties.nil?
47
- properties.fetch("source", nil)
47
+ properties.fetch('source', nil)
48
48
  end
49
49
 
50
50
  def updated
51
- time_string = doc.fetch("providerUpdatedDateTime", nil)
51
+ time_string = doc.fetch('providerUpdatedDateTime', nil)
52
52
  return if time_string.nil?
53
53
  Time.parse(time_string)
54
54
  end
55
55
 
56
56
  def uris
57
- doc.fetch("uris", nil)
57
+ doc.fetch('uris', nil)
58
58
  end
59
59
 
60
60
  def canonical_uri
61
61
  return if uris.nil?
62
- uris.fetch("canonicalUri", nil)
62
+ uris.fetch('canonicalUri', nil)
63
63
  end
64
64
 
65
65
  def provider_uris
66
66
  return if uris.nil?
67
- uris.fetch("providerUris", [])
67
+ uris.fetch('providerUris', [])
68
68
  end
69
69
  end
70
70
  end
@@ -1,3 +1,4 @@
1
+ # frozen_string_literal: true
1
2
  module ShareNotify
2
- VERSION = "0.1.0"
3
+ VERSION = '0.1.1'.freeze
3
4
  end
data/lib/share_notify.rb CHANGED
@@ -1,7 +1,7 @@
1
- require "share_notify/version"
2
- require "active_support"
1
+ require 'share_notify/version'
2
+ require 'active_support'
3
3
  require 'active_support/core_ext'
4
- require "httparty"
4
+ require 'httparty'
5
5
 
6
6
  module ShareNotify
7
7
  autoload :API, 'share_notify/api'
@@ -16,7 +16,7 @@ module ShareNotify
16
16
  elsif value.is_a?(String)
17
17
  @config = YAML.load(File.read(value))
18
18
  else
19
- raise InitializationError, "Unrecognized configuration: #{value.inspect}"
19
+ fail InitializationError, "Unrecognized configuration: #{value.inspect}"
20
20
  end
21
21
  end
22
22
 
@@ -28,7 +28,8 @@ module ShareNotify
28
28
  end
29
29
 
30
30
  def root
31
- File.dirname(__dir__)
31
+ return File.dirname(__dir__) unless defined?(Rails)
32
+ Rails.root
32
33
  end
33
34
  end
34
35
  end
data/share_notify.gemspec CHANGED
@@ -4,29 +4,28 @@ $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
4
4
  require 'share_notify/version'
5
5
 
6
6
  Gem::Specification.new do |spec|
7
- spec.name = "share_notify"
7
+ spec.name = 'share_notify'
8
8
  spec.version = ShareNotify::VERSION
9
- spec.authors = ["Adam Wead"]
10
- spec.email = ["amsterdamos@gmail.com"]
9
+ spec.authors = ['Adam Wead']
10
+ spec.email = ['amsterdamos@gmail.com']
11
11
 
12
- spec.summary = %q{Provides basic API integration with ShareNotify}
13
- spec.description = %q{Provides basic API integration with ShareNotify}
14
- spec.homepage = "https://github.com/projecthydra-labs/share_notify"
15
- spec.license = "APACHE2"
12
+ spec.summary = 'Provides basic API integration with ShareNotify'
13
+ spec.description = 'Provides basic API integration with ShareNotify'
14
+ spec.homepage = 'https://github.com/projecthydra-labs/share_notify'
15
+ spec.license = 'APACHE2'
16
16
 
17
17
  spec.files = `git ls-files -z`.split("\x0").reject { |f| f.match(%r{^(test|spec|features)/}) }
18
- spec.bindir = "exe"
18
+ spec.bindir = 'exe'
19
19
  spec.executables = spec.files.grep(%r{^exe/}) { |f| File.basename(f) }
20
- spec.require_paths = ["lib"]
20
+ spec.require_paths = ['lib']
21
21
 
22
- spec.add_dependency "activesupport"
23
- spec.add_dependency "httparty"
22
+ spec.add_dependency 'activesupport'
23
+ spec.add_dependency 'httparty'
24
24
 
25
-
26
- spec.add_development_dependency "bundler", "~> 1.11"
27
- spec.add_development_dependency "rake", "~> 10.0"
28
- spec.add_development_dependency "rspec", "~> 3.0"
29
- spec.add_development_dependency "rspec-its"
30
- spec.add_development_dependency "vcr"
31
- spec.add_development_dependency "webmock"
25
+ spec.add_development_dependency 'bundler', '~> 1.11'
26
+ spec.add_development_dependency 'rake', '~> 10.0'
27
+ spec.add_development_dependency 'rspec', '~> 3.0'
28
+ spec.add_development_dependency 'rspec-its'
29
+ spec.add_development_dependency 'vcr'
30
+ spec.add_development_dependency 'webmock'
32
31
  end
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.1.0
4
+ version: 0.1.1
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-02-03 00:00:00.000000000 Z
11
+ date: 2016-02-04 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: activesupport
@@ -131,6 +131,7 @@ extra_rdoc_files: []
131
131
  files:
132
132
  - ".gitignore"
133
133
  - ".rspec"
134
+ - ".rubocop.yml"
134
135
  - ".travis.yml"
135
136
  - Gemfile
136
137
  - LICENSE