rns 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.
data/.document ADDED
@@ -0,0 +1,6 @@
1
+ lib/**/*.rb
2
+ bin/*
3
+ -
4
+ features/**/*.feature
5
+ LICENSE.txt
6
+ README.md
data/.gitignore ADDED
@@ -0,0 +1,49 @@
1
+ # rcov generated
2
+ coverage
3
+
4
+ # rdoc generated
5
+ rdoc
6
+
7
+ # yard generated
8
+ doc
9
+ .yardoc
10
+
11
+ # bundler
12
+ .bundle
13
+
14
+ # jeweler generated
15
+ pkg
16
+ *.gem
17
+
18
+ # Have editor/IDE/OS specific files you need to ignore? Consider using a global gitignore:
19
+ #
20
+ # * Create a file at ~/.gitignore
21
+ # * Include files you want ignored
22
+ # * Run: git config --global core.excludesfile ~/.gitignore
23
+ #
24
+ # After doing this, these files will be ignored in all your git projects,
25
+ # saving you from having to 'pollute' every project you touch with them
26
+ #
27
+ # 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)
28
+ #
29
+ # For MacOS:
30
+ #
31
+ .DS_Store
32
+
33
+ # For TextMate
34
+ #*.tmproj
35
+ #tmtags
36
+
37
+ # For emacs:
38
+ #*~
39
+ #\#*
40
+ #.\#*
41
+
42
+ # For vim:
43
+ #*.swp
44
+
45
+ # For redcar:
46
+ #.redcar
47
+
48
+ # For rubinius:
49
+ #*.rbc
data/.rvmrc ADDED
@@ -0,0 +1 @@
1
+ rvm use ruby-1.9.3@rns
data/.travis.yml ADDED
@@ -0,0 +1,12 @@
1
+ language: ruby
2
+ rvm:
3
+ - 1.9.3
4
+
5
+ # Only build master branch
6
+ branches:
7
+ only:
8
+ - master
9
+
10
+ # To stop Travis from running tests for a new commit,
11
+ # add the following to your commit message: [ci skip]
12
+ # You should add this when you edit documentation or comments, etc.
data/Gemfile ADDED
@@ -0,0 +1,7 @@
1
+ source 'http://rubygems.org'
2
+
3
+ gemspec
4
+
5
+ group :test do
6
+ gem 'rake'
7
+ end
data/Gemfile.lock ADDED
@@ -0,0 +1,41 @@
1
+ PATH
2
+ remote: .
3
+ specs:
4
+ rns (0.0.1)
5
+
6
+ GEM
7
+ remote: http://rubygems.org/
8
+ specs:
9
+ diff-lcs (1.1.3)
10
+ ffi (1.0.11)
11
+ guard (1.0.1)
12
+ ffi (>= 0.5.0)
13
+ thor (~> 0.14.6)
14
+ guard-rspec (0.5.8)
15
+ guard (>= 0.8.4)
16
+ multi_json (1.0.3)
17
+ rake (0.9.2.2)
18
+ rspec (2.7.0)
19
+ rspec-core (~> 2.7.0)
20
+ rspec-expectations (~> 2.7.0)
21
+ rspec-mocks (~> 2.7.0)
22
+ rspec-core (2.7.1)
23
+ rspec-expectations (2.7.0)
24
+ diff-lcs (~> 1.1.2)
25
+ rspec-mocks (2.7.0)
26
+ simplecov (0.5.4)
27
+ multi_json (~> 1.0.3)
28
+ simplecov-html (~> 0.5.3)
29
+ simplecov-html (0.5.3)
30
+ thor (0.14.6)
31
+
32
+ PLATFORMS
33
+ ruby
34
+
35
+ DEPENDENCIES
36
+ guard
37
+ guard-rspec
38
+ rake
39
+ rns!
40
+ rspec
41
+ simplecov
data/Guardfile ADDED
@@ -0,0 +1,13 @@
1
+ if RbConfig::CONFIG['host_os'] =~ /linux/
2
+ notification :notifysend
3
+ end
4
+
5
+ guard 'rspec',
6
+ version: 2,
7
+ cli: '--format documentation',
8
+ all_on_start: false,
9
+ all_after_pass: false do
10
+ watch(%r{^spec/.+_spec\.rb$})
11
+ watch(%r{^lib/(.+)\.rb$}) { |m| "spec/lib/#{m[1]}_spec.rb" }
12
+ watch('spec/spec_helper.rb') { "spec" }
13
+ end
data/LICENSE.txt ADDED
@@ -0,0 +1,24 @@
1
+ rns is distributed under the following terms:
2
+
3
+ Copyright (c) Alan Dipert <alan@dipert.org>. All rights reserved.
4
+
5
+ Redistribution and use in source and binary forms, with or without
6
+ modification, are permitted provided that the following conditions
7
+ are met:
8
+ 1. Redistributions of source code must retain the above copyright
9
+ notice, this list of conditions and the following disclaimer.
10
+ 2. Redistributions in binary form must reproduce the above copyright
11
+ notice, this list of conditions and the following disclaimer in the
12
+ documentation and/or other materials provided with the distribution.
13
+
14
+ THIS SOFTWARE IS PROVIDED BY AUTHOR AND CONTRIBUTORS ``AS IS'' AND
15
+ ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
16
+ IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
17
+ ARE DISCLAIMED. IN NO EVENT SHALL AUTHOR OR CONTRIBUTORS BE LIABLE
18
+ FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
19
+ DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
20
+ OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
21
+ HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
22
+ LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
23
+ OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
24
+ SUCH DAMAGE.
data/README.md ADDED
@@ -0,0 +1,61 @@
1
+ `rns`, which stands for "Ruby namespaces", is a small library for
2
+ using classes and modules as packages of functions in order to support
3
+ functional programming in Ruby. It is inspired by
4
+ [Clojure's](http://clojure.org) `ns` macro and namespace system.
5
+
6
+ [![Build Status](https://secure.travis-ci.org/alandipert/rns.png)](http://travis-ci.org/alandipert/rns)
7
+
8
+ # Usage
9
+
10
+ ## Importing Methods into Classes
11
+
12
+ ```ruby
13
+ require 'rns'
14
+
15
+ module Arithmetic
16
+ def self.dec(n) n - 1; end
17
+ def self.inc(n) n + 1; end
18
+ end
19
+
20
+ module Statistics
21
+ def self.avg(arr); arr.reduce(:+) / arr.count; end
22
+ end
23
+
24
+ class Main < Rns
25
+ def use
26
+ {Math => [:inc],
27
+ Statistics => [:avg]}
28
+ end
29
+
30
+ def main
31
+ puts "1+1 is #{inc 1} and the average of [1,2,3] is #{avg [1,2,3]}"
32
+ end
33
+ end
34
+
35
+ Main.new.main
36
+ ```
37
+
38
+ ## Importing Methods into Blocks
39
+
40
+ ```ruby
41
+ Rns::using [Math, [:inc], Statistics, [:avg]] do
42
+ puts avg((1..10).to_a.map(&method(:inc)))
43
+ end
44
+ ```
45
+
46
+ Please see the
47
+ [tests](https://github.com/alandipert/rns/tree/master/spec/rns) for more
48
+ usage examples.
49
+
50
+ # Rationale
51
+
52
+ Ruby has good functional programming support, but the class and module
53
+ system doesn't lend itself to organizing and accessing functions.
54
+ With `rns` I hope to make it at least slightly easier to build Ruby
55
+ programs primarily out of pure functions.
56
+
57
+ # Thanks
58
+
59
+ To [Sam Umbach](https://twitter.com/samumbach) for helping me tame the
60
+ eigenclass, and to my employer [Relevance](http://thinkrelevance.com)
61
+ for indulging me with time to work on free software.
data/Rakefile ADDED
@@ -0,0 +1,13 @@
1
+ require 'rubygems'
2
+ require 'bundler'
3
+ require "rspec/core/rake_task"
4
+ require 'rake'
5
+
6
+ desc "Run all specs"
7
+ RSpec::Core::RakeTask.new(:spec) do |t|
8
+ t.pattern = "spec/**/*_spec.rb"
9
+ t.ruby_opts = '-Ilib -Ispec -I.'
10
+ t.rspec_opts = '--color'
11
+ end
12
+
13
+ task :default => :spec
@@ -0,0 +1,3 @@
1
+ class Rns
2
+ VERSION = "0.0.1"
3
+ end
data/lib/rns.rb ADDED
@@ -0,0 +1,30 @@
1
+ class Rns
2
+ def self.to_pairs(use_spec)
3
+ case use_spec
4
+ when Array then use_spec.each_slice(2).reduce([]){|xs,y| xs + [y]}
5
+ when Hash then use_spec.to_a
6
+ else
7
+ raise "Don't know how to make module/class:methods pairs out of #{use_spec.class}"
8
+ end
9
+ end
10
+
11
+ def self.populate(obj, use_spec)
12
+ obj.tap do |o|
13
+ to_pairs(use_spec).each do |pkg, method_names|
14
+ method_names.each do |name|
15
+ o.class.send(:define_method, name) do |*args|
16
+ pkg.method(name).call(*args)
17
+ end
18
+ end
19
+ end
20
+ end
21
+ end
22
+
23
+ def initialize
24
+ Rns::populate(self, use)
25
+ end
26
+
27
+ def self.using(use_spec, &blk)
28
+ blk[Rns::populate(Object.new, use_spec)]
29
+ end
30
+ end
data/rns.gemspec ADDED
@@ -0,0 +1,25 @@
1
+ # -*- encoding: utf-8 -*-
2
+ $:.push File.expand_path("../lib", __FILE__)
3
+ require "rns/version"
4
+
5
+ Gem::Specification.new do |s|
6
+ s.name = "rns"
7
+ s.version = Rns::VERSION
8
+ s.authors = ["Alan Dipert"]
9
+ s.email = ["alan@dipert.org"]
10
+ s.homepage = "http://github.com/alandipert/rns"
11
+ s.summary = %q{A library for namespacing pure functions.}
12
+ s.license = "BSD-new"
13
+ s.description = %q{rns is a namespace management library designed to ease functional programming in Ruby.}
14
+
15
+ s.files = `git ls-files`.split("\n")
16
+ s.test_files = `git ls-files -- {test,spec,features}/*`.split("\n")
17
+ s.executables = `git ls-files -- bin/*`.split("\n").map{ |f| File.basename(f) }
18
+ s.require_paths = ["lib"]
19
+
20
+ # specify any dependencies here; for example:
21
+ s.add_development_dependency 'rspec'
22
+ s.add_development_dependency 'guard'
23
+ s.add_development_dependency 'guard-rspec'
24
+ s.add_development_dependency 'simplecov'
25
+ end
@@ -0,0 +1,15 @@
1
+ require File.join(File.dirname(__FILE__), *%w[.. spec_helper.rb])
2
+ require 'rns'
3
+
4
+ describe Rns do
5
+ context 'adding methods to classes' do
6
+ it "works" do
7
+ (1 + 1).should == 2
8
+ end
9
+ end
10
+ context 'adding methods to blocks' do
11
+ it "works" do
12
+ (1 + 1).should == 2
13
+ end
14
+ end
15
+ end
@@ -0,0 +1,7 @@
1
+ require File.join(File.dirname(__FILE__), *%w[.. lib rns])
2
+
3
+ RSpec.configure do |config|
4
+ config.filter_run :focused => true
5
+ config.alias_example_to :fit, :focused => true
6
+ config.run_all_when_everything_filtered = true
7
+ end
metadata ADDED
@@ -0,0 +1,126 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: rns
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.0.1
5
+ prerelease:
6
+ platform: ruby
7
+ authors:
8
+ - Alan Dipert
9
+ autorequire:
10
+ bindir: bin
11
+ cert_chain: []
12
+ date: 2012-05-05 00:00:00.000000000 Z
13
+ dependencies:
14
+ - !ruby/object:Gem::Dependency
15
+ name: rspec
16
+ requirement: !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: !ruby/object:Gem::Requirement
25
+ none: false
26
+ requirements:
27
+ - - ! '>='
28
+ - !ruby/object:Gem::Version
29
+ version: '0'
30
+ - !ruby/object:Gem::Dependency
31
+ name: guard
32
+ requirement: !ruby/object:Gem::Requirement
33
+ none: false
34
+ requirements:
35
+ - - ! '>='
36
+ - !ruby/object:Gem::Version
37
+ version: '0'
38
+ type: :development
39
+ prerelease: false
40
+ version_requirements: !ruby/object:Gem::Requirement
41
+ none: false
42
+ requirements:
43
+ - - ! '>='
44
+ - !ruby/object:Gem::Version
45
+ version: '0'
46
+ - !ruby/object:Gem::Dependency
47
+ name: guard-rspec
48
+ requirement: !ruby/object:Gem::Requirement
49
+ none: false
50
+ requirements:
51
+ - - ! '>='
52
+ - !ruby/object:Gem::Version
53
+ version: '0'
54
+ type: :development
55
+ prerelease: false
56
+ version_requirements: !ruby/object:Gem::Requirement
57
+ none: false
58
+ requirements:
59
+ - - ! '>='
60
+ - !ruby/object:Gem::Version
61
+ version: '0'
62
+ - !ruby/object:Gem::Dependency
63
+ name: simplecov
64
+ requirement: !ruby/object:Gem::Requirement
65
+ none: false
66
+ requirements:
67
+ - - ! '>='
68
+ - !ruby/object:Gem::Version
69
+ version: '0'
70
+ type: :development
71
+ prerelease: false
72
+ version_requirements: !ruby/object:Gem::Requirement
73
+ none: false
74
+ requirements:
75
+ - - ! '>='
76
+ - !ruby/object:Gem::Version
77
+ version: '0'
78
+ description: rns is a namespace management library designed to ease functional programming
79
+ in Ruby.
80
+ email:
81
+ - alan@dipert.org
82
+ executables: []
83
+ extensions: []
84
+ extra_rdoc_files: []
85
+ files:
86
+ - .document
87
+ - .gitignore
88
+ - .rvmrc
89
+ - .travis.yml
90
+ - Gemfile
91
+ - Gemfile.lock
92
+ - Guardfile
93
+ - LICENSE.txt
94
+ - README.md
95
+ - Rakefile
96
+ - lib/rns.rb
97
+ - lib/rns/version.rb
98
+ - rns.gemspec
99
+ - spec/rns/rns_spec.rb
100
+ - spec/spec_helper.rb
101
+ homepage: http://github.com/alandipert/rns
102
+ licenses:
103
+ - BSD-new
104
+ post_install_message:
105
+ rdoc_options: []
106
+ require_paths:
107
+ - lib
108
+ required_ruby_version: !ruby/object:Gem::Requirement
109
+ none: false
110
+ requirements:
111
+ - - ! '>='
112
+ - !ruby/object:Gem::Version
113
+ version: '0'
114
+ required_rubygems_version: !ruby/object:Gem::Requirement
115
+ none: false
116
+ requirements:
117
+ - - ! '>='
118
+ - !ruby/object:Gem::Version
119
+ version: '0'
120
+ requirements: []
121
+ rubyforge_project:
122
+ rubygems_version: 1.8.24
123
+ signing_key:
124
+ specification_version: 3
125
+ summary: A library for namespacing pure functions.
126
+ test_files: []