“资源” – ruby宝石的目录
发布时间:2020-12-17 03:03:03 所属栏目:百科 来源:网络整理
导读:我目前正在尝试在 Ruby中创建自己的gem. gem需要一些静态资源(比如ICO格式的图标).我在哪里将这些资源放在我的gem目录树中以及如何从代码中访问它们? 此外,我的扩展的一部分是本机C代码,我希望C部分也可以访问资源. 解决方法 您可以将资源放在任何您想要的
我目前正在尝试在
Ruby中创建自己的gem. gem需要一些静态资源(比如ICO格式的图标).我在哪里将这些资源放在我的gem目录树中以及如何从代码中访问它们?
此外,我的扩展的一部分是本机C代码,我希望C部分也可以访问资源. 解决方法
您可以将资源放在任何您想要的位置,lib目录除外.因为它将成为Ruby的加载路径的一部分,所以应该存在的唯一文件是您希望人们需要的文件.
例如,我通常将翻译后的文本存储在i18n /目录中.对于图标,我只是将它们放在资源/图标/中. 至于如何访问这些资源……我遇到了这个问题足够I wrote a little gem只是为了避免重复. 基本上,我一直这样做: def Your::Gem.root # Current file is /home/you/code/your/lib/your/gem.rb File.expand_path '../..',File.dirname(__FILE__) end Your::Gem.root # => /home/you/code/your/ 我将它包装成一个漂亮的DSL,添加了一些额外的便利,最后得到了这个: class Your::Gem < Jewel::Gem root '../..' end root = Your::Gem.root # => /home/you/code/your/ # No more joins! path = root.resources.icons 'your.ico' # => /home/you/code/your/resources/icons/your.ico 至于在C中访问您的资源,路径只是一个 VALUE your_ico_new(VALUE klass,VALUE path) { char * ico_file = NULL; struct your_ico * ico = NULL; ico_file = StringValueCStr(path); ico = your_ico_load_from_file(ico_file); /* Implement this */ return Data_Wrap_Struct(your_ico_class,your_ico_mark,your_ico_free,ico); } 现在您可以从Ruby访问它: ico = Your::Ico.new path (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |