polite 0.1.0

Sign up to get free protection for your applications and to get access to all the features.
@@ -0,0 +1,10 @@
1
+ *.gem
2
+ *.rbc
3
+ .bundle
4
+ Gemfile.lock
5
+ pkg/*
6
+ .yardoc
7
+ _yardoc
8
+ doc/
9
+ tmp
10
+
data/Gemfile ADDED
@@ -0,0 +1,10 @@
1
+ source 'http://rubygems.org'
2
+
3
+ group :development do
4
+ gem 'rake', '~> 0.9.2'
5
+ gem 'minitest', '~> 2.7.0'
6
+ gem 'turn', :require => false
7
+ end
8
+
9
+ # Specify your gem's dependencies in polite.gemspec
10
+ gemspec
@@ -0,0 +1,50 @@
1
+ Polite
2
+ ======
3
+
4
+ Be nice to Ruby and it will be nice to you.
5
+
6
+ ## <a name="contributing">Installation</a>
7
+
8
+ The best way to introduce politeness into Ruby is to use RubyGems:
9
+
10
+ $ [sudo] gem install polite
11
+
12
+ ## <a name="please">Please</a>
13
+
14
+ If you're rude to Ruby it will be rude to you:
15
+
16
+ ruby = Object.new
17
+ ruby.get_me_a_coffee
18
+ # => NoMethodError: undefined method `get_me_a_coffee' for #<Object:0x007fb0421526c0>
19
+
20
+ But if you're polite, it will be nice to you.
21
+
22
+ ruby.please.get_me_a_coffee
23
+ # => nil
24
+
25
+ However, even Ruby has it's limits:
26
+
27
+ ruby.please.get_me_a_coffee.and_a_sandwich
28
+ # => NoMethodError: undefined method `and_a_sandwich' for nil:NilClass
29
+
30
+ ## <a name="pretty_please">Pretty please</a>
31
+
32
+ If you want Ruby to do a lot for you, the way to go is to be even more polite:
33
+
34
+ ruby.pretty_please.get_me_a_coffee
35
+ # => #<Object:0x007fb0421526c0>
36
+
37
+ Ruby will definitely be nice to you:
38
+
39
+ ruby.pretty_please.get_me_a_coffee.and_a_sandwich.and_a_newspaper
40
+ # => #<Object:0x007fb0421526c0>
41
+
42
+ ruby.pretty_please.respond_to?(:pay_for_my_dinner)
43
+ # => true
44
+
45
+ ## <a name="contributing">License</a>
46
+
47
+ Copyright (c) 2011 Tobias Svensson.
48
+
49
+ Pick a polite license of your choice.
50
+
@@ -0,0 +1,10 @@
1
+ #!/usr/bin/env rake
2
+ require "bundler/gem_tasks"
3
+ require 'rake/testtask'
4
+
5
+ Rake::TestTask.new do |t|
6
+ t.pattern = 'test/**/test_*.rb'
7
+ end
8
+
9
+ task :default => :test
10
+
@@ -0,0 +1,7 @@
1
+ $:.unshift File.dirname(__FILE__)
2
+
3
+ require "polite/version"
4
+ require "polite/core_ext"
5
+ require "polite/please"
6
+ require "polite/pretty_please"
7
+
@@ -0,0 +1,9 @@
1
+ class Object
2
+ def please
3
+ Polite::Please.new(self)
4
+ end
5
+
6
+ def pretty_please
7
+ Polite::PrettyPlease.new(self)
8
+ end
9
+ end
@@ -0,0 +1,24 @@
1
+ module Polite
2
+ class Please < BasicObject
3
+ attr_reader :delegate
4
+
5
+ def initialize(delegate)
6
+ @delegate = delegate
7
+ end
8
+
9
+ def method_missing(method, *args, &block)
10
+ begin
11
+ delegate.public_send(method, *args, &block)
12
+ rescue
13
+ polite_return_value
14
+ end
15
+ end
16
+
17
+ private
18
+
19
+ def polite_return_value
20
+ nil
21
+ end
22
+ end
23
+ end
24
+
@@ -0,0 +1,12 @@
1
+ module Polite
2
+ class PrettyPlease < Please
3
+ def polite_return_value
4
+ self
5
+ end
6
+
7
+ def respond_to?(method)
8
+ true
9
+ end
10
+ end
11
+ end
12
+
@@ -0,0 +1,3 @@
1
+ module Polite
2
+ VERSION = "0.1.0"
3
+ end
@@ -0,0 +1,17 @@
1
+ # -*- encoding: utf-8 -*-
2
+ require File.expand_path('../lib/polite/version', __FILE__)
3
+
4
+ Gem::Specification.new do |gem|
5
+ gem.authors = ["Tobias Svensson"]
6
+ gem.email = ["tob@tobiassvensson.co.uk"]
7
+ gem.description = %q{Politeness for Ruby}
8
+ gem.summary = gem.description
9
+ gem.homepage = "http://github.com/tobiassvn/polite"
10
+
11
+ gem.executables = `git ls-files -- bin/*`.split("\n").map{ |f| File.basename(f) }
12
+ gem.files = `git ls-files`.split("\n")
13
+ gem.test_files = `git ls-files -- {test,spec,features}/*`.split("\n")
14
+ gem.name = "polite"
15
+ gem.require_paths = ["lib"]
16
+ gem.version = Polite::VERSION
17
+ end
@@ -0,0 +1,26 @@
1
+ require File.join(File.dirname(__FILE__), '..', 'test_helper')
2
+
3
+ class TestPlease < MiniTest::Unit::TestCase
4
+ include Polite
5
+
6
+ def setup
7
+ @delegate = Object.new
8
+ end
9
+
10
+ def test_assigns_delegate
11
+ assert_equal @delegate, Please.new(@delegate).delegate
12
+ end
13
+
14
+ def test_delegates_method_calls
15
+ assert_equal @delegate.object_id, Please.new(@delegate).object_id
16
+ end
17
+
18
+ def test_global_instance_method
19
+ assert_equal @delegate.object_id, @delegate.please.object_id
20
+ end
21
+
22
+ def test_politeness
23
+ assert_nil @delegate.please.try_doing_something_that_wont_work
24
+ end
25
+ end
26
+
@@ -0,0 +1,19 @@
1
+ require File.join(File.dirname(__FILE__), '..', 'test_helper')
2
+
3
+ class TestPrettyPlease < MiniTest::Unit::TestCase
4
+ include Polite
5
+
6
+ def test_is_an_extension_of_please
7
+ assert_equal Please, PrettyPlease.superclass
8
+ end
9
+
10
+ def test_politeness
11
+ refute_nil Object.new.pretty_please.do.something.that.wont.work
12
+ end
13
+
14
+ def test_polite_respond_to
15
+ assert Object.new.pretty_please.respond_to?(:you_are_handsome)
16
+ end
17
+ end
18
+
19
+
@@ -0,0 +1,11 @@
1
+ # encoding: utf-8
2
+ require File.join(File.dirname(__FILE__), '..', 'lib', 'polite')
3
+
4
+ # gems
5
+ require 'minitest/autorun'
6
+
7
+ begin
8
+ require 'turn'
9
+ rescue LoadError
10
+ end
11
+
metadata ADDED
@@ -0,0 +1,67 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: polite
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.1.0
5
+ prerelease:
6
+ platform: ruby
7
+ authors:
8
+ - Tobias Svensson
9
+ autorequire:
10
+ bindir: bin
11
+ cert_chain: []
12
+ date: 2011-11-23 00:00:00.000000000Z
13
+ dependencies: []
14
+ description: Politeness for Ruby
15
+ email:
16
+ - tob@tobiassvensson.co.uk
17
+ executables: []
18
+ extensions: []
19
+ extra_rdoc_files: []
20
+ files:
21
+ - .gitignore
22
+ - Gemfile
23
+ - README.md
24
+ - Rakefile
25
+ - lib/polite.rb
26
+ - lib/polite/core_ext.rb
27
+ - lib/polite/please.rb
28
+ - lib/polite/pretty_please.rb
29
+ - lib/polite/version.rb
30
+ - polite.gemspec
31
+ - test/polite/test_please.rb
32
+ - test/polite/test_pretty_please.rb
33
+ - test/test_helper.rb
34
+ homepage: http://github.com/tobiassvn/polite
35
+ licenses: []
36
+ post_install_message:
37
+ rdoc_options: []
38
+ require_paths:
39
+ - lib
40
+ required_ruby_version: !ruby/object:Gem::Requirement
41
+ none: false
42
+ requirements:
43
+ - - ! '>='
44
+ - !ruby/object:Gem::Version
45
+ version: '0'
46
+ segments:
47
+ - 0
48
+ hash: 218283220022515442
49
+ required_rubygems_version: !ruby/object:Gem::Requirement
50
+ none: false
51
+ requirements:
52
+ - - ! '>='
53
+ - !ruby/object:Gem::Version
54
+ version: '0'
55
+ segments:
56
+ - 0
57
+ hash: 218283220022515442
58
+ requirements: []
59
+ rubyforge_project:
60
+ rubygems_version: 1.8.10
61
+ signing_key:
62
+ specification_version: 3
63
+ summary: Politeness for Ruby
64
+ test_files:
65
+ - test/polite/test_please.rb
66
+ - test/polite/test_pretty_please.rb
67
+ - test/test_helper.rb