active_fedora-noid 2.0.0.beta5 → 2.0.0.beta6

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: 46a4ec828c77c893dd8fade4ab2cc8bf69c1a5d2
4
- data.tar.gz: d711fda28782d2a779cd3cc0a50e1b8d42aae48f
3
+ metadata.gz: e04703fc928d905a2fdabb0bdf8c967e1b4fef9f
4
+ data.tar.gz: 0d40c8fb02c9542e9437650dc4fa412f9e123682
5
5
  SHA512:
6
- metadata.gz: 5306a476358ae3063a3b5bac116c4c33fdf242638837dcd571558f7b72d28ada8511ba5bbbe97d263a5e4c2b14ed727ac810ab63ffd85da90ffb52cce2114f74
7
- data.tar.gz: a048a5717613df9efafc4f525d6ce5693ce52c2b9e087fe0602eab09d45d6521ab74f1a69655fe36322f5e2b85355698497215b35f1ef96866a951a328e1c9ac
6
+ metadata.gz: b6263908c04be9f4e91ae44e21451b3bfd6a32cde46d5e6b612887cd278df4e5b5e15f1852a6bd04e226430eadaca546e18749b536141d223f8f9f0f8e3679d8
7
+ data.tar.gz: cbf2b293055b1505e4f8c45038ae1764b1cef69c2423cdbbfcfdded6608b854bed38a2ee8a3f1a14545e911de33e3558baff788d6c8cdf67f74448de2c9089b3
data/.rubocop.yml ADDED
@@ -0,0 +1,9 @@
1
+ require: rubocop-rspec
2
+ inherit_from: .rubocop_todo.yml
3
+
4
+ AllCops:
5
+ TargetRubyVersion: 2.3
6
+ DisplayCopNames: true
7
+
8
+ Rails:
9
+ Enabled: true
data/.rubocop_todo.yml ADDED
@@ -0,0 +1,96 @@
1
+ require: rubocop-rspec
2
+
3
+ # This configuration was generated by
4
+ # `rubocop --auto-gen-config`
5
+ # on 2016-10-25 09:12:51 -0700 using RuboCop version 0.42.0.
6
+ # The point is for the user to remove these configuration records
7
+ # one by one as the offenses are removed from the code base.
8
+ # Note that changes in the inspected code, or installation of new
9
+ # versions of RuboCop, may require this file to be generated again.
10
+
11
+ # Offense count: 47
12
+ # Configuration parameters: AllowHeredoc, AllowURI, URISchemes.
13
+ # URISchemes: http, https
14
+ Metrics/LineLength:
15
+ Max: 176
16
+
17
+ # Offense count: 2
18
+ # Configuration parameters: Max.
19
+ RSpec/ExampleLength:
20
+ Exclude:
21
+ - 'spec/unit/db_minter_spec.rb'
22
+ - 'spec/unit/file_minter_spec.rb'
23
+
24
+ # Offense count: 5
25
+ # Configuration parameters: CustomTransform.
26
+ RSpec/FilePath:
27
+ Exclude:
28
+ - 'spec/unit/config_spec.rb'
29
+ - 'spec/unit/db_minter_spec.rb'
30
+ - 'spec/unit/file_minter_spec.rb'
31
+ - 'spec/unit/noid_spec.rb'
32
+ - 'spec/unit/service_spec.rb'
33
+
34
+ # Offense count: 9
35
+ RSpec/LeadingSubject:
36
+ Exclude:
37
+ - 'spec/unit/config_spec.rb'
38
+ - 'spec/unit/file_minter_spec.rb'
39
+
40
+ # Offense count: 4
41
+ RSpec/MessageChain:
42
+ Exclude:
43
+ - 'spec/unit/config_spec.rb'
44
+
45
+ # Offense count: 5
46
+ # Configuration parameters: EnforcedStyle, SupportedStyles.
47
+ # SupportedStyles: allow, expect
48
+ RSpec/MessageExpectation:
49
+ Exclude:
50
+ - 'spec/support/shared_examples/minter.rb'
51
+ - 'spec/unit/service_spec.rb'
52
+
53
+ # Offense count: 7
54
+ RSpec/MultipleExpectations:
55
+ Max: 5
56
+
57
+ # Offense count: 36
58
+ RSpec/NamedSubject:
59
+ Exclude:
60
+ - 'spec/support/shared_examples/minter.rb'
61
+ - 'spec/unit/config_spec.rb'
62
+ - 'spec/unit/db_minter_spec.rb'
63
+ - 'spec/unit/file_minter_spec.rb'
64
+ - 'spec/unit/noid_spec.rb'
65
+ - 'spec/unit/service_spec.rb'
66
+
67
+ # Offense count: 11
68
+ # Configuration parameters: MaxNesting.
69
+ RSpec/NestedGroups:
70
+ Exclude:
71
+ - 'spec/unit/config_spec.rb'
72
+ - 'spec/unit/noid_spec.rb'
73
+
74
+ # Offense count: 3
75
+ # Configuration parameters: IgnoreSymbolicNames.
76
+ RSpec/VerifiedDoubles:
77
+ Exclude:
78
+ - 'spec/unit/config_spec.rb'
79
+ - 'spec/unit/service_spec.rb'
80
+
81
+ # Offense count: 11
82
+ Style/Documentation:
83
+ Exclude:
84
+ - 'spec/**/*'
85
+ - 'test/**/*'
86
+ - 'app/models/minter_state.rb'
87
+ - 'db/migrate/20160610010003_create_minter_states.rb'
88
+ - 'db/migrate/20161021203429_rename_minter_state_random_to_rand.rb'
89
+ - 'lib/active_fedora/noid.rb'
90
+ - 'lib/active_fedora/noid/config.rb'
91
+ - 'lib/active_fedora/noid/minter/base.rb'
92
+ - 'lib/active_fedora/noid/minter/db.rb'
93
+ - 'lib/active_fedora/noid/minter/file.rb'
94
+ - 'lib/active_fedora/noid/service.rb'
95
+ - 'lib/generators/active_fedora/noid/install_generator.rb'
96
+ - 'lib/generators/active_fedora/noid/seed_generator.rb'
data/Gemfile CHANGED
@@ -1,3 +1,4 @@
1
+ # frozen_string_literal: true
1
2
  source 'https://rubygems.org'
2
3
 
3
4
  # Specify your gem's dependencies in active_fedora-noid.gemspec
@@ -36,7 +37,7 @@ else
36
37
  when /^4.2/
37
38
  gem 'responders', '~> 2.0'
38
39
  gem 'sass-rails', '>= 5.0'
39
- gem 'coffee-rails', '~> 4.1.0'
40
+ gem 'coffee-rails', '~> 4.2.0'
40
41
  when /^4.[01]/
41
42
  gem 'sass-rails', '< 5.0'
42
43
  end
data/README.md CHANGED
@@ -1,11 +1,13 @@
1
- [![Version](https://badge.fury.io/rb/active_fedora-noid.png)](http://badge.fury.io/rb/active_fedora-noid)
1
+ Code: [![Version](https://badge.fury.io/rb/active_fedora-noid.png)](http://badge.fury.io/rb/active_fedora-noid)
2
2
  [![Build Status](https://travis-ci.org/projecthydra-labs/active_fedora-noid.png?branch=master)](https://travis-ci.org/projecthydra-labs/active_fedora-noid)
3
- [![Coverage Status](https://coveralls.io/repos/projecthydra-labs/active_fedora-noid/badge.svg)](https://coveralls.io/r/projecthydra-labs/active_fedora-noid)
3
+ [![Coverage Status](https://coveralls.io/repos/github/projecthydra-labs/active_fedora-noid/badge.svg?branch=master)](https://coveralls.io/github/projecthydra-labs/active_fedora-noid?branch=master)
4
4
  [![Code Climate](https://codeclimate.com/github/projecthydra-labs/active_fedora-noid/badges/gpa.svg)](https://codeclimate.com/github/projecthydra-labs/active_fedora-noid)
5
5
  [![Dependency Status](https://gemnasium.com/projecthydra-labs/active_fedora-noid.png)](https://gemnasium.com/projecthydra-labs/active_fedora-noid)
6
- [![Apache 2.0 License](http://img.shields.io/badge/APACHE2-license-blue.svg)](./LICENSE)
7
- [![Contribution Guidelines](http://img.shields.io/badge/CONTRIBUTING-Guidelines-blue.svg)](./CONTRIBUTING.md)
6
+
7
+ Docs: [![Documentation Status](https://inch-ci.org/github/projecthydra-labs/active_fedora-noid.svg?branch=master)](https://inch-ci.org/github/projecthydra-labs/active_fedora-noid)
8
8
  [![API Docs](http://img.shields.io/badge/API-docs-blue.svg)](http://rubydoc.info/gems/active_fedora-noid)
9
+ [![Contribution Guidelines](http://img.shields.io/badge/CONTRIBUTING-Guidelines-blue.svg)](./CONTRIBUTING.md)
10
+ [![Apache 2.0 License](http://img.shields.io/badge/APACHE2-license-blue.svg)](./LICENSE)
9
11
 
10
12
  # ActiveFedora::Noid
11
13
 
@@ -21,7 +23,7 @@ Override your ActiveFedora-based applications with opaque [Noid](https://wiki.uc
21
23
  * [ActiveFedora integration](#activefedora-integration)
22
24
  * [Identifier/URI translation](#identifieruri-translation)
23
25
  * [Overriding default behavior](#overriding-default-behavior)
24
- * [Minter state (for replayability)](#minter-state-for-replayability)
26
+ * [Use database-based minter state](#use-database-based-minter-state)
25
27
  * [Identifier template](#identifier-template)
26
28
  * [Custom minters](#custom-minters)
27
29
  * [Help](#help)
@@ -103,7 +105,13 @@ To better support multi-host production installations that expect a shared datab
103
105
 
104
106
  ### Use database-based minter state
105
107
 
106
- The database-based minter stores minter state information in your application's relational database. To use it, override the AF::Noid configuration in e.g. `config/initializers/active_fedora-noid.rb`:
108
+ The database-based minter stores minter state information in your application's relational database. To use it, you'll first need to run the install generator:
109
+
110
+ ```bash
111
+ $ rails generate active_fedora:noid:install
112
+ ```
113
+
114
+ This will create the necessary database tables and seed the database minter. To start minting identifiers with the new minter, override the AF::Noid configuration in e.g. `config/initializers/active_fedora-noid.rb`:
107
115
 
108
116
  ```ruby
109
117
  require 'active_fedora/noid'
@@ -182,11 +190,11 @@ And the service will delegate minting and validating to an instance of your cust
182
190
 
183
191
  # Help
184
192
 
185
- If you have questions or need help, please email [the Hydra community tech list](mailto:hydra-tech@googlegroups.com) or stop by [the Hydra community IRC channel](irc://irc.freenode.net/projecthydra).
193
+ If you have questions or need help, please email [the Hydra community tech list](mailto:hydra-tech@googlegroups.com) or stop by the #dev channel in [the Hydra community Slack team](https://wiki.duraspace.org/pages/viewpage.action?pageId=43910187#Getintouch!-Slack): [![Slack Status](http://slack.projecthydra.org/badge.svg)](http://slack.projecthydra.org/)
186
194
 
187
195
  # Acknowledgments
188
196
 
189
197
  This software has been developed by and is brought to you by the Hydra community. Learn more at the
190
- [Project Hydra website](http://projecthydra.org)
198
+ [Project Hydra website](http://projecthydra.org/).
191
199
 
192
- ![Project Hydra Logo](https://github.com/uvalib/libra-oa/blob/a6564a9e5c13b7873dc883367f5e307bf715d6cf/public/images/powered_by_hydra.png?raw=true)
200
+ ![Project Hydra Logo](http://sufia.io/assets/images/hydra_logo.png)
data/Rakefile CHANGED
@@ -1,12 +1,22 @@
1
- require "bundler/gem_tasks"
1
+ # frozen_string_literal: true
2
+ require 'bundler/gem_tasks'
2
3
  require 'rspec/core/rake_task'
3
4
  require 'engine_cart/rake_task'
4
-
5
- task default: :ci
6
- RSpec::Core::RakeTask.new
5
+ require 'rubocop/rake_task'
7
6
 
8
7
  Dir.glob('lib/tasks/*.rake').each { |r| import r }
9
8
 
10
- desc 'Continuous Integration (generate test app and run tests)'
11
- task ci: ['engine_cart:generate', 'spec'] do
9
+ desc 'Run test suite'
10
+ task :spec do
11
+ RSpec::Core::RakeTask.new
12
+ end
13
+
14
+ desc 'Run style checker'
15
+ RuboCop::RakeTask.new(:rubocop) do |task|
16
+ task.fail_on_error = true
12
17
  end
18
+
19
+ desc 'Continuous Integration (generate test app and run tests)'
20
+ task ci: ['rubocop', 'engine_cart:generate', 'spec']
21
+
22
+ task default: :ci
@@ -1,29 +1,32 @@
1
1
  # coding: utf-8
2
+ # frozen_string_literal: true
2
3
  lib = File.expand_path('../lib', __FILE__)
3
4
  $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
4
5
  require 'active_fedora/noid/version'
5
6
 
6
7
  Gem::Specification.new do |spec|
7
- spec.name = "active_fedora-noid"
8
+ spec.name = 'active_fedora-noid'
8
9
  spec.version = ActiveFedora::Noid::VERSION
9
- spec.authors = ["Michael J. Giarlo"]
10
- spec.email = ["leftwing@alumni.rutgers.edu"]
11
- spec.summary = %q{Noid identifier services for ActiveFedora-based applications}
12
- spec.description = %q{Noid identifier services for ActiveFedora-based applications.}
13
- spec.homepage = "https://github.com/projecthydra-labs/active_fedora-noid"
14
- spec.license = "Apache2"
10
+ spec.authors = ['Michael J. Giarlo']
11
+ spec.email = ['leftwing@alumni.rutgers.edu']
12
+ spec.summary = 'Noid identifier services for ActiveFedora-based applications'
13
+ spec.description = 'Noid identifier services for ActiveFedora-based applications.'
14
+ spec.homepage = 'https://github.com/projecthydra-labs/active_fedora-noid'
15
+ spec.license = 'Apache2'
15
16
 
16
17
  spec.files = `git ls-files -z`.split("\x0")
17
18
  spec.test_files = spec.files.grep(%r{^spec/})
18
- spec.require_paths = ["lib"]
19
+ spec.require_paths = ['lib']
19
20
 
20
21
  spec.add_dependency 'active-fedora', '>= 9.7', '< 12'
21
22
  spec.add_dependency 'noid', '~> 0.9'
22
23
  spec.add_dependency 'rails', '>= 4.2.7.1', '< 6'
23
24
 
24
- spec.add_development_dependency "bundler", "~> 1.7"
25
- spec.add_development_dependency "rake", "~> 11.0"
25
+ spec.add_development_dependency 'bundler', '~> 1.7'
26
+ spec.add_development_dependency 'rake', '~> 11.0'
26
27
  spec.add_development_dependency 'rspec', '~> 3.2'
27
28
  spec.add_development_dependency 'sqlite3'
29
+ spec.add_development_dependency 'rubocop', '~> 0.42.0'
30
+ spec.add_development_dependency 'rubocop-rspec', '~> 1.5'
28
31
  spec.add_development_dependency 'engine_cart', '~> 1.0'
29
32
  end
@@ -1,3 +1,4 @@
1
+ # frozen_string_literal: true
1
2
  class MinterState < ActiveRecord::Base
2
3
  validates :namespace, presence: true, uniqueness: true
3
4
  validates :template, presence: true
@@ -1,3 +1,4 @@
1
+ # frozen_string_literal: true
1
2
  class CreateMinterStates < ActiveRecord::Migration
2
3
  def change
3
4
  create_table :minter_states do |t|
@@ -1,3 +1,4 @@
1
+ # frozen_string_literal: true
1
2
  class RenameMinterStateRandomToRand < ActiveRecord::Migration
2
3
  def change
3
4
  rename_column :minter_states, :random, :rand
@@ -1,3 +1,4 @@
1
+ # frozen_string_literal: true
1
2
  require 'active_fedora/noid/version'
2
3
  require 'active_fedora/noid/config'
3
4
  require 'active_fedora/noid/engine'
@@ -7,7 +8,7 @@ require 'active_fedora/noid/minter'
7
8
  module ActiveFedora
8
9
  module Noid
9
10
  class << self
10
- def configure(&block)
11
+ def configure
11
12
  yield config
12
13
  end
13
14
 
@@ -16,6 +17,7 @@ module ActiveFedora
16
17
  end
17
18
 
18
19
  def treeify(identifier)
20
+ raise ArgumentError, 'Identifier must be a string of size > 0 in order to be treeified' if identifier.blank?
19
21
  head = identifier.split('/').first
20
22
  head.gsub!(/#.*/, '')
21
23
  (head.scan(/..?/).first(4) + [identifier]).join('/')
@@ -1,3 +1,4 @@
1
+ # frozen_string_literal: true
1
2
  module ActiveFedora
2
3
  module Noid
3
4
  class Config
@@ -39,7 +40,7 @@ module ActiveFedora
39
40
  end
40
41
 
41
42
  def baseparts
42
- 2 + [(template.gsub(/\.[rsz]/,'').length.to_f/2).ceil, 4].min
43
+ 2 + [(template.gsub(/\.[rsz]/, '').length.to_f / 2).ceil, 4].min
43
44
  end
44
45
  end
45
46
  end
@@ -1,3 +1,4 @@
1
+ # frozen_string_literal: true
1
2
  require 'rails'
2
3
 
3
4
  module ActiveFedora
@@ -1,3 +1,4 @@
1
+ # frozen_string_literal: true
1
2
  require_relative 'minter/base'
2
3
  require_relative 'minter/file'
3
4
  require_relative 'minter/db'
@@ -1,3 +1,4 @@
1
+ # frozen_string_literal: true
1
2
  require 'noid'
2
3
  require 'active_fedora'
3
4
 
@@ -20,7 +21,7 @@ module ActiveFedora
20
21
  # @return [String] the minted identifier
21
22
  def mint
22
23
  Mutex.new.synchronize do
23
- while true
24
+ loop do
24
25
  pid = next_id
25
26
  return pid unless ActiveFedora::Base.exists?(pid) || ActiveFedora::Base.gone?(pid)
26
27
  end
@@ -30,7 +31,7 @@ module ActiveFedora
30
31
  ##
31
32
  # @return [Hash] an object representing the current minter state
32
33
  def read
33
- raise NotImplementedError.new('Implement #read in child class')
34
+ raise NotImplementedError, 'Implement #read in child class'
34
35
  end
35
36
 
36
37
  ##
@@ -40,7 +41,7 @@ module ActiveFedora
40
41
  #
41
42
  # @return [void]
42
43
  def write!(_)
43
- raise NotImplementedError.new('Implement #write! in child class')
44
+ raise NotImplementedError, 'Implement #write! in child class'
44
45
  end
45
46
 
46
47
  protected
@@ -54,7 +55,7 @@ module ActiveFedora
54
55
  ##
55
56
  # @return [String] a new identifier.
56
57
  def next_id
57
- raise NotImplementedError.new('Implement #next_id in child class')
58
+ raise NotImplementedError, 'Implement #next_id in child class'
58
59
  end
59
60
  end
60
61
  end
@@ -1,12 +1,12 @@
1
+ # frozen_string_literal: true
1
2
  require 'noid'
2
3
 
3
4
  module ActiveFedora
4
5
  module Noid
5
6
  module Minter
6
7
  class Db < Base
7
-
8
8
  def read
9
- filtered_hash = instance.as_json.select { |key| ['template', 'counters', 'seq', 'rand', 'namespace'].include?(key) }
9
+ filtered_hash = instance.as_json.select { |key| %w(template counters seq rand namespace).include?(key) }
10
10
  filtered_hash['counters'] = JSON.parse(filtered_hash['counters'], symbolize_names: true) if filtered_hash['counters']
11
11
  filtered_hash.symbolize_keys
12
12
  end
@@ -46,7 +46,7 @@ module ActiveFedora
46
46
  def instance
47
47
  MinterState.lock.find_by(
48
48
  namespace: ActiveFedora::Noid.config.namespace,
49
- template: ActiveFedora::Noid.config.template,
49
+ template: ActiveFedora::Noid.config.template
50
50
  )
51
51
  end
52
52
  end # class Db
@@ -1,3 +1,4 @@
1
+ # frozen_string_literal: true
1
2
  require 'noid'
2
3
 
3
4
  module ActiveFedora
@@ -32,7 +33,7 @@ module ActiveFedora
32
33
  protected
33
34
 
34
35
  def with_file
35
- ::File.open(statefile, 'a+b', 0644) do |f|
36
+ ::File.open(statefile, 'a+b', 0o644) do |f|
36
37
  f.flock(::File::LOCK_EX)
37
38
  # Files opened in append mode seek to end of file
38
39
  f.rewind
@@ -1,3 +1,4 @@
1
+ # frozen_string_literal: true
1
2
  RSpec.configure do |config|
2
3
  config.before(:suite) do
3
4
  ActiveFedora::Noid.configure do |noid_config|
@@ -1,3 +1,4 @@
1
+ # frozen_string_literal: true
1
2
  require 'noid'
2
3
 
3
4
  module ActiveFedora
@@ -9,13 +10,9 @@ module ActiveFedora
9
10
  @minter = minter
10
11
  end
11
12
 
12
- def valid?(identifier)
13
- minter.valid? identifier
14
- end
13
+ delegate :valid?, to: :minter
15
14
 
16
- def mint
17
- minter.mint
18
- end
15
+ delegate :mint, to: :minter
19
16
 
20
17
  protected
21
18
 
@@ -1,5 +1,6 @@
1
+ # frozen_string_literal: true
1
2
  module ActiveFedora
2
3
  module Noid
3
- VERSION = '2.0.0.beta5'.freeze
4
+ VERSION = '2.0.0.beta6'
4
5
  end
5
6
  end
@@ -1,3 +1,4 @@
1
+ # frozen_string_literal: true
1
2
  module ActiveFedora
2
3
  module Noid
3
4
  class InstallGenerator < Rails::Generators::Base
@@ -1,9 +1,10 @@
1
+ # frozen_string_literal: true
1
2
  module ActiveFedora
2
3
  module Noid
3
4
  class SeedGenerator < Rails::Generators::Base
4
5
  source_root ::File.expand_path('../templates', __FILE__)
5
- argument :namespace, :type => :string, :default => ActiveFedora::Noid.config.namespace
6
- argument :template, :type => :string, :default => ActiveFedora::Noid.config.template
6
+ argument :namespace, type: :string, default: ActiveFedora::Noid.config.namespace
7
+ argument :template, type: :string, default: ActiveFedora::Noid.config.template
7
8
 
8
9
  desc <<-END_OF_DESC
9
10
  Seeds DB from ActiveFedora::Noid.config (or command-line overrides)
@@ -1,3 +1,4 @@
1
+ # frozen_string_literal: true
1
2
  require 'active_fedora/noid'
2
3
  require 'noid'
3
4
  require 'yaml'
@@ -10,7 +11,7 @@ namespace :active_fedora do
10
11
  statefile = ENV.fetch('AFNOID_STATEFILE', ActiveFedora::Noid.config.statefile)
11
12
  raise "File not found: #{statefile}\nAborting" unless File.exist?(statefile)
12
13
  puts "Migrating #{statefile} from YAML to Marshal serialization..."
13
- File.open(statefile, 'a+b', 0644) do |f|
14
+ File.open(statefile, 'a+b', 0o644) do |f|
14
15
  f.flock(File::LOCK_EX)
15
16
  f.rewind
16
17
  begin
@@ -23,7 +24,7 @@ namespace :active_fedora do
23
24
  new_state = Marshal.dump(minter.dump)
24
25
  f.write(new_state)
25
26
  end
26
- puts "Done!"
27
+ puts 'Done!'
27
28
  end
28
29
 
29
30
  desc 'Migrate minter state from file to database'
@@ -35,7 +36,7 @@ namespace :active_fedora do
35
36
  minter = Noid::Minter.new(state)
36
37
  new_state = ActiveFedora::Noid::Minter::Db.new
37
38
  new_state.write!(minter)
38
- puts "Done!"
39
+ puts 'Done!'
39
40
  end
40
41
 
41
42
  desc 'Migrate minter state from database to file'
@@ -47,7 +48,7 @@ namespace :active_fedora do
47
48
  minter = Noid::Minter.new(state)
48
49
  new_state = ActiveFedora::Noid::Minter::File.new
49
50
  new_state.write!(minter)
50
- puts "Done!"
51
+ puts 'Done!'
51
52
  end
52
53
  end
53
54
  end
@@ -1,14 +1,15 @@
1
+ # frozen_string_literal: true
1
2
  include MinterStateHelper
2
3
 
3
4
  describe MinterState, type: :model do
4
- before(:each) { reset_minter_state_table }
5
- after( :all ) { reset_minter_state_table }
5
+ before { reset_minter_state_table }
6
+ after(:all) { reset_minter_state_table }
6
7
 
7
8
  let(:state) { described_class.new }
8
9
  let(:first) { described_class.first }
9
10
 
10
11
  it 'db is seeded with first row' do
11
- expect{ first }.not_to raise_error
12
+ expect { first }.not_to raise_error
12
13
  expect(first.namespace).to eq 'default'
13
14
  expect(first.template).to eq '.reeddeeddk'
14
15
  expect(first.seq).to eq 0
@@ -16,24 +17,24 @@ describe MinterState, type: :model do
16
17
  end
17
18
  describe 'validation' do
18
19
  it 'blocks invalid template' do
19
- expect{ state.save! }.to raise_error(ActiveRecord::RecordInvalid) # empty
20
+ expect { state.save! }.to raise_error(ActiveRecord::RecordInvalid) # empty
20
21
  state.template = 'bad_template'
21
- expect{ state.save! }.to raise_error(ActiveRecord::RecordInvalid)
22
+ expect { state.save! }.to raise_error(ActiveRecord::RecordInvalid)
22
23
  state.template = 'reeddddk' # close, but missing '.'
23
- expect{ state.save! }.to raise_error(ActiveRecord::RecordInvalid)
24
+ expect { state.save! }.to raise_error(ActiveRecord::RecordInvalid)
24
25
  end
25
26
  it 'allows valid template (edit)' do
26
27
  first.template = '.reeddddk'
27
- expect{ first.save! }.not_to raise_error # OK!
28
+ expect { first.save! }.not_to raise_error # OK!
28
29
  end
29
30
  it 'blocks new record in same namespace' do
30
31
  state.template = '.reeddddk'
31
- expect{ state.save! }.to raise_error(ActiveRecord::RecordInvalid)
32
+ expect { state.save! }.to raise_error(ActiveRecord::RecordInvalid)
32
33
  end
33
34
  it 'allows new record in distinct namespace' do
34
35
  state.template = '.reeddddk'
35
36
  state.namespace = 'foobar'
36
- expect{ state.save! }.not_to raise_error # OK!
37
+ expect { state.save! }.not_to raise_error # OK!
37
38
  expect(described_class.group(:namespace).count).to eq('default' => 1, 'foobar' => 1)
38
39
  end
39
40
  end
data/spec/spec_helper.rb CHANGED
@@ -1,4 +1,5 @@
1
- ENV["RAILS_ENV"] ||= 'test'
1
+ # frozen_string_literal: true
2
+ ENV['RAILS_ENV'] ||= 'test'
2
3
 
3
4
  require 'coveralls'
4
5
  Coveralls.wear!
@@ -9,7 +10,7 @@ require 'active_fedora'
9
10
  require 'active_fedora/noid'
10
11
  require 'byebug' unless ENV['CI']
11
12
 
12
- Dir[File.dirname(__FILE__) + "/support/**/*.rb"].each { |f| require f }
13
+ Dir[File.dirname(__FILE__) + '/support/**/*.rb'].each { |f| require f }
13
14
 
14
15
  # See http://rubydoc.info/gems/rspec-core/RSpec/Core/Configuration
15
16
  RSpec.configure do |config|
@@ -1,3 +1,4 @@
1
+ # frozen_string_literal: true
1
2
  module MinterStateHelper
2
3
  # Simple truncation is not enough, since we also need seed data
3
4
  def reset_minter_state_table
@@ -1,3 +1,4 @@
1
+ # frozen_string_literal: true
1
2
  shared_examples 'a minter' do
2
3
  describe '#mint' do
3
4
  subject { minter.mint }
@@ -27,7 +28,7 @@ shared_examples 'a minter' do
27
28
  let(:existing_pid) { 'ef12ef12f' }
28
29
  let(:unique_pid) { 'bb22bb22b' }
29
30
 
30
- before :each do
31
+ before do
31
32
  expect(subject).to receive(:next_id).and_return(existing_pid, unique_pid)
32
33
  end
33
34
 
@@ -1,7 +1,8 @@
1
+ # frozen_string_literal: true
1
2
  require 'rails/generators'
2
3
 
3
4
  class TestAppGenerator < Rails::Generators::Base
4
- source_root "./spec/test_app_templates"
5
+ source_root './spec/test_app_templates'
5
6
 
6
7
  # if you need to generate any additional configuration
7
8
  # into the test app, this generator will be run immediately
@@ -1,3 +1,4 @@
1
+ # frozen_string_literal: true
1
2
  describe ActiveFedora::Noid::Config do
2
3
  subject { described_class.new }
3
4
 
@@ -45,23 +46,23 @@ describe ActiveFedora::Noid::Config do
45
46
  describe '#translate_uri_to_id' do
46
47
  let(:config) { described_class.new }
47
48
  let(:translator) { config.translate_uri_to_id }
48
- let(:uri) { "http://localhost:8983/fedora/rest/test/hh/63/vz/22/hh63vz22q/members" }
49
+ let(:uri) { 'http://localhost:8983/fedora/rest/test/hh/63/vz/22/hh63vz22q/members' }
49
50
  let(:ActiveFedora) { double(ActiveFedora) }
50
51
  subject { translator.call(uri) }
51
52
  before do
52
- allow(ActiveFedora).to receive_message_chain("fedora.host") { "http://localhost:8983" }
53
- allow(ActiveFedora).to receive_message_chain("fedora.base_path") { "/fedora/rest/test" }
53
+ allow(ActiveFedora).to receive_message_chain('fedora.host') { 'http://localhost:8983' }
54
+ allow(ActiveFedora).to receive_message_chain('fedora.base_path') { '/fedora/rest/test' }
54
55
  end
55
56
 
56
57
  it { is_expected.to eq 'hh63vz22q/members' }
57
58
 
58
- context "with a hash code uri" do
59
- let(:uri) { "http://localhost:8983/fedora/rest/test/hh/63/vz/22/hh63vz22q#g123" }
59
+ context 'with a hash code uri' do
60
+ let(:uri) { 'http://localhost:8983/fedora/rest/test/hh/63/vz/22/hh63vz22q#g123' }
60
61
  it { is_expected.to eq 'hh63vz22q#g123' }
61
62
  end
62
63
 
63
64
  context 'with a short custom template' do
64
- let(:uri) { "http://localhost:8983/fedora/rest/test/ab/cd/abcd/members" }
65
+ let(:uri) { 'http://localhost:8983/fedora/rest/test/ab/cd/abcd/members' }
65
66
  let(:custom_template) { '.reeee' }
66
67
  before { config.template = custom_template }
67
68
  subject { translator.call(uri) }
@@ -70,7 +71,7 @@ describe ActiveFedora::Noid::Config do
70
71
  end
71
72
 
72
73
  context 'with an even shorter custom template' do
73
- let(:uri) { "http://localhost:8983/fedora/rest/test/ab/c/abc/members" }
74
+ let(:uri) { 'http://localhost:8983/fedora/rest/test/ab/c/abc/members' }
74
75
  let(:custom_template) { '.reee' }
75
76
  before { config.template = custom_template }
76
77
  subject { translator.call(uri) }
@@ -79,7 +80,7 @@ describe ActiveFedora::Noid::Config do
79
80
  end
80
81
 
81
82
  context 'with a long custom template' do
82
- let(:uri) { "http://localhost:8983/fedora/rest/test/ab/cd/ef/gh/abcdefghijklmnopqrstuvwxyz/members" }
83
+ let(:uri) { 'http://localhost:8983/fedora/rest/test/ab/cd/ef/gh/abcdefghijklmnopqrstuvwxyz/members' }
83
84
  let(:custom_template) { '.reeeeeeeeeeeeeeeeeeeeeeeeee' }
84
85
  before { config.template = custom_template }
85
86
  subject { translator.call(uri) }
@@ -91,27 +92,27 @@ describe ActiveFedora::Noid::Config do
91
92
  describe '#translate_id_to_uri' do
92
93
  let(:config) { described_class.new }
93
94
  let(:translator) { config.translate_id_to_uri }
94
- let(:id) { "hh63vz2/members" }
95
+ let(:id) { 'hh63vz2/members' }
95
96
  let(:ActiveFedora) { double(ActiveFedora) }
96
97
  subject { translator.call(id) }
97
98
  before do
98
- allow(ActiveFedora).to receive_message_chain("fedora.host") { "http://localhost:8983" }
99
- allow(ActiveFedora).to receive_message_chain("fedora.base_path") { "/fedora/rest/test" }
99
+ allow(ActiveFedora).to receive_message_chain('fedora.host') { 'http://localhost:8983' }
100
+ allow(ActiveFedora).to receive_message_chain('fedora.base_path') { '/fedora/rest/test' }
100
101
  end
101
102
 
102
- it { is_expected.to eq "http://localhost:8983/fedora/rest/test/hh/63/vz/2/hh63vz2/members" }
103
+ it { is_expected.to eq 'http://localhost:8983/fedora/rest/test/hh/63/vz/2/hh63vz2/members' }
103
104
 
104
- context "with a hash code id" do
105
+ context 'with a hash code id' do
105
106
  let(:id) { 'hh63vz2#g123' }
106
- it { is_expected.to eq "http://localhost:8983/fedora/rest/test/hh/63/vz/2/hh63vz2#g123" }
107
+ it { is_expected.to eq 'http://localhost:8983/fedora/rest/test/hh/63/vz/2/hh63vz2#g123' }
107
108
  end
108
109
 
109
110
  context 'with a short custom template' do
110
- let(:id) { "abcd/members" }
111
+ let(:id) { 'abcd/members' }
111
112
  let(:custom_template) { '.reeee' }
112
113
  before { config.template = custom_template }
113
114
  subject { translator.call(id) }
114
- it { is_expected.to eq "http://localhost:8983/fedora/rest/test/ab/cd/abcd/members" }
115
+ it { is_expected.to eq 'http://localhost:8983/fedora/rest/test/ab/cd/abcd/members' }
115
116
  end
116
117
 
117
118
  context 'with an even shorter custom template' do
@@ -119,15 +120,15 @@ describe ActiveFedora::Noid::Config do
119
120
  let(:custom_template) { '.reee' }
120
121
  before { config.template = custom_template }
121
122
  subject { translator.call(id) }
122
- it { is_expected.to eq "http://localhost:8983/fedora/rest/test/ab/c/abc/members" }
123
+ it { is_expected.to eq 'http://localhost:8983/fedora/rest/test/ab/c/abc/members' }
123
124
  end
124
125
 
125
126
  context 'with a long custom template' do
126
- let(:id) { "abcdefghijklmnopqrstuvwxyz/members" }
127
+ let(:id) { 'abcdefghijklmnopqrstuvwxyz/members' }
127
128
  let(:custom_template) { '.reeeeeeeeeeeeeeeeeeeeeeeeee' }
128
129
  before { config.template = custom_template }
129
130
  subject { translator.call(id) }
130
- it { is_expected.to eq "http://localhost:8983/fedora/rest/test/ab/cd/ef/gh/abcdefghijklmnopqrstuvwxyz/members" }
131
+ it { is_expected.to eq 'http://localhost:8983/fedora/rest/test/ab/cd/ef/gh/abcdefghijklmnopqrstuvwxyz/members' }
131
132
  end
132
133
  end
133
134
  end
@@ -1,10 +1,11 @@
1
+ # frozen_string_literal: true
1
2
  include MinterStateHelper
2
3
 
3
4
  describe ActiveFedora::Noid::Minter::Db do
4
- before(:each) { reset_minter_state_table }
5
+ before { reset_minter_state_table }
5
6
  after(:all) { reset_minter_state_table }
6
7
 
7
- before :each do
8
+ before do
8
9
  # default novel mintings
9
10
  allow(ActiveFedora::Base).to receive(:exists?).and_return(false)
10
11
  allow(ActiveFedora::Base).to receive(:gone?).and_return(false)
@@ -18,8 +19,8 @@ describe ActiveFedora::Noid::Minter::Db do
18
19
 
19
20
  describe '#initialize' do
20
21
  it 'raises on bad templates' do
21
- expect{ described_class.new('reeddeeddk') }.to raise_error(Noid::TemplateError)
22
- expect{ described_class.new('') }.to raise_error(Noid::TemplateError)
22
+ expect { described_class.new('reeddeeddk') }.to raise_error(Noid::TemplateError)
23
+ expect { described_class.new('') }.to raise_error(Noid::TemplateError)
23
24
  end
24
25
  it 'returns object w/ default template' do
25
26
  expect(subject).to be_instance_of described_class
@@ -53,11 +54,11 @@ describe ActiveFedora::Noid::Minter::Db do
53
54
  before { minter.mint }
54
55
  it 'changes the state of the minter' do
55
56
  expect { subject.write!(minter) }.to change { subject.read[:seq] }
56
- .from(starting_state[:seq]).to(minter.seq)
57
- .and change { subject.read[:counters] }
58
- .from(starting_state[:counters]).to(minter.counters)
59
- .and change { subject.read[:rand] }
60
- .from(starting_state[:rand]).to(Marshal.dump(minter.instance_variable_get(:@rand)))
57
+ .from(starting_state[:seq]).to(minter.seq)
58
+ .and change { subject.read[:counters] }
59
+ .from(starting_state[:counters]).to(minter.counters)
60
+ .and change { subject.read[:rand] }
61
+ .from(starting_state[:rand]).to(Marshal.dump(minter.instance_variable_get(:@rand)))
61
62
  end
62
63
  end
63
64
  end
@@ -1,5 +1,6 @@
1
+ # frozen_string_literal: true
1
2
  describe ActiveFedora::Noid::Minter::File do
2
- before :each do
3
+ before do
3
4
  # default novel mintings
4
5
  allow(ActiveFedora::Base).to receive(:exists?).and_return(false)
5
6
  allow(ActiveFedora::Base).to receive(:gone?).and_return(false)
@@ -47,12 +48,11 @@ describe ActiveFedora::Noid::Minter::File do
47
48
  before { minter.mint }
48
49
  it 'changes the state of the minter' do
49
50
  expect { subject.write!(minter) }.to change { subject.read[:seq] }
50
- .from(starting_state[:seq]).to(minter.seq)
51
- .and change { subject.read[:rand] }
52
- .from(starting_state[:rand]).to(Marshal.dump(minter.instance_variable_get(:@rand)))
53
- .and change { subject.read[:counters] }
54
- .to(minter.counters)
55
-
51
+ .from(starting_state[:seq]).to(minter.seq)
52
+ .and change { subject.read[:rand] }
53
+ .from(starting_state[:rand]).to(Marshal.dump(minter.instance_variable_get(:@rand)))
54
+ .and change { subject.read[:counters] }
55
+ .to(minter.counters)
56
56
  end
57
57
  end
58
58
  end
@@ -1,3 +1,4 @@
1
+ # frozen_string_literal: true
1
2
  describe ActiveFedora::Noid do
2
3
  describe '#configure' do
3
4
  it { is_expected.to respond_to(:configure) }
@@ -10,12 +11,24 @@ describe ActiveFedora::Noid do
10
11
  end
11
12
 
12
13
  describe '#treeify' do
13
- subject { ActiveFedora::Noid.treeify(id) }
14
+ subject { described_class.treeify(id) }
14
15
  let(:id) { 'abc123def45' }
15
16
  it { is_expected.to eq 'ab/c1/23/de/abc123def45' }
16
17
  context 'with a seven-digit identifier' do
17
18
  let(:id) { 'abc123z' }
18
19
  it { is_expected.to eq 'ab/c1/23/z/abc123z' }
19
20
  end
21
+ context 'with an empty string' do
22
+ let(:id) { '' }
23
+ it 'raises ArgumentError' do
24
+ expect { subject }.to raise_error(ArgumentError)
25
+ end
26
+ end
27
+ context 'with a nil' do
28
+ let(:id) { nil }
29
+ it 'raises ArgumentError' do
30
+ expect { subject }.to raise_error(ArgumentError)
31
+ end
32
+ end
20
33
  end
21
34
  end
@@ -1,3 +1,4 @@
1
+ # frozen_string_literal: true
1
2
  describe ActiveFedora::Noid::Service do
2
3
  describe 'public API' do
3
4
  it { is_expected.to respond_to(:valid?) }
@@ -11,7 +12,7 @@ describe ActiveFedora::Noid::Service do
11
12
  context 'with a custom minter' do
12
13
  let(:minter) { double('minter') }
13
14
  let(:identifier) { 'abc123' }
14
- let(:new_service) { ActiveFedora::Noid::Service.new(minter) }
15
+ let(:new_service) { described_class.new(minter) }
15
16
 
16
17
  it 'allows injecting a custom minter' do
17
18
  expect(new_service.minter).to eq minter
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: active_fedora-noid
3
3
  version: !ruby/object:Gem::Version
4
- version: 2.0.0.beta5
4
+ version: 2.0.0.beta6
5
5
  platform: ruby
6
6
  authors:
7
7
  - Michael J. Giarlo
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2016-10-24 00:00:00.000000000 Z
11
+ date: 2016-10-26 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: active-fedora
@@ -120,6 +120,34 @@ dependencies:
120
120
  - - ">="
121
121
  - !ruby/object:Gem::Version
122
122
  version: '0'
123
+ - !ruby/object:Gem::Dependency
124
+ name: rubocop
125
+ requirement: !ruby/object:Gem::Requirement
126
+ requirements:
127
+ - - "~>"
128
+ - !ruby/object:Gem::Version
129
+ version: 0.42.0
130
+ type: :development
131
+ prerelease: false
132
+ version_requirements: !ruby/object:Gem::Requirement
133
+ requirements:
134
+ - - "~>"
135
+ - !ruby/object:Gem::Version
136
+ version: 0.42.0
137
+ - !ruby/object:Gem::Dependency
138
+ name: rubocop-rspec
139
+ requirement: !ruby/object:Gem::Requirement
140
+ requirements:
141
+ - - "~>"
142
+ - !ruby/object:Gem::Version
143
+ version: '1.5'
144
+ type: :development
145
+ prerelease: false
146
+ version_requirements: !ruby/object:Gem::Requirement
147
+ requirements:
148
+ - - "~>"
149
+ - !ruby/object:Gem::Version
150
+ version: '1.5'
123
151
  - !ruby/object:Gem::Dependency
124
152
  name: engine_cart
125
153
  requirement: !ruby/object:Gem::Requirement
@@ -143,6 +171,8 @@ extra_rdoc_files: []
143
171
  files:
144
172
  - ".gitignore"
145
173
  - ".rspec"
174
+ - ".rubocop.yml"
175
+ - ".rubocop_todo.yml"
146
176
  - ".travis.yml"
147
177
  - CONTRIBUTING.md
148
178
  - Gemfile