analects 0.2.1 → 0.3.1

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 89bd80acac983054fa373c4f54039b1a89b155e6
4
- data.tar.gz: dc1003d42fb5ef4c0f935326f498c6e5aeabc55f
3
+ metadata.gz: c11afafa3e6efdbad98b84a73d3a190e2dc7fb52
4
+ data.tar.gz: 74b50dbb99b0fbb20182e682d1a5b044930e089a
5
5
  SHA512:
6
- metadata.gz: 11e1845f8585ed02645d0b39da4b1e7e7a40e1243d3bd06acd5f220a382d5b6e12201b7ae33b7f9d7583a9ddabe16025695412485c3b01a2878127f80b04a6a0
7
- data.tar.gz: a52fdb67b1be3af05b93962ca42517a4f0b97652fc23de24e3a4ed20ecd6b8255a4093bf81b335ea317581990538d721465f2375a2b9c883392ce91c8ef94b97
6
+ metadata.gz: bf0ef56017cdf8a29b8931ca7b6e838c0c0255b7e9cfa9f878e23a531bbb43c176f4ffc1840308c0a82427e2c00b764e625226d20b912b7eb4731a8ba8d4f834
7
+ data.tar.gz: ad3972c46c16426698709ecf2a1cf86246b7221333398ec5d8a2d9b51e9b3dd0532e66754c173bb3e04c05cb288bf475e20229dc844b5a8e0991d00101cceccf
data/.travis.yml CHANGED
@@ -1,8 +1,8 @@
1
1
  language: ruby
2
2
  rvm:
3
3
  - 1.9.3
4
- - 2.0.0
5
- - 2.1.0
4
+ - 2.0
5
+ - 2.1.1
6
6
  - jruby-19mode
7
7
  - rbx
8
8
  - ruby-head
@@ -11,4 +11,3 @@ matrix:
11
11
  allow_failures:
12
12
  - rvm: ruby-head
13
13
  - rvm: jruby-head
14
- script: bundle exec rake ci:travis
data/Gemfile CHANGED
@@ -5,13 +5,4 @@ group :development, :test do
5
5
  eval_gemfile 'Gemfile.devtools'
6
6
  end
7
7
 
8
- if ENV['LOCAL']
9
- source = ->(s) { { path: ENV['HOME'] + "/github/#{s}" } }
10
- else
11
- source = ->(s) { { github: "plexus/#{s}" } }
12
- end
13
-
14
- gem 'rmmseg' , source.('rmmseg')
15
- gem 'ting' , source.('ting')
16
-
17
8
  gemspec
data/Gemfile.lock CHANGED
@@ -1,15 +1,3 @@
1
- GIT
2
- remote: git://github.com/plexus/rmmseg.git
3
- revision: 73fb91682ddf955e6e72722cc3f2adbecaf7508d
4
- specs:
5
- rmmseg (0.1.6)
6
-
7
- GIT
8
- remote: git://github.com/plexus/ting.git
9
- revision: 63491759a6b40c8dddc7aadcf16fce833ea107ba
10
- specs:
11
- ting (0.9.0)
12
-
13
1
  GIT
14
2
  remote: https://github.com/rom-rb/devtools.git
15
3
  revision: 62d3fa16941e5b61e1e8bb520a1b40d6179aebf5
@@ -19,7 +7,7 @@ GIT
19
7
  PATH
20
8
  remote: .
21
9
  specs:
22
- analects (0.2.1)
10
+ analects (0.3.1)
23
11
  ice_nine (~> 0.11.0)
24
12
  inflecto (~> 0.0.2)
25
13
  plexus-rmmseg (~> 0.1.6)
@@ -178,6 +166,7 @@ GEM
178
166
  thread_safe (0.2.0)
179
167
  atomic (>= 1.1.7, < 2)
180
168
  timers (1.1.0)
169
+ ting (0.9.0)
181
170
  unparser (0.1.9)
182
171
  abstract_type (~> 0.0.7)
183
172
  adamantium (~> 0.1)
@@ -220,7 +209,6 @@ DEPENDENCIES
220
209
  rb-notifu (~> 0.0.4)
221
210
  rbench (~> 0.2.3)
222
211
  reek (~> 1.3.2)
223
- rmmseg!
224
212
  rspec (~> 2.14.1)
225
213
  rspec-core (~> 2.14.8)
226
214
  rubocop (~> 0.18.1)
@@ -231,7 +219,6 @@ DEPENDENCIES
231
219
  rubysl-singleton (~> 2.0.0)
232
220
  simplecov (~> 0.8.2)
233
221
  terminal-notifier-guard (~> 1.5.3)
234
- ting!
235
222
  yard (~> 0.8.7)
236
223
  yard-spellcheck (~> 0.1.5)
237
224
  yardstick (~> 0.9.9)
data/lib/analects.rb CHANGED
@@ -28,6 +28,7 @@ require 'analects/version'
28
28
  require 'analects/encoding'
29
29
  require 'analects/cli/progress'
30
30
  require 'analects/cedict_loader'
31
+ require 'analects/hsk_loader'
31
32
  require 'analects/chise_ids_loader'
32
33
  require 'analects/source'
33
34
  require 'analects/library'
@@ -6,7 +6,7 @@ module Analects
6
6
 
7
7
  attr_reader :headers
8
8
 
9
- def initialize(io)
9
+ def initialize(io, library)
10
10
  @contents = io.read
11
11
  @headers = {}
12
12
  @contents.each_line do |line|
@@ -21,14 +21,25 @@ module Analects
21
21
  [:traditional, :simplified, :pinyin, :definitions]
22
22
  end
23
23
 
24
- def each
25
- if block_given?
26
- @contents.each_line do |line|
27
- yield process_contents(line) if line !~ /^#/
24
+ def each(&blk)
25
+ return to_enum(__method__) unless block_given?
26
+ @entries ||= @contents.each_line.map do |line|
27
+ process_contents(line) if line !~ /^#/
28
+ end.compact
29
+ @entries.each(&blk)
30
+ end
31
+
32
+ def find_by(qry)
33
+ qry.map {|field, value| lookup_index(field).fetch(value, [])}.inject {|r1, r2| r1 & r2}
34
+ end
35
+
36
+ def lookup_index(field)
37
+ @indexes ||= field_names.each_with_object({}) do |field, acc|
38
+ acc[field] = each_with_object({}) do |entry, acc|
39
+ (acc[entry[field_names.index(field)]] ||= []) << entry
28
40
  end
29
- else
30
- enum_for(:each)
31
41
  end
42
+ @indexes[field]
32
43
  end
33
44
 
34
45
  private
@@ -14,7 +14,7 @@ module Analects
14
14
  end
15
15
  end
16
16
 
17
- def initialize(pathname, only_unicode = true)
17
+ def initialize(pathname, library, only_unicode = true)
18
18
  @contents = MultiFile.new(pathname.children.select{|ch| ch.to_s =~ /IDS-.*\.txt/})
19
19
  @only_unicode = only_unicode
20
20
  end
@@ -0,0 +1,27 @@
1
+ # encoding: UTF-8
2
+
3
+ module Analects
4
+ class HskLoader
5
+ extend Forwardable
6
+ include Enumerable
7
+
8
+ FIELDS = [:level, :simplified, :traditional, :pinyin]
9
+
10
+ class HskEntry < Struct.new(:library, *FIELDS)
11
+ def cedict
12
+ @cedict ||= library.cedict.loader.find_by(
13
+ traditional: traditional,
14
+ simplified: simplified,
15
+ )
16
+ end
17
+ end
18
+
19
+ def_delegators :@contents, :each
20
+
21
+ def initialize(io, library)
22
+ @contents = CSV(io.read).map do |level, simplified, traditional, pinyin|
23
+ HskEntry.new(library, level, simplified, traditional, pinyin)
24
+ end
25
+ end
26
+ end
27
+ end
@@ -47,17 +47,20 @@ module Analects
47
47
  }.merge(options_for :chise_ids)
48
48
  )
49
49
  end
50
- # def hsk
51
- # @hsk ||= Source.new(
52
50
 
53
- # ).merge(options_for :hsk)
54
- # end
51
+ def hsk
52
+ @hsk ||= Source.new( {
53
+ data_file: 'hsk.csv'
54
+ }.merge(options_for :hsk)
55
+ )
56
+ end
55
57
 
56
58
  private
57
59
 
58
60
  def options_for(name)
59
61
  {
60
62
  name: name,
63
+ library: self,
61
64
  url: Analects.const_get("#{name.to_s.upcase}_URL"),
62
65
  loader: Analects.const_get("#{Inflecto.camelize name}Loader"),
63
66
  data_dir: data_dir
@@ -7,12 +7,13 @@ module Analects
7
7
  @options = options
8
8
  end
9
9
 
10
+ def library ; options[:library] ; end
10
11
  def name ; options[:name] ; end
11
12
  def url ; options[:url] ; end
12
13
  def retrieval ; Array(options[:retrieval]) ; end
13
14
 
14
15
  def loader
15
- @loader ||= options[:loader].new(Pathname(location))
16
+ @loader ||= options[:loader].new(Pathname(location), library)
16
17
  end
17
18
 
18
19
  def data_dir
@@ -1,3 +1,3 @@
1
1
  module Analects
2
- VERSION = '0.2.1'
2
+ VERSION = '0.3.1'
3
3
  end
@@ -14,7 +14,7 @@ describe Analects::CedictLoader do
14
14
  '
15
15
  end
16
16
 
17
- let ( :cedict_loader ) { Analects::CedictLoader.new( StringIO.new(contents) ) }
17
+ let ( :cedict_loader ) { Analects::CedictLoader.new( StringIO.new(contents), nil ) }
18
18
 
19
19
  it "should parse headers" do
20
20
  cedict_loader.headers.should == { 'charset' => 'UTF-8', 'entries' => '104941' }
@@ -3,7 +3,7 @@ require 'spec_helper'
3
3
 
4
4
  describe Analects::ChiseIdsLoader do
5
5
  subject(:loader) do
6
- Analects::ChiseIdsLoader.new(Analects::ROOT.join('spec/test_data/chise_ids'), only_unicode)
6
+ Analects::ChiseIdsLoader.new(Analects::ROOT.join('spec/test_data/chise_ids'), nil, only_unicode)
7
7
  end
8
8
 
9
9
  let(:only_unicode) { false }
@@ -1,19 +1,19 @@
1
1
  require 'tempfile'
2
- require 'spec_helper'
3
2
  require 'securerandom'
3
+ require 'pathname'
4
+
5
+ require 'spec_helper'
4
6
 
5
7
  describe Analects::Library do
6
8
  subject(:library) {
7
9
  described_class.new(options)
8
10
  }
9
- let(:options) { {} }
11
+ let(:data_dir) { File.join(Dir.tmpdir, 'analects-' + SecureRandom.hex(16)) }
12
+ let(:options) {
13
+ { data_dir: data_dir }
14
+ }
10
15
 
11
16
  context 'with a data_dir specified' do
12
- let(:data_dir) { File.join(Dir.tmpdir, 'analects-' + SecureRandom.hex(16)) }
13
- let(:options) {
14
- { data_dir: data_dir }
15
- }
16
-
17
17
  it 'should set that data dir on the sources' do
18
18
  subject.cedict.data_dir.should == data_dir
19
19
  end
@@ -23,7 +23,6 @@ describe Analects::Library do
23
23
  subject(:cedict) { library.cedict }
24
24
 
25
25
  its(:name) { should == :cedict }
26
- its(:location) { should == File.join(Dir.home, '.analects/cedict_1_0_ts_utf-8_mdbg.txt') }
27
26
 
28
27
  it "should download and unpack the CEDICT archive" do
29
28
  cedict.should_receive(:retrieve_http).once.with(Analects::CEDICT_URL).and_return(:a_stream)
@@ -42,7 +41,6 @@ describe Analects::Library do
42
41
 
43
42
  its( :name ) { should == :chise_ids }
44
43
  its( :retrieval ) { should == [ :git ] }
45
- its(:location ) { should == File.join(Dir.home, '.analects/chise_ids') }
46
44
  its( :url ) { should == Analects::CHISE_IDS_URL}
47
45
  end
48
46
 
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: analects
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.2.1
4
+ version: 0.3.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Arne Brasseur
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2014-03-16 00:00:00.000000000 Z
11
+ date: 2014-04-10 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rspec
@@ -169,6 +169,7 @@ files:
169
169
  - lib/analects/chise_ids_loader.rb
170
170
  - lib/analects/cli/progress.rb
171
171
  - lib/analects/encoding.rb
172
+ - lib/analects/hsk_loader.rb
172
173
  - lib/analects/library.rb
173
174
  - lib/analects/models/kangxi_radical.rb
174
175
  - lib/analects/models/zi.rb
@@ -208,7 +209,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
208
209
  version: '0'
209
210
  requirements: []
210
211
  rubyforge_project:
211
- rubygems_version: 2.2.1
212
+ rubygems_version: 2.0.14
212
213
  signing_key:
213
214
  specification_version: 4
214
215
  summary: Toolkit for Mandarin language learning apps