okei 0.0.2 → 1.0.0.pre.rc
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/.rubocop.yml +4 -0
- data/README.rdoc +6 -7
- data/Rakefile +4 -13
- data/app/controllers/okei/api/v1/responder.rb +15 -2
- data/app/controllers/okei/api/v1/units_controller.rb +4 -0
- data/app/models/okei/unit.rb +32 -5
- data/app/use_cases/okei/find_unit.rb +2 -12
- data/app/use_cases/okei/get_unit.rb +1 -1
- data/app/views/okei/api/v1/units/_unit.json.jbuilder +2 -4
- data/db/migrate/{20141004212500_create_okei_units.rb → 20141019072900_create_okei_units.rb} +0 -2
- data/db/migrate/20141019072901_populate_okei_units.rb +60 -0
- data/db/migrate/20141019072902_populate_okei_correctors.rb +50 -0
- data/db/seeds/phrases.json +199 -0
- data/db/seeds/prefixes.json +12 -0
- data/db/seeds/words.json +10 -216
- data/lib/okei.rb +2 -0
- data/lib/okei/version.rb +4 -2
- data/lib/tasks/okei_tasks.rake +47 -28
- data/spec/dummy/db/migrate/20141018085223_create_corrector_bases.corrector.rb +14 -0
- data/spec/dummy/db/migrate/20141018085226_create_uuids_uuids.uuids.rb +10 -0
- data/spec/dummy/db/schema.rb +22 -12
- data/spec/dummy/db/test.sqlite3 +0 -0
- data/spec/dummy/log/development.log +20296 -0
- data/spec/dummy/log/test.log +183148 -0
- data/spec/examples/json_schemas/unit.json +7 -2
- data/spec/factories/units.rb +0 -1
- data/spec/models/okei/unit_spec.rb +7 -26
- data/spec/requests/okei/api/v1/find_unit_spec.rb +8 -11
- data/spec/requests/okei/api/v1/get_unit_spec.rb +2 -3
- data/spec/requests/okei/api/v1/get_units_spec.rb +2 -2
- data/spec/support/initializers/factory_girl_rails.rb +4 -0
- data/spec/use_cases/okei/find_unit_spec.rb +7 -10
- metadata +43 -21
- data/app/models/okei/line.rb +0 -63
- data/app/models/okei/word.rb +0 -26
- data/app/models/okei/words.rb +0 -40
- data/db/migrate/20141004212501_populate_okei_units.rb +0 -14
- data/db/migrate/20141004212502_create_okei_words.rb +0 -11
- data/db/migrate/20141004212503_populate_okei_words.rb +0 -15
- data/spec/factories/words.rb +0 -7
- data/spec/models/okei/line_spec.rb +0 -61
- data/spec/models/okei/word_spec.rb +0 -75
- data/spec/models/okei/words_spec.rb +0 -64
- data/spec/support/initializers/factory_girl.rb +0 -6
data/app/models/okei/words.rb
DELETED
@@ -1,40 +0,0 @@
|
|
1
|
-
# encoding: utf-8
|
2
|
-
|
3
|
-
module Okei
|
4
|
-
|
5
|
-
# Breaks the source string to words properly:
|
6
|
-
#
|
7
|
-
# Words.new "М3 96% ЧИСТОГО СПИРТА /ЧЕЛ"
|
8
|
-
# # => ["М", "^", "3", "96", "%", "ЧИСТОГО", "СПИРТА", "/", "ЧЕЛ"]
|
9
|
-
#
|
10
|
-
class Words < Array
|
11
|
-
|
12
|
-
def initialize(line = "")
|
13
|
-
@line = line.to_s
|
14
|
-
super @line.scan(/[А-Я]+|\d+.\d+|\d+|\/|\^|\%/)
|
15
|
-
end
|
16
|
-
|
17
|
-
# Maps words back to `Words` (not a base `Array`):
|
18
|
-
#
|
19
|
-
# ["9.8", "М", "/", "С", "^", "2"].map { |i| i }.class
|
20
|
-
# # => Words
|
21
|
-
#
|
22
|
-
# The method can be combined with `to_s`:
|
23
|
-
#
|
24
|
-
# ["9.8", "М", "/", "С", "^", "2"].map { |i| i.lower }.to_s
|
25
|
-
# # => "9.8 м/с2"
|
26
|
-
#
|
27
|
-
def map
|
28
|
-
Words.new super
|
29
|
-
end
|
30
|
-
|
31
|
-
# Joins words back to string when necessary:
|
32
|
-
#
|
33
|
-
# ["М", "^", "3", "96", "ПРОЦ", "ЧИСТОГО", "СПИРТА", "/", "ЧЕЛ"].to_s
|
34
|
-
# # => "М3 96 ПРОЦ ЧИСТОГО СПИРТА/ЧЕЛ"
|
35
|
-
#
|
36
|
-
def to_s
|
37
|
-
join(" ").gsub(" ^ ", "").gsub(" / ", "/")
|
38
|
-
end
|
39
|
-
end
|
40
|
-
end
|
@@ -1,14 +0,0 @@
|
|
1
|
-
# Populates db with units of measure.
|
2
|
-
class PopulateOkeiUnits < ActiveRecord::Migration
|
3
|
-
|
4
|
-
def up
|
5
|
-
root = File.dirname File.dirname(Okei::Engine.called_from)
|
6
|
-
seed = File.join(root, "db", "seeds", "units.json")
|
7
|
-
Okei::Unit.delete_all
|
8
|
-
JSON.parse(File.read seed).each { |item| Okei::Unit.create! item }
|
9
|
-
end
|
10
|
-
|
11
|
-
def down
|
12
|
-
Okei::Unit.delete_all
|
13
|
-
end
|
14
|
-
end
|
@@ -1,11 +0,0 @@
|
|
1
|
-
# Creates db table for a dictionary of words used in unit names.
|
2
|
-
class CreateOkeiWords < ActiveRecord::Migration
|
3
|
-
def change
|
4
|
-
create_table :okei_words do |t|
|
5
|
-
t.string :synonym
|
6
|
-
t.string :text
|
7
|
-
end
|
8
|
-
|
9
|
-
add_index :okei_words, :synonym, unique: true
|
10
|
-
end
|
11
|
-
end
|
@@ -1,15 +0,0 @@
|
|
1
|
-
# Populates db with dictionary of words and phrases used in unit names.
|
2
|
-
class PopulateOkeiWords < ActiveRecord::Migration
|
3
|
-
|
4
|
-
def up
|
5
|
-
root = File.dirname File.dirname(Okei::Engine.called_from)
|
6
|
-
seed = File.join(root, "db", "seeds", "words.json")
|
7
|
-
JSON.parse(File.read seed).each do |synonym, text|
|
8
|
-
Okei::Word.create synonym: synonym, text: text
|
9
|
-
end
|
10
|
-
end
|
11
|
-
|
12
|
-
def down
|
13
|
-
Okei::Word.delete_all
|
14
|
-
end
|
15
|
-
end
|
data/spec/factories/words.rb
DELETED
@@ -1,61 +0,0 @@
|
|
1
|
-
# encoding: utf-8
|
2
|
-
require "spec_helper"
|
3
|
-
|
4
|
-
module Okei
|
5
|
-
describe Line do
|
6
|
-
|
7
|
-
describe ".new" do
|
8
|
-
|
9
|
-
# ========================================================================
|
10
|
-
# Matchers
|
11
|
-
# ========================================================================
|
12
|
-
|
13
|
-
RSpec::Matchers.define :turn_to do |line|
|
14
|
-
match do |str|
|
15
|
-
expect(Line.new str).to eq line
|
16
|
-
end
|
17
|
-
failure_message do |str|
|
18
|
-
"#{ str } should turn to #{ line }. #{ Line.new str } given."
|
19
|
-
end
|
20
|
-
end
|
21
|
-
|
22
|
-
# ========================================================================
|
23
|
-
# Tests
|
24
|
-
# ========================================================================
|
25
|
-
|
26
|
-
it "returns a string" do
|
27
|
-
expect(Line.new).to be_kind_of String
|
28
|
-
end
|
29
|
-
|
30
|
-
specify { expect("усл метр/сек^2").to turn_to "УСЛ МЕТР/СЕК ^ 2" }
|
31
|
-
specify { expect("100 М").to turn_to "100 М" }
|
32
|
-
specify { expect("0,1КМ").to turn_to "0.1КМ" }
|
33
|
-
specify { expect("М.1").to turn_to "М 1" }
|
34
|
-
specify { expect("М2").to turn_to "М ^ 2" }
|
35
|
-
specify { expect("М 2").to turn_to "М ^ 2" }
|
36
|
-
specify { expect("М.2").to turn_to "М ^ 2" }
|
37
|
-
specify { expect("М. 2").to turn_to "М ^ 2" }
|
38
|
-
specify { expect("М^2").to turn_to "М ^ 2" }
|
39
|
-
specify { expect("М3").to turn_to "М ^ 3" }
|
40
|
-
specify { expect("М 3").to turn_to "М ^ 3" }
|
41
|
-
specify { expect("М.3").to turn_to "М ^ 3" }
|
42
|
-
specify { expect("М. 3").to turn_to "М ^ 3" }
|
43
|
-
specify { expect("М^3").to turn_to "М ^ 3" }
|
44
|
-
specify { expect("М.4").to turn_to "М 4" }
|
45
|
-
specify { expect("ТЫС. Ч").to turn_to "ТЫС Ч" }
|
46
|
-
specify { expect("ТЫС. Ч.").to turn_to "ТЫС Ч" }
|
47
|
-
specify { expect(".ТЫС .Ч").to turn_to "ТЫС Ч" }
|
48
|
-
specify { expect("в 20-фут.экв.").to turn_to "В 20 ФУТ ЭКВ" }
|
49
|
-
specify { expect("METP B ЧAC").to turn_to "МЕТР В ЧАС" }
|
50
|
-
specify { expect("ГЕКТОЛИТР").to turn_to "ГЕКТО ^ ЛИТР" }
|
51
|
-
specify { expect("КИЛОЛИТР").to turn_to "КИЛО ^ ЛИТР" }
|
52
|
-
specify { expect("МИЛЛИЛИТР").to turn_to "МИЛЛИ ^ ЛИТР" }
|
53
|
-
specify { expect("МЕГАЛИТР").to turn_to "МЕГА ^ ЛИТР" }
|
54
|
-
specify { expect("САНТИЛИТР").to turn_to "САНТИ ^ ЛИТР" }
|
55
|
-
specify { expect("МИКРОЛИТР").to turn_to "МИКРО ^ ЛИТР" }
|
56
|
-
specify { expect("ТЕРАЛИТР").to turn_to "ТЕРА ^ ЛИТР" }
|
57
|
-
specify { expect("НАНОЛИТР").to turn_to "НАНО ^ ЛИТР" }
|
58
|
-
specify { expect("40%-НОГО СПИРТА").to turn_to "40% СПИРТА" }
|
59
|
-
end
|
60
|
-
end
|
61
|
-
end
|
@@ -1,75 +0,0 @@
|
|
1
|
-
# encoding: utf-8
|
2
|
-
require "spec_helper"
|
3
|
-
|
4
|
-
module Okei
|
5
|
-
describe Word do
|
6
|
-
|
7
|
-
describe "#synonym=" do
|
8
|
-
|
9
|
-
subject(:word) { Word.new }
|
10
|
-
|
11
|
-
it "sets #synonym" do
|
12
|
-
value = "МЕТР"
|
13
|
-
expect { word.synonym = value }.to change { word.synonym }.to value
|
14
|
-
end
|
15
|
-
end
|
16
|
-
|
17
|
-
describe "#text=" do
|
18
|
-
|
19
|
-
subject(:word) { Word.new }
|
20
|
-
|
21
|
-
it "sets #text" do
|
22
|
-
value = "М"
|
23
|
-
expect { word.text = value }.to change { word.text }.to value
|
24
|
-
end
|
25
|
-
end
|
26
|
-
|
27
|
-
describe "#valid?" do
|
28
|
-
|
29
|
-
subject(:word) { build :word }
|
30
|
-
|
31
|
-
before { expect(word).to be_valid }
|
32
|
-
|
33
|
-
it "fails when #synonym is absent" do
|
34
|
-
word.synonym = ""
|
35
|
-
expect(word).not_to be_valid
|
36
|
-
end
|
37
|
-
|
38
|
-
it "fails when #synonym is taken" do
|
39
|
-
create :word, synonym: word.synonym
|
40
|
-
expect(word).not_to be_valid
|
41
|
-
end
|
42
|
-
|
43
|
-
it "fails when #text is absent" do
|
44
|
-
word.text = ""
|
45
|
-
expect(word).not_to be_valid
|
46
|
-
end
|
47
|
-
|
48
|
-
it "passes when #text is taken" do
|
49
|
-
create :word, text: word.text
|
50
|
-
expect(word).to be_valid
|
51
|
-
end
|
52
|
-
end
|
53
|
-
|
54
|
-
describe ".translate" do
|
55
|
-
|
56
|
-
let!(:line) { "ТЕКСТ" }
|
57
|
-
|
58
|
-
context "when word exists" do
|
59
|
-
|
60
|
-
let!(:word) { create :word, synonym: line }
|
61
|
-
|
62
|
-
it "translates line" do
|
63
|
-
expect(Word.translate line).to eq word.text
|
64
|
-
end
|
65
|
-
end
|
66
|
-
|
67
|
-
context "when word is absent" do
|
68
|
-
|
69
|
-
it "returns the source" do
|
70
|
-
expect(Word.translate line).to eq line
|
71
|
-
end
|
72
|
-
end
|
73
|
-
end
|
74
|
-
end
|
75
|
-
end
|
@@ -1,64 +0,0 @@
|
|
1
|
-
# encoding: utf-8
|
2
|
-
require "spec_helper"
|
3
|
-
|
4
|
-
module Okei
|
5
|
-
describe Words do
|
6
|
-
|
7
|
-
describe ".new" do
|
8
|
-
|
9
|
-
RSpec::Matchers.define :have_words do |list|
|
10
|
-
match do |text|
|
11
|
-
expect(Words.new text).to eq list
|
12
|
-
end
|
13
|
-
failure_message do |text|
|
14
|
-
"#{ text } should have words #{ list }." \
|
15
|
-
" #{ Words.new text } given."
|
16
|
-
end
|
17
|
-
end
|
18
|
-
|
19
|
-
it "returns list of words" do
|
20
|
-
expect(Words.new).to be_kind_of Array
|
21
|
-
end
|
22
|
-
|
23
|
-
specify { expect("УСЛ МЕТР/СЕК^2").to have_words %w(УСЛ МЕТР / СЕК ^ 2) }
|
24
|
-
specify { expect("100 М").to have_words %w(100 М) }
|
25
|
-
specify { expect("2ШТ").to have_words %w(2 ШТ) }
|
26
|
-
specify { expect("1000КМ").to have_words %w(1000 КМ) }
|
27
|
-
specify { expect("0.1КМ").to have_words %w(0.1 КМ) }
|
28
|
-
specify { expect("М1").to have_words %w(М 1) }
|
29
|
-
specify { expect("М.1").to have_words %w(М 1) }
|
30
|
-
specify { expect("М4").to have_words %w(М 4) }
|
31
|
-
specify { expect("М.4").to have_words %w(М 4) }
|
32
|
-
specify { expect("ТЫС. Ч").to have_words %w(ТЫС Ч) }
|
33
|
-
specify { expect("ТЫС. Ч.").to have_words %w(ТЫС Ч) }
|
34
|
-
specify { expect(".ТЫС .Ч").to have_words %w(ТЫС Ч) }
|
35
|
-
specify { expect("90%").to have_words %w(90 %) }
|
36
|
-
end
|
37
|
-
|
38
|
-
describe "#map" do
|
39
|
-
|
40
|
-
subject(:words) { Words.new("M") }
|
41
|
-
|
42
|
-
it "should return a Words object" do
|
43
|
-
expect(subject.map { |word| word }).to be_kind_of Words
|
44
|
-
end
|
45
|
-
end
|
46
|
-
|
47
|
-
describe "#to_s" do
|
48
|
-
|
49
|
-
RSpec::Matchers.define :shape_into do |text|
|
50
|
-
match do |words|
|
51
|
-
expect(Words.new(words).to_s).to eq text
|
52
|
-
end
|
53
|
-
failure_message do |words|
|
54
|
-
"'#{ words }' should shape into '#{ text }'." \
|
55
|
-
" '#{ Words.new(words) }' given."
|
56
|
-
end
|
57
|
-
end
|
58
|
-
|
59
|
-
specify { expect("К ^ М ^ 2").to shape_into "КМ2" }
|
60
|
-
specify { expect("КМ / С").to shape_into "КМ/С" }
|
61
|
-
specify { expect("КИЛОМ").to shape_into "КИЛОМ" }
|
62
|
-
end
|
63
|
-
end
|
64
|
-
end
|