Skip to content

HTTPS clone URL

Subversion checkout URL

You can clone with HTTPS or Subversion.

Download ZIP
More Ruby sugar - inspired by the 'zuker' project
Ruby Perl Other

Fetching latest commit…

Cannot retrieve the latest commit at this time

Failed to load latest commit information.
lib
spec
.document
.gitignore
.rspec
CHANGELOG.md
Gemfile
LICENSE
README.textile
Rakefile
VERSION
sugar-high.gemspec

README.textile

Sugar high!

Inspired by the ‘zucker’ project.

Install

gem install sugar-high

Usage

See specs for example use

Update Aug 21, 2011

Extracted file_mutate and sweetloader gems.

Sugar packs

  • alias
  • arguments
  • array
  • blank
  • class_ext
  • delegate (extracted from Active Support)
  • dsl
  • enumerable
  • file
  • includes
  • kind_of
  • math
  • metaclass
  • methods
  • module
  • not
  • numeric
  • path
  • properties
  • reg_exp
  • rails
  • concerns

Alias

  • multi_alias name, options_hash : creates multiple aliases using patterns

Arguments

  • args (Used in generator CLI testing)
  • last_option *args : Returns last argument if hash or empty hash otherwise

Array

  • pick_one! – pick one random item
  • pink (n) – pick n random item
  • to_symbols
  • to_symbols_uniq
  • to_strings
  • flat_uniq
  • file_join

Blank

  • blank?

Class Extension

  • autoload_modules (by @stanislaw)

Makes it easy to autoload multiple modules by standard folder-to-module mapping convention

  • is_class?
  • is_module?
  • class_exists?
  • module_exists?
  • try_class
  • try_module
  • try_module_only
  • find_first_class(*class_names)
  • find_first_module(*module_names)

Note: This pack has recently been extracted into its own gem called sweet_loader

Delegate

Extracted from Active Support core extensions:

See Delegate

activesupport/lib/active_support/core_ext/module/delegation.rb

DSL

by @stanislaw

  • with(instance, *args &block)

Useful as a building block for DSLs!

with(Hash.new) do
  merge!(:a => 1)
  merge!(:b => 2)
end.should == {:a => 1, :b => 2}

with(Hash.new, :ready => true) do |options|
  ...
end

with(Hash.new, 1,2,3) do |*args|
  ...
end

Enumerable

  • only_kinds_of?(*modules)
  • only_labels?
  • select_kinds_of(*modules)
  • select_kinds_of!
  • select_labels
  • select_labels!
  • select_symbols
  • select_symbols!
  • select_uniq_symbols!
  • select_strings
  • select_strings!
  • select_only(type)
  • select_only!(type)

File

  • self.blank? and blank? : Is file empty?
  • self.overwrite : overwrite file with new content (mode = ‘w’)
  • self.append : append to existing file with content or create new (mode = ‘w+’)

Hash

  • hash_revert : Reverse keys and values
  • try_keys : return value of first key that is in Hash

Includes

  • includes : Includes modules listed as symbols

Kind of

  • any_kind_of? *const_list
  • kind_of_label? : Symbol or String ?

Metaclass

  • metaclass : Get the metaclass, can be used to dynamically add class singleton methods!

Methods

  • get_methods *types : Get collection of methods, fx :private and :protected (or :all)

Module

  • modules *names
  • nested_modules *names

Create empty namespaces

Not

  • not

Adds the #not method to Object, so you can say fx: if x.not.empty?

Numeric

module NumericCheckExt

  • is_numeric?(arg) – alias numeric?
  • check_numeric!(arg) – raises error if argument is not numeric

module NumberDslExt added to all numeric classes (Float and Numeric)

  • thousand
  • hundred
3.thousand + 2.hundred 
  => 3200

Path

  • String#path – extends String instance with PathString

module PathString

  • to_file
  • to_dir
  • to_symlink
"a/b/c".to_dir
"a/b/c/d.rb".to_file

File type existance

  • exists?
  • file?
  • dir?
  • symlink?

Navigate dirs

  • up
  • down
  • post_up
  • post_down
"a/b/c/d".up(2).should == "a/b"
"a/b/".post_up(2).should == "a/b/../../"  
"a/b/../".post_down(1).should == "a/b/"  

Properties

class CruiseShip
  extend Properties

  property :direction
  property :speed, is(0..300)
end

ship = CruiseShip.new
ship.add_direction_listener(lambda {|x| puts "Oy... someone changed the direction to #{x}"})    
ship.speed = 200
ship.speed = 301 # outside valid range!

RegExp

String, RegExp

  • to_regexp
"a, b /c".to_regexp # escapes it for reg exp!

MatchData

  • offset_after
  • offset_before

RSpec 2 Matchers

  • have_aliases(method, *alias_methods)
  require 'sugar-high/rspec'

  have_aliases :original, :alias_1, :alias2

Rails

Currently the following Rails packs are included:

  • concerns

More to follow in the future…

Concerns

require 'rails/concerns'

Useful concern pattern in order to include concern modules into Rails models (or even controllers etc.)

  • concerned_with *concern_modules
  • include_concerns *concern_modules
  • shared_concerns *concern_modules
  • include_shared_concerns *concern_modules

String

Class methods

  • random_letters
  • letters

Instance methods

  • alpha_numeric
  • insert_before_last

If not already defined

  • trim
  • concat

Note on Patches/Pull Requests

  • Fork the project.
  • Make your feature addition or bug fix.
  • Add tests for it. This is important so I don’t break it in a
    future version unintentionally.
  • Commit, do not mess with rakefile, version, or history.
    (if you want to have your own version, that is fine but bump version in a commit by itself I can ignore when I pull)
  • Send me a pull request. Bonus points for topic branches.

Copyright

Copyright © 2010 Kristian Mandrup. See LICENSE for details.

Something went wrong with that request. Please try again.