いろんなサイトを参考に、まずはgem用のプロジェクトを作った
$ bundle gem test_gem -t
で、必要部分を修正
test_gem.gemspec
spec.summary = %q{ output excel }
spec.description = %q{ output excel by java }
spec.homepage = "https://github.com/aaa/test_gem"
挨拶メソッド用意
lib/test_gem.rb
require "test_gem/version"
module TestGem
# Your code goes here...
def self.greet
p 'hello'
end
end
実行するには以下のコマンドから確認するらしい
$ rake install
$ irb
irb(main):001:0> require 'test_gem'
=> true
irb(main):002:0> TestGem.greet
"hello"
=> "hello"
ここまでは完璧!
そしてconfigファイルを作ろうとしたときに事件は起こった
ここでも他のgemを参考に、以下のファイルを作成
lib/test_gem/config.rb
require 'active_support/configurable'
module TestGem
def self.configure(&block)
yield @config ||= TestGem::Configuration.new
end
def self.config
@config
end
class Configuration
include ActiveSupport::Configurable
config_accessor :tmp_dir
end
configure do |config|
config.tmp_dir = "tmp/test_gem"
end
end
挨拶メソッドのファイルを更新
lib/test_gem.rb
require "test_gem/version"
require "test_gem/config"
module TestGem
# Your code goes here...
def self.greet
p config.tmp_dir
end
end
コマンド実行して確認
$ rake install
$ irb
irb(main):001:0> require 'test_gem'
LoadError: cannot load such file -- test_gem/config
from /Users/xxxxxxx/.rbenv/versions/2.3.1/lib/ruby/2.3.0/rubygems/core_ext/kernel_require.rb:55:in `require'
from /Users/xxxxxxx/.rbenv/versions/2.3.1/lib/ruby/2.3.0/rubygems/core_ext/kernel_require.rb:55:in `require'
from /Users/xxxxxxx/.rbenv/versions/2.3.1/lib/ruby/gems/2.3.0/gems/test_gem-0.1.0/lib/json_report_builder.rb:2:in `<top (required)>'
from /Users/xxxxxxx/.rbenv/versions/2.3.1/lib/ruby/2.3.0/rubygems/core_ext/kernel_require.rb:127:in `require'
from /Users/xxxxxxx/.rbenv/versions/2.3.1/lib/ruby/2.3.0/rubygems/core_ext/kernel_require.rb:127:in `rescue in require'
from /Users/xxxxxxx/.rbenv/versions/2.3.1/lib/ruby/2.3.0/rubygems/core_ext/kernel_require.rb:40:in `require'
from (irb):1
from /Users/xxxxxxx/.rbenv/versions/2.3.1/bin/irb:11:in `<main>'
なんだって!?
タイポかなぁとかいろいろ考えたけど、何をやってもうまくいかず・・・
最終的な解決方法は・・・
$ git add .
これだけでした
詳しい仕組みは見てないけれども、どうやらgitで管理されているファイルだけが
rake install の対象になるっぽい
test_gem.gemspec
spec.files = `git ls-files -z`.split("\x0").reject { |f| f.match(%r{^(test|spec|features)/}) }
これが関係しているのかな
とりあえず一度gitの管理にファイルが入れば、そのファイルを更新したらちゃんと更新した内容が反映されます
$ rake install
$ irb
irb(main):001:0> require 'test_gem'
=> true
irb(main):002:0> TestGem.greet
"tmp/test_gem"
=> "tmp/test_gem"
この状態から出力内容を変更し、
lib/test_gem/config.rb
configure do |config|
config.tmp_dir = "tmp/test_gem_change"
end
再度実行すると
$ rake install
$ irb
irb(main):001:0> require 'test_gem'
=> true
irb(main):002:0> TestGem.greet
"tmp/test_gem_change"
=> "tmp/test_gem_change"
となります
無事スタートを切れてよかった・・・
追記
実行方法だけど、もっと簡単でさらにgit addしなくてもいいものがありましたw
$ bin/console
これならわざわざ毎回requireとか書かなくてもいいし、、、
かなり時間を無駄にしたー