switchrb 0.0.1

Sign up to get free protection for your applications and to get access to all the features.
@@ -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: