jinni 0.3.1 → 0.3.2

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 0a8db42ff0dc02841164f3620806342afa7d4ded
4
- data.tar.gz: e6ad6c599bf97d291ccda30ee3725d001f16253c
3
+ metadata.gz: a0f79f6c7ca99a3e844ec4c1d9d333d2cd1180af
4
+ data.tar.gz: 1a50257f304821f54c245f953d16954a4edbdda3
5
5
  SHA512:
6
- metadata.gz: 58ad41f7d3b7bde8080e711e3c32f5dd1c33249113857db01ee226315fd2c02d7f434be07fc5cd69a4f0731d3bba045af49563d94f9f9400c968101e42b73547
7
- data.tar.gz: c5496c908aff4a295c3dc939835f89a07c34435ab9b8709250bf793a869cd9c361b2a08e153698aab5854f119f0498a6bb756e442914bb07337b03e3366def43
6
+ metadata.gz: 813486f90cc727e5d87997593a799828158261c03694c4224c836998158a5eddc3e7a723e2d0eb8bcbb18c1a1191599009e6a38f7c4e05fbab76adacd753d9b1
7
+ data.tar.gz: 4f708c1c65d01878c8021e1157885d1a9c9e75056928147673d95d65172ddb184b85f5a7111258d1ea23f1c05f47ba14babd32384e121336c116b5ac8228c122
data/.gitignore CHANGED
@@ -7,3 +7,4 @@
7
7
  /pkg/
8
8
  /spec/reports/
9
9
  /tmp/
10
+ **/*.swp
data/Gemfile CHANGED
@@ -1,6 +1,4 @@
1
1
  source 'https://rubygems.org'
2
2
 
3
- gem 'pry'
4
-
5
3
  # Specify your gem's dependencies in jinni.gemspec
6
4
  gemspec
data/jinni.gemspec CHANGED
@@ -20,4 +20,5 @@ Gem::Specification.new do |spec|
20
20
 
21
21
  spec.add_development_dependency "bundler", "~> 1.9"
22
22
  spec.add_development_dependency "rake", "~> 10.0"
23
+ spec.add_development_dependency "pry"
23
24
  end
@@ -1,8 +1,11 @@
1
1
  module Jinni
2
+ # creature instacce methods
3
+
2
4
  class Creature
3
5
  attr_reader :genes
4
6
 
5
- @@genes = Hash.new
7
+ # move this into the specific creature class, not the generic Creature
8
+ # @@genes = Hash.new
6
9
 
7
10
  # redefine this method in your class
8
11
  def fitness
@@ -14,13 +17,14 @@ module Jinni
14
17
  @@genes
15
18
  end
16
19
 
20
+ # method to return a possibly mutated version of a given object
17
21
  def mutate(rate = 0.01)
18
22
  binary = self.to_binary
19
23
  newBinary = binary.chars.map { |bit| bit == "0" ? "1" : "0" if rand < rate }
20
24
  return self.class.new_from_binary newBinary
21
25
  end
22
26
 
23
- # this is Where It Happens
27
+ # method to cross two creatures. returns a child
24
28
  # usage:
25
29
  # child = bill << ted
26
30
  def cross(object)
@@ -42,7 +46,7 @@ module Jinni
42
46
 
43
47
  # serialize object into binary, according to schema laid out in eigenclass
44
48
  def to_binary
45
- @@genes.collect {|gene, range|
49
+ self.class.genes.collect {|gene, range|
46
50
  output = String.new
47
51
  value = self.send(gene) - self.class.send("#{gene}_min")
48
52
  difference = range.bits - value.bits
@@ -53,7 +57,7 @@ module Jinni
53
57
 
54
58
  private
55
59
 
56
- # generic initialize from hash, called by the others
60
+ # generic initialize from hash, called by the other initializers
57
61
  def initialize(hash)
58
62
  hash.each_pair do |gene, value|
59
63
  instance_variable_set( "@#{gene}", value )
@@ -63,7 +67,7 @@ module Jinni
63
67
  # used internally by ::new_random, a la #initialize
64
68
  def initialize_randomly(*args, &block)
65
69
  params = Hash.new
66
- @@genes.each_pair do |gene, range|
70
+ self.class.genes.each_pair do |gene, range|
67
71
  value = self.class.send("#{gene}_min") + rand(range)
68
72
  params[gene] = value
69
73
  end
@@ -76,10 +80,11 @@ module Jinni
76
80
  initialize(hash)
77
81
  end
78
82
 
83
+ # method to return a creature attributes hash from a given binary string
79
84
  def hash_from_binary(binary)
80
85
  params = Hash.new
81
86
  start = 0
82
- @@genes.each_pair do |gene, range|
87
+ self.class.genes.each_pair do |gene, range|
83
88
  binary_chunk = binary[start..(start = start + range.bits - 1)]
84
89
  break if binary_chunk.class != String
85
90
  offset = binary_chunk.to_i(2)
@@ -1,13 +1,19 @@
1
1
  module Jinni
2
2
  class Creature
3
- # genetic eigenclass methods
4
- class << self
5
3
 
6
- # use after calling all attr_genetics
7
- def set_schema
8
- total = @@genes.values.reduce( :+ )
9
- @@schema_total = total
10
- end
4
+ def self.inherited(subclass)
5
+ subclass.class_variable_set("@@genes", Hash.new)
6
+ # create a class variable called @@genes in subclass
7
+ # create getter and setter methods for @@genes
8
+ end
9
+
10
+ # creature class methods
11
+ class << self
12
+ # # use after calling all attr_genetics
13
+ # def set_schema
14
+ # total = @@genes.values.reduce( :+ )
15
+ # @@schema_total = total
16
+ # end
11
17
 
12
18
  # to be used like `Klass.new()`
13
19
  def random_new(*args, &block)
@@ -23,12 +29,21 @@ module Jinni
23
29
  obj
24
30
  end
25
31
 
32
+ def genes
33
+ class_variable_get "@@genes"
34
+ end
35
+
36
+ def genes= genes
37
+ class_variable_set "@@genes", genes
38
+ end
39
+
26
40
 
27
41
  # use like attr_accessor
28
42
  def attr_genetic( gene, min, max )
29
43
  range = max - min + 1
30
44
 
31
- @@genes[gene] = range
45
+ # update @@genes within (Fish)
46
+ self.genes[gene] = range
32
47
 
33
48
  # getter
34
49
  define_method(gene) do
data/lib/jinni/version.rb CHANGED
@@ -1,3 +1,3 @@
1
1
  module Jinni
2
- VERSION = "0.3.1"
2
+ VERSION = "0.3.2"
3
3
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: jinni
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.3.1
4
+ version: 0.3.2
5
5
  platform: ruby
6
6
  authors:
7
7
  - Andrew Monks
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2015-05-06 00:00:00.000000000 Z
11
+ date: 2015-05-10 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler
@@ -38,6 +38,20 @@ dependencies:
38
38
  - - "~>"
39
39
  - !ruby/object:Gem::Version
40
40
  version: '10.0'
41
+ - !ruby/object:Gem::Dependency
42
+ name: pry
43
+ requirement: !ruby/object:Gem::Requirement
44
+ requirements:
45
+ - - ">="
46
+ - !ruby/object:Gem::Version
47
+ version: '0'
48
+ type: :development
49
+ prerelease: false
50
+ version_requirements: !ruby/object:Gem::Requirement
51
+ requirements:
52
+ - - ">="
53
+ - !ruby/object:Gem::Version
54
+ version: '0'
41
55
  description:
42
56
  email:
43
57
  - a@monks.co
@@ -54,6 +68,8 @@ files:
54
68
  - bin/setup
55
69
  - jinni.gemspec
56
70
  - lib/jinni.rb
71
+ - lib/jinni/.eigenclass.rb.swp
72
+ - lib/jinni/.version.rb.swp
57
73
  - lib/jinni/creature.rb
58
74
  - lib/jinni/eigenclass.rb
59
75
  - lib/jinni/genepool.rb