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