hexa 0.1.4 → 0.2.0

Sign up to get free protection for your applications and to get access to all the features.
data/README.md CHANGED
@@ -1,29 +1,51 @@
1
1
  # Hexa
2
2
 
3
- TODO: Write a gem description
3
+ Hexa is a gem which provides some objects to work on my math works. There are shapes and objects like circles, squares or cylinders. Each object has its own set of methods like `perimeter`, `volume` or `area`.
4
4
 
5
- ## Installation
5
+ There are also extended core objects such as `Fixnum`. They have new methods to simplify operations such as `!`, `prime?` or `sqrt`.
6
6
 
7
- Add this line to your application's Gemfile:
7
+ For the moment, the project isn't very complete. You can contribute if you want!
8
8
 
9
- gem 'hexa'
9
+ ## Installation
10
10
 
11
- And then execute:
11
+ If you want to install hexa and start use it:
12
12
 
13
- $ bundle
13
+ ```
14
+ $ gem install hexa
15
+ ```
14
16
 
15
- Or install it yourself as:
17
+ Now you can use hexa into IRB or a Ruby file:
16
18
 
17
- $ gem install hexa
19
+ ```ruby
20
+ require "hexa"
21
+ ```
18
22
 
19
23
  ## Usage
20
24
 
21
- TODO: Write usage instructions here
25
+ Hexa comes with a set of objects. Objects (Ruby objects) are divided into shapes and objects. Main objects (Ruby) are Circle, Square, Cylinder and Cube. Each constructor accept a Hash of options. Here an example of a IRB session:
26
+
27
+ ```ruby
28
+ >> c = Circle.new :radius => 10
29
+ => #<Circle:0x00000001a00360 @radius=10, @diameter=20>
30
+ >> c.diameter
31
+ => 20
32
+ >> c.area
33
+ => 314.1592653589793
34
+ ```
35
+
36
+ Other objects (such as Cylinder) allows you to pass other object to set attributes.
37
+
38
+ ```ruby
39
+ >> circle = Circle.new :diameter => 10
40
+ => #<Circle:0x00000001a03b28 @radius=5, @diameter=10>
41
+ >> cylinder = Cylinder.new :radius => circle, :height => 40
42
+ => #<Cylinder:0x00000001a0b210 @radius=5, @diameter=10, @height=40>
43
+ ```
22
44
 
23
45
  ## Contributing
24
46
 
25
- 1. Fork it
26
- 2. Create your feature branch (`git checkout -b my-new-feature`)
27
- 3. Commit your changes (`git commit -am 'Added some feature'`)
28
- 4. Push to the branch (`git push origin my-new-feature`)
29
- 5. Create new Pull Request
47
+ If you want to contribute, just fork the project then write and commit your patch. Finally, you can open a pull-request.
48
+
49
+ ## License
50
+
51
+ Hexa is released under the MIT license. See the `LICENSE` file for more information.
@@ -0,0 +1,54 @@
1
+ class Fixnum
2
+
3
+ # Allows tou to know the factorial of self
4
+ # @return [Fixnum] factorial of self
5
+ def factorial
6
+ if self == 1 or self == 0
7
+ return 1
8
+ else
9
+ return self * (self - 1).factorial
10
+ end
11
+ end
12
+
13
+ alias :! :factorial
14
+
15
+ # @return [Float] the square root of self
16
+ def sqrt
17
+ Math.sqrt(self)
18
+ end
19
+
20
+ # Predicate method which allows you to know if the number is a prime number
21
+ # @return [Boolean]
22
+ def prime?
23
+ if self < 2
24
+ false
25
+ elsif self == 2
26
+ true
27
+ elsif self % 2 == 0
28
+ false
29
+ else
30
+ i = 3
31
+ while i*i <= self
32
+ return false if self % i == 0
33
+ i += 2
34
+ end
35
+ return true
36
+ end
37
+ end
38
+
39
+ # @return [Fixnum] the opposite of self
40
+ def opposite
41
+ - self
42
+ end
43
+
44
+ # @return [Float] inverse of self
45
+ def inverse
46
+ if self == 0
47
+ return 0
48
+ else
49
+ return 1 / self
50
+ end
51
+ end
52
+
53
+ alias :reverse :inverse
54
+ end
@@ -0,0 +1,35 @@
1
+ class Cube
2
+
3
+ attr_accessor :side
4
+
5
+ # Create a new Cube object
6
+ # @param [Hash] you should specify the :side option. You can either pass
7
+ # a Fixnum or a Square object.
8
+ # @return [Cube] a new Cube object
9
+ def initialize(options = {})
10
+ if options[:side]
11
+ if options[:side].instance_of?(Square)
12
+ @side = options[:side].side
13
+ elsif options[:side].instance_of?(Fixnum)
14
+ @side = options[:side]
15
+ else
16
+ @side = 1
17
+ end
18
+ else
19
+ @side = 1
20
+ end
21
+ end
22
+
23
+
24
+ # @return [Fixnum] the volume of the cube
25
+ def volume
26
+ @side ** 3
27
+ end
28
+
29
+ # Same behavior as volume but you can call it without a Cube instance
30
+ # like Cube::volume(10) => 1000
31
+ # @return [Fixnum] the volume of a cube with a given
32
+ def self.volume(side = 1)
33
+ side ** 3
34
+ end
35
+ end
@@ -14,7 +14,7 @@ class Circle
14
14
  @diameter = options[:diameter]
15
15
  else
16
16
  @radius = 1
17
- @diamter = 2
17
+ @diameter = 2
18
18
  end
19
19
  end
20
20
 
@@ -1,6 +1,6 @@
1
1
  module Hexa
2
2
  MAJOR = 0
3
- MINOR = 1
4
- TINY = 4
3
+ MINOR = 2
4
+ TINY = 0
5
5
  VERSION = [MAJOR, MINOR, TINY].compact.join(".")
6
6
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: hexa
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.4
4
+ version: 0.2.0
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -9,7 +9,7 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2012-08-21 00:00:00.000000000 Z
12
+ date: 2012-08-23 00:00:00.000000000 Z
13
13
  dependencies: []
14
14
  description: A personnal library to check my math homeworks
15
15
  email:
@@ -25,6 +25,8 @@ files:
25
25
  - Rakefile
26
26
  - hexa.gemspec
27
27
  - lib/hexa.rb
28
+ - lib/hexa/core_ext/fixnum.rb
29
+ - lib/hexa/objects/cube.rb
28
30
  - lib/hexa/objects/cylinder.rb
29
31
  - lib/hexa/shapes/circle.rb
30
32
  - lib/hexa/shapes/square.rb