Changes made prior to 2021-03-09 may ever be added retrospectively, but consult Github Releases for the project in the indefinite meantime.
The format is based on Keep a Changelog, and this project adheres to Semantic Versioning.
- Planned for a future release
- Unreleased
- Releases
These changes are merged into the main
branch, but have not been released. After merging pull requests (PRs) that are not immediately released into main
, a tag is added appending the PR# to the current release. For example, if the release version/tag is 3.2.1
, and PR# 107 is merged without a new release, the state of the codebase after that merge will be tagged as 3.2.1.107
.
-
Role term and subordinate body subfields for meeting names fixed in default config.
-
IterativeCleanup
now automatically extends its extending module withDry::Configurable
prior to defining settings that depend onDry::Configurable
. (PR#192) -
Kiba::Extend::Job.output?
no longer fails if given job returns Nil (PR#194) -
Reshape::FieldsToFieldGroupWithConstant
constant value is no longer added to rows with no values in the renamed/remapped value fields, when fieldmap length == 1. (PR#195)
-
MARC::LanguageCodeLookup
transform -
Ability to pass
find
argument toClean::RegexpFindReplaceFieldVals
as aRegexp
object. Not sure why this was not the default initial behavior, but here we are! (PR#196) -
Ability to pass
delim
argument toAppend::ToFieldValue
to trigger multi-value treatment (PR#200)
-
MARC name extraction transforms now supply "uniform title name" as a role term in fields having a $t value. This change supports the fact that some applications may not wish to treat these values as standalone names, and this makes it possible to filter out these values. (PR#199)
-
Simplification of requirements for
IterativeCleanup
usage -
Complete documentation for
IterativeCleanup
-
Switch to kramdown Markdown conversion for YARD
-
Nested
job.show_me
,job.tell_me
, andjob.verbosity
config settings have been removed. (They were deprecated in 3.2.0) -
Kiba::Common::Sources
andKiba::Common::Destinations
are no longer supported. To use an external source or destination class, subclass it in aKiba::Extend
source or destination class that extendsKiba::Extend::Sourceable
orKiba::Extend::Destinationable
(PR#139) -
Using a supplied file registry entry as the destination of a job raises an error, since the definition of a supplied entry is that it is not created by a job in the project. (PR#139)
-
Destinations::Marc
(PR#138) -
Destinations::Lambda
(PR#139)
-
Sources::CSV
(PR#139) -
Sources::Enumerable
(PR#139) -
Sources::JsonDir
(PR#140)
-
Jobs::JsonToCsvJob
(PR#140)
-
Clean::EnsureConsistentFields
(PR#140) -
Delete::FieldnamesStartingWith
(PR#156) -
Explode::RowsFromGroupedMultivalFields
(PR#165) -
Fingerprint::FlagChanged
(PR#155) -
Fingerprint::MergeCorrected
(PR#157) -
Marc::FilterRecords::ById
(PR#138) -
Marc::FilterRecords::WithLambda
(PR#138) -
Marc::ExtractMeetingNameData
(PR#164) -
Marc::ExtractOrgNameData
(PR#137) -
Marc::ExtractPersonNameData
(PR#137) -
Marc::ExtractNameData
(PR#137) -
Marc::ExtractSubfieldsFromField
(PR#141) -
Replace::NormWithMostFrequentlyUsedForm
(PR#167) -
Sort::ByFieldValue
(PR#151) -
Split::PublicationStatement
transform (PR#142)
Transforms::Helpers
-
OrgNameChecker
(PR#148) -
PersonNameChecker
(PR#161)
-
CombineValues::FromFieldWithDelimiter
can now takesources: :all
, and will provide space as a defaultdelim
if not provided (PR#147) -
CombineValues::FromFieldWithDelimiter
can now takedelete_sources
andprepend_source_field_name
args (PR#147) -
:mode
parameter added toJobs::BaseJob
(PR#154, PR#157)
-
Utility classes to clean ISBD trailing punctuation from name and role term values extracted from MARC data (PR#141)
-
Kiba::Extend::Job.output?
convenience method (PR#150) -
Job duration report (added to normal and verbose job run) (PR#154, PR#157)
-
IterativeCleanup
mixin (PR#180)
-
Transforms that take an
action
argument now mix in the newActionArgumentable
module and validate the argument values in a consistent way (PR#138) -
Name and role term values extracted from MARC data by subclasses of
Transforms::Marc::ExtractBaseNameData
are run throughUtils::MarcNameCleaner
andUtils::MarcRoleTermCleaner
(PR#141) -
Fingerprint::Add
now passes in default delim: U+241F / E2 90 9F / Symbol for Unit Separator (PR#155) -
Fingerprint::Decode
now passes in default delim (U+241F / E2 90 9F / Symbol for Unit Separator), and default prefix (fp) (PR#155) -
Fingerprint::FlagChanged
can now be passed anignore_fields
parameter indicating fields included in the fingerprint, but which should not be compared to current values and flagged (PR#168)
-
Fixes #46 - CombineValues::FullRecord with multi-sources can result in different values (PR#147)
-
Fixes issue where job registry entry with a Marc source and CSV destination could not be used as a source or lookup in jobs (PR#137)
-
Fixes issue in
StringValue::ToArray
transform where delim=nil was not correctly being calculated (PR#145) -
Fixes #152: Fingerprint::Decode error: Encoding::CompatibilityError: incompatible character encodings: ASCII-8BIT and UTF-8 (PR#153)
-
Fixes #162: failure of
Delete::EmptyFields
transform when passed a source with no rows -
Fixes #179: renaming field with same fieldname in
from
andto
resulted in the field being deleted (PR#181)
-
sep
parameter will be replaced bydelim
inCombineValues::FromFieldWithDelimiter
andCombineValues::FullRecord
(PR#147)
-
Adds
Kiba::Extend::ErrMod
module to be included intoKiba::Extend
-specific error classes. This allows us to subclass each application-specific error to the semantically appropriate Ruby exception class, while retaining the ability to identify/scope/rescue only application-specific errors. (PR#138) -
Add
:info
method toKiba::Extend::ErrMod
module, to print error type, message, and backtrace to STDOUT in a consistent way. (PR#141) -
Set up standardrb linting, with Kristina’s standard (ha) minor overrides (PR#169)
-
StringValue::ToArray
transform (PR#111) -
Two mixin modules to Transforms to support deprecating non-preferred parameter signatures:
-
Transforms::SepDeprecatable
(PR#124) -
Transforms::MultivalPlusDelimDeprecatable
(PR#124)
-
-
Utils::StringNormalizer
service class (PR#124) -
ignore_case
andnormalized
parameters forDeduplicate::GroupedFieldValues
(PR#124) -
Options to
Clean::StripFields
transform (PR#129):-
Ability to pass
fields: :all
to strip all fields in a table -
Ability to turn on multivalue processing by passing in a
delim
value
-
-
More country mappings to
Cspace::AddressCountry
transform (PR#132) -
Marc
source,MarcJob
,Kiba::Extend::Marc
configuration module,Utils::MarcIdExtractor
, and an initialMarc::Extract245Title
transform (PR#134)
-
Catch
Merge::MultiRowLookup
transform created with emptyfieldmap
and raise error on initialization, rather than letting it blow upUtils::Fieldset
later (PR#127) -
Fix #121 (PR#122)
-
sep
parameter inDeduplicate::GroupedFieldValues
(PR#124) -
multival
parameter inCspace::NormalizeForId
(PR#124)
-
Fraction::ToDecimal
transform (and supportingUtils::ExtractFractions
andData::ConvertibleFraction
classes) (PR#108) -
yardspec
gem to support running YARD examples as RSpec tests (PR#107) -
Branch coverage to
simplecov
setup (PR#107)
-
Configurable pre-job task handling
-
Kiba::Extend::Registry::FileRegistry.finalize
method -
Unnested
job_show_me
,job_tell_me
, andjob_verbosity
config settings.
-
Add publicly readable
srcrows
andoutrows
onKiba::Extend::Jobs::BaseJob
(inherited by all job types). This makes it possible to do things like this in client projects:
job = Kiba::Extend::Command::Run.job(:prep__objects)
puts "Some records omitted" if job.outrows < job.srcrows
These attributes were previously only accessible via:
job.context.instance_variable_get(:@srcrows)
-
See the list of deleted transforms, helpers, and params below.
-
Split::IntoMultipleColumns
transform: no longer removes spaces between split segments that end up collapsed left or right. This was a bug, but fixing it could cause jobs relying on that behavior (or introducing subsequent transforms to deal with it) to fail or generate unexpected results.
-
Warn::UnlessFieldValueMatches
transform -
multimode
parameter forUtils::FieldValueMatcher
-
Support for passing Procs in as file registry entry values (or as a value in a :dest_special_opts Hash). See [NOTE under "File Registry Data hashes in your ETL application](https://lyrasis.github.io/kiba-extend/file.file_registry_entry.html#file-registry-data-hashes-in-your-etl-application)
-
delim
parameter forReplace::FieldValueWithStaticMapping
transform
-
Split::IntoMultipleColumns
: If empty string is passed in as the value to be split, all newly created fields will be nil
-
Split::IntoMultipleColumns
no longer removes existing spaces between segments that get right/left collapsed -
Fixes incorrect value splitting in
Split::IntoMultipleColumns
-
Reshape::FieldsToFieldGroupWithConstant
now works with single source fields (i.e. listed infieldmap
param) with nil values
-
Transforms
-
Clean::DelimiterOnlyFields
-
CombineValues::AcrossFieldGroup
-
Reshape::CollapseMultipleFieldsToOneTypedFieldPair
-
FilterRows::FieldValueGreaterThan
-
-
Transform Helpers
-
Helpers.delim_only?
-
Helpers.field_values
-
-
Parameters
-
multival
andsep
parameters fromReplace::FieldValueWithStaticMapping
transform
-
-
Removes Hash
conditions
parameter andsep
parameter fromMerge::ConstantValueConditional
transform, replacing with lambda Proccondition
parameter. In PR#88 -
Only relevant if you have called global
Kiba::Extend::DELIM
orKiba::Extend::CSVOPT
from outside Kiba::Extend for some reason. These global constants were finally removed from the final few places they were being used within kiba-extend, and they have been removed from the application setup.
-
New service object classes in
Transforms::Helpers
in PR#93:-
DelimOnlyChecker
-
FieldValueGetter
-
RowFieldEvennessChecker
-
-
New transforms:
-
Clean::EvenFieldValues
(in PR#93) -
Collapse::FieldsToRepeatableFieldGroup
(in PR#93) -
Collapse::FieldsToTypedFieldPair
(in PR#93) -
Collapse::FieldsWithCustomFieldmap
(in PR#93) -
Deduplicate::FlagAll
(in PR#93) -
Delete::DelimiterOnlyFieldValues
(in PR#93) -
Delete::EmptyFieldGroups
(in PR#93) -
FilterRows::AllFieldsPopulated
(in PR#85) -
FilterRows::AnyFieldsPopulated
(in PR#85) -
FilterRows::WithLambda
(in PR#85) -
Merge::ConstantValues
(in PR#84) -
Replace::EmptyFieldValues
(in PR#93) -
Reshape::FieldsToFieldGroupWithConstant
(in PR#93) -
Warn::UnevenFields
(in PR#93)
-
-
stripextra
csv converter to do aggressive stripping of csv field values, without converting 'NULL' strings tonilValue
s. In PR#91 -
ignore_case
parameter toFilterRows::FieldMatchRegexp
transform. Defaults tofalse
for backward compatibility. In PR#85
-
BUGFIX:
Utils::Lookup::RowSorter
no longer fails if all rows given to sort have blank values. In PR#93 -
BUGFIX:
Clean::EmptyFieldGroups
was broken ifsep
=|
anduse_nullvalue
=true
. In PR#93 -
BUGFIX: No longer runs the same dependency job multiple times. In PR#90
-
In
Merge::ConstantValueConditional
transform, lambda Proc is passed in ascondition
, rather thanconditions
. In PR#88 -
If source data is an ISO 3166 code,
Cspace::AddressCountry
passes that value through to target. Adds some more lookup keys to support client data set. In PR#87 -
Merge::ConstantValue
warns (once per transform) iftarget
is an existing field containing any data. In PR#84 -
BUGFIX:
RowSorter
checks for presence ofsortfield
and raises error if it doesn’t exist, rather than trying to proceed and blowing up. In PR#83
-
Removes Hash
conditions
parameter andsep
parameter fromMerge::ConstantValueConditional
transform, replacing with lambda Proccondition
parameter. In PR#88
-
Deprecates
Helpers.delim_only?
, replacing withHelpers::DelimOnlyChecker
service class. In PR#93 -
Deprecates
Clean::DelimiterOnlyFields
, replacing withDelete::DelimiterOnlyFieldValues
. In PR#93 -
Deprecates
Reshape::CollapseMultipleFieldsToOneTypedFieldPair
, replacing withCollapse::FieldsToTypedFieldPair
. In PR#93 -
Deprecates
CombineValues::AcrossFieldGroup
, replacing withCollapse::FieldsWithCustomFieldmap
. In PR#93 -
Deprecates
FilterRows::FieldValueGreaterThan
. In PR#86
-
Count::MatchingRowsInLookup
previously returned Integers. Now it defaults to returning Strings, since many of the transforms assume all field values will be strings. If you were callingCount::MatchingRowsInLookup
in a job and working with the integer result as an integer within that job, this will be a breaking change. In PR#69
-
Lookup::RowSorter
class and the ability to pass it in as an argument toMerge::MultiRowLookup
transform to explicitly control the order in which matching rows are merged. In PR#82 -
Ability to pass in a Lambda as a
conditions
argument on transforms. This provides a more straightforward and infinitely flexible alternative to the horrible, poorly documented Hash expression of conditions. In PR#82 -
Add
Rename::Fields
transform. In PR#75 -
Add
Name::SplitInverted
andName::ConvertInvertedToDirectForm
transforms. In PR#74 -
Add
Allable
mixin module for transforms that acceptfields: :all
. In PR#73 -
Add
Cspace::AddressCountry
transform. In PR#72. Made more configurable in PR#75 -
Add
null_placeholder
parameter toMerge::MultiRowLookup
, which will replace any blank values in merged field values with the given string. Useful for building repeating field groups in CollectionSpace migrations. In PR#70
-
Raise
LookupTypeError
whenMerge::MultiRowLookup
is called withlookup
parameter that is not a Hash. In PR#81 -
Improved exception handling when
MissingDependencyError
is raised. In PR#80 -
Improved error message for
Copy::Field
. In PR#78 -
Add improved error handling in jobs when a transform raises a
Kiba::Extend::Error
. In PR#77. -
Improved exception handling when
KeyNotRegisteredError
is raised, as per GH#64. In PR#79 -
More informative error message if you pass in a non-existent
using
hash when callingDeduplicate::Flag
transform. In PR#76 -
Rename::Field
now warns if theto
field already exists and will be overwritten. In PR#75 -
Use zeitwerk for autoloading. In PR#75. Bugfix for use in projects implemented in PR#76 via eager autoload.
-
Make
Delete::EmptyFieldValues
Allable
. In PR#73 -
If given an "existing" field that does not exist,
Rename::Field
transform will warn about it, but not throw an exception. This supports building reusable jobs where the data may be slightly different from use to use. In PR#71 -
BUGFIX:
Clean::RegexpFindReplaceFieldVals
now skips non-string field values instead of trying to call:gsub
on them and failing withNoMethodError
. In PR#68
-
When setting up a file registry hash,
creator
may be aHash
if you need to pass keyword arguments to your job. See File registry entry reference for more info and examples. In PR#67 -
When setting up a file registry hash,
creator
may be aModule
if the relevant job is a private instance method named with the configureddefault_job_method_name
(The default is:job
). See File registry entry reference for more info and examples. In PR#67 -
default_job_method_name
config setting. In PR#67 -
Fingerprint::Add
andFingerprint::Decode
transforms. In PR#65 -
override_app_delim_check
param toFingerprint::Add
for backward compatibility with a project I want to be able to use this transform. Defaults tofalse
. PR#66
-
Kiba::Extend::Utils::MultiSourceNormalizer
andKiba::Extend::Jobs::MultiSourcePrepJob
to handle normalization of fields across multiple sources to be used in a multiple-source job with aKiba::Extend::Destinations::CSV
destination (in PR#60) -
explicit_no
argument toKiba::Extend::Transforms::Deduplicate::Flag
. Defaults totrue
for backward compatibility (in PR#60) -
amazing_print
dependency (in PR#61)
-
mvdelim
keyword argument removed fromPrepend::ToFieldValue
, and replaced bymultival
anddelim
-
Changes to keyword argument names for
Delete::FieldValueIfEqualsOtherField
(in PR#57)-
sep
becomesdelim
-
case_sensitive
becomescasesensitive
-
-
multival
parameter added toCspace::NormalizeForID
transform (in PR#49) -
new
Count::FieldValues
transform (in PR#50) -
new
Append::ConvertedValueAndUnit
transform (in PR#51) -
preparation of the file registry:
-
test Clean::RegexpFindReplaceFieldVals to replace
\n
(in PR#55) -
Helpers.empty?
method, which returns true/false for a given string value (without treating delimiter values as special) (in PR#57) -
fields
keyword argument toDelete::FieldsExcept
, which should be used going forward instead ofkeepfields
(in PR#57) -
nullvalue
setting toKiba::Extend.config
. Default value is '%NULLVALUE%' (in PR#57) -
usenull
keyword argument toDelete::EmptyFieldValues
(in PR#57) -
delim
keyword argument toDelete::EmptyFieldValues
, which should be used going forward instead ofsep
(in PR#57) -
documentation for
Delete
transforms (in PR#57) -
Delete::BlankFields
transform (in PR#57)
-
move/alias
Merge::CountOfMatchingRows
toCount::MatchingRowsInLookup
(in PR#50) -
Delete::FieldsExcept
can accept a single symbol as value forfields
keyword argument (in PR#57) -
Delete::EmptyFieldValues
will default toKiba::Extend.delim
as delimiter if none given explicitly (in PR#57) -
keyword argument names for
Delete::FieldValueIfEqualsOtherField
(in PR#57)-
sep
becomesdelim
-
case_sensitive
becomescasesensitive
-