ocassionally 1.0.0
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 +7 -0
- data/.gitignore +19 -0
- data/Gemfile +4 -0
- data/LICENSE.txt +1 -0
- data/README.md +89 -0
- data/Rakefile +2 -0
- data/lib/ocassionally.rb +61 -0
- data/lib/ocassionally/version.rb +3 -0
- data/ocassionally.gemspec +23 -0
- metadata +80 -0
checksums.yaml
ADDED
@@ -0,0 +1,7 @@
|
|
1
|
+
---
|
2
|
+
SHA1:
|
3
|
+
metadata.gz: 854c08962e0c26c0efdd2b5a29e2aff3c2ab9331
|
4
|
+
data.tar.gz: 916d3534505324151ea0948a7f824b9f493f4c9b
|
5
|
+
SHA512:
|
6
|
+
metadata.gz: 98f07df61b9f475f153feba83db595501730efbc115ef02210497e4c7a48f7129b036134ca0fa52ecf3fd6d58421db286e09bb7c156ba329ae8f1ab27277dae6
|
7
|
+
data.tar.gz: 9ac5287c44faa1cf9ad8f99ed259797c858e0d16c9d269118b02c294277583e124129de96304b6efb1656f8e9b9b1ec3989b492f9236c679174e76ab5764eb80
|
data/.gitignore
ADDED
data/Gemfile
ADDED
data/LICENSE.txt
ADDED
@@ -0,0 +1 @@
|
|
1
|
+
You want it; its yours.
|
data/README.md
ADDED
@@ -0,0 +1,89 @@
|
|
1
|
+
# ocassionally
|
2
|
+
|
3
|
+
ocassionally it works; and, ocassionally it doesn't. Why should
|
4
|
+
your program work the same way every time? That is boring.
|
5
|
+
Add some spice to your code. Make debugging it harder.
|
6
|
+
Model real-world things with fuzzy conditionals.
|
7
|
+
|
8
|
+
Conditional blocks of the 'if' and 'unless' are so black-and-white.
|
9
|
+
Add some color to your code with ocassionally.
|
10
|
+
|
11
|
+
## Installation
|
12
|
+
|
13
|
+
Add this line to your application's Gemfile:
|
14
|
+
|
15
|
+
```ruby
|
16
|
+
gem 'ocassionally'
|
17
|
+
```
|
18
|
+
|
19
|
+
And then execute:
|
20
|
+
|
21
|
+
$ bundle
|
22
|
+
|
23
|
+
Or install it yourself as:
|
24
|
+
|
25
|
+
$ gem install ocassionally
|
26
|
+
|
27
|
+
## Usage
|
28
|
+
|
29
|
+
```ruby
|
30
|
+
require 'ocassionally'
|
31
|
+
include Ocassionally
|
32
|
+
|
33
|
+
# Default: default is 25% of the time test the conditional
|
34
|
+
ocassionally(some_conditional) do
|
35
|
+
# interesting things
|
36
|
+
end
|
37
|
+
|
38
|
+
# Check the conditional 75% of the time
|
39
|
+
ocassionally(75, some_conditional) do
|
40
|
+
# surprising things
|
41
|
+
end
|
42
|
+
|
43
|
+
# Is some_conditional too expensive to execute all the time?
|
44
|
+
# Only execute it ocassionally.
|
45
|
+
ocassionally(25, "some_conditional") do
|
46
|
+
# unexpected things
|
47
|
+
end
|
48
|
+
|
49
|
+
ocassionally("sleep(5)") { puts "Sorry I was sleeping. What do you want?" }
|
50
|
+
|
51
|
+
```
|
52
|
+
|
53
|
+
The order of the two parameters does not matter. The default for
|
54
|
+
the rate is 25% the default for the conditional is true. So that
|
55
|
+
means you can also do this:
|
56
|
+
|
57
|
+
```ruby
|
58
|
+
ocassionally do
|
59
|
+
# weird things a quarter of the time
|
60
|
+
end
|
61
|
+
|
62
|
+
ocassionally(95) do
|
63
|
+
# weird things most of the time
|
64
|
+
end
|
65
|
+
```
|
66
|
+
|
67
|
+
If you get tired of ocassionally doing things. Try
|
68
|
+
doing them #sometimes, #seldom, #often, #very_often, #every_time or #never.
|
69
|
+
|
70
|
+
If you don't like the simplistic #__probability_function(rate)
|
71
|
+
then over-ride it with your own. Its Ruby. Its your
|
72
|
+
play ground.
|
73
|
+
|
74
|
+
## Take a look at this other gem
|
75
|
+
|
76
|
+
I originally called this library maybe; but, that got co-opted by
|
77
|
+
folks who can't handle nil. Then I called it sometimes; but, someone else
|
78
|
+
already had that gem name which does something similar. Take a look
|
79
|
+
at this one:
|
80
|
+
|
81
|
+
https://github.com/sudara/sometimes
|
82
|
+
|
83
|
+
## Contributing
|
84
|
+
|
85
|
+
1. Fork it ( https://github.com/[my-github-username]/ocassionally/fork )
|
86
|
+
2. Create your feature branch (`git checkout -b my-new-feature`)
|
87
|
+
3. Commit your changes (`git commit -am 'Add some feature'`)
|
88
|
+
4. Push to the branch (`git push origin my-new-feature`)
|
89
|
+
5. Create a new Pull Request
|
data/Rakefile
ADDED
data/lib/ocassionally.rb
ADDED
@@ -0,0 +1,61 @@
|
|
1
|
+
module Ocassionally
|
2
|
+
|
3
|
+
def __probability_function(rate)
|
4
|
+
rand(100) < rate
|
5
|
+
end
|
6
|
+
|
7
|
+
def __get_rate_and_condition(args, default_rate, default_condition)
|
8
|
+
rate = default_rate
|
9
|
+
condition = default_condition
|
10
|
+
args.each do |arg|
|
11
|
+
rate = arg if [Fixnum, Float].include? arg.class
|
12
|
+
condition = arg if [String, TrueClass, FalseClass, NilClass].include? arg.class
|
13
|
+
end
|
14
|
+
if Float == rate.class
|
15
|
+
rate = (rate < 1) ? (rate * 100).to_i : rate.to_i
|
16
|
+
end
|
17
|
+
return rate, condition
|
18
|
+
end
|
19
|
+
|
20
|
+
def __ocassionally(rate, condition, block=nil)
|
21
|
+
if __probability_function(rate) && ( String == condition.class ? eval(condition) : condition )
|
22
|
+
block.call unless block.nil?
|
23
|
+
end
|
24
|
+
end
|
25
|
+
|
26
|
+
def sometimes(*args, &block)
|
27
|
+
rate, condition = __get_rate_and_condition(args, 50, true)
|
28
|
+
__ocassionally(rate, condition, block)
|
29
|
+
end
|
30
|
+
|
31
|
+
def ocassionally(*args, &block)
|
32
|
+
rate, condition = __get_rate_and_condition(args, 25, true)
|
33
|
+
__ocassionally(rate, condition, block)
|
34
|
+
end
|
35
|
+
|
36
|
+
def seldom(*args, &block)
|
37
|
+
rate, condition = __get_rate_and_condition(args, 5, true)
|
38
|
+
__ocassionally(rate, condition, block)
|
39
|
+
end
|
40
|
+
|
41
|
+
def often(*args, &block)
|
42
|
+
rate, condition = __get_rate_and_condition(args, 75, true)
|
43
|
+
__ocassionally(rate, condition, block)
|
44
|
+
end
|
45
|
+
|
46
|
+
def very_often(*args, &block)
|
47
|
+
rate, condition = __get_rate_and_condition(args, 95, true)
|
48
|
+
__ocassionally(rate, condition, block)
|
49
|
+
end
|
50
|
+
|
51
|
+
def every_time(*args, &block)
|
52
|
+
# defered contionals are ignored
|
53
|
+
yield if block_given?
|
54
|
+
end
|
55
|
+
|
56
|
+
def never(*args, &block)
|
57
|
+
# noop; but, there may be a side-effect if your conditional changes state
|
58
|
+
end
|
59
|
+
|
60
|
+
end
|
61
|
+
|
@@ -0,0 +1,23 @@
|
|
1
|
+
# coding: utf-8
|
2
|
+
lib = File.expand_path('../lib', __FILE__)
|
3
|
+
$LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
|
4
|
+
require 'ocassionally/version'
|
5
|
+
|
6
|
+
Gem::Specification.new do |spec|
|
7
|
+
spec.name = "ocassionally"
|
8
|
+
spec.version = Ocassionally::VERSION
|
9
|
+
spec.authors = ["Dewayne VanHoozer"]
|
10
|
+
spec.email = ["dvanhoozer@gmail.com"]
|
11
|
+
spec.summary = %q{Ocassionally it works; and, ocassionally it doesn't}
|
12
|
+
spec.description = %q{Probabilistic conditionals for fuzziness.}
|
13
|
+
spec.homepage = "http://github.com/MadBomber/ocassionally"
|
14
|
+
spec.license = "You want it, its yours"
|
15
|
+
|
16
|
+
spec.files = `git ls-files -z`.split("\x0")
|
17
|
+
spec.executables = spec.files.grep(%r{^bin/}) { |f| File.basename(f) }
|
18
|
+
spec.test_files = spec.files.grep(%r{^(test|spec|features)/})
|
19
|
+
spec.require_paths = ["lib"]
|
20
|
+
|
21
|
+
spec.add_development_dependency "bundler", "~> 1.7"
|
22
|
+
spec.add_development_dependency "rake", "~> 10.0"
|
23
|
+
end
|
metadata
ADDED
@@ -0,0 +1,80 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: ocassionally
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 1.0.0
|
5
|
+
platform: ruby
|
6
|
+
authors:
|
7
|
+
- Dewayne VanHoozer
|
8
|
+
autorequire:
|
9
|
+
bindir: bin
|
10
|
+
cert_chain: []
|
11
|
+
date: 2014-09-19 00:00:00.000000000 Z
|
12
|
+
dependencies:
|
13
|
+
- !ruby/object:Gem::Dependency
|
14
|
+
name: bundler
|
15
|
+
requirement: !ruby/object:Gem::Requirement
|
16
|
+
requirements:
|
17
|
+
- - "~>"
|
18
|
+
- !ruby/object:Gem::Version
|
19
|
+
version: '1.7'
|
20
|
+
type: :development
|
21
|
+
prerelease: false
|
22
|
+
version_requirements: !ruby/object:Gem::Requirement
|
23
|
+
requirements:
|
24
|
+
- - "~>"
|
25
|
+
- !ruby/object:Gem::Version
|
26
|
+
version: '1.7'
|
27
|
+
- !ruby/object:Gem::Dependency
|
28
|
+
name: rake
|
29
|
+
requirement: !ruby/object:Gem::Requirement
|
30
|
+
requirements:
|
31
|
+
- - "~>"
|
32
|
+
- !ruby/object:Gem::Version
|
33
|
+
version: '10.0'
|
34
|
+
type: :development
|
35
|
+
prerelease: false
|
36
|
+
version_requirements: !ruby/object:Gem::Requirement
|
37
|
+
requirements:
|
38
|
+
- - "~>"
|
39
|
+
- !ruby/object:Gem::Version
|
40
|
+
version: '10.0'
|
41
|
+
description: Probabilistic conditionals for fuzziness.
|
42
|
+
email:
|
43
|
+
- dvanhoozer@gmail.com
|
44
|
+
executables: []
|
45
|
+
extensions: []
|
46
|
+
extra_rdoc_files: []
|
47
|
+
files:
|
48
|
+
- ".gitignore"
|
49
|
+
- Gemfile
|
50
|
+
- LICENSE.txt
|
51
|
+
- README.md
|
52
|
+
- Rakefile
|
53
|
+
- lib/ocassionally.rb
|
54
|
+
- lib/ocassionally/version.rb
|
55
|
+
- ocassionally.gemspec
|
56
|
+
homepage: http://github.com/MadBomber/ocassionally
|
57
|
+
licenses:
|
58
|
+
- You want it, its yours
|
59
|
+
metadata: {}
|
60
|
+
post_install_message:
|
61
|
+
rdoc_options: []
|
62
|
+
require_paths:
|
63
|
+
- lib
|
64
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
65
|
+
requirements:
|
66
|
+
- - ">="
|
67
|
+
- !ruby/object:Gem::Version
|
68
|
+
version: '0'
|
69
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
70
|
+
requirements:
|
71
|
+
- - ">="
|
72
|
+
- !ruby/object:Gem::Version
|
73
|
+
version: '0'
|
74
|
+
requirements: []
|
75
|
+
rubyforge_project:
|
76
|
+
rubygems_version: 2.3.0
|
77
|
+
signing_key:
|
78
|
+
specification_version: 4
|
79
|
+
summary: Ocassionally it works; and, ocassionally it doesn't
|
80
|
+
test_files: []
|