custom-range 0.1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (2) hide show
  1. data/lib/custom_range.rb +52 -0
  2. metadata +55 -0
@@ -0,0 +1,52 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ class CustomRange
4
+ attr_accessor :range_set
5
+
6
+ def initialize(range_set)
7
+ @range_set = range_set
8
+ end
9
+
10
+ def [](value)
11
+ EndPoint.new value, @range_set
12
+ end
13
+ end
14
+
15
+ class EndPoint
16
+ attr_accessor :index
17
+
18
+ def initialize(value, range_set)
19
+ @range_set = range_set
20
+ @index = self.send("index_from_" + value_type(value), value)
21
+ end
22
+
23
+ def index_from_integer(value)
24
+ value % @range_set.size
25
+ end
26
+
27
+ def index_from_string(value)
28
+ @range_set.index(value)
29
+ end
30
+
31
+ def index_from_symbol(value)
32
+ index_from_string(value.to_s)
33
+ end
34
+
35
+ def succ
36
+ EndPoint.new(@index + 1, @range_set)
37
+ end
38
+
39
+ def <=>(end_point)
40
+ @index <=> end_point.index
41
+ end
42
+
43
+ def value_type(value)
44
+ kind = [Integer, String, Symbol].find {|type| value.kind_of? type}.to_s.downcase
45
+ puts kind
46
+ return kind
47
+ end
48
+
49
+ def to_s
50
+ @range_set[@index].to_s
51
+ end
52
+ end
metadata ADDED
@@ -0,0 +1,55 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: custom-range
3
+ version: !ruby/object:Gem::Version
4
+ version: "0.1"
5
+ platform: ruby
6
+ authors:
7
+ - Maurizio De Magnis
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+
12
+ date: 2010-01-30 00:00:00 +01:00
13
+ default_executable:
14
+ dependencies: []
15
+
16
+ description:
17
+ email: maurizio.demagnis@gmail.com
18
+ executables: []
19
+
20
+ extensions: []
21
+
22
+ extra_rdoc_files: []
23
+
24
+ files:
25
+ - lib/custom_range.rb
26
+ has_rdoc: true
27
+ homepage: http://github.com/mauriziodemagnis/custom_range
28
+ licenses: []
29
+
30
+ post_install_message:
31
+ rdoc_options: []
32
+
33
+ require_paths:
34
+ - lib
35
+ required_ruby_version: !ruby/object:Gem::Requirement
36
+ requirements:
37
+ - - ">="
38
+ - !ruby/object:Gem::Version
39
+ version: "0"
40
+ version:
41
+ required_rubygems_version: !ruby/object:Gem::Requirement
42
+ requirements:
43
+ - - ">="
44
+ - !ruby/object:Gem::Version
45
+ version: "0"
46
+ version:
47
+ requirements: []
48
+
49
+ rubyforge_project:
50
+ rubygems_version: 1.3.5
51
+ signing_key:
52
+ specification_version: 3
53
+ summary: A simple way to use custom ranges in Ruby
54
+ test_files: []
55
+