class Tweezer::Gem

Attributes

groups[W]
name[R]
path[RW]
version[RW]

Public Class Methods

gem_node?(node) click to toggle source
# File lib/tweezer/gem.rb, line 34
def self.gem_node?(node)
  node.children[1] == :gem
end
new(node_or_name, opts = {}) click to toggle source
# File lib/tweezer/gem.rb, line 5
def initialize(node_or_name, opts = {})
  return init_from_node(node_or_name) if node_or_name.is_a?(
    Parser::AST::Node)

  @name = node_or_name
  alter!(opts)
end

Public Instance Methods

==(other) click to toggle source
# File lib/tweezer/gem.rb, line 29
def ==(other)
  name == other.name &&
    version == other.version
end
alter!(opts) click to toggle source
# File lib/tweezer/gem.rb, line 13
def alter!(opts)
  @version = opts[:version]
  @groups = opts[:groups]
  @path = opts[:path]
  @opts = opts
end
groups() click to toggle source
# File lib/tweezer/gem.rb, line 42
def groups
  @groups ||= []
end
to_node() click to toggle source
# File lib/tweezer/gem.rb, line 20
def to_node
  args = [nil, :gem, s(:str, name)]
  args << s(:str, version) if version
  opts_node = opts_to_node
  args << opts_node if opts_node

  Parser::AST::Node.new(:send, args)
end

Private Instance Methods

check_node!(node) click to toggle source
# File lib/tweezer/gem.rb, line 96
def check_node!(node)
  return if self.class.gem_node?(node)
  fail ArgumentError, "Not a call to `gem`: #{node.inspect}"
end
groups_from_node(node) click to toggle source
# File lib/tweezer/gem.rb, line 81
def groups_from_node(node)
  return [] unless node
  case node.type
  when :sym then [node.children[0]]
  when :array then node.children.flat_map(&:children)
  else fail ArgumentError
  end
end
groups_to_node() click to toggle source

rubocop:enable Metrics/AbcSize

# File lib/tweezer/gem.rb, line 63
def groups_to_node
  s(:pair,
    s(:sym, :group),
    if groups.length == 1
      s(:sym, groups[0])
    else
      s(:array, groups.map { |g| s(:sym, g) })
    end)
end
init_from_node(node) click to toggle source

rubocop:disable Metrics/AbcSize

# File lib/tweezer/gem.rb, line 49
def init_from_node(node)
  check_node!(node)
  arguments = node.children[2..-1]
  opts = arguments.pop if arguments[-1].type == :hash

  @name = arguments[0].children[0]
  @version = arguments[1].children[0] if arguments[1]

  opts_h = unparse_hash_node(opts)
  @groups = groups_from_node(opts_h[:group])
  @path = path_from_node(opts_h[:path])
end
opts_to_node() click to toggle source
# File lib/tweezer/gem.rb, line 73
def opts_to_node
  pairs = []
  pairs << groups_to_node unless groups.empty?
  pairs << s(:pair, s(:sym, :path), s(:str, path)) if path
  return if pairs.empty?
  s(:hash, *pairs)
end
path_from_node(node) click to toggle source
# File lib/tweezer/gem.rb, line 90
def path_from_node(node)
  return unless node
  fail ArgumentError unless node.type == :str
  node.children.first
end