jinni 0.3.1 → 0.3.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
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