ruremai 0.0.2 → 0.0.3

Sign up to get free protection for your applications and to get access to all the features.
data/README.md CHANGED
@@ -22,12 +22,16 @@ Or install it yourself as:
22
22
 
23
23
  ## Usage
24
24
 
25
+ Method#rurema!:
26
+
25
27
  ```ruby
26
28
  Object.method(:name).rurema!
27
29
  ```
28
30
 
31
+ Object#mean? (shortcut):
32
+
29
33
  ```ruby
30
- (something.methods - methods).sort.each {|m| something.method(m).rurema! }
34
+ Object.mean?.name
31
35
  ```
32
36
 
33
37
  ## TODO
data/Rakefile CHANGED
@@ -1,2 +1,7 @@
1
1
  #!/usr/bin/env rake
2
2
  require "bundler/gem_tasks"
3
+
4
+ require 'rspec/core/rake_task'
5
+ RSpec::Core::RakeTask.new(:spec)
6
+
7
+ task default: :spec
@@ -0,0 +1,13 @@
1
+ require 'ruremai/mean'
2
+
3
+ class Object
4
+ def mean?(*args)
5
+ if args.empty?
6
+ return Ruremai::Mean.new(self)
7
+ else
8
+ args.each do |method|
9
+ self.method(method.to_sym).rurema!
10
+ end
11
+ end
12
+ end
13
+ end
@@ -1,22 +1,32 @@
1
1
  module Ruremai
2
2
  module Locator
3
- module Rurema
4
- class Ja < Base
5
- private
6
-
3
+ class Rurema < Base
4
+ class Ja < Rurema
7
5
  def uri_base
8
6
  'http://doc.ruby-lang.org/ja/'
9
7
  end
10
8
 
11
9
  def candidates
12
- uri_part = [RUBY_VERSION, 'method', owner.name.gsub(/::/, '/')].join('/')
13
- method_name = CGI.escape(name.to_s).gsub(/%/, '=').downcase # XXX
10
+ uri_part = [RUBY_VERSION, 'method', escape(method_owner)].join('/')
11
+ method_name = escape(name.to_s)
12
+ types =
13
+ if receiver.is_a?(Module)
14
+ %w(s m i)
15
+ else
16
+ %w(i m s)
17
+ end
14
18
 
15
- %w(i s m).map {|type|
16
- URI.parse("#{uri_base}/#{uri_part}/#{type}/#{method_name}.html")
19
+ types.map {|type|
20
+ URI.parse("#{uri_base}#{uri_part}/#{type}/#{method_name}.html")
17
21
  }
18
22
  end
19
23
  end
24
+
25
+ def escape(str)
26
+ CGI.escape(str).gsub(/(%[\dA-Z]{2})/) {|s|
27
+ %(=#{s[1..-1].downcase})
28
+ }
29
+ end
20
30
  end
21
31
  end
22
32
  end
@@ -9,36 +9,42 @@ module Ruremai
9
9
  end
10
10
  end
11
11
 
12
- attr_reader :name, :owner
12
+ attr_reader :name, :receiver, :owner
13
13
 
14
14
  def initialize(method)
15
- @method = method
16
- @name = method.name
17
- @owner = method.owner
15
+ @method = method
16
+ @name = method.name
17
+ @receiver = method.receiver
18
+ @owner = method.owner
18
19
  end
19
20
 
20
21
  def located
21
22
  candidates.detect {|uri| exist?(uri) }
22
23
  end
23
24
 
24
- private
25
-
26
25
  def candidates
27
26
  []
28
27
  end
29
28
 
29
+ private
30
+
30
31
  def exist?(uri)
31
32
  Net::HTTP.start(uri.host, uri.port) {|http|
32
33
  response = http.head(uri.path)
33
34
 
34
- case response.code
35
- when *%w(200 301 302) # FIXME: others?
35
+ case response
36
+ when Net::HTTPSuccess, Net::HTTPRedirection
36
37
  true
37
38
  else
38
39
  false
39
40
  end
40
41
  }
41
42
  end
43
+
44
+ # XXX can't care singleton method
45
+ def method_owner
46
+ owner.name ? owner.name : receiver.name
47
+ end
42
48
  end
43
49
  end
44
50
  end
@@ -0,0 +1,11 @@
1
+ class Ruremai::Mean
2
+ attr_accessor :receiver
3
+
4
+ def initialize(receiver)
5
+ @receiver = receiver
6
+ end
7
+
8
+ def method_missing(method_name, *args, &block)
9
+ @receiver.method(method_name).rurema!
10
+ end
11
+ end
@@ -1,3 +1,3 @@
1
1
  module Ruremai
2
- VERSION = '0.0.2'
2
+ VERSION = '0.0.3'
3
3
  end
data/lib/ruremai.rb CHANGED
@@ -4,9 +4,11 @@ require 'net/http'
4
4
  require 'launchy'
5
5
  require 'ruremai/version'
6
6
  require 'ruremai/ext/method'
7
+ require 'ruremai/ext/object'
7
8
 
8
9
  module Ruremai
9
10
  autoload :Locator, 'ruremai/locator'
11
+ autoload :Mean, 'ruremai/mean'
10
12
 
11
13
  class NoReferenceManualFound < StandardError; end
12
14
 
data/ruremai.gemspec CHANGED
@@ -18,4 +18,5 @@ Gem::Specification.new do |gem|
18
18
  gem.add_runtime_dependency 'launchy', '~> 2.1.0'
19
19
 
20
20
  gem.add_development_dependency 'tapp', '~> 1.3.1'
21
+ gem.add_development_dependency 'rspec', '>= 2.10.0'
21
22
  end
@@ -0,0 +1,33 @@
1
+ require 'spec_helper'
2
+
3
+ describe Ruremai::Locator::Rurema::Ja do
4
+ describe '#candidates' do
5
+ let(:locator) { Ruremai::Locator::Rurema::Ja.new(target) }
6
+
7
+ subject { locator.candidates.map(&:to_s) }
8
+
9
+ context 'CamelCase method' do
10
+ let(:target) { method(:Integer) }
11
+
12
+ it { should include %(http://doc.ruby-lang.org/ja/1.9.3/method/Kernel/m/Integer.html) }
13
+ end
14
+
15
+ context 'query method' do
16
+ let(:target) { nil.method(:nil?) }
17
+
18
+ it { should include %(http://doc.ruby-lang.org/ja/#{RUBY_VERSION}/method/NilClass/i/nil=3f.html) }
19
+ end
20
+
21
+ context 'space ship operator' do
22
+ let(:target) { 0.method(:<=>) }
23
+
24
+ it { should include %(http://doc.ruby-lang.org/ja/#{RUBY_VERSION}/method/Fixnum/i/=3c=3d=3e.html) }
25
+ end
26
+
27
+ context 'nested class' do
28
+ let(:target) { Net::HTTP.method(:new) }
29
+
30
+ it { should include 'http://doc.ruby-lang.org/ja/1.9.3/method/Net=3a=3aHTTP/s/new.html' }
31
+ end
32
+ end
33
+ end
@@ -0,0 +1,8 @@
1
+ # coding: utf-8
2
+
3
+ require_relative '../lib/ruremai'
4
+
5
+ RSpec.configure do |config|
6
+ config.filter_run focus: true
7
+ config.run_all_when_everything_filtered = true
8
+ end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: ruremai
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.2
4
+ version: 0.0.3
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -9,7 +9,7 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2012-07-23 00:00:00.000000000 Z
12
+ date: 2012-07-30 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: launchy
@@ -43,6 +43,22 @@ dependencies:
43
43
  - - ~>
44
44
  - !ruby/object:Gem::Version
45
45
  version: 1.3.1
46
+ - !ruby/object:Gem::Dependency
47
+ name: rspec
48
+ requirement: !ruby/object:Gem::Requirement
49
+ none: false
50
+ requirements:
51
+ - - ! '>='
52
+ - !ruby/object:Gem::Version
53
+ version: 2.10.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: 2.10.0
46
62
  description: Object.method(:name).rurema!
47
63
  email:
48
64
  - celluloid.key@gmail.com
@@ -57,10 +73,14 @@ files:
57
73
  - Rakefile
58
74
  - lib/ruremai.rb
59
75
  - lib/ruremai/ext/method.rb
76
+ - lib/ruremai/ext/object.rb
60
77
  - lib/ruremai/locator.rb
61
78
  - lib/ruremai/locator/rurema.rb
79
+ - lib/ruremai/mean.rb
62
80
  - lib/ruremai/version.rb
63
81
  - ruremai.gemspec
82
+ - spec/locator/rurema_spec.rb
83
+ - spec/spec_helper.rb
64
84
  homepage: https://github.com/hibariya/ruremai
65
85
  licenses: []
66
86
  post_install_message:
@@ -85,4 +105,6 @@ rubygems_version: 1.8.23
85
105
  signing_key:
86
106
  specification_version: 3
87
107
  summary: Open ruby reference manual by browser.
88
- test_files: []
108
+ test_files:
109
+ - spec/locator/rurema_spec.rb
110
+ - spec/spec_helper.rb