Class: Ji2p::Package::Gemset

Inherits:
Object
  • Object
show all
Defined in:
lib/ji2p/package/gemfile.rb

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initializeGemset

Returns a new instance of Gemset.



94
95
96
97
98
99
# File 'lib/ji2p/package/gemfile.rb', line 94

def initialize
  @sources = []      # list of urls
  @gems = []         # list of Gem class
  @gems_by_name = {} # hash of name => Gem
  @gemspec = {}      # gemspec is a options hash
end

Instance Attribute Details

#gemsObject

Returns the value of attribute gems.



92
93
94
# File 'lib/ji2p/package/gemfile.rb', line 92

def gems
  @gems
end

#gemspecObject

Returns the value of attribute gemspec.



92
93
94
# File 'lib/ji2p/package/gemfile.rb', line 92

def gemspec
  @gemspec
end

#sourcesObject

Returns the value of attribute sources.



92
93
94
# File 'lib/ji2p/package/gemfile.rb', line 92

def sources
  @sources
end

Instance Method Details

#add_gem(_gem) ⇒ Object

Raises:

  • GemfileError if gem already exists



111
112
113
114
115
# File 'lib/ji2p/package/gemfile.rb', line 111

def add_gem(_gem)
  raise(GemfileError, "duplicate gem #{_gem.name}") if find_gem(_gem.name)
  @gems << _gem
  @gems_by_name[_gem.name.downcase] = _gem
end

#copyObject

deep clone self



149
150
151
# File 'lib/ji2p/package/gemfile.rb', line 149

def copy
  Marshal.load(Marshal.dump(self))
end

#find_gem(name) ⇒ Gem

Returns found gem or nil if not found.

Returns:

  • (Gem)

    found gem or nil if not found



106
107
108
# File 'lib/ji2p/package/gemfile.rb', line 106

def find_gem(name)
  @gems_by_name[name.downcase]
end

#overwrite_gem(_gem) ⇒ Object

update existing or add new



131
132
133
134
135
136
137
138
# File 'lib/ji2p/package/gemfile.rb', line 131

def overwrite_gem(_gem)
  if old = find_gem(_gem.name)
    @gems[@gems.index(old)] = _gem
  else
    @gems << _gem
  end
  @gems_by_name[_gem.name.downcase] = _gem
end

#remove_gem(name) ⇒ Gem

Returns removed gem or nil if not found.

Returns:

  • (Gem)

    removed gem or nil if not found



141
142
143
144
145
146
# File 'lib/ji2p/package/gemfile.rb', line 141

def remove_gem(name)
  if _gem = @gems_by_name.delete(name.downcase)
    @gems.delete_at(@gems.index(_gem))
  end
  _gem
end

#to_sObject



101
102
103
# File 'lib/ji2p/package/gemfile.rb', line 101

def to_s
  [sources_to_s, gemspec_to_s, gems_to_s].select{|s| !s.empty?}.join("\n") + "\n"
end

#update_gem(_gem) ⇒ Object

update existing or add new



118
119
120
121
122
123
124
125
126
127
128
# File 'lib/ji2p/package/gemfile.rb', line 118

def update_gem(_gem)
  if old = find_gem(_gem.name)
    # always overwrite requirements if specified
    old.requirements = _gem.requirements unless no_constrains?(_gem.requirements)
    # but merge options
    old.options = old.options.merge(_gem.options)
  else
    @gems << _gem
    @gems_by_name[_gem.name.downcase] = _gem
  end
end