rational_choice 2.0.0 → 2.0.1

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
- SHA1:
3
- metadata.gz: 75a1742fcfa84e13ef7b67d0a3718676a240f00d
4
- data.tar.gz: 49d428dd3e4f9292cd7eec5098422e119216a518
2
+ SHA256:
3
+ metadata.gz: c062495abe33854b1fdda0b37fe663d2f53f1036b2d79c6491577fe06b645b90
4
+ data.tar.gz: 5155200d59d02441f02c2500adab6676cfe45a294c1319adea2670eedf7cb8cc
5
5
  SHA512:
6
- metadata.gz: 6d51bbedb0f841e8d14a397a74794a46642806d522dcae325d47e2fde225d4f704908162f0f512af163ff02618e34b682ce37bb63788cadef32e40b59c26fa98
7
- data.tar.gz: 1d5cddf81c1fcb5d8086dda58b01213a7e85ef4c956fe6efd6d322f44d095c6cfe4327b48357bb5c3acee9d43cf880695128b9ee337d92477a9de6feac945608
6
+ metadata.gz: 3de02bef19b681e9467383fd86e9653813201c4a0af91bc9f9efabb60b1c5fd4265ddc93d004aa9bf90cfe66fdae356a02481d084ce014182ce53e3baf2381ea
7
+ data.tar.gz: b76b864d7bda067426bcd555def66fecd57a5652dfd12426fb544e6d6ae955e24899def8cb74710e596797f0de25043eb56887336f19d44037f53e9b2053a3cf
data/.gitignore ADDED
@@ -0,0 +1,50 @@
1
+ # rcov generated
2
+ coverage
3
+ coverage.data
4
+
5
+ # rdoc generated
6
+ rdoc
7
+
8
+ # yard generated
9
+ doc
10
+ .yardoc
11
+
12
+ # bundler
13
+ .bundle
14
+ Gemfile.lock
15
+
16
+ # jeweler generated
17
+ pkg
18
+
19
+ # Have editor/IDE/OS specific files you need to ignore? Consider using a global gitignore:
20
+ #
21
+ # * Create a file at ~/.gitignore
22
+ # * Include files you want ignored
23
+ # * Run: git config --global core.excludesfile ~/.gitignore
24
+ #
25
+ # After doing this, these files will be ignored in all your git projects,
26
+ # saving you from having to 'pollute' every project you touch with them
27
+ #
28
+ # Not sure what to needs to be ignored for particular editors/OSes? Here's some ideas to get you started. (Remember, remove the leading # of the line)
29
+ #
30
+ # For MacOS:
31
+ #
32
+ #.DS_Store
33
+
34
+ # For TextMate
35
+ #*.tmproj
36
+ #tmtags
37
+
38
+ # For emacs:
39
+ #*~
40
+ #\#*
41
+ #.\#*
42
+
43
+ # For vim:
44
+ #*.swp
45
+
46
+ # For redcar:
47
+ #.redcar
48
+
49
+ # For rubinius:
50
+ #*.rbc
data/.rubocop.yml ADDED
@@ -0,0 +1,2 @@
1
+ inherit_gem:
2
+ wetransfer_style: ruby/default.yml
data/.travis.yml CHANGED
@@ -1,6 +1,6 @@
1
1
  rvm:
2
- - 2.0.0
3
2
  - 2.1.1
4
3
  - 2.2.0
4
+ - 2.3.0
5
5
  cache: bundler
6
6
  sudo: false
data/Gemfile CHANGED
@@ -1,9 +1,3 @@
1
- source "http://rubygems.org"
1
+ source :rubygems
2
2
 
3
- group :development do
4
- gem 'yard'
5
- gem "rspec", "~> 3.4.0"
6
- gem "rdoc", "~> 3.12"
7
- gem "bundler", "~> 1.0"
8
- gem "jeweler", "~> 2.0.1"
9
- end
3
+ gemspec
data/Rakefile CHANGED
@@ -1,43 +1,15 @@
1
- # encoding: utf-8
2
-
3
- require 'rubygems'
4
- require 'bundler'
5
- begin
6
- Bundler.setup(:default, :development)
7
- rescue Bundler::BundlerError => e
8
- $stderr.puts e.message
9
- $stderr.puts "Run `bundle install` to install missing gems"
10
- exit e.status_code
11
- end
12
- require 'rake'
13
- require_relative 'lib/rational_choice'
14
-
15
- require 'jeweler'
16
- Jeweler::Tasks.new do |gem|
17
- # gem is a Gem::Specification... see http://guides.rubygems.org/specification-reference/ for more options
18
- gem.version = RationalChoice::VERSION
19
- gem.name = "rational_choice"
20
- gem.homepage = "https://github.com/wetransfer/rational_choice"
21
- gem.license = "MIT"
22
- gem.description = %Q{Fuzzy logic gate}
23
- gem.summary = %Q{Makes life-concerning choices based on an informed coin toss}
24
- gem.email = "me@julik.nl"
25
- gem.authors = ["Julik Tarkhanov"]
26
- # dependencies defined in Gemfile
27
- end
28
- Jeweler::RubygemsDotOrgTasks.new
29
-
30
- require 'rspec/core'
1
+ require 'bundler/gem_tasks'
31
2
  require 'rspec/core/rake_task'
32
- RSpec::Core::RakeTask.new(:spec) do |spec|
33
- spec.pattern = FileList['spec/**/*_spec.rb']
34
- end
35
-
36
- task :default => :spec
37
-
38
3
  require 'yard'
4
+ require 'rubocop/rake_task'
5
+
39
6
  YARD::Rake::YardocTask.new do |t|
40
7
  t.files = ['lib/**/*.rb', 'README*'] # optional
41
8
  t.options = ['--markup markdown'] # optional
42
9
  t.stats_options = ['--list-undoc'] # optional
43
10
  end
11
+
12
+ RSpec::Core::RakeTask.new(:spec)
13
+ RuboCop::RakeTask.new
14
+
15
+ task default: [:spec, :rubocop]
@@ -1,28 +1,28 @@
1
1
  # Tiny fuzzy-logic gate for making choices based on a continuum of permitted values
2
2
  # as opposed to a hard condition.
3
3
  module RationalChoice
4
- VERSION = '2.0.0'
5
-
4
+ VERSION = '2.0.1'
5
+
6
6
  # Gets raised when a multidimensional choice has to be made with a wrong number
7
7
  # of values versus the number of dimensions
8
8
  CardinalityError = Class.new(ArgumentError)
9
-
9
+
10
10
  # Gets raised when a dimension has to be created with the same parameters
11
11
  DomainError = Class.new(ArgumentError)
12
-
12
+
13
13
  # Represents a fuzzy choice on a single dimension (one real number)
14
14
  class Dimension
15
15
  # Initializes a new Dimension to evaluate values
16
16
  #
17
17
  # @param false_at_or_below[#to_f, #<=>] the lower bound, at or below which the value will be considered false
18
18
  # @param true_at_or_above[#to_f, #<=>] the upper bound, at or above which the value will be considered true
19
- def initialize(false_at_or_below: , true_at_or_above:)
19
+ def initialize(false_at_or_below:, true_at_or_above:)
20
20
  raise DomainError, "Bounds were the same at #{false_at_or_below}" if false_at_or_below == true_at_or_above
21
-
21
+
22
22
  @lower, @upper = [false_at_or_below, true_at_or_above].sort
23
23
  @flip_sign = [@lower, @upper].sort != [false_at_or_below, true_at_or_above]
24
24
  end
25
-
25
+
26
26
  # Evaluate a value against the given false and true bound.
27
27
  #
28
28
  # If the value is less than or equal to the false bound, the method will return `false`.
@@ -55,7 +55,7 @@ module RationalChoice
55
55
  delta = @upper.to_f - @lower.to_f
56
56
  v = (value - @lower).to_f
57
57
  t = (v / delta)
58
-
58
+
59
59
  r = Random.new # To override in tests if needed
60
60
  r.rand < t
61
61
  else
@@ -64,7 +64,7 @@ module RationalChoice
64
64
  end
65
65
  choice ^ @flip_sign
66
66
  end
67
-
67
+
68
68
  # Tells whether the evaluation will use the probabilities or not
69
69
  # (whether the given value is within the range where probability evaluation will take place).
70
70
  #
@@ -74,23 +74,23 @@ module RationalChoice
74
74
  value > @lower && value < @upper
75
75
  end
76
76
  end
77
-
77
+
78
78
  # Performs an evaluation based on multiple dimensions. The dimensions
79
79
  # will be first coerced into one (number of truthy evaluations vs. number of falsey evaluations)
80
80
  # and then a true/false value will be deduced from that.
81
81
  class ManyDimensions
82
82
  def initialize(*dimensions)
83
83
  @dimensions = dimensions
84
- raise CardinalityError, "%s has no dimensions to evaluate" % inspect if @dimensions.empty?
84
+ raise CardinalityError, '%s has no dimensions to evaluate' % inspect if @dimensions.empty?
85
85
  end
86
-
86
+
87
87
  # Performs a weighted choice, by first collecting choice results from all the dimensions,
88
88
  # and then by interpolating those results by the ratio of truthy values vs falsey values.
89
89
  #
90
90
  # x = Dimension.new(0,1)
91
91
  # y = Dimension.new(0,1)
92
92
  # z = Dimension.new(0,1)
93
- #
93
+ #
94
94
  # within_positive_3d_space = ManyDimensions.new(x, y, z)
95
95
  # within_positive_3d_space.choose(-1, -1, -0.5) #=> false
96
96
  # within_positive_3d_space.choose(1.1, 123, 1) #=> true
@@ -100,12 +100,12 @@ module RationalChoice
100
100
  # @return [Boolean] true or false
101
101
  def choose(*values)
102
102
  if @dimensions.length != values.length
103
- raise CardinalityError, "%s has %d dimensions but %d values were given" % [inspect, @dimensions.length, values.length]
103
+ raise CardinalityError, '%s has %d dimensions but %d values were given' % [inspect, @dimensions.length, values.length]
104
104
  end
105
-
105
+
106
106
  evaluations = values.zip(@dimensions).map { |(v, d)| d.choose(v) }
107
- num_truthy_choices = evaluations.select{|e| e}.length
108
-
107
+ num_truthy_choices = evaluations.select { |e| e }.length
108
+
109
109
  Dimension.new(false_at_or_below: 0, true_at_or_above: evaluations.length).choose(num_truthy_choices)
110
110
  end
111
111
  end
@@ -1,65 +1,26 @@
1
- # Generated by jeweler
2
- # DO NOT EDIT THIS FILE DIRECTLY
3
- # Instead, edit Jeweler::Tasks in Rakefile, and run 'rake gemspec'
4
- # -*- encoding: utf-8 -*-
5
- # stub: rational_choice 2.0.0 ruby lib
1
+ require_relative 'lib/rational_choice'
6
2
 
7
3
  Gem::Specification.new do |s|
8
- s.name = "rational_choice"
9
- s.version = "2.0.0"
4
+ s.name = 'rational_choice'
5
+ s.version = RationalChoice::VERSION
10
6
 
11
- s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
12
- s.require_paths = ["lib"]
13
- s.authors = ["Julik Tarkhanov"]
14
- s.date = "2016-02-07"
15
- s.description = "Fuzzy logic gate"
16
- s.email = "me@julik.nl"
17
- s.extra_rdoc_files = [
18
- "LICENSE.txt",
19
- "README.md"
20
- ]
21
- s.files = [
22
- ".document",
23
- ".rspec",
24
- ".travis.yml",
25
- "Gemfile",
26
- "LICENSE.txt",
27
- "README.md",
28
- "Rakefile",
29
- "lib/rational_choice.rb",
30
- "rational_choice.gemspec",
31
- "spec/rational_choice/dimension_spec.rb",
32
- "spec/rational_choice/many_dimensions_spec.rb",
33
- "spec/rational_choice_spec.rb",
34
- "spec/spec_helper.rb"
35
- ]
36
- s.homepage = "https://github.com/wetransfer/rational_choice"
37
- s.licenses = ["MIT"]
38
- s.rubygems_version = "2.2.2"
39
- s.summary = "Makes life-concerning choices based on an informed coin toss"
7
+ s.required_rubygems_version = Gem::Requirement.new('>= 0') if s.respond_to? :required_rubygems_version=
8
+ s.require_paths = ['lib']
9
+ s.authors = ['Julik Tarkhanov']
10
+ s.date = Time.now.utc.strftime('%Y-%m-%d')
11
+ s.description = 'Fuzzy logic gate'
12
+ s.email = 'me@julik.nl'
13
+ s.extra_rdoc_files = ['LICENSE.txt', 'README.md']
14
+ s.files = `git ls-files -z`.split("\x0")
15
+ s.homepage = 'https://github.com/wetransfer/rational_choice'
16
+ s.licenses = ['MIT']
17
+ s.rubygems_version = '2.2.2'
18
+ s.summary = 'Makes life-concerning choices based on an informed coin toss'
40
19
 
41
- if s.respond_to? :specification_version then
42
- s.specification_version = 4
43
-
44
- if Gem::Version.new(Gem::VERSION) >= Gem::Version.new('1.2.0') then
45
- s.add_development_dependency(%q<yard>, [">= 0"])
46
- s.add_development_dependency(%q<rspec>, ["~> 3.4.0"])
47
- s.add_development_dependency(%q<rdoc>, ["~> 3.12"])
48
- s.add_development_dependency(%q<bundler>, ["~> 1.0"])
49
- s.add_development_dependency(%q<jeweler>, ["~> 2.0.1"])
50
- else
51
- s.add_dependency(%q<yard>, [">= 0"])
52
- s.add_dependency(%q<rspec>, ["~> 3.4.0"])
53
- s.add_dependency(%q<rdoc>, ["~> 3.12"])
54
- s.add_dependency(%q<bundler>, ["~> 1.0"])
55
- s.add_dependency(%q<jeweler>, ["~> 2.0.1"])
56
- end
57
- else
58
- s.add_dependency(%q<yard>, [">= 0"])
59
- s.add_dependency(%q<rspec>, ["~> 3.4.0"])
60
- s.add_dependency(%q<rdoc>, ["~> 3.12"])
61
- s.add_dependency(%q<bundler>, ["~> 1.0"])
62
- s.add_dependency(%q<jeweler>, ["~> 2.0.1"])
63
- end
20
+ s.specification_version = 4
21
+ s.add_development_dependency 'yard', '>= 0'
22
+ s.add_development_dependency 'rspec', '~> 3.4.0'
23
+ s.add_development_dependency 'rake', '~> 10'
24
+ s.add_development_dependency 'bundler', '~> 1.0'
25
+ s.add_development_dependency 'wetransfer_style', '0.5.0'
64
26
  end
65
-
@@ -8,7 +8,7 @@ describe 'RationalChoice::Dimension' do
8
8
  }.to raise_error(/Bounds were the same at 2/)
9
9
  end
10
10
  end
11
-
11
+
12
12
  describe 'with values at or beyound the thresholds' do
13
13
  it 'always evaluates to true for values above upper threshold' do
14
14
  d = RationalChoice::Dimension.new(false_at_or_below: 0, true_at_or_above: 1)
@@ -16,21 +16,21 @@ describe 'RationalChoice::Dimension' do
16
16
  expect(d.choose(1.1)).to eq(true)
17
17
  end
18
18
  end
19
-
19
+
20
20
  it 'always evaluates to true for values at upper threshold' do
21
21
  d = RationalChoice::Dimension.new(false_at_or_below: 0, true_at_or_above: 1)
22
22
  10_000.times do
23
23
  expect(d.choose(1)).to eq(true)
24
24
  end
25
25
  end
26
-
26
+
27
27
  it 'always evaluates to false for values at lower threshold' do
28
28
  d = RationalChoice::Dimension.new(false_at_or_below: 0, true_at_or_above: 1)
29
29
  10_000.times do
30
30
  expect(d.choose(0)).to eq(false)
31
31
  end
32
32
  end
33
-
33
+
34
34
  it 'always evaluates to false for values below lower threshold' do
35
35
  d = RationalChoice::Dimension.new(false_at_or_below: 0, true_at_or_above: 1)
36
36
  10_000.times do
@@ -38,98 +38,98 @@ describe 'RationalChoice::Dimension' do
38
38
  end
39
39
  end
40
40
  end
41
-
41
+
42
42
  describe 'with values between thresholds creates a sensible choice distribution' do
43
43
  it 'for 0.5 on a continuum from 0 to 1' do
44
44
  d = RationalChoice::Dimension.new(false_at_or_below: 0, true_at_or_above: 1)
45
45
  expect(d).to be_fuzzy(0.5)
46
-
46
+
47
47
  trues = 0
48
-
48
+
49
49
  n_evaluations = 100_000
50
50
  n_evaluations.times { trues += 1 if d.choose(0.5) }
51
-
51
+
52
52
  expect(trues).to be_within(1000).of(n_evaluations / 2)
53
53
  end
54
-
54
+
55
55
  it 'for 0.1 on a continuum from 0 to 1' do
56
56
  d = RationalChoice::Dimension.new(false_at_or_below: 0, true_at_or_above: 1)
57
57
  expect(d).to be_fuzzy(0.1)
58
-
58
+
59
59
  trues = 0
60
-
60
+
61
61
  n_evaluations = 100_000
62
62
  n_evaluations.times { trues += 1 if d.choose(0.1) }
63
-
63
+
64
64
  expect(trues).to be_within(1000).of(n_evaluations / 10)
65
65
  end
66
-
66
+
67
67
  it 'for 0.5 on a continuum from 1 to 0' do
68
68
  d = RationalChoice::Dimension.new(false_at_or_below: 1, true_at_or_above: 0)
69
69
  expect(d).to be_fuzzy(0.5)
70
-
70
+
71
71
  falses = 0
72
72
  n_evaluations = 100_000
73
- n_evaluations.times { falses += 1 if !d.choose(0.5) }
74
-
73
+ n_evaluations.times { falses += 1 unless d.choose(0.5) }
74
+
75
75
  expect(falses).to be_within(1000).of(n_evaluations / 2)
76
76
  end
77
-
77
+
78
78
  it 'for 0.1 on a continuum from 1 to 0' do
79
79
  d = RationalChoice::Dimension.new(false_at_or_below: 1, true_at_or_above: 0)
80
80
  expect(d).to be_fuzzy(0.1)
81
-
81
+
82
82
  trues = 0
83
-
83
+
84
84
  n_evaluations = 100_000
85
85
  n_evaluations.times { trues += 1 if d.choose(0.1) }
86
-
86
+
87
87
  expect(trues).to be_within(1000).of(n_evaluations / 10 * 9) # Over 90% of the choices must be trues
88
88
  end
89
-
89
+
90
90
  it 'for -0.5 on a continuum from -1 to 0' do
91
91
  d = RationalChoice::Dimension.new(false_at_or_below: -1, true_at_or_above: 0)
92
92
  expect(d).to be_fuzzy(-0.5)
93
-
93
+
94
94
  trues = 0
95
95
  n_evaluations = 100_000
96
96
  n_evaluations.times { trues += 1 if d.choose(-0.5) }
97
-
97
+
98
98
  expect(trues).to be_within(1000).of(n_evaluations / 2)
99
99
  end
100
-
100
+
101
101
  it 'for -0.1 on a continuum from -1 to 0' do
102
102
  d = RationalChoice::Dimension.new(false_at_or_below: -1, true_at_or_above: 0)
103
103
  expect(d).to be_fuzzy(-0.1)
104
-
104
+
105
105
  trues = 0
106
-
106
+
107
107
  n_evaluations = 100_000
108
108
  n_evaluations.times { trues += 1 if d.choose(-0.1) }
109
-
109
+
110
110
  expect(trues).to be_within(1000).of(n_evaluations / 10 * 9) # Over 90% of the choices must be trues
111
111
  end
112
-
112
+
113
113
  it 'for -0.5 on a continuum from 0 to -1' do
114
114
  d = RationalChoice::Dimension.new(false_at_or_below: 0, true_at_or_above: -1)
115
115
  expect(d).to be_fuzzy(-0.5)
116
-
116
+
117
117
  trues = 0
118
118
  n_evaluations = 100_000
119
119
  n_evaluations.times { trues += 1 if d.choose(-0.5) }
120
-
120
+
121
121
  expect(trues).to be_within(1000).of(n_evaluations / 2)
122
122
  end
123
-
123
+
124
124
  it 'for -0.1 on a continuum from 0 to -1' do
125
125
  d = RationalChoice::Dimension.new(false_at_or_below: 0, true_at_or_above: -1)
126
126
  expect(d).to be_fuzzy(-0.1)
127
-
127
+
128
128
  trues = 0
129
-
129
+
130
130
  n_evaluations = 100_000
131
131
  n_evaluations.times { trues += 1 if d.choose(-0.1) }
132
-
132
+
133
133
  expect(trues).to be_within(1000).of(n_evaluations / 10) # Over 90% of the choices must be trues
134
134
  end
135
135
  end
@@ -8,7 +8,7 @@ describe 'RationalChoice::ManyDimensions' do
8
8
  }.to raise_error(RationalChoice::CardinalityError)
9
9
  end
10
10
  end
11
-
11
+
12
12
  describe '.choose' do
13
13
  it 'raises a CardinalityError if the number of values does not match the number of dimensions' do
14
14
  md = RationalChoice::ManyDimensions.new(nil, nil, nil)
@@ -16,39 +16,38 @@ describe 'RationalChoice::ManyDimensions' do
16
16
  md.choose(1, 2)
17
17
  }.to raise_error(RationalChoice::CardinalityError)
18
18
  end
19
-
19
+
20
20
  let(:md) {
21
21
  one_to_zero = RationalChoice::Dimension.new(false_at_or_below: 0, true_at_or_above: 1)
22
22
  RationalChoice::ManyDimensions.new(one_to_zero, one_to_zero, one_to_zero)
23
23
  }
24
-
24
+
25
25
  it 'returns "true" when all dimensions are at or above upper bound' do
26
- 10_000.times { expect(md.choose(1,1,1)).to eq(true) }
27
- 10_000.times { expect(md.choose(2,2,2)).to eq(true) }
26
+ 10_000.times { expect(md.choose(1, 1, 1)).to eq(true) }
27
+ 10_000.times { expect(md.choose(2, 2, 2)).to eq(true) }
28
28
  end
29
-
29
+
30
30
  it 'returns "false" when all dimensions are at or below lower bound' do
31
- 10_000.times { expect(md.choose(0,0,0)).to eq(false) }
32
- 10_000.times { expect(md.choose(-1,-1,-1)).to eq(false) }
31
+ 10_000.times { expect(md.choose(0, 0, 0)).to eq(false) }
32
+ 10_000.times { expect(md.choose(-1, -1, -1)).to eq(false) }
33
33
  end
34
-
34
+
35
35
  it 'returns "true" in approximately 50% of the cases when all the values are at 0.5' do
36
36
  truthy = 0
37
37
  10_000.times { truthy += 1 if md.choose(0.5, 0.5, 0.5) }
38
38
  expect(truthy).to be_within(100).of(10_000 / 2)
39
39
  end
40
-
40
+
41
41
  it 'returns "true" in approximately 10% of the cases when all the values are at 0.1' do
42
42
  truthy = 0
43
43
  10_000.times { truthy += 1 if md.choose(0.1, 0.1, 0.1) }
44
44
  expect(truthy).to be_within(100).of(10_000 / 10)
45
45
  end
46
-
46
+
47
47
  it 'creates a very uniform distribution of values with random values across the board' do
48
48
  truthy = 0
49
49
  10_000.times { truthy += 1 if md.choose(rand, rand, rand) } # default rand() is 0..1
50
50
  expect(truthy).to be_within(200).of(10_000 / 2)
51
51
  end
52
52
  end
53
-
54
- end
53
+ end
@@ -1,9 +1,10 @@
1
1
  require File.expand_path(File.dirname(__FILE__) + '/spec_helper')
2
2
 
3
- describe "RationalChoice" do
4
- it "has the necessary constants" do
5
- RationalChoice::CardinalityError
6
- RationalChoice::Dimension
7
- RationalChoice::ManyDimensions
3
+ describe 'RationalChoice' do
4
+ it 'has the necessary constants' do
5
+ expect(RationalChoice::VERSION).to be_kind_of(String)
6
+ expect(RationalChoice::CardinalityError).to be_kind_of(Class)
7
+ expect(RationalChoice::Dimension).to be_kind_of(Class)
8
+ expect(RationalChoice::ManyDimensions).to be_kind_of(Class)
8
9
  end
9
10
  end
data/spec/spec_helper.rb CHANGED
@@ -4,4 +4,4 @@ $LOAD_PATH.unshift(File.dirname(__FILE__))
4
4
  require 'rspec'
5
5
  require 'rational_choice'
6
6
 
7
- RSpec.configure {|c| c.order = 'random' }
7
+ RSpec.configure { |c| c.order = 'random' }
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: rational_choice
3
3
  version: !ruby/object:Gem::Version
4
- version: 2.0.0
4
+ version: 2.0.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Julik Tarkhanov
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2016-02-07 00:00:00.000000000 Z
11
+ date: 2018-05-20 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: yard
@@ -39,19 +39,19 @@ dependencies:
39
39
  - !ruby/object:Gem::Version
40
40
  version: 3.4.0
41
41
  - !ruby/object:Gem::Dependency
42
- name: rdoc
42
+ name: rake
43
43
  requirement: !ruby/object:Gem::Requirement
44
44
  requirements:
45
45
  - - "~>"
46
46
  - !ruby/object:Gem::Version
47
- version: '3.12'
47
+ version: '10'
48
48
  type: :development
49
49
  prerelease: false
50
50
  version_requirements: !ruby/object:Gem::Requirement
51
51
  requirements:
52
52
  - - "~>"
53
53
  - !ruby/object:Gem::Version
54
- version: '3.12'
54
+ version: '10'
55
55
  - !ruby/object:Gem::Dependency
56
56
  name: bundler
57
57
  requirement: !ruby/object:Gem::Requirement
@@ -67,19 +67,19 @@ dependencies:
67
67
  - !ruby/object:Gem::Version
68
68
  version: '1.0'
69
69
  - !ruby/object:Gem::Dependency
70
- name: jeweler
70
+ name: wetransfer_style
71
71
  requirement: !ruby/object:Gem::Requirement
72
72
  requirements:
73
- - - "~>"
73
+ - - '='
74
74
  - !ruby/object:Gem::Version
75
- version: 2.0.1
75
+ version: 0.5.0
76
76
  type: :development
77
77
  prerelease: false
78
78
  version_requirements: !ruby/object:Gem::Requirement
79
79
  requirements:
80
- - - "~>"
80
+ - - '='
81
81
  - !ruby/object:Gem::Version
82
- version: 2.0.1
82
+ version: 0.5.0
83
83
  description: Fuzzy logic gate
84
84
  email: me@julik.nl
85
85
  executables: []
@@ -89,7 +89,9 @@ extra_rdoc_files:
89
89
  - README.md
90
90
  files:
91
91
  - ".document"
92
+ - ".gitignore"
92
93
  - ".rspec"
94
+ - ".rubocop.yml"
93
95
  - ".travis.yml"
94
96
  - Gemfile
95
97
  - LICENSE.txt
@@ -121,7 +123,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
121
123
  version: '0'
122
124
  requirements: []
123
125
  rubyforge_project:
124
- rubygems_version: 2.2.2
126
+ rubygems_version: 2.7.3
125
127
  signing_key:
126
128
  specification_version: 4
127
129
  summary: Makes life-concerning choices based on an informed coin toss