nkpart-prohax 1.0.2 → 1.0.3

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.
@@ -7,12 +7,16 @@ coverage/index.html
7
7
  coverage/lib-prohax-box_rb.html
8
8
  coverage/lib-prohax-either_rb.html
9
9
  coverage/lib-prohax-let_in_rb.html
10
+ coverage/lib-prohax-metaclass_rb.html
10
11
  coverage/lib-prohax-strucked_rb.html
11
12
  coverage/lib-prohax_rb.html
12
13
  lib/prohax.rb
13
14
  lib/prohax/box.rb
14
15
  lib/prohax/either.rb
15
16
  lib/prohax/let_in.rb
17
+ lib/prohax/metaclass.rb
18
+ lib/prohax/patches/enumerable.rb
19
+ lib/prohax/patches/symbol.rb
16
20
  lib/prohax/strucked.rb
17
21
  prohax.gemspec
18
22
  script/console
data/README.txt CHANGED
@@ -11,8 +11,17 @@ Just some hax that I use.
11
11
  * Let-in - a neat syntax that's a bit like haskell. Contents of the hash supplied to `let()`
12
12
  are defined as functions on a container, on which the block passed to `in` is instance_eval'd with.
13
13
 
14
- let( :awesome => proc { |n| "#{n} is awesome." }).in { [1,2,3].map { |e| awesome(e) }
14
+ let( :awesome => proc { |n| "#{n} is awesome." }).in { [1,2,3].map { |e| awesome(e) }
15
+
16
+ It can also be used to create mini dsl things like this:
17
+
18
+ def add a
19
+ let(:to => proc { |b| b + a })
20
+ end
15
21
 
22
+ add(5).to(3) # <= 8
23
+
24
+
16
25
  * Strucked - a class builder, that just instantiates instance vars
17
26
 
18
27
  # before
@@ -27,6 +36,12 @@ Just some hax that I use.
27
36
  class Foo < Strucked.build(:a, :b)
28
37
  end
29
38
 
39
+ # with readers
40
+ class Foo < Strucked.build(:a, :b).with_readers
41
+ end
42
+
43
+ Foo.new(5, 10).a # <= 5
44
+
30
45
  * Kernel#either - a kind of either-like thing.
31
46
 
32
47
  # If no exceptions are thrown, `failure` will be nil and `success` will be the result of the block.
@@ -39,12 +54,6 @@ Just some hax that I use.
39
54
  success, failure = either { 5 }
40
55
  success # <= 5
41
56
 
42
-
43
-
44
- == SYNOPSIS:
45
-
46
- FIX (code sample of usage)
47
-
48
57
  == LICENSE:
49
58
 
50
59
  (The MIT License)
@@ -1,7 +1,7 @@
1
1
  $: << File.expand_path(File.dirname(__FILE__))
2
2
 
3
3
  module Prohax
4
- VERSION = '1.0.2'
4
+ VERSION = '1.0.3'
5
5
  end
6
6
 
7
7
  require 'prohax/strucked'
@@ -1,12 +1,6 @@
1
- require 'prohax/strucked'
1
+ require 'prohax/metaclass'
2
2
 
3
3
  class LetInContainer
4
- def metaclass
5
- class <<self
6
- self
7
- end
8
- end
9
-
10
4
  def initialize defines
11
5
  defines.each do |key, value|
12
6
  if value.respond_to? :call then
@@ -0,0 +1,7 @@
1
+ class Object
2
+ def metaclass
3
+ class <<self
4
+ self
5
+ end
6
+ end
7
+ end
@@ -0,0 +1,44 @@
1
+ module Enumerable
2
+ def index_by &key_function
3
+ inject({}) do |accum, elem|
4
+ accum[key_function.call(elem)] = elem
5
+ accum
6
+ end
7
+ end
8
+
9
+ def as_index_for &value_function
10
+ inject({}) do |accum, elem|
11
+ accum[elem] = value_function.call(elem)
12
+ accum
13
+ end
14
+ end
15
+
16
+ def take_while &pred
17
+ result = []
18
+ each do |elem|
19
+ if (!pred.call(elem))
20
+ return result
21
+ end
22
+ result << elem
23
+ end
24
+ end
25
+
26
+ def group_by &key_function
27
+ inject(Hash.new { |h,k| h[k] = [] }) do |hsh,elem|
28
+ hsh[key_function.call(elem)] << elem
29
+ hsh
30
+ end
31
+ end
32
+
33
+ def grepv re
34
+ select { |s| s !~ re }
35
+ end
36
+
37
+ def zip_with arr, &blk
38
+ zip(arr).map(&blk)
39
+ end
40
+
41
+ def inject_with sym
42
+ inject { |a, b| a.send(sym, b) }
43
+ end
44
+ end
@@ -0,0 +1,5 @@
1
+ class Symbol
2
+ def to_proc
3
+ proc { |x| x.send(self) }
4
+ end
5
+ end
@@ -2,26 +2,34 @@
2
2
  class Strucked
3
3
  def self.build *fields
4
4
  cls = Class.new
5
- cls.class_eval <<EOS
5
+ cls.class_eval <<-EOS
6
6
  def self.fields
7
7
  #{fields.inspect}
8
8
  end
9
+ EOS
10
+ cls.class_eval {
11
+ def self.with_readers
12
+ fields.each do |f|
13
+ attr_reader f
14
+ end
15
+ self
16
+ end
9
17
 
10
18
  def initialize *values
11
19
  if self.class.fields.size != values.size
12
- raise ArgumentError.new("Wrong number of arguments, expected \#\{self.class.fields.size\} got \#\{values.size\}")
20
+ raise ArgumentError.new("Wrong number of arguments, expected #{self.class.fields.size} got #{values.size}")
13
21
  end
14
22
  self.class.fields.zip(values).each do |fld, value|
15
- self.instance_variable_set("@\#\{fld\}", value)
23
+ self.instance_variable_set("@#{fld}", value)
16
24
  end
17
25
  end
18
26
 
19
27
  def == other
20
28
  self.class.fields.inject(true) do |memo, f|
21
- memo && (self.instance_variable_get("@\#\{f\}") == other.instance_variable_get("@\#\{f\}"))
29
+ memo && (self.instance_variable_get("@#{f}") == other.instance_variable_get("@#{f}"))
22
30
  end
23
31
  end
24
- EOS
32
+ }
25
33
  cls
26
34
  end
27
35
  end
@@ -2,15 +2,15 @@
2
2
 
3
3
  Gem::Specification.new do |s|
4
4
  s.name = %q{prohax}
5
- s.version = "1.0.2"
5
+ s.version = "1.0.3"
6
6
 
7
7
  s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
8
8
  s.authors = ["Nick Partridge"]
9
- s.date = %q{2008-11-27}
9
+ s.date = %q{2008-12-10}
10
10
  s.description = %q{}
11
11
  s.email = ["nkpart@gmail.com"]
12
12
  s.extra_rdoc_files = ["History.txt", "Manifest.txt", "PostInstall.txt", "README.txt"]
13
- s.files = ["History.txt", "Manifest.txt", "PostInstall.txt", "README.txt", "Rakefile", "coverage/index.html", "coverage/lib-prohax-box_rb.html", "coverage/lib-prohax-either_rb.html", "coverage/lib-prohax-let_in_rb.html", "coverage/lib-prohax-strucked_rb.html", "coverage/lib-prohax_rb.html", "lib/prohax.rb", "lib/prohax/box.rb", "lib/prohax/either.rb", "lib/prohax/let_in.rb", "lib/prohax/strucked.rb", "prohax.gemspec", "script/console", "script/destroy", "script/generate", "spec/box_spec.rb", "spec/either_spec.rb", "spec/let_in_syntax_spec.rb", "spec/spec.opts", "spec/spec_helper.rb", "spec/strucked_spec.rb", "tasks/rspec.rake", "test_gem.sh"]
13
+ s.files = ["History.txt", "Manifest.txt", "PostInstall.txt", "README.txt", "Rakefile", "coverage/index.html", "coverage/lib-prohax-box_rb.html", "coverage/lib-prohax-either_rb.html", "coverage/lib-prohax-let_in_rb.html", "coverage/lib-prohax-metaclass_rb.html", "coverage/lib-prohax-strucked_rb.html", "coverage/lib-prohax_rb.html", "lib/prohax.rb", "lib/prohax/box.rb", "lib/prohax/either.rb", "lib/prohax/let_in.rb", "lib/prohax/metaclass.rb", "lib/prohax/patches/enumerable.rb", "lib/prohax/patches/symbol.rb", "lib/prohax/strucked.rb", "prohax.gemspec", "script/console", "script/destroy", "script/generate", "spec/box_spec.rb", "spec/either_spec.rb", "spec/let_in_syntax_spec.rb", "spec/spec.opts", "spec/spec_helper.rb", "spec/strucked_spec.rb", "tasks/rspec.rake", "test_gem.sh"]
14
14
  s.has_rdoc = true
15
15
  s.homepage = %q{http://github.com/nkpart/prohax}
16
16
  s.rdoc_options = ["--main", "README.txt"]
@@ -37,6 +37,10 @@ describe Strucked do
37
37
  q = f.new 5
38
38
  p.should == q
39
39
  end
40
-
40
+
41
+ it "should have a chainable with_readers method" do
42
+ c = Strucked.build(:a).with_readers
43
+ c.new(5).a.should == 5
44
+ end
41
45
  end
42
46
 
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: nkpart-prohax
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.0.2
4
+ version: 1.0.3
5
5
  platform: ruby
6
6
  authors:
7
7
  - Nick Partridge
@@ -9,7 +9,7 @@ autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
11
 
12
- date: 2008-11-27 00:00:00 -08:00
12
+ date: 2008-12-10 00:00:00 -08:00
13
13
  default_executable:
14
14
  dependencies:
15
15
  - !ruby/object:Gem::Dependency
@@ -43,12 +43,16 @@ files:
43
43
  - coverage/lib-prohax-box_rb.html
44
44
  - coverage/lib-prohax-either_rb.html
45
45
  - coverage/lib-prohax-let_in_rb.html
46
+ - coverage/lib-prohax-metaclass_rb.html
46
47
  - coverage/lib-prohax-strucked_rb.html
47
48
  - coverage/lib-prohax_rb.html
48
49
  - lib/prohax.rb
49
50
  - lib/prohax/box.rb
50
51
  - lib/prohax/either.rb
51
52
  - lib/prohax/let_in.rb
53
+ - lib/prohax/metaclass.rb
54
+ - lib/prohax/patches/enumerable.rb
55
+ - lib/prohax/patches/symbol.rb
52
56
  - lib/prohax/strucked.rb
53
57
  - prohax.gemspec
54
58
  - script/console