0.0
Inventory
Inventory keeps track of the contents of your Ruby¹ projects. Such an
inventory can be used to load the project, create gem specifications and
gems, run unit tests, compile extensions, and verify that the project’s
content is what you think it is.
¹ See http://ruby-lang.org/
§ Usage
Let’s begin by discussing the project structure that Inventory expects you
to use. It’s pretty much exactly the same as the standard Ruby project
structure¹:
├── README
├── Rakefile
├── lib
│ ├── foo-1.0
│ │ ├── bar.rb
│ │ └── version.rb
│ └── foo-1.0.rb
└── test
└── unit
├── foo-1.0
│ ├── bar.rb
│ └── version.rb
└── foo-1.0.rb
Here you see a simplified version of a project called “Foo”’s project
structure. The only real difference from the standard is that the main
entry point into the library is named “foo-1.0.rb” instead of “foo.rb” and
that the root sub-directory of “lib” is similarly named “foo-1.0” instead
of “foo”. The difference is the inclusion of the API version. This must
be the major version of the project followed by a constant “.0”. The
reason for this is that it allows concurrent installations of different
major versions of the project and means that the wrong version will never
accidentally be loaded with require.
There’s a bigger difference in the content of the files.
‹Lib/foo-1.0/version.rb› will contain our inventory instead of a String:
require 'inventory-1.0'
class Foo
Version = Foo.new(1, 4, 0){
authors{
author 'A. U. Thor', 'a.u.thor@example.org'
}
homepage 'http://example.org/'
licenses{
license 'LGPLv3+',
'GNU Lesser General Public License, version 3 or later',
'http://www.gnu.org/licenses/'
}
def dependencies
super + Dependencies.new{
development 'baz', 1, 3, 0
runtime 'goo', 2, 0, 0
optional 'roo-loo', 3, 0, 0, :feature => 'roo-loo'
}
end
def package_libs
%w[bar.rb]
end
}
end
We’re introducing quite a few concepts at once, and we’ll look into each in
greater detail, but we begin by setting the ‹Version› constant to a new
instance of an Inventory with major, minor, and patch version atoms 1, 4,
and 0. Then we add a couple of dependencies and list the library files
that are included in this project.
The version numbers shouldn’t come as a surprise. These track the version
of the API that we’re shipping using {semantic versioning}². They also
allow the Inventory#to_s method to act as if you’d defined Version as
‹'1.4.0'›.
Next follows information about the authors of the project, the project’s
homepage, and the project’s licenses. Each author has a name and an email
address. The homepage is simply a string URL. Licenses have an
abbreviation, a name, and a URL where the license text can be found.
We then extend the definition of ‹dependencies› by adding another set of
dependencies to ‹super›. ‹Super› includes a dependency on the version of
the inventory project that’s being used with this project, so you’ll never
have to list that yourself. The other three dependencies are all of
different kinds: development, runtime, and optional. A development
dependency is one that’s required while developing the project, for
example, a unit-testing framework, a documentation generator, and so on.
Runtime dependencies are requirements of the project to be able to run,
both during development and when installed. Finally, optional dependencies
are runtime dependencies that may or may not be required during execution.
The difference between runtime and optional is that the inventory won’t try
to automatically load an optional dependency, instead leaving that up to
you to do when and if it becomes necessary. By that logic, runtime
dependencies will be automatically loaded, which is a good reason for
having dependency information available at runtime.
The version numbers of dependencies also use semantic versioning, but note
that the patch atom is ignored unless the major atom is 0. You should
always only depend on the major and minor atoms.
As mentioned, runtime dependencies will be automatically loaded and the
feature they try to load is based on the name of the dependency with a
“-X.0” tacked on the end, where ‘X’ is the major version of the dependency.
Sometimes, this isn’t correct, in which case the :feature option may be
given to specify the name of the feature.
You may also override other parts of a dependency by passing in a block to
the dependency, much like we’re doing for inventories.
The rest of an inventory will list the various files included in the
project. This project only consists of one additional file to those that
an inventory automatically include (Rakefile, README, the main entry point,
and the version.rb file that defines the inventory itself), namely the
library file ‹bar.rb›. Library files will be loaded automatically when the
main entry point file loads the inventory. Library files that shouldn’t be
loaded may be listed under a different heading, namely “additional_libs”.
Both these sets of files will be used to generate a list of unit test files
automatically, so each library file will have a corresponding unit test
file in the inventory. We’ll discuss the different headings of an
inventory in more detail later on.
Now that we’ve written our inventory, let’s set it up so that it’s content
gets loaded when our main entry point gets loaded. We add the following
piece of code to ‹lib/foo-1.0.rb›:
module Foo
load File.expand_path('../foo-1.0/version.rb', __FILE__)
Version.load
end
That’s all there’s to it.
The inventory can also be used to great effect from a Rakefile using a
separate project called Inventory-Rake³. Using it’ll give us tasks for
cleaning up our project, compiling extensions, installing dependencies,
installing and uninstalling the project itself, and creating and pushing
distribution files to distribution points.
require 'inventory-rake-1.0'
load File.expand_path('../lib/foo-1.0/version.rb', __FILE__)
Inventory::Rake::Tasks.define Foo::Version
Inventory::Rake::Tasks.unless_installing_dependencies do
require 'lookout-rake-3.0'
Lookout::Rake::Tasks::Test.new
end
It’s ‹Inventory::Rake::Tasks.define› that does the heavy lifting. It takes
our inventory and sets up the tasks mentioned above.
As we want to be able to use our Rakefile to install our dependencies for
us, the rest of the Rakefile is inside the conditional
#unless_installing_dependencies, which, as the name certainly implies,
executes its block unless the task being run is the one that installs our
dependencies. This becomes relevant when we set up Travis⁴ integration
next. The only conditional set-up we do in our Rakefile is creating our
test task via Lookout-Rake⁵, which also uses our inventory to find the unit
tests to run when executed.
Travis integration is straightforward. Simply put
before_script:
- gem install inventory-rake -v '~> VERSION' --no-rdoc --no-ri
- rake gem:deps:install
in the project’s ‹.travis.yml› file, replacing ‹VERSION› with the version
of Inventory-Rake that you require. This’ll make sure that Travis installs
all development, runtime, and optional dependencies that you’ve listed in
your inventory before running any tests.
You might also need to put
env:
- RUBYOPT=rubygems
in your ‹.travis.yml› file, depending on how things are set up.
¹ Ruby project structure: http://guides.rubygems.org/make-your-own-gem/
² Semantic versioning: http://semver.org/
³ Inventory-Rake: http://disu.se/software/inventory-rake-1.0/
⁴ Travis: http://travis-ci.org/
⁵ Lookout-Rake: http://disu.se/software/lookout-rake-3.0/
§ API
If the guide above doesn’t provide you with all the answers you seek, you
may refer to the API¹ for more answers.
¹ See http://disu.se/software/inventory-1.0/api/Inventory/
§ Financing
Currently, most of my time is spent at my day job and in my rather busy
private life. Please motivate me to spend time on this piece of software
by donating some of your money to this project. Yeah, I realize that
requesting money to develop software is a bit, well, capitalistic of me.
But please realize that I live in a capitalistic society and I need money
to have other people give me the things that I need to continue living
under the rules of said society. So, if you feel that this piece of
software has helped you out enough to warrant a reward, please PayPal a
donation to now@disu.se¹. Thanks! Your support won’t go unnoticed!
¹ Send a donation:
https://www.paypal.com/cgi-bin/webscr?cmd=_donations&business=now@disu.se&item_name=Inventory
§ Reporting Bugs
Please report any bugs that you encounter to the {issue tracker}¹.
¹ See https://github.com/now/inventory/issues
§ Authors
Nikolai Weibull wrote the code, the tests, the documentation, and this
README.
§ Licensing
Inventory is free software: you may redistribute it and/or modify it under
the terms of the {GNU Lesser General Public License, version 3}¹ or later²,
as published by the {Free Software Foundation}³.
¹ See http://disu.se/licenses/lgpl-3.0/
² See http://gnu.org/licenses/
³ See http://fsf.org/
2005
2006
2007
2008
2009
2010
2011
2012
2013
2014
2015
2016
2017
2018
2019
2020
2021
2022
2023
2024
Activity
0.0
This Jekyll plugin creates paypal Encrypted Web Payments buttons and encrypts them at build time so items in your store cannot have their prices or other attributes changed in Inspect Element
2005
2006
2007
2008
2009
2010
2011
2012
2013
2014
2015
2016
2017
2018
2019
2020
2021
2022
2023
2024
0.0
This library enables developers to execute Paypal APIs on behalf of merchants.
2005
2006
2007
2008
2009
2010
2011
2012
2013
2014
2015
2016
2017
2018
2019
2020
2021
2022
2023
2024
Activity
0.0
Based on the PayPal card puzzle described at http://www.quora.com/What-s-the-hardest-puzzle-question-asked-at-PayPal
2005
2006
2007
2008
2009
2010
2011
2012
2013
2014
2015
2016
2017
2018
2019
2020
2021
2022
2023
2024
Activity
0.0
This gem will Add an engine to handle loging in with paypal,
getting user info and logging out again.
2005
2006
2007
2008
2009
2010
2011
2012
2013
2014
2015
2016
2017
2018
2019
2020
2021
2022
2023
2024
Activity
0.0
To aid Cameroon businesses to make both national and
international payments using MTN and Orange Mobile Money, Paypal, Credit Card and Express Union.
2005
2006
2007
2008
2009
2010
2011
2012
2013
2014
2015
2016
2017
2018
2019
2020
2021
2022
2023
2024
Activity
0.0
YARD-Value
YARD-Value provides YARD¹ handlers for Value² objects. It’ll document
whether the Value is Comparable and what attributes are used in such
comparisons, its #initialize method, and its protected accessors.
¹ See http://yardoc.org/
² See http://disu.se/software/value-1.0/
You add the documentation to the Module#Value invocation. Any ‹@param› tags
are used both for the parameters to the #initialize method and for the
protected accessors.
This
class Point
# A point on a plane.
# @param [Integer] x
# @param [Integer] y
Value :x, :y
end
generates documentation similar to
class Point
# A point on a plane.
# @param [Integer] x
# @param [Integer] y
def initialize(x, y)
end
and this
class Point
# A point on a plane.
# @param [Integer] x The x coordinate of the receiver
# @param [Integer] y The y coordinate of the receiver
Value :x, :y
end
generates documentation similar to
class Point
# A point on a plane.
# @param [Integer] x
# @param [Integer] y
def initialize(x, y)
protected
# @return [Integer] The x coordinate of the receiver
attr_reader :x
# @return [Integer] The y coordinate of the receiver
attr_reader :y
end
For comparable Values, a note is added about what attributes are used in the
comparison. This
class Point
# A point on a plane.
# @param [Integer] x
# @param [Integer] y
Value :x, :y, :comparable => true
end
is similar to
class Point
# A point on a plane.
# @param [Integer] x
# @param [Integer] y
# @note Comparisons between instances are made between x and y.
def initialize(x, y)
end
§ Usage
Add ‹--plugin yard-value-1.0› to your YARD command line. If you’re
using Inventory-Rake-Tasks-YARD¹, add the following to your Rakefile:
Inventory::Rake::Tasks::YARD.new do |t|
t.options += %w'--plugin yard-value-1.0'
end
¹ See http://disu.se/software/inventory-rake-tasks-yard-1.0/
§ Financing
Currently, most of my time is spent at my day job and in my rather busy
private life. Please motivate me to spend time on this piece of software
by donating some of your money to this project. Yeah, I realize that
requesting money to develop software is a bit, well, capitalistic of me.
But please realize that I live in a capitalistic society and I need money
to have other people give me the things that I need to continue living
under the rules of said society. So, if you feel that this piece of
software has helped you out enough to warrant a reward, please PayPal a
donation to now@disu.se¹. Thanks! Your support won’t go unnoticed!
¹ Send a donation:
https://www.paypal.com/cgi-bin/webscr?cmd=_donations&business=now@disu.se&item_name=YARD-Value
§ Reporting Bugs
Please report any bugs that you encounter to the {issue tracker}¹.
¹ See https://github.com/now/yard-value/issues
§ Authors
Nikolai Weibull wrote the code, the tests, and this README.
§ Licensing
YARD-Value is free software: you may redistribute it and/or modify it under
the terms of the {GNU Lesser General Public License, version 3}¹ or later²,
as published by the {Free Software Foundation}³.
¹ See http://disu.se/licenses/lgpl-3.0/
² See http://gnu.org/licenses/
³ See http://fsf.org/
2005
2006
2007
2008
2009
2010
2011
2012
2013
2014
2015
2016
2017
2018
2019
2020
2021
2022
2023
2024
Activity
0.0
Bridging PayPal Webhooks to RabbitMQ
2005
2006
2007
2008
2009
2010
2011
2012
2013
2014
2015
2016
2017
2018
2019
2020
2021
2022
2023
2024
0.0
Value
Value is a library for defining immutable value objects in Ruby. A value
object is an object whose equality to other objects is determined by its
value, not its identity, think dates and amounts of money. A value object
should also be immutable, as you donΓÇÖt want the date ΓÇ£2013-04-22ΓÇ¥ itself to
change but the current date to change from ΓÇ£2013-04-22ΓÇ¥ to ΓÇ£2013-04-23ΓÇ¥.
That is, you donΓÇÖt want entries in a calendar for 2013-04-22 to move to
2013-04-23 simply because the current date changes from 2013-04-22 to
2013-04-23.
A value object consists of one or more attributes stored in instance
variables. Value sets up an #initialize method for you that letΓÇÖs you set
these attributes, as, value objects being immutable, thisΓÇÖll be your only
chance to do so. Value also adds equality checks ‹#==› and ‹#eql?› (which
are themselves equivalent), a ‹#hash› method, a nice ‹#inspect› method, and a
protected attribute reader for each attribute. You may of course add any
additional methods that your value object will benefit from.
ThatΓÇÖs basically all thereΓÇÖs too it. LetΓÇÖs now look at using the Value
library.
§ Usage
You create value object class by invoking ‹#Value› inside the class
(module) you wish to make into a value object class. LetΓÇÖs create a class
that represent points on a plane:
class Point
Value :x, :y
end
A ‹Point› is thus a value object consisting of two sub-values ‹x› and ‹y›
(the coordinates). Just from invoking ‹#Value›, a ‹Point› object will have
a constructor that takes two arguments to set instance variables ‹@x› and
‹@y›, equality checks ‹#==› and ‹#eql?› (which are the same), a ‹#hash›
method, a nice ‹#inspect› method, and two protected attribute readers ‹#x›
and ‹#y›. We can thus already creat ‹Point›s:
origo = Point.new(0, 0)
The default of making the attribute readers protected is often good
practice, but for a ‹Point› it probably makes sense to be able to access
its coordinates:
class Point
public(*attributes)
end
This’ll make all attributes of ‹Point› public. You can of course choose to
only make certain attributes public:
class Point
public :x
end
Note that this public is standard Ruby functionality. Adding a method to
‹Point› is of course also possible and very much Rubyish:
class Point
def distance(other)
Math.sqrt((other.x - x)**2 + (other.y - y)**2)
end
end
For some value object classes you might want to support optional
attributes. This is done by providing a default value for the attribute,
like so:
class Money
Value :amount, [:currency, :USD]
end
Here, the ‹currency› attribute will default to ‹:USD›. You can create
‹Money› via
dollars = Money.new(2)
but also
kronor = Money.new(2, :SEK)
All required attributes must come before any optional attributes.
Splat attributes are also supported:
class List
Value :'*elements'
end
empty = List.new
suits = List.new(:spades, :hearts, :diamonds, :clubs)
Splat attributes are optional.
Finally, block attributes are also available:
class Block
Value :'&block'
end
block = Block.new{ |e| e * 2 }
Block attributes are optional.
Comparison beyond ‹#==› is possible by specifingy the ‹:comparable› option
to ‹#Value›, listing one or more attributes that should be included in the
comparison:
class Vector
Value :a, :b, :comparable => :a
end
Note that equality (‹#==› and ‹#eql?›) is always defined based on all
attributes, regardless of arguments to ‹:comparable›.
Here we say that comparisons between ‹Vector›s should be made between the
values of the ‹a› attribute only. We can also make comparisons between all
attributes of a value object:
class Vector
Value :a, :b, :comparable => true
end
To sum things up, let’s use all possible arguments to ‹#Value› at once:
class Method
Value :file, :line, [:name, 'unnamed'], :'*args', :'&block',
:comparable => [:file, :line]
end
A ‹Method› consists of file and line information, a possible name, some
arguments, possibly a block, and is comparable on the file and line on
which they appear.
Check out the {full API documentation}┬╣ for a more explicit description,
should you need it or should you want to extend it.
┬╣ See http://disu.se/software/value/api/
§ Financing
Currently, most of my time is spent at my day job and in my rather busy
private life. Please motivate me to spend time on this piece of software
by donating some of your money to this project. Yeah, I realize that
requesting money to develop software is a bit, well, capitalistic of me.
But please realize that I live in a capitalistic society and I need money
to have other people give me the things that I need to continue living
under the rules of said society. So, if you feel that this piece of
software has helped you out enough to warrant a reward, please PayPal a
donation to now@disu.se┬╣. Thanks! Your support wonΓÇÖt go unnoticed!
┬╣ Send a donation:
https://www.paypal.com/cgi-bin/webscr?cmd=_donations&business=now%40disu%2ese&item_name=Value
§ Reporting Bugs
Please report any bugs that you encounter to the {issue tracker}┬╣.
┬╣ See https://github.com/now/value/issues
§ Authors
Nikolai Weibull wrote the code, the tests, the manual pages, and this
README.
§ Licensing
Value is free software: you may redistribute it and/or modify it under the
terms of the {GNU Lesser General Public License, version 3}┬╣ or later┬▓, as
published by the {Free Software Foundation}┬│.
┬╣ See http://disu.se/licenses/lgpl-3.0/
┬▓ See http://gnu.org/licenses/
┬│ See http://fsf.org/
2005
2006
2007
2008
2009
2010
2011
2012
2013
2014
2015
2016
2017
2018
2019
2020
2021
2022
2023
2024
Activity
0.0
Inventory-Rake-Tasks-YARD
Inventory-Rake-Tasks-YARD provides Rake┬╣ tasks for YARD┬▓ using your
Inventory┬│.
┬╣ See http://rake.rubyforge.org/
┬▓ See http://yardoc.org/
┬│ See http://disu.se/software/inventory/
§ Installation
Install Inventory-Rake-Tasks-YARD with
% gem install inventory-rake-tasks-yard
§ Usage
Include the following code in your ‹Rakefile› (assuming that you’ve already
set up Inventory-Rake┬╣:
Inventory::Rake::Tasks.unless_installing_dependencies do
require 'inventory-rake-tasks-yard-1.0'
Inventory::Rake::Tasks::YARD.new
end
ThisΓÇÖll define the following tasks:
= .yardopts (file). = Create .yardopts file; depends on the file defining
this task and Rakefile.
= html. = Generate documentation in HTML format for all lib files in the
inventory; depends on .yardopts file.
‹Inventory::Rake::Tasks::YARD› takes a couple of options, but the ones you
might want to adjust are
= :options. = The options to pass to YARD; will be passed to
`Shellwords.shelljoin`.
= :globals. = The globals to pass to YARD.
= :files. = The files to process; mainly used if you want to add additional
files to process beyond the lib files in the inventory.
The options passed to YARD will be augmented with any options you list in a
file named ‹.yardopts.task›, where ‹task› is the name of the Rake task
invoking YARD, for example, ‹.yardopts.html› for the default
HTML-generating task. You can use this to add options that are local to
your installation and should thus not be listed in the Rakefile itself.
See the {API documentation}┬▓ for more information.
┬╣ See http://disu.se/software/inventory-rake/
┬▓ See http://disu.se/software/inventory-rake-tasks-yard/api/Inventory/Rake/Tasks/YARD/
§ Financing
Currently, most of my time is spent at my day job and in my rather busy
private life. Please motivate me to spend time on this piece of software
by donating some of your money to this project. Yeah, I realize that
requesting money to develop software is a bit, well, capitalistic of me.
But please realize that I live in a capitalistic society and I need money
to have other people give me the things that I need to continue living
under the rules of said society. So, if you feel that this piece of
software has helped you out enough to warrant a reward, please PayPal a
donation to now@disu.se┬╣. Thanks! Your support wonΓÇÖt go unnoticed!
┬╣ Send a donation:
https://www.paypal.com/cgi-bin/webscr?cmd=_donations&business=now%40disu%2ese&item_name=Inventory-Rake-Tasks-YARD
§ Reporting Bugs
Please report any bugs that you encounter to the {issue tracker}┬╣.
┬╣ See https://github.com/now/inventory-rake-tasks-yard/issues
§ Authors
Nikolai Weibull wrote the code, the tests, the manual pages, and this
README.
§ Licensing
Inventory-Rake-Tasks-YARD is free software: you may redistribute it and/or
modify it under the terms of the {GNU Lesser General Public License,
version 3}┬╣ or later┬▓, as published by the {Free Software Foundation}┬│.
┬╣ See http://disu.se/licenses/lgpl-3.0/
┬▓ See http://gnu.org/licenses/
┬│ See http://fsf.org/
2005
2006
2007
2008
2009
2010
2011
2012
2013
2014
2015
2016
2017
2018
2019
2020
2021
2022
2023
2024
Activity
0.0
Inventory-Rake
Inventory-Rake provides Rake¹ tasks for your Inventory². This includes tasks
for cleaning up our project, compiling extensions, installing dependencies,
installing and uninstalling the project itself, and creating and pushing
distribution files to distribution points.
¹ See http://rake.rubyforge.org/
² See http://disu.se/software/inventory-1.0/
§ Installation
Install Inventory-Rake with
% gem install inventory-rake
§ Usage
Include the following code in your ‹Rakefile›, where ‹Package› is the
top-level module of your project:
require 'inventory-rake-3.0'
load File.expand_path('../lib/package/version.rb', __FILE__)
Inventory::Rake::Tasks.define Package::Version
Inventory::Rake::Tasks.unless_installing_dependencies do
# Any additional tasks that your project’s dependencies provide
end
‹Inventory::Rake::Tasks.define› does the heavy lifting. It takes our
inventory and sets up the tasks mentioned above. We also do some
additional customization of the gem specification.
As we want to be able to use our Rakefile to install our dependencies for
us, the rest of the Rakefile is inside the conditional
#unless_installing_dependencies, which, as the name certainly implies,
executes its block unless the task being run is the one that installs our
dependencies. This becomes relevant if we want to, for example, set up
Travis¹ integration. To do so, simply add
before_script:
- gem install inventory-rake -v '~> VERSION' --no-rdoc --no-ri
- rake gem:deps:install
to your ‹.travis.yml› file. This’ll make sure that Travis installs all
development, runtime, and optional dependencies that you’ve listed in your
inventory before running any tests.
There’s more information in the {API documentation}² that you’ll likely
want to read up on if anything is unclear.
¹ See http://travis-ci.org/
² See http://disu.se/software/inventory-rake-1.0/api/Inventory/Rake/
§ Tasks
The tasks that are created if you use Inventory-Rake are:
= check. = Check that the package meets its expectations.
= mostlyclean. = Delete targets built by rake that are ofter rebuilt.
= clean. = Delete targets built by rake; depends on mostlyclean.
= distclean. = Delete all files not meant for distribution; depends on clean.
= compile. = Compile all extensions; depends on each compile:name.
= compile:name. = Compile extension /name/; depends on
lib/path/so file.
= lib/path/so. = Installed dynamic library of extension /name/ inside
inventory path; depends on ext/name/so.
= ext/name/so. = Dynamic library of extension /name/; depends on
ext/name/Makefile and the source files of the extension.
= ext/name/Makefile. = Makefile for extension /name/; depends on inventory
path, ext/name/extconf.rb file, and ext/name/depend file. Will be
created by extconf.rb, which may take options from environment variable
name#upcase_EXTCONF_OPTIONS or ‹EXTCONF_OPTIONS› if defined.
= clean:name. = Clean files built for extension /name/; depended upon by
clean.
= spec. = Create specifications; depends on gem:spec.
= gem:spec. = Create gem specification; depends on gemspec.
= gemspec (file). = Gem specification file; depends on Rakefile, README, and
inventory path.
= dist. = Create files for distribution; depends on gem:dist.
= gem:dist. = Create gem for distribution; depends on inventory:check and gem
file.
= inventory:check. = Check that the inventory is correct by looking for files
not listed in the inventory that match the pattern and for files listed
in the inventory that don’t exist; depends on distclean.
= gem (file). = Gem file; depends on files included in gem.
= dist:check. = Check files before distribution; depends on dist and
gem:dist:check.
= gem:dist:check. = Check gem before distribution; depends on gem:dist.
= deps:install. = Install dependencies on the local system; depends on
gem:deps:install.
= gem:deps:install. = Install dependencies in ruby gem directory.
= deps:install:user. = Install dependencies for the current user; depends on
gem:deps:install:user.
= gem:deps:install:user. = Install dependencies in the user gem directory.
= install. = Install distribution files on the local system; depends on
gem:install.
= gem:install. = Install gem in ruby gem directory; depends on gem:dist.
= install:user. = Install distribution files for the current user; depends on
gem:install:user.
= gem:install:user. = Install gem in the user gem directory.
= uninstall. = Delete all files installed on the local system.
= gem:uninstall. = Uninstall gem from ruby gem directory.
= uninstall:user. = Delete all files installed for current user.
= gem:uninstall:user. = Uninstall gem from ruby gem directory.
= push. = Push distribution files to distribution hubs.
= gem:push. = Push gem to rubygems.org.
§ Financing
Currently, most of my time is spent at my day job and in my rather busy
private life. Please motivate me to spend time on this piece of software
by donating some of your money to this project. Yeah, I realize that
requesting money to develop software is a bit, well, capitalistic of me.
But please realize that I live in a capitalistic society and I need money
to have other people give me the things that I need to continue living
under the rules of said society. So, if you feel that this piece of
software has helped you out enough to warrant a reward, please PayPal a
donation to now@disu.se¹. Thanks! Your support won’t go unnoticed!
¹ Send a donation:
https://www.paypal.com/cgi-bin/webscr?cmd=_donations&business=now@disu.se&item_name=Inventory-Rake
§ Reporting Bugs
Please report any bugs that you encounter to the {issue tracker}¹.
¹ See https://github.com/now/inventory-rake/issues
§ Authors
Nikolai Weibull wrote the code, the tests, the manual pages, and this
README.
§ Licensing
Inventory-Rake is free software: you may redistribute it and/or modify it
under the terms of the {GNU Lesser General Public License, version 3}¹ or
later², as published by the {Free Software Foundation}³.
¹ See http://disu.se/licenses/lgpl-3.0/
² See http://gnu.org/licenses/
³ See http://fsf.org/
2005
2006
2007
2008
2009
2010
2011
2012
2013
2014
2015
2016
2017
2018
2019
2020
2021
2022
2023
2024
Activity
0.0
alpha - currently covers part of payments pro and all of mass pay
2005
2006
2007
2008
2009
2010
2011
2012
2013
2014
2015
2016
2017
2018
2019
2020
2021
2022
2023
2024
Activity
0.0
Express checkout using ActiveMerchant Paypal API.
2005
2006
2007
2008
2009
2010
2011
2012
2013
2014
2015
2016
2017
2018
2019
2020
2021
2022
2023
2024
Activity