Browse files

Adding some functionality to rails-lib, experimenting with elisp BDD …

…framework, first test driven bug fix

I felt that tests were missing from the emacs rails package so I have
been experimenting a bit. There is now a behave-rails.el file which
contains contexts that can be used by Technomancy's behave BDD
framework. Although behave is old and no longer maintained it has some
nice features. I may go for a different framework in the end. To use
behave you can get it from git:// or
alternatively clone my entire emacslisp dir from

The most interesting other framework out there seems to be el-expectations:
  • Loading branch information...
1 parent 16ae768 commit 91593a653d643e9492e791894dd44b4bf3735596 Tom ten Thij committed May 14, 2008
Showing with 60 additions and 1 deletion.
  1. +44 −0 behave-rails.el
  2. +16 −1 rails-lib.el
@@ -0,0 +1,44 @@
+(require 'behave)
+(context "Testing if string is camelized"
+ (tag rails rails-lib camelized-p)
+ (specify "should be nil if there are no capital characters"
+ (expect (camelized-p "horse") equal nil))
+ (specify "should be 0 for a word with first character being a capital"
+ (expect (camelized-p "Horse") equal 0))
+ (specify "should be nil if the first character is not a capital"
+ (expect (camelized-p "dragonFly") equal nil))
+ (specify "should be 0 if there are multiple capitals"
+ (expect (camelized-p "DragonFly") equal 0))
+ (specify "should be 0 if it has numbers"
+ (expect (camelized-p "DragonFly69") equal 0))
+ (specify "should be nil if all its characters are capital"
+ (expect (camelized-p "DONKEY") equal nil)))
+(context "Testing if string is underscored"
+ (tag rails rails-lib underscored-p)
+ (specify "should be nil if there is a capital character"
+ (expect (underscored-p "horSe") equal nil))
+ (specify "should be 0 if all characters are lowercase"
+ (expect (underscored-p "horse") equal 0))
+ (specify "should be 0 if some characters are numbers"
+ (expect (underscored-p "horse12") equal 0))
+ (specify "should be 0 if some characters are underscores"
+ (expect (underscored-p "dragon_fly") equal 0))
+ (specify "should be nil if the first character is not a letter"
+ (expect (underscored-p "5_gold_rings") equal nil))
+(context "Decamelizing"
+ (tag rails rails-lib decamelize)
+ (specify "should return a string of all lower case characters unchanged"
+ (expect (decamelize "horse") equal "horse"))
+ (specify "should replace an initial capital with a lower case character"
+ (expect (decamelize "Horse") equal "horse"))
+ (specify "should insert underscores before capital letters"
+ (expect (decamelize "AntEaterTongue") equal "ant_eater_tongue"))
+ (specify "should insert one underscore after last character of serie of capitals"
+ (expect (decamelize "SMSMessage") equal "sms_message"))
+ (specify "should insert an underscore between a digit and a capital"
+ (expect (decamelize "Dalmatien101Movie") equal "dalmatien101_movie"))
@@ -109,7 +109,7 @@ If EXPR is not nil exeutes BODY.
"\\([A-Z]+\\)\\([A-Z][a-z]\\)" "\\1_\\2"
- "\\([a-z\\d]\\)\\([A-Z]\\)" "\\1_\\2"
+ "\\([a-z0-9]\\)\\([A-Z]\\)" "\\1_\\2"
(defun string-not-empty (str) ;(+)
@@ -346,6 +346,21 @@ as the value of the symbol, and the hook as the function definition."
history ; hist
(car history-value))))) ;def
+;; railsy-replace
+(defun camelized-p (string)
+ "Return nil unless string is in camelized format (first character is capital, there is at least on lower capital and all characters are letters of numbers"
+ (let ((case-fold-search nil))
+ (string-match "^[A-Z][A-Za-z0-9]*[a-z]+[A-Za-z0-9]*$" string)))
+(defun underscored-p (string)
+ "Return nil unless string is in underscored format (containing only lower case characters, numbers or underscores)"
+ (let ((case-fold-search nil))
+ (string-match "^[a-z][a-z0-9_]*$" string)))
+(defun replace-rails-variable ()
+ (interactive)
;; MMM
;; (defvar mmm-indent-sandbox-finish-position nil)

0 comments on commit 91593a6

Please sign in to comment.