ruremai 0.0.2 → 0.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.
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