switchrb 0.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.
@@ -0,0 +1,3 @@
1
+ *~
2
+ \#*
3
+ \.\#*
data/Gemfile ADDED
@@ -0,0 +1,3 @@
1
+ source :rubygems
2
+
3
+ gemspec
@@ -0,0 +1,5 @@
1
+ ## Switch(rb)
2
+
3
+ Adds a switch statement with fallthrough like Java or C++.
4
+
5
+ Temporarily named switchrb while I attempt to free the name "switch" from the old placeholder on rubygems.org.
@@ -0,0 +1,5 @@
1
+ module Kernel
2
+ def switch(switcher, &block)
3
+ Switch.execute(switcher, &block)
4
+ end
5
+ end
@@ -0,0 +1,34 @@
1
+ require 'kernel_ext'
2
+
3
+ class Switch
4
+ ALWAYS_EXECUTE = Object.new
5
+
6
+ class << self
7
+ alias :execute :new
8
+ end
9
+
10
+ def initialize(switcher, &block)
11
+ @procs = []
12
+ @switcher = switcher
13
+ instance_eval(&block)
14
+ end
15
+
16
+ def match(matcher, &block)
17
+ block ||= Proc.new {}
18
+ @procs << [matcher, block]
19
+ end
20
+
21
+ def all(&block)
22
+ match(ALWAYS_EXECUTE, &block)
23
+ execute_procs(@switcher)
24
+ end
25
+
26
+ def execute_procs(switcher)
27
+ matched = false
28
+ @procs.each do |matcher, proc|
29
+ next unless matched || matcher == switcher || matcher.object_id == ALWAYS_EXECUTE.object_id
30
+ matched = true
31
+ proc.call
32
+ end
33
+ end
34
+ end
@@ -0,0 +1,3 @@
1
+ module Switch
2
+ VERSION = '0.0.1'
3
+ end
@@ -0,0 +1,20 @@
1
+ require 'rubygems'
2
+ require 'bundler'
3
+ require 'spork'
4
+
5
+ Spork.prefork do
6
+ require 'rspec'
7
+ require 'pp'
8
+ Dir[File.join(File.expand_path("../../spec/support/**/*.rb", __FILE__))].each { |f| require f }
9
+
10
+ RSpec.configure do |config|
11
+ config.mock_with :rspec
12
+ config.treat_symbols_as_metadata_keys_with_true_values = true
13
+ config.filter_run focus: true
14
+ config.run_all_when_everything_filtered = true
15
+ end
16
+ end
17
+
18
+ Spork.each_run do
19
+ require 'switch'
20
+ end
@@ -0,0 +1,74 @@
1
+ require 'spec_helper'
2
+
3
+ describe Switch do
4
+ it "should allow fallthrough" do
5
+ a = 0
6
+ switch(:three) do
7
+ match(:one) {
8
+ a += 1
9
+ }
10
+ match(:two) {
11
+ a += 1
12
+ }
13
+ match(:three) {
14
+ a += 1
15
+ }
16
+ match(:four) {
17
+ a += 1
18
+ }
19
+ match(:five) {
20
+ a += 1
21
+ }
22
+ all {
23
+ a += 1
24
+ }
25
+ end
26
+
27
+ a.should == 4
28
+ end
29
+
30
+ it "should respect break statements" do
31
+ a = 0
32
+ switch(:three) do
33
+ match(:one) {
34
+ a += 1
35
+ }
36
+ match(:two) {
37
+ a += 1
38
+ }
39
+ match(:three) {
40
+ a += 1
41
+ }
42
+ match(:four) {
43
+ a += 1
44
+ break
45
+ }
46
+ match(:five) {
47
+ a += 1
48
+ }
49
+ all {
50
+ a += 1
51
+ }
52
+ end
53
+
54
+ a.should == 2
55
+ end
56
+
57
+ it "should allow blank matchers" do
58
+ a = 0
59
+ switch(:two) do
60
+ match(:one)
61
+ match(:two)
62
+ match(:three) {
63
+ a += 1
64
+ }
65
+ all {
66
+ a += 1
67
+ }
68
+ end
69
+
70
+ a.should == 2
71
+ end
72
+
73
+
74
+ end
@@ -0,0 +1,27 @@
1
+ # -*- encoding: utf-8 -*-
2
+ require File.expand_path('../lib/switch/version', __FILE__)
3
+
4
+ Gem::Specification.new do |s|
5
+ s.authors = ["Josiah Kiehl"]
6
+ s.email = ["josiah@skirmisher.net"]
7
+ s.description = %q{Adds a switch statement to Ruby}
8
+ s.summary = s.description
9
+ s.homepage = "https://github.com/bluepojo/switch"
10
+
11
+ s.files = `git ls-files`.split($\)
12
+ s.executables = s.files.grep(%r{^bin/}).map{ |f| File.basename(f) }
13
+ s.test_files = s.files.grep(%r{^(spec|features)/})
14
+ s.name = "switchrb"
15
+ s.require_paths = ["lib"]
16
+ s.version = Switch::VERSION
17
+ s.required_ruby_version = ">= 1.9.1"
18
+
19
+ s.add_development_dependency 'rspec'
20
+ s.add_development_dependency 'spork'
21
+ s.add_development_dependency 'yard'
22
+ s.add_development_dependency 'guard', '>= 1.4.0'
23
+ s.add_development_dependency 'guard-rspec', '>= 2.0.0'
24
+ s.add_development_dependency 'guard-cucumber'
25
+ s.add_development_dependency 'guard-spork'
26
+ s.add_development_dependency 'guard-yard'
27
+ end
metadata ADDED
@@ -0,0 +1,145 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: switchrb
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.0.1
5
+ prerelease:
6
+ platform: ruby
7
+ authors:
8
+ - Josiah Kiehl
9
+ autorequire:
10
+ bindir: bin
11
+ cert_chain: []
12
+ date: 2012-10-16 00:00:00.000000000 Z
13
+ dependencies:
14
+ - !ruby/object:Gem::Dependency
15
+ name: rspec
16
+ requirement: &70254202208280 !ruby/object:Gem::Requirement
17
+ none: false
18
+ requirements:
19
+ - - ! '>='
20
+ - !ruby/object:Gem::Version
21
+ version: '0'
22
+ type: :development
23
+ prerelease: false
24
+ version_requirements: *70254202208280
25
+ - !ruby/object:Gem::Dependency
26
+ name: spork
27
+ requirement: &70254202207780 !ruby/object:Gem::Requirement
28
+ none: false
29
+ requirements:
30
+ - - ! '>='
31
+ - !ruby/object:Gem::Version
32
+ version: '0'
33
+ type: :development
34
+ prerelease: false
35
+ version_requirements: *70254202207780
36
+ - !ruby/object:Gem::Dependency
37
+ name: yard
38
+ requirement: &70254202207260 !ruby/object:Gem::Requirement
39
+ none: false
40
+ requirements:
41
+ - - ! '>='
42
+ - !ruby/object:Gem::Version
43
+ version: '0'
44
+ type: :development
45
+ prerelease: false
46
+ version_requirements: *70254202207260
47
+ - !ruby/object:Gem::Dependency
48
+ name: guard
49
+ requirement: &70254202206540 !ruby/object:Gem::Requirement
50
+ none: false
51
+ requirements:
52
+ - - ! '>='
53
+ - !ruby/object:Gem::Version
54
+ version: 1.4.0
55
+ type: :development
56
+ prerelease: false
57
+ version_requirements: *70254202206540
58
+ - !ruby/object:Gem::Dependency
59
+ name: guard-rspec
60
+ requirement: &70254202205880 !ruby/object:Gem::Requirement
61
+ none: false
62
+ requirements:
63
+ - - ! '>='
64
+ - !ruby/object:Gem::Version
65
+ version: 2.0.0
66
+ type: :development
67
+ prerelease: false
68
+ version_requirements: *70254202205880
69
+ - !ruby/object:Gem::Dependency
70
+ name: guard-cucumber
71
+ requirement: &70254202205440 !ruby/object:Gem::Requirement
72
+ none: false
73
+ requirements:
74
+ - - ! '>='
75
+ - !ruby/object:Gem::Version
76
+ version: '0'
77
+ type: :development
78
+ prerelease: false
79
+ version_requirements: *70254202205440
80
+ - !ruby/object:Gem::Dependency
81
+ name: guard-spork
82
+ requirement: &70254202204980 !ruby/object:Gem::Requirement
83
+ none: false
84
+ requirements:
85
+ - - ! '>='
86
+ - !ruby/object:Gem::Version
87
+ version: '0'
88
+ type: :development
89
+ prerelease: false
90
+ version_requirements: *70254202204980
91
+ - !ruby/object:Gem::Dependency
92
+ name: guard-yard
93
+ requirement: &70254202204560 !ruby/object:Gem::Requirement
94
+ none: false
95
+ requirements:
96
+ - - ! '>='
97
+ - !ruby/object:Gem::Version
98
+ version: '0'
99
+ type: :development
100
+ prerelease: false
101
+ version_requirements: *70254202204560
102
+ description: Adds a switch statement to Ruby
103
+ email:
104
+ - josiah@skirmisher.net
105
+ executables: []
106
+ extensions: []
107
+ extra_rdoc_files: []
108
+ files:
109
+ - .gitignore
110
+ - Gemfile
111
+ - README.md
112
+ - lib/kernel_ext.rb
113
+ - lib/switch.rb
114
+ - lib/switch/version.rb
115
+ - spec/spec_helper.rb
116
+ - spec/switch_spec.rb
117
+ - switchrb.gemspec
118
+ homepage: https://github.com/bluepojo/switch
119
+ licenses: []
120
+ post_install_message:
121
+ rdoc_options: []
122
+ require_paths:
123
+ - lib
124
+ required_ruby_version: !ruby/object:Gem::Requirement
125
+ none: false
126
+ requirements:
127
+ - - ! '>='
128
+ - !ruby/object:Gem::Version
129
+ version: 1.9.1
130
+ required_rubygems_version: !ruby/object:Gem::Requirement
131
+ none: false
132
+ requirements:
133
+ - - ! '>='
134
+ - !ruby/object:Gem::Version
135
+ version: '0'
136
+ requirements: []
137
+ rubyforge_project:
138
+ rubygems_version: 1.8.11
139
+ signing_key:
140
+ specification_version: 3
141
+ summary: Adds a switch statement to Ruby
142
+ test_files:
143
+ - spec/spec_helper.rb
144
+ - spec/switch_spec.rb
145
+ has_rdoc: