alpaca_complete 0.1.3 → 0.1.4

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/Gemfile.lock CHANGED
@@ -12,9 +12,9 @@ GEM
12
12
  git (>= 1.2.5)
13
13
  rake
14
14
  rdoc
15
- json (1.7.5)
16
- multi_json (1.3.6)
17
- rake (0.9.2.2)
15
+ json (1.7.6)
16
+ multi_json (1.5.0)
17
+ rake (10.0.3)
18
18
  rdoc (3.12)
19
19
  json (~> 1.4)
20
20
  rspec (2.8.0)
@@ -27,10 +27,10 @@ GEM
27
27
  rspec-instafail (0.2.4)
28
28
  rspec-mocks (2.8.0)
29
29
  ruby-progressbar (1.0.2)
30
- simplecov (0.6.4)
30
+ simplecov (0.7.1)
31
31
  multi_json (~> 1.0)
32
- simplecov-html (~> 0.5.3)
33
- simplecov-html (0.5.3)
32
+ simplecov-html (~> 0.7.1)
33
+ simplecov-html (0.7.1)
34
34
 
35
35
  PLATFORMS
36
36
  ruby
data/README.md CHANGED
@@ -1,66 +1,25 @@
1
1
  # alpaca_complete
2
2
 
3
- そう、それは季節が秋へと差し掛かるちょっと肌寒い時期でした。
4
- railsを使っていて気が遠くなるくらいの単語数に嫌気がさし、
5
- 僕はエディタを乗り換えてIDEを使おうか迷っていました。
6
-
7
- そんなとき出会ったのが、[RubyMine]( http://www.jetbrains.com/ruby/ )。
8
-
9
- 「RubyMineすげぇ。やべぇ。vim敵わん。。」
10
- さすが、IDE。補完からビジュアルから、素晴らしい機能が満載でした。
11
- それからというもの、RubyMineの虜になっていました。
12
-
13
- しかし、IDE。vimキーバインドはガラクタでした。
14
- vim病が再発しそうなころ、神の声が聞こえました。
15
-
16
- **「それ、vimで出来るよ」**
17
-
18
- さぁ、楽しい開発の始まりです。
19
-
20
- RoR & vimユーザーの為の最強補完プラグインを作成しております。
3
+ RoR & vimユーザーの為の補完プラグインを作成しております。
21
4
  目標はRubyMineの補完機能を超えることです。
22
5
 
23
6
  ## install
24
7
 
25
- neocomplcacheを未インストールの方はさきにこちらをインストールしてください。
26
-
27
8
  ```vim:.vimrc
28
- NeoBundle 'taichouchou2/alpaca_complete'
29
- ```
30
-
31
- 以下は登録したけど、まだ動かないかも。
32
-
33
- ```shell
34
- `gem install alpaca_complete`
9
+ NeoBundle 'taichouchou2/alpaca_complete',{
10
+ \ 'depends' : 'tpope/vim-rails',
11
+ \ 'build' : {
12
+ \ 'mac' : 'gem install alpaca_complete',
13
+ \ 'unix' : 'gem install alpaca_complete',
14
+ \}}
35
15
  ```
36
16
 
37
- 代わりに、以下のコマンドを打ってください
38
-
39
- ```shell
40
- rake build
41
- rake install
42
- ```
17
+ ![locale補完](https://github.com/taichouchou2/alpaca_complete/blob/master/preview1.png?raw=true)
43
18
 
44
- こういう表示になるはずです
19
+ NeoBundle以外の人は、下記を実行してください
45
20
 
46
21
  ```shell
47
- rake build
48
- Successfully built RubyGem
49
- Name: alpaca_complete
50
- Version: 0.1.0
51
- File: alpaca_complete-0.1.0.gem
52
- taichou@tai-no-MacBook-Air:~/.bundle/alpaca_complete $
53
- rake install
54
- Successfully built RubyGem
55
- Name: alpaca_complete
56
- Version: 0.1.0
57
- File: alpaca_complete-0.1.0.gem
58
- Executing "ruby -S gem install ./pkg/alpaca_complete-0.1.0.gem":
59
- ruby -S gem install ./pkg/alpaca_complete-0.1.0.gem
60
- Successfully installed alpaca_complete-0.1.0
61
- 1 gem installed
62
- Installing ri documentation for alpaca_complete-0.1.0...
63
- Installing RDoc documentation for alpaca_complete-0.1.0...
22
+ `gem install alpaca_complete`
64
23
  ```
65
24
 
66
25
  ### TODO
@@ -68,31 +27,26 @@ rake install
68
27
  下記の機能を実装予定です。(優先順位順)
69
28
  それぞれの補完は説明や引数付きで補完する予定です。
70
29
 
71
- - locate(I18n.t)補完(完了)
30
+ - locales(I18n.t)補完
31
+ - chaching機能
72
32
  - migrate補完
73
33
  - view補完
74
34
  - controller補完
75
35
  - models補完
76
36
  - validate
77
37
  - 推奨構文
78
- - chaching機能
79
38
 
80
39
  ### お願い
81
40
 
82
- 「こんな補完が欲しい」っていうのがあるかたは、
83
- Issuesか、twitterに書き込んでください。
84
-
41
+ 「こんな補完が欲しい」っていうのがあるかたは、 Issuesか、twitterに書き込んでください。
85
42
  あと、コミッターも募集しています。
86
43
 
87
44
  ## and more
88
45
 
89
- **FEATURES**
90
-
91
- 1. coloring function
92
-
93
46
  **AUTHOR**
94
47
 
95
48
  Hiroyuki Ishii \<alprhcp666@gmail.com\>
49
+ @alpaca_taichou
96
50
 
97
51
  **COPYRIGHT**
98
52
 
@@ -104,4 +58,3 @@ Copyright (c) 2012, Hiroyuki Ishii \<alprhcp666@gmail.com\>
104
58
 
105
59
  [MIT]: http://www.opensource.org/licenses/mit-license.php
106
60
 
107
-
data/VERSION CHANGED
@@ -1 +1 @@
1
- 0.1.3
1
+ 0.1.4
@@ -3,8 +3,6 @@
3
3
  # Instead, edit Jeweler::Tasks in Rakefile, and run 'rake gemspec'
4
4
  # -*- encoding: utf-8 -*-
5
5
 
6
- require 'lib/AlpacaComplete.rb'
7
-
8
6
  Gem::Specification.new do |s|
9
7
  s.name = "alpaca_complete"
10
8
  s.version = `cat VERSION`
@@ -1,7 +1,7 @@
1
1
  "=============================================================================
2
2
  " FILE: locale_complete.Vim
3
3
  " AUTHOR: Hiroyuki Ishii <alprhcp666@gmail.com>
4
- " Last Modified: 2012-10-25
4
+ " Last Modified: 2012-12-12
5
5
  " License: MIT license {{{
6
6
  " Permission is hereby granted, free of charge, to any person obtaining
7
7
  " a copy of this software and associated documentation files (the
@@ -24,22 +24,30 @@
24
24
  " }}}
25
25
  "=============================================================================
26
26
 
27
+ if exists('g:loaded_alpaca_complete') || &cp || v:version < 700
28
+ finish
29
+ endif
30
+
31
+ if !executable('alpaca_complete') "{{{
32
+ echohl ErrorMsg
33
+ echo 'requires gem ins alpaca_complete'
34
+ echohl None
35
+ if executable('gem')
36
+ call system('gem ins alpaca_complete')
37
+ endif
38
+ finish
39
+ endif "}}}
40
+
41
+ let g:loaded_alpaca_complete = 1
42
+
27
43
  let s:save_cpo = &cpo
28
44
  set cpo&vim
29
45
 
30
- " config
31
- ""{{{
46
+ " Initialize "{{{
47
+ let g:alpaca_complete_caching_list = {}
32
48
  let s:source = {
33
- \ 'name' : 'locale_complete_locale',
34
- \ 'kind' : 'ftplugin',
35
- \ 'filetypes' : {
36
- \ 'ruby' : 1,
37
- \ 'eruby' : 1,
38
- \ 'haml' : 1,
39
- \ 'yaml' : 1,
40
- \ 'javascript' : 1,
41
- \ 'coffee' : 1,
42
- \ },
49
+ \ 'name' : 'locale_complete',
50
+ \ 'kind' : 'complfunc',
43
51
  \}
44
52
 
45
53
  if !exists('g:source_locale_complete_length')
@@ -49,96 +57,97 @@ endif
49
57
  if !exists('g:source_locale_complete_rank')
50
58
  let g:source_locale_complete_rank = 200
51
59
  endif
52
-
53
- if !exists('g:source_locale_complete_enable_dup')
54
- let g:source_locale_complete_enable_dup = 1
55
- endif
56
-
57
60
  "}}}
58
61
 
59
- function! s:source.initialize()
62
+ function! s:source.initialize() "{{{
60
63
  call neocomplcache#set_completion_length('locale_complete', g:source_locale_complete_length)
61
64
  call neocomplcache#set_dictionary_helper(g:neocomplcache_source_rank,
62
65
  \ 'locale_complete', g:source_locale_complete_rank)
63
66
 
64
67
  " Initialize.
65
- let s:complete_list = {}
66
68
 
67
69
  " Create cache directory.
68
70
  if !isdirectory(neocomplcache#get_temporary_directory() . '/alpaca_complete')
69
71
  call mkdir(neocomplcache#get_temporary_directory() . '/alpaca_complete')
70
72
  endif
73
+ endfunction "}}}
71
74
 
72
- " Initialize check.
73
- " au User Rails call s:check_recache()
74
- autocmd BufReadPost * call s:check_recache()
75
- endfunction
75
+ function! s:source.finalize() " {{{
76
+ endfunction " }}}
76
77
 
77
- function! s:source.finalize()
78
- endfunction
79
-
80
- function! s:source.get_keyword_pos(cur_text)"{{{
81
- " XXX vim-ref の availableみたいな機構ないのかな。
82
- if !exists('b:rails_root')
83
- return -1
84
- endif
85
- if a:cur_text =~ '.*I18n\.t.*'
86
- let cur_pos = match(a:cur_text, '[a-zA-Z]\+[a-zA-Z._:]*$')
78
+ function! s:source.get_keyword_pos(cur_text) "{{{
79
+ if exists('b:rails_root') && a:cur_text =~ '.*I18n\.t\A.*\|\(\A\|^\)t\A'
80
+ let cur_pos = match( a:cur_text, '[a-zA-Z]\+[a-zA-Z0-9._:-]*$' )
87
81
 
88
82
  return cur_pos < 0 ? -1 : cur_pos
89
83
  end
84
+
90
85
  return -1
91
- endfunction"}}}
86
+ endfunction "}}}
92
87
 
93
- function! s:source.get_complete_words(cur_keyword_pos, cur_keyword_str)"{{{
88
+ function! s:source.get_complete_words(cur_keyword_pos, cur_keyword_str) "{{{
89
+ if !exists('b:rails_root')|return|endif
94
90
  let line = a:cur_keyword_str
95
91
 
96
92
  let input_first = match(line, '[a-zA-Z._:]*$')
97
93
  let input_obj = line[input_first :]
98
94
 
99
- if input_obj ==# '' || input_obj ==# "\s" || !exists('b:rails_root')
95
+ if input_obj ==# '' || input_obj ==# "\s"
100
96
  return []
101
97
  endif
102
98
 
103
- if !has_key(s:complete_list, s:get_cache_name())
99
+ let cache_name = s:get_cache_name()
100
+ if !has_key(g:alpaca_complete_caching_list, cache_name)
101
+ " load cache
104
102
  let keyword_lists = neocomplcache#cache#index_load_from_cache(
105
- \ 'alpaca_complete', s:get_cache_name())
103
+ \ 'alpaca_complete', cache_name)
106
104
  if !empty(keyword_lists)
105
+ let g:alpaca_complete_caching_list[cache_name] = keyword_lists
106
+
107
107
  " Caching from cache.
108
- let s:complete_list[s:get_cache_name()] = keyword_lists
109
108
  return neocomplcache#dictionary_filter(keyword_lists, input_obj)
110
109
  else
110
+ call neocomplcache#sources#locale_complete#check_recache()
111
111
  return []
112
112
  endif
113
113
  else
114
- let s:complete_list[s:get_cache_name()] = keyword_lists
115
- return neocomplcache#dictionary_filter(s:complete_list[s:get_cache_name()], input_obj)
114
+ " use caching
115
+ return neocomplcache#dictionary_filter(
116
+ \ g:alpaca_complete_caching_list[cache_name] , input_obj)
116
117
  endif
117
- endfunction"}}}
118
+ endfunction "}}}
118
119
 
119
- function! s:check_recache()
120
- if !exists('b:rails_root')||!executable('alpaca_complete')| return -1 |endif
120
+ function! neocomplcache#sources#locale_complete#check_recache() "{{{
121
+ let list_key = s:get_cache_name()
122
+ " if !list_key |return -1| endif
121
123
 
122
- if !has_key(s:complete_list, s:get_cache_name())
123
- call s:caching()
124
+ if !has_key(g:alpaca_complete_caching_list, list_key)
125
+ call neocomplcache#sources#locale_complete#caching()
124
126
  endif
125
- endfunction
127
+ endfunction "}}}
126
128
 
127
- function! s:get_cache_name()
129
+ function! s:get_rails_directory_name() "{{{
130
+ if !exists('b:rails_root')|return ''|endif
131
+ return b:rails_root[match(b:rails_root, '\/[^/]\+$') + 1:]
132
+ endfunction "}}}
133
+
134
+ function! s:get_cache_name() "{{{
135
+ if !exists('b:rails_root')|return -1|endif
128
136
  return "locale_" . b:rails_root . "_locale"
129
- endfunction
137
+ endfunction"}}}
130
138
 
131
- function! neocomplcache#sources#locale_complete#get_cur_text()"{{{
139
+ function! neocomplcache#sources#locale_complete#get_cur_text() "{{{
132
140
  return [line('.')]
133
- endfunction"}}}
141
+ endfunction "}}}
134
142
 
135
- function! neocomplcache#sources#locale_complete#define()"{{{
143
+ function! neocomplcache#sources#locale_complete#define() "{{{
136
144
  return s:source
137
145
  endfunction"}}}
138
146
 
139
147
  " caching
140
- ""{{{
141
- function! s:caching()
148
+ function! neocomplcache#sources#locale_complete#caching() "{{{
149
+ if !exists('b:rails_root')|return -1|endif
150
+
142
151
  " RoRの補完プラグインalpaca_completeを使う
143
152
  let mf0 = neocomplcache#system( 'alpaca_complete -l -f ' . expand("%:p") )
144
153
  let mf_list = split(mf0, '\n')
@@ -164,7 +173,6 @@ function! s:caching()
164
173
  \ "word" : locale.key[strlen(locale.type) + 1 :],
165
174
  \ "kind" : "[alpl_" . locale.type . "]",
166
175
  \ "menu" : locale.value,
167
- \ "dup" : g:source_locale_complete_enable_dup
168
176
  \})
169
177
  endfor
170
178
 
@@ -1,10 +1,8 @@
1
-
2
1
  module AlpacaComplete::Detect
3
2
 
4
- @@rails_root = nil
5
-
6
- # transport from rails.vim
7
- def detect filename
3
+ # program portability from rails.vim
4
+ # return rails root path
5
+ def self.detect( filename )
8
6
  fn = filename.gsub('\c^file://', '')
9
7
 
10
8
  if File.readable?("#{fn}/config/environment.rb")
@@ -34,7 +32,5 @@ module AlpacaComplete::Detect
34
32
 
35
33
  return nil
36
34
  end
37
-
38
- module_function :detect
39
35
  end
40
36
 
@@ -1,110 +1,52 @@
1
1
  # coding: utf-8
2
2
 
3
- require 'yaml'
4
-
5
- # hash extend deep_merge
6
- class Hash
7
- # Returns a new hash with +self+ and +other_hash+ merged recursively.
8
- def deep_merge(other_hash)
9
- dup.deep_merge!(other_hash)
10
- end
11
-
12
- # Same as +deep_merge+, but modifies +self+.
13
- def deep_merge!(other_hash)
14
- other_hash.each_pair do |k,v|
15
- tv = self[k]
16
- self[k] = tv.is_a?(Hash) && v.is_a?(Hash) ? tv.deep_merge(v) : v
17
- end
18
- self
19
- end
20
-
21
- def full_join( str = ".", key="" )
22
- dup.full_join! str, key
23
- end
24
-
25
- def full_join!( str = ".", key="")
26
- res = {}
27
- self.each do |k, v|
28
- full_key = key.empty? ? k : "#{key}.#{k}"
29
- if v.is_a?(Hash)
30
- res.deep_merge!( v.full_join( str, full_key ) )
31
- else
32
- res[full_key] = v
33
- end
34
- end
35
-
36
- res
37
- end
38
-
39
- private
40
- def join_to_str( list, str = "" )
41
-
42
- end
43
- end
44
3
 
45
4
  module AlpacaComplete::LocaleComplete
46
- Version = "1.0"
47
5
  LOCALE_PATH = 'config/locales'
48
6
 
49
- extend AlpacaComplete::Detect
7
+ class << self
8
+ # return array of list to match word
9
+ def complete( path, word )
10
+ opt = { "path" => path }
11
+ comp = Regexp.new("^#{word}")
50
12
 
51
- # return array of list to match word
52
- def self.complete( path, word )
53
- opt = { "path" => path}
54
- comp = Regexp.new("^#{word}")
13
+ get_locale_hash( opt ).select {|v| v.match comp }
14
+ end
55
15
 
56
- get_locale_hash( opt ).select {|v|
57
- v.match comp
58
- }
59
- end
16
+ # return array of locale list.
17
+ def get_locale_list( opt={} )
18
+ locales = get_locale_hash(opt)
60
19
 
61
- # return hash of locale list. hash key is full_name.
62
- def self.get_locale_hash( opt={} )
63
- get_locale( opt["path"] ).full_join(".")
64
- end
20
+ res = []
21
+ locales.each do |k, v|
22
+ res << k
23
+ end
65
24
 
66
- # return array of locale list.
67
- def self.get_locale_list( opt={} )
68
- locales = get_locale_hash(opt)
25
+ res
26
+ end
69
27
 
70
- res = []
71
- locales.each do |k, v|
72
- res << k
28
+ # return hash of locale list. hash key is full_name.
29
+ def get_locale_hash( opt={} )
30
+ get_locale( opt["path"] ).join_keys(".")
73
31
  end
74
32
 
75
- res
76
- end
33
+ # return hash deep_merged config/locales/**/*.yml
34
+ def get_locale( file_path )
35
+ require 'yaml'
77
36
 
78
- # return hash deep_merged config/locales/**/*.yml
79
- def self.get_locale( file_path )
80
- rails_root = detect( file_path )
81
- locale_path = "#{rails_root}/#{LOCALE_PATH}"
37
+ rails_root = ::AlpacaComplete::Detect.detect( file_path )
38
+ locale_path = "#{rails_root}/#{LOCALE_PATH}"
82
39
 
83
- # hash
84
- locales = Hash.new
40
+ # hash
41
+ locales = Hash.new
85
42
 
86
- Dir.glob( "#{locale_path}/**/*.yml" ).each do |file|
87
- begin
43
+ Dir.glob( "#{locale_path}/**/*.yml" ).each do |file|
88
44
  locale_hash = YAML::load_file( file )
89
45
  locales.deep_merge!(locale_hash)
90
- rescue
91
- # TODO yamlにエラーがあった場合の処理
92
-
93
46
  end
94
- end
95
47
 
96
- locales
97
- end
98
-
99
- # return methods of i18n as string
100
- def self.get_methods
101
- require 'i18n'
102
- concat = []
103
- I18n.methods.each do |m|
104
- concat << m.to_s
48
+ locales
105
49
  end
106
-
107
- concat.join("\n")
108
50
  end
109
51
 
110
52
  end
@@ -1,71 +1,70 @@
1
1
  # coding: utf-8
2
2
 
3
3
  require 'optparse'
4
- require 'yaml'
5
4
 
6
5
  module AlpacaComplete::Utils
7
-
8
- def self.option_parser args
9
- args << '-h' if args.empty?
10
-
11
- options = {}
12
- optparse = OptionParser.new do |opts|
13
- opts.banner = get_banner.gsub(/^\s*/, '')
14
-
15
- opts.on('-h','--help','HELP') do
16
- puts opts
17
- exit
6
+ class << self
7
+ def option_parser args
8
+ args << '-h' if args.empty?
9
+
10
+ options = {}
11
+ optparse = OptionParser.new do |opts|
12
+ opts.banner = get_banner.gsub(/^\s*/, '')
13
+
14
+ opts.on('-h','--help','HELP') do
15
+ puts opts
16
+ exit
17
+ end
18
+
19
+ opts.on('-l', '--locale', 'locale complete') do |l|
20
+ options[:locale] = l
21
+ end
22
+
23
+ opts.on('-w VAL', '--word VAL', 'uncomplete word') do |l|
24
+ options[:word] = l
25
+ end
26
+
27
+ opts.on('-f VAL', '--filepath VAL', 'rails path') do |l|
28
+ options[:path] = l
29
+ end
30
+
31
+ opts.on('-v', '--version', 'Version') do
32
+ puts ::AlpacaComplete::VERSION
33
+ exit
34
+ end
18
35
  end
19
36
 
20
- opts.on('-l', '--locale', 'locale complete') do |l|
21
- options[:locale] = l
22
- end
37
+ optparse.parse! args
38
+ options[:files] = args.to_a
23
39
 
24
- opts.on('-w VAL', '--word VAL', 'uncomplete word') do |l|
25
- options[:word] = l
26
- end
40
+ {
41
+ locale: options[:locale],
42
+ path: options[:path],
43
+ word: options[:word],
44
+ uncomplete: options[:locale]
45
+ }
46
+ end
27
47
 
28
- opts.on('-f VAL', '--filepath VAL', 'rails path') do |l|
29
- options[:path] = l
30
- end
48
+ def get_banner
49
+ return <<-BANNAR
50
+ Usage:
51
+ alpacaComplete [OPTIONS]
52
+ ---------------------------------------------------------------------
53
+ BANNAR
54
+ end
31
55
 
32
- opts.on('-v', '--version', 'Version') do
33
- puts AlpacaComplete::VERSION
34
- exit
56
+ def run( cmd, path, uncomplete="" )
57
+ case cmd
58
+ when "locale"
59
+ puts AlpacaComplete::LocaleComplete.complete path, uncomplete
35
60
  end
36
-
37
61
  end
38
62
 
39
- optparse.parse! args
40
- options[:files] = args.to_a
63
+ def load_yaml( path )
64
+ return nil until File.exist?(path)
41
65
 
42
- {
43
- locale: options[:locale],
44
- path: options[:path],
45
- word: options[:word],
46
- uncomplete: options[:locale]
47
- }
48
- end
49
-
50
- def self.get_banner
51
- return <<-BANNAR
52
- Usage:
53
- alpacaComplete [OPTIONS]
54
- ---------------------------------------------------------------------
55
- BANNAR
56
- end
57
-
58
- def self.run cmd, path, uncomplete=""
59
- case cmd
60
- when "locale"
61
- puts AlpacaComplete::LocaleComplete.complete path, uncomplete
66
+ require 'yaml'
67
+ YAML::load_file( path )
62
68
  end
63
69
  end
64
-
65
- def load_yaml( path )
66
- return nil until File.exist?(path)
67
-
68
- YAML::load_file( path )
69
- end
70
-
71
70
  end
@@ -1,19 +1,10 @@
1
1
  # coding: utf-8
2
2
 
3
-
4
- # fix up blank?
5
- class Object
6
- def blank?
7
- if self.respond_to? :"empty?"
8
- self.nil? or self.empty?
9
- else
10
- self.nil?
11
- end
12
- end
13
- end
3
+ require 'Hash'
4
+ require 'Object'
14
5
 
15
6
  module AlpacaComplete
16
- Version = "0.1.3"
7
+ VERSION = "0.1.4"
17
8
 
18
9
  autoload :LocaleComplete, 'AlpacaComplete/locale_complete'
19
10
  autoload :Utils, 'AlpacaComplete/utils'
data/lib/Hash.rb ADDED
@@ -0,0 +1,36 @@
1
+ # hash extend deep_merge
2
+ class Hash
3
+ # Returns a new hash with +self+ and +other_hash+ merged recursively.
4
+ def deep_merge(other_hash)
5
+ dup.deep_merge!(other_hash)
6
+ end
7
+
8
+ # Same as +deep_merge+, but modifies +self+.
9
+ def deep_merge!(other_hash)
10
+ other_hash.each_pair do |k,v|
11
+ tv = self[k]
12
+ self[k] = tv.is_a?(Hash) && v.is_a?(Hash) ? tv.deep_merge(v) : v
13
+ end
14
+ self
15
+ end
16
+
17
+ def join_keys( str = ".", key="" )
18
+ dup.join_keys! str, key
19
+ end
20
+
21
+ def join_keys!( str = ".", key="")
22
+ res = {}
23
+ each do |k, v|
24
+ full_key = key.empty? ? k : "#{key}#{str}#{k}"
25
+ if v.is_a?(Hash)
26
+ res.deep_merge!( v.join_keys( str, full_key ) )
27
+ else
28
+ res[full_key] = v
29
+ end
30
+ end
31
+
32
+ clear
33
+ self.merge! res
34
+ end
35
+ end
36
+
data/lib/Object.rb ADDED
@@ -0,0 +1,9 @@
1
+ class Object
2
+ def blank?
3
+ if self.respond_to? :"empty?"
4
+ self.nil? or self.empty?
5
+ else
6
+ self.nil?
7
+ end
8
+ end
9
+ end
data/preview1.png ADDED
Binary file
data/spec/hash_spec.rb ADDED
@@ -0,0 +1,51 @@
1
+ require 'spec_helper'
2
+
3
+ describe Hash do
4
+ let(:hash_empty) { {} }
5
+ let(:hash_not_empty) { { hoge: 1, hoge2: 2} }
6
+ let(:deep_hash) { { first: { second: { third: 1 }} } }
7
+
8
+ def expectation_value(joint_box = ".")
9
+ { "first#{joint_box}second#{joint_box}third" => 1 }
10
+ end
11
+
12
+ [:deep_merge, :deep_merge!, :join_keys, :join_keys!].each do |method|
13
+ it "has #{method} method" do
14
+ Hash.new.should respond_to(method)
15
+ end
16
+ end
17
+
18
+ it "return a new hash with self and other merged recursively" do
19
+ hash_empty_dup = hash_empty.dup
20
+ hash_empty.deep_merge hash_not_empty
21
+
22
+ hash_empty.should eql(hash_empty_dup)
23
+ end
24
+
25
+ it "return a hash with self and other merged recursively" do
26
+ hash_empty_dup = hash_empty.dup
27
+ hash_empty.deep_merge! hash_not_empty
28
+
29
+ hash_empty.should_not eql(hash_empty_dup)
30
+ hash_empty.should eql(hash_not_empty)
31
+ end
32
+
33
+ it "return a string with join value into hash" do
34
+ deep_hash_clone = deep_hash.clone
35
+ deep_hash.join_keys(".").should eql expectation_value
36
+ deep_hash.dup.should eql deep_hash_clone.dup
37
+
38
+ deep_hash.join_keys!(".").should eql expectation_value
39
+ deep_hash.should_not eql deep_hash_clone
40
+ end
41
+
42
+ context :join_keys do
43
+ keys = %w[# . -> & = _]
44
+ keys.each do |key|
45
+ it "return hash key joined with #{key}" do
46
+ deep_hash.join_keys(key).should eql expectation_value(key)
47
+ end
48
+ end
49
+ end
50
+
51
+ end
@@ -3,10 +3,6 @@
3
3
  require 'spec_helper'
4
4
 
5
5
  describe AlpacaComplete::LocaleComplete do
6
- context 'version' do
7
- it { subject::Version.should > "0"}
8
- end
9
-
10
6
  context :get_locate do
11
7
  let(:rails_path) {
12
8
  File.realpath './spec/supports/rails_complete/app/controllers'
@@ -54,28 +50,4 @@ describe AlpacaComplete::LocaleComplete do
54
50
  end
55
51
  end
56
52
 
57
- context :get_methods do
58
- let(:methods) {
59
- require 'i18n'
60
- methods = I18n.methods
61
- }
62
- let(:methods_str) {
63
- methods_str = subject.get_methods
64
- }
65
-
66
- it 'return methods by string' do
67
- methods.each do |m|
68
- methods_str.include?( m.to_s ).should eql(true)
69
- end
70
- end
71
-
72
- it 'result is string' do
73
- methods_str.is_a?( String ).should eql(true)
74
- end
75
-
76
- it 'result is match "(\w+\n)+"' do
77
- methods_str.match(/([a-zA-Z_!?]+\n)+/).should_not eql(nil)
78
- end
79
- end
80
-
81
53
  end
data/spec/utils_spec.rb CHANGED
@@ -12,14 +12,12 @@ describe AlpacaComplete::Utils do
12
12
  let(:yaml_dir) { 'spec/supports/dict' }
13
13
 
14
14
  it 'return nil if yaml isnt exist' do
15
- extend AlpacaComplete::Utils
16
- yaml_data = load_yaml "#{yaml_dir}/non_existent.yml"
15
+ yaml_data = AlpacaComplete::Utils.load_yaml "#{yaml_dir}/non_existent.yml"
17
16
  yaml_data.should eql(nil)
18
17
  end
19
18
 
20
19
  it 'return hash if yaml is exist' do
21
- extend AlpacaComplete::Utils
22
- yaml_data = load_yaml "#{yaml_dir}/existent.yml"
20
+ yaml_data = AlpacaComplete::Utils.load_yaml "#{yaml_dir}/existent.yml"
23
21
  yaml_data.is_a?(Hash).should == true
24
22
  end
25
23
 
data/spec/version_spec.rb CHANGED
@@ -1,9 +1,5 @@
1
1
  require 'spec_helper'
2
2
 
3
- describe AlpacaComplete::Version do
4
- before do
5
- version = File.open("VERSION").read
6
- @version = version.gsub("\r", '')
7
- end
8
- it { should == @version }
3
+ describe AlpacaComplete::VERSION do
4
+ it { should == "0.1.4" }
9
5
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: alpaca_complete
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.3
4
+ version: 0.1.4
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-10-25 00:00:00.000000000 Z
12
+ date: 2013-01-03 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: rspec
@@ -101,7 +101,11 @@ files:
101
101
  - lib/AlpacaComplete/detect.rb
102
102
  - lib/AlpacaComplete/locale_complete.rb
103
103
  - lib/AlpacaComplete/utils.rb
104
+ - lib/Hash.rb
105
+ - lib/Object.rb
106
+ - preview1.png
104
107
  - spec/detect_spec.rb
108
+ - spec/hash_spec.rb
105
109
  - spec/locale_complete_spec.rb
106
110
  - spec/spec_helper.rb
107
111
  - spec/supports/dict/existent.yml
@@ -173,7 +177,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
173
177
  version: '0'
174
178
  segments:
175
179
  - 0
176
- hash: -458434146859851818
180
+ hash: 3735223565893724275
177
181
  required_rubygems_version: !ruby/object:Gem::Requirement
178
182
  none: false
179
183
  requirements: