share_notify 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 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