[lnkForumImage]
TotalShareware - Download Free Software

Confronta i prezzi di migliaia di prodotti.
Asp Forum
 Home | Login | Register | Search 


 

Forums >

comp.lang.ruby

Getting Gem Version from Within a Gem

fREW

7/10/2007 6:40:00 AM

Does anyone know if there is a way that I can have my program output
what version it is and get the version from the Gem that it is installed
from?

Thanks!
-fREW

--
Posted via http://www.ruby-....

11 Answers

Kuba

7/10/2007 7:33:00 AM

0

On 7/10/07, Frew Schmidt <frioux@gmail.com> wrote:
> Does anyone know if there is a way that I can have my program output
> what version it is and get the version from the Gem that it is installed
> from?

Using 'gem' , you can execute sth. like:

gem list --local | grep <your_prog_name>

but i'm not sure, is it what you expect.

Best Regards, Kuba.

fREW

7/10/2007 1:37:00 PM

0

Kuba wrote:
> On 7/10/07, Frew Schmidt <frioux@gmail.com> wrote:
>> Does anyone know if there is a way that I can have my program output
>> what version it is and get the version from the Gem that it is installed
>> from?
>
> Using 'gem' , you can execute sth. like:
>
> gem list --local | grep <your_prog_name>
>
> but i'm not sure, is it what you expect.
>
> Best Regards, Kuba.

So there's not a variable inside the program that I can access that
contains the Gem info?

--
Posted via http://www.ruby-....

fREW

7/10/2007 3:06:00 PM

0

Wayne E. Seguin wrote:
> On Jul 10, 2007, at 09:37 , Frew Schmidt wrote:
>> So there's not a variable inside the program that I can access that
>> contains the Gem info?
>
> Frew,
>
> The usual method of accessing the version of a gem from within a
> running Ruby app is:
>
> GemConstName::Version::STRING
>
> This works if the author followed convention.

I am the author of the application in question. I tested your
suggestion by doing a

>> puts GemConstName::Version::STRING

to see if it would have the variable defined by the gem system as
defined in my gemspec, but it didn't work. Is there something I need to
do to make this work?

Thanks for your help!

-fREW

--
Posted via http://www.ruby-....

Kuba

7/10/2007 3:07:00 PM

0

Frew Schmidt wrote:
> Kuba wrote:
>> On 7/10/07, Frew Schmidt <frioux@gmail.com> wrote:
>>> Does anyone know if there is a way that I can have my program output
>>> what version it is and get the version from the Gem that it is installed
>>> from?
>>
>> Using 'gem' , you can execute sth. like:
>>
>> gem list --local | grep <your_prog_name>
>>
>> but i'm not sure, is it what you expect.
>>
>> Best Regards, Kuba.
>
> So there's not a variable inside the program that I can access that
> contains the Gem info?

I think, it depends on your gems' library/program.
There is no general variable (fix me if i'm wrong).

E.g.: In module 'Inline' is defined const. VERSION, so you can print
Inline::VERSION, but 'rake' defined const. RAKEVERSION

--
Posted via http://www.ruby-....

fREW

7/10/2007 3:09:00 PM

0

> E.g.: In module 'Inline' is defined const. VERSION, so you can print
> Inline::VERSION, but 'rake' defined const. RAKEVERSION

So what I really need to do here is define a constant in a separate file
as a module and include it in the gemspec and my other code. Is that
correct?

--
Posted via http://www.ruby-....

fREW

7/10/2007 3:24:00 PM

0

Wayne E. Seguin wrote:
> On Jul 10, 2007, at 11:05 , Frew Schmidt wrote:
>> Thanks for your help!
> Frew, why yes there is!!! Thank you for clarifying the question. Tis
> simple!
>
> In lib/gem_name/version.rb place code like:
> =================================
> module GemName
> module Version
> # A method for comparing versions of required modules. It
> expects two
> # arrays as parameters, and returns true if the first is no more
> than the
> # second.
> def self.check(expected, actual) #:nodoc:
> good = false
> if actual[0] > expected[0]
> good = true
> elsif actual[0] == expected[0]
> if actual[1] > expected[1]
> good = true
> elsif actual[1] == expected[1] && actual[2] >= expected[2]
> good = true
> end
> end
>
> good
> end
>
> MAJOR = 0
> MINOR = 1
> TINY = 2
>
> STRING = [MAJOR, MINOR, TINY].join(".")
>
> SSH_REQUIRED = [1,0,10]
> SFTP_REQUIRED = [1,1,0]
> end
> end
> =================================
>
> Then require the version file in one of the main entry point files:
>
> require "lib/gem_name/version"
>
> Hope this helps! Gems are so much fun to develop.

Ok, I want to ensure that I am doing this the correct way, so is this
right?

lib/delish/version.rb
=====================
module Delish

module Version
MAJOR = 0
MINOR = 7
TINY = 9

STRING = [MAJOR, MINOR, TINY].join(".")
end

end
=====================

--
Posted via http://www.ruby-....

fREW

7/10/2007 3:38:00 PM

0

> Looks correct to me. You still might want to provide the check method
> as it provides an interface for versioning checks.
>
> So now you should be able to report the version from within your app
> via:
> Delish::Version::STRING

So if I did end up using the check method would I do something like this


Delish::Version::check(GTK::Version, Delish::Version::GTK_VERSION)
# Some gtk code here

Or something like that?

What's the use of this if the gemspec already has dependencies like
this?

Thanks again for your help!

-fREW

--
Posted via http://www.ruby-....

Eric Hodel

7/10/2007 3:52:00 PM

0

On Jul 10, 2007, at 08:24, Frew Schmidt wrote:
> Ok, I want to ensure that I am doing this the correct way, so is this
> right?
>
> lib/delish/version.rb
> =====================
> module Delish
>
> module Version
> MAJOR = 0
> MINOR = 7
> TINY = 9
>
> STRING = [MAJOR, MINOR, TINY].join(".")
> end
>
> end

UGH!

KISS, or employ YAGNI.

module Delish

VERSION = '0.7.9'

end

You don't need major/minor/tiny.

--
Poor workers blame their tools. Good workers build better tools. The
best workers get their tools to do the work for them. -- Syndicate Wars



Eric Hodel

7/10/2007 3:55:00 PM

0

On Jul 9, 2007, at 23:40, Frew Schmidt wrote:

> Does anyone know if there is a way that I can have my program output
> what version it is and get the version from the Gem that it is
> installed
> from?

Gem.loaded_specs.map do |n,s| s.full_name end

Better to just have a VERSION constant somewhere, though.

--
Poor workers blame their tools. Good workers build better tools. The
best workers get their tools to do the work for them. -- Syndicate Wars



Ryan Davis

7/11/2007 1:01:00 AM

0


On Jul 9, 2007, at 23:40 , Frew Schmidt wrote:

> Does anyone know if there is a way that I can have my program output
> what version it is and get the version from the Gem that it is
> installed
> from?

invert!

Have your program know what its version is and have your gemspec ask it:

=== lib/blah.rb

class Blah
VERSION = "1.2.3"
# ...
end

=== Rakefile

require 'rubygems'
require 'hoe'

require './lib/blah.rb'

Hoe.new("Blah", Blah::VERSION) do |p| # this builds the gemspec and
defines a lot of commands
# ...
end