Skip to content

Commit

Permalink
Added tests, rockspec and Travis integration
Browse files Browse the repository at this point in the history
  • Loading branch information
subnetmarco committed Mar 11, 2015
1 parent e561075 commit 88034b9
Show file tree
Hide file tree
Showing 5 changed files with 124 additions and 3 deletions.
18 changes: 18 additions & 0 deletions .travis.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
language: erlang

env:
- LUA=""
- LUA="luajit"

branches:
only:
- master

install:
- sudo apt-get install luajit
- sudo apt-get install luarocks
- sudo luarocks install luafilesystem
- sudo luarocks install busted

script: "busted spec"

25 changes: 23 additions & 2 deletions README.md
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
# Classic
# Classic [![Build Status](https://api.travis-ci.org/thefosk/classic.png)](https://travis-ci.org/thefosk/classic)

A tiny class module for Lua. Attempts to stay simple and provide decent
performance by avoiding unnecessary over-abstraction.
Expand Down Expand Up @@ -48,7 +48,7 @@ end
local p = Point(10, 20)
print(p:is(Object)) -- true
print(p:is(Point)) -- true
print(p:is(Rect)) -- false
print(p:is(Rect)) -- false
```

### Using mixins
Expand Down Expand Up @@ -97,6 +97,27 @@ function Point:__tostring()
end
```

### Returning constructor errors
```lua
Rect = Point:extend()

function Rect:new(x, y, width, height)
if width > 100 then
return nil, "Width can't be greater than 100"
end

Rect.super.new(self, x, y)
self.width = width or 0
self.height = height or 0
end


local rect, err = Rect(10, 20, 200, 200)
if not rect then
print(err) -- The err variable contains the error message
end
```


## License

Expand Down
23 changes: 23 additions & 0 deletions classic-0.1-1.rockspec
Original file line number Diff line number Diff line change
@@ -0,0 +1,23 @@
package = "classic"
version = "0.1-1"
source = {
url = "git://github.com/rxi/classic",
branch = "master"
}
description = {
summary = "Tiny class module for Lua",
detailed = [[
A tiny class module for Lua. Attempts to stay simple and provide decent performance by avoiding unnecessary over-abstraction.
]],
homepage = "https://github.com/rxi/classic",
license = "MIT"
}
dependencies = {
"lua >= 5.1"
}
build = {
type = "builtin",
modules = {
classic = "src/classic.lua"
}
}
59 changes: 59 additions & 0 deletions spec/classic_spec.lua
Original file line number Diff line number Diff line change
@@ -0,0 +1,59 @@
Object = require "classic"

-- BaseClass provides a say() method
local BaseClass = Object:extend()
function BaseClass:new(name)
self._name = name
end
function BaseClass:get_name()
return self._name
end
function BaseClass.say_something()
return "something"
end

-- ClassOne extends BaseClass
local ClassOne = BaseClass:extend()
function ClassOne:new(name)
ClassOne.super.new(self, name)
end
function ClassOne.say_something()
return "something better"
end

-- ClassTwo extends BaseClass
local ClassTwo = BaseClass:extend()
function ClassTwo:new(name)
if name == "wrong" then
error({message = "Wrong value"})
end
ClassTwo.super.new(self, name)
end

describe("classic #classic", function()
describe("Base tests", function()

it("Constructors should work", function()
local class_one = ClassOne("Mark")
local class_two = ClassTwo("John")

assert.are.same("Mark", class_one:get_name())
assert.are.same("John", class_two:get_name())
end)
it("Static method should work", function()
local class_one = ClassOne("Mark")
local class_two = ClassTwo("John")

assert.are.same("something better", class_one:say_something())
assert.are.same("something", class_two:say_something())
end)
it("Constructor returns error", function()
local status, res = pcall(ClassTwo, "wrong")

assert.falsy(status)
assert.truthy(res)
assert.are.same("Wrong value", res.message)
end)

end)
end)
2 changes: 1 addition & 1 deletion classic.lua → src/classic.lua
Original file line number Diff line number Diff line change
Expand Up @@ -65,4 +65,4 @@ function Object:__call(...)
end


return Object
return Object

0 comments on commit 88034b9

Please sign in to comment.