The service provided by Consileon was professional and comprehensive with a very good understanding of our needs and constrains.

Wolfgang Hafenmayer, Managing partner, LGT Venture Philanthropy

Technical quality of staff offered, capability of performing various project roles, as well as motivation and dedication to the project (... [...]

dr Walter Benzing, Head of development B2O, net mobile AG

Technical quality of staff offered, capability of performing roles of developers, lead developers, trainers, team leaders, architects as wel [...]

Karl Lohmann, Itellium Systems & Services GmbH

Firma Consileon Polska jest niezawodnym i godnym zaufania partnerem w biznesie, realizującym usługi z należytą starannością (...)

Waldemar Ściesiek, Dyrektor zarządzający IT, Polski Bank

The team was always highly motivated and professional in every aspect to perform on critical needs of our startup environment.

Denis Benic, Founder of Ink Labs

Oszukiwanie jest fajne

Category: Other

W codziennej pracy często zdarza się sytuacja kiedy potrzebujemy informacji odnośnie jakiegoś narzędzia, biblioteki itp. Wtedy ruszamy często do Googla. Lecz można również… oszukiwać (cheat – oszustwo) instalując taki oto przydatny wynalazek ułatwiający nam życie:

$ gem install cheat

i od razu możemy z niego korzystać, powiedzmy że potrzebuję informacji jak używać git’a:

$ cheat git

I dostaniemy taki oto cheatsheet:

git:
  Setup
  -----

  git clone <repo>
    clone the repository specified by <repo>; this is similar to "checkout" in
    some other version control systems such as Subversion and CVS

  Add colors to your ~/.gitconfig file:

    [color]
      ui = auto
    [color "branch"]
      current = yellow reverse
      local = yellow
      remote = green
    [color "diff"]
      meta = yellow bold
      frag = magenta bold
      old = red bold
      new = green bold
    [color "status"]
      added = yellow
      changed = green
      untracked = cyan

  Highlight whitespace in diffs

    [color]
      ui = true
    [color "diff"]
      whitespace = red reverse
    [core]
      whitespace=fix,-indent-with-non-tab,trailing-space,cr-at-eol

  Add aliases to your ~/.gitconfig file:

    [alias]
      st = status
      ci = commit
      br = branch
      co = checkout
      df = diff
      lg = log -p


  Configuration
  -------------

  git config -e [--global]
    edit the .git/config [or ~/.gitconfig] file in your $EDITOR

  git config --global user.name 'John Doe'
  git config --global user.email johndoe@example.com
    sets your name and email for commit messages

  ...

Albo informacji odnośnie np. rspec’a:

$ cheat rspec

I dostaniemy taki oto cheatsheet:

rspec:
  INSTALL
  =======
    INSTALL rspec
    =============
  $ sudo gem install rspec
    OR
  $ ./script/plugin install git://github.com/dchelimsky/rspec.git

    INSTALL rspec_on_rails plugin
    =============================
  $ ./script/plugin install git://github.com/dchelimsky/rspec-rails.git


  BOOTSTRAP THE APP
  =================
  $ ./script/generate rspec
        create  spec
        create  spec/spec_helper.rb
        create  spec/spec.opts
        create  previous_failures.txt
        create  script/spec_server
        create  script/spec



  HOW TO USE
  ==========

    COMMAND LINE
    =============
  spec --color --format specdoc user.rspec

    RAILS
    =============
  ./script/generate rspec_model User
  rake doc:plugins # generates local docs for your app's plugins
  rake -T spec # lists all rspec rake tasks
  rake spec # run all specs
  rake spec SPEC=spec/models/mymodel_spec.rb SPEC_OPTS="-e \"should do
  something\"" #run a single spec




  module UserSpecHelper
    def valid_user_attributes
      { :email => "joe@bloggs.com",
        :username => "joebloggs",
        :password => "abcdefg"}
    end
  end


  describe "A User (in general)" do
    include UserSpecHelper

    before(:each) do
      @user = User.new
    end

    it "should be invalid without a username" do
      pending "some other thing we depend on"
      @user.attributes = valid_user_attributes.except(:username)
      @user.should_not be_valid
      @user.should have(1).error_on(:username)
      @user.errors.on(:username).should == "is required"
      @user.username = "someusername"
      @user.should be_valid
    end
  end

  SHOULDA COULDA WOULDA
  =====================
  target.should satisfy {|arg| ...}
  target.should_not satisfy {|arg| ...}

  target.should equal <value>
  target.should not_equal <value>

  target.should be_close <value>, <tolerance>
  target.should_not be_close <value>, <tolerance>

  target.should be <value>
  target.should_not be <value>

  target.should predicate [optional args]
  target.should be_predicate [optional args]
  target.should_not predicate [optional args]
  target.should_not be_predicate [optional args]

  target.should be < 6
  target.should == 5
  target.should_not == 'Samantha'

  target.should match <regex>
  target.should_not match <regex>

  target.should be_an_instance_of <class>
  target.should_not be_an_instance_of <class>

  target.should be_a_kind_of <class>
  target.should_not be_a_kind_of <class>

  target.should respond_to <symbol>
  target.should_not respond_to <symbol>

  *OLD:*
  proc.should raise <exception>
  proc.should_not raise <exception>
  proc.should_raise <exception> # not available anymore
  *NEW:*
  lambda {a_call}.should raise_error
  lambda {a_call}.should raise_error(<exception> [, message])
  lambda {a_call}.should_not raise_error
  lambda {a_call}.should_not raise_error(<exception> [, message])

  proc.should throw <symbol>
  proc.should_not throw <symbol>

  target.should include <object>
  target.should_not include <object>

  target.should have(<number>).things
  target.should have_at_least(<number>).things
  target.should have_at_most(<number>).things

  target.should have(<number>).errors_on(:field)

  proc { thing.approve! }.should change(thing, :status).
      from(Status::AWAITING_APPROVAL).
      to(Status::APPROVED)

  proc { thing.destroy }.should change(Thing, :count).by(-1)

  Mocks and Stubs
  ===============

  user_mock = mock "User"
  user_mock.should_receive(:authenticate).with("password").and_return(true)
  user_mock.should_receive(:coffee).exactly(3).times.and_return(:americano)

  user_mock.should_receive(:coffee).exactly(5).times.and_raise(NotEnoughCoffeeExc
  ption)

  people_stub = mock "people"
  people_stub.stub!(:each).and_yield(mock_user)
  people_stub.stub!(:bad_method).and_raise(RuntimeError)

  user_stub = mock_model("User", :id => 23, :username => "pat", :email =>
  "pat@example.com")

Prawda że fajnie jest oszukiwać ! 😉

Lektura obowiązkowa:
http://cheat.errtheblog.com/

http://andrzejsliwa.com/2010/01/04/oszukiwanie-jest-fajne/


Andrzej Śliwa

Programista, pasjonat, scrum master, konsultant IT.

Pasjonuje się językami dynamicznymi, metodami wytwarzania oprogramowania oraz metodologiami prowadzenia projektów, szczególnie dbający o jakość wytwarzanych rozwiązań. Obecnie koncentruje się na rozwoju w zakresie wykorzystywania frameworka Ruby on Rails, skalowanych rozwiązań, cloud computingu i języków funkcyjnych.


Comments

Dodaj komentarz

Twój adres e-mail nie zostanie opublikowany. Wymagane pola są oznaczone *

Trwa ładowanie