polite 0.1.0

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,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