sipp 0.1.4 → 0.1.7
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.
- checksums.yaml +4 -4
- data/Gemfile +2 -1
- data/README.md +125 -4
- data/bin/console +4 -4
- data/config/locales/en.yml +104 -0
- data/config/locales/ru.yml +104 -0
- data/lib/sipp/code.rb +24 -17
- data/lib/sipp/dictionary.rb +113 -113
- data/lib/sipp/engine.rb +8 -0
- data/lib/sipp/extended.rb +109 -0
- data/lib/sipp/extended_dictionary.rb +57 -0
- data/lib/sipp/inverted.rb +15 -0
- data/lib/sipp/inverted_dictionary.rb +38 -0
- data/lib/sipp/localiser.rb +8 -0
- data/lib/sipp/version.rb +1 -1
- data/lib/sipp.rb +55 -10
- data/sipp.gemspec +2 -1
- metadata +29 -7
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 950a78c54189d24a5d4a9159c2c83d74647b867b
|
4
|
+
data.tar.gz: 3a25d2e6be0a30821d1473db85ae7b31048cd2af
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: a12870aa3d1ee2edba06d09015d08a9b708ab23c61cbafc62293f253f8a4217f87af052b2a41aeb3ff415fe126237364e08580bdd01a67c0037ae4ec48c965f4
|
7
|
+
data.tar.gz: 87a73c7cd626016cb6e473584d3ca2c0ad04e564089c785b79d7cf58064b46fa5252eaf59051eab50931aacac4fc24179d448968ce5c820dcb4f6036dea02adb
|
data/Gemfile
CHANGED
data/README.md
CHANGED
@@ -24,17 +24,138 @@ Or install it yourself as:
|
|
24
24
|
code = SIPP::Code.new 'CCMN'
|
25
25
|
code.to_s # "Compact - 2/4 Door - Manual Unspecified Drive - Unspecified Fuel/Power Without Air"
|
26
26
|
|
27
|
+
code.category.to_s # Compact
|
28
|
+
code.type.to_s # 2/4 Door
|
29
|
+
code.transmission_drive.to_s # Manual Unspecified Drive
|
30
|
+
code.transmission.to_s # Manual
|
31
|
+
code.drive.to_s # Unspecified Drive
|
32
|
+
code.transmission_manual? # true
|
33
|
+
code.transmission_auto? # false
|
34
|
+
code.fuel_ac.to_s # Unspecified Fuel/Power Without Air
|
35
|
+
code.fuel.to_s # Unspecified Fuel/Power
|
36
|
+
code.ac.to_s # No Air
|
27
37
|
code.ac? # false
|
28
38
|
```
|
29
39
|
If the code is invalid, it will return `nil` on all checks.
|
30
40
|
|
41
|
+
If only some of the letters are valid, it will translate them:
|
42
|
+
```ruby
|
43
|
+
code = SIPP::Code.new '**DR'
|
44
|
+
code.valid? # false
|
45
|
+
code.to_s # #N/A - #N/A - Auto AWD - Unspecified Fuel/Power With Air
|
46
|
+
```
|
47
|
+
|
31
48
|
Calling `code.validate!` will throw validation errors with exceptions.
|
32
49
|
|
50
|
+
### #as_json
|
51
|
+
A convenient hash that lists car capabilities.
|
52
|
+
```ruby
|
53
|
+
SIPP::Code.new('CCDD').as_json
|
54
|
+
{
|
55
|
+
category: :compact,
|
56
|
+
type: :two_four_door,
|
57
|
+
transmission: :auto,
|
58
|
+
drive: :awd,
|
59
|
+
fuel: :diesel,
|
60
|
+
ac: :air,
|
61
|
+
code: "CCDD"
|
62
|
+
}
|
63
|
+
|
64
|
+
```
|
65
|
+
|
66
|
+
## I18n
|
67
|
+
|
68
|
+
**NOTE**: a simpler version without i18n is kept in `v.1.4`, you can use it as `gem 'sipp', git: 'https://github.com/austerlitz/sipp.git', tag: 'v1.4'`
|
69
|
+
|
70
|
+
For more flexibility methods like `category`, `drive` etc. return a simple
|
71
|
+
Wrapper object to provide either symbol or an i18n-sed string.
|
72
|
+
Thus, when `#to_s` is implied, it will return a translated message.
|
73
|
+
For use in code or elsewhere, use `#to_sym`:
|
74
|
+
```ruby
|
75
|
+
if :diesel == code.fuel.to_sym
|
76
|
+
puts 'This car has a diesel engine'
|
77
|
+
end
|
78
|
+
```
|
79
|
+
|
80
|
+
_This seems to be not an elegant solution. If you have any ideas on improving it, please make a pull request._
|
81
|
+
|
82
|
+
|
83
|
+
You can override existing or add your own translations an put them under the
|
84
|
+
`sipp` scope:
|
85
|
+
```yaml
|
86
|
+
ua:
|
87
|
+
sipp:
|
88
|
+
category:
|
89
|
+
mini: міні
|
90
|
+
type:
|
91
|
+
convertible: кабріолет
|
92
|
+
transmission:
|
93
|
+
manual: МКПП
|
94
|
+
auto: АКПП
|
95
|
+
```
|
96
|
+
## Inverted
|
97
|
+
_A very early beta. But beta than nothin'_
|
98
|
+
|
99
|
+
It's also able to generate a SIPP code from car capabilities.
|
100
|
+
The capabilities are expected in the same format as produced by `#as_json`.
|
101
|
+
If something invalid is supplied it generates `'*'`.
|
102
|
+
|
103
|
+
```ruby
|
104
|
+
SIPP::Inverted.generate({ category: :compact, type: :two_four_door, transmission: :manual, drive: :unspecified, fuel: :petrol, ac: :air})
|
105
|
+
# => 'CCMV'
|
106
|
+
SIPP::Inverted.generate({ category: :compact, type: :two_four_door, fuel: :petrol, ac: :air })
|
107
|
+
# => 'CC*V'
|
108
|
+
```
|
109
|
+
|
110
|
+
## Extended
|
111
|
+
|
112
|
+
Works most similar to Inverted but produces a more consistent approach to encoding car capabilities.
|
113
|
+
|
114
|
+
Generates an Extended-SIPP code from capabilities provided and translates capabilities list into an Extended-SIPP code.
|
115
|
+
|
116
|
+
Should be tried and discussed.
|
117
|
+
|
118
|
+
```ruby
|
119
|
+
SIPP::Extended.new('CCMFDA55').as_json
|
120
|
+
|
121
|
+
{
|
122
|
+
category: :compact,
|
123
|
+
type: :two_four_door,
|
124
|
+
transmission: :manual,
|
125
|
+
drive: :front,
|
126
|
+
fuel: :diesel,
|
127
|
+
ac: :air,
|
128
|
+
doors: 5,
|
129
|
+
seats: 5,
|
130
|
+
bags_big: :unspecified,
|
131
|
+
bags_small: :unspecified,
|
132
|
+
}
|
133
|
+
|
134
|
+
SIPP::Extended.new('CBMFPN2234').as_json
|
135
|
+
{
|
136
|
+
category: :compact,
|
137
|
+
type: :two_three_door,
|
138
|
+
transmission: :manual,
|
139
|
+
drive: :front,
|
140
|
+
fuel: :petrol,
|
141
|
+
ac: :no_air,
|
142
|
+
doors: 2,
|
143
|
+
seats: 2,
|
144
|
+
bags_big: 3,
|
145
|
+
bags_small: 4,
|
146
|
+
}
|
147
|
+
|
148
|
+
```
|
149
|
+
|
33
150
|
## TODO
|
34
|
-
- add
|
35
|
-
- add
|
36
|
-
-
|
37
|
-
- add
|
151
|
+
- [x] add i18n helpers or redo strings into symbols to be i18n-sed
|
152
|
+
- [x] add SIPP code generation from car capabilities
|
153
|
+
- [ ] add input validation of some kind?
|
154
|
+
- [x] add Extended SIPP codes
|
155
|
+
- [ ] add more adequate tests
|
156
|
+
- [ ] add query methods for common checks (like `.diesel?` etc)
|
157
|
+
- [ ] add pseudo codes
|
158
|
+
- [ ] add van codes
|
38
159
|
|
39
160
|
|
40
161
|
## Development
|
data/bin/console
CHANGED
@@ -7,8 +7,8 @@ require "sipp"
|
|
7
7
|
# with your gem easier. You can also use a different console, if you like.
|
8
8
|
|
9
9
|
# (If you use this, don't forget to add pry to your Gemfile!)
|
10
|
-
|
11
|
-
|
10
|
+
require "pry"
|
11
|
+
Pry.start
|
12
12
|
|
13
|
-
require "irb"
|
14
|
-
IRB.start(__FILE__)
|
13
|
+
# require "irb"
|
14
|
+
# IRB.start(__FILE__)
|
@@ -0,0 +1,104 @@
|
|
1
|
+
en:
|
2
|
+
sipp:
|
3
|
+
category:
|
4
|
+
mini: Mini
|
5
|
+
mini_elite: Mini Elite
|
6
|
+
economy: Economy
|
7
|
+
economy_elite: Economy Elite
|
8
|
+
compact: Compact
|
9
|
+
compact_elite: Compact Elite
|
10
|
+
intermediate: Intermediate
|
11
|
+
intermediate_elite: Intermediate Elite
|
12
|
+
standard: Standard
|
13
|
+
standard_elite: Standard Elite
|
14
|
+
fullsize: Fullsize
|
15
|
+
fullsize_elite: Fullsize Elite
|
16
|
+
premium: Premium
|
17
|
+
premium_elite: Premium Elite
|
18
|
+
luxury: Luxury
|
19
|
+
luxury_elite: Luxury Elite
|
20
|
+
oversize: Oversize
|
21
|
+
special: Special
|
22
|
+
|
23
|
+
type:
|
24
|
+
two_three_door: 2-3 Door
|
25
|
+
two_four_door: 2/4 Door
|
26
|
+
four_five_door: 4-5 Door
|
27
|
+
wagon_estate: Wagon/Estate
|
28
|
+
passenger_van: Passenger Van
|
29
|
+
limousine_sedan: Limousine/Sedan
|
30
|
+
sport: Sport
|
31
|
+
convertible: Convertible
|
32
|
+
suv: SUV
|
33
|
+
open_air_all_terrain: Open Air All Terrain
|
34
|
+
special: Special
|
35
|
+
pick_up_2_door: Pick up (single/extended cab) 2 door
|
36
|
+
pick_up_4_door: Pick up (double cab) 4 door
|
37
|
+
special_offer_car: Special Offer Car
|
38
|
+
coupe: Coupe
|
39
|
+
monospace: Monospace
|
40
|
+
recreational_vehicle: Recreational Vehicle
|
41
|
+
motor_home: Motor Home
|
42
|
+
two_wheel_vehicle: 2 Wheel Vehicle
|
43
|
+
roadster: Roadster
|
44
|
+
crossover: Crossover
|
45
|
+
commercial: Commercial Van/Truck
|
46
|
+
|
47
|
+
transmission_drive:
|
48
|
+
manual_unspecified_drive: Manual Unspecified Drive
|
49
|
+
manual_4wd: Manual 4WD
|
50
|
+
manual_awd: Manual AWD
|
51
|
+
auto_unspecified_drive: Auto Unspecified Drive
|
52
|
+
auto_4wd: Auto 4WD
|
53
|
+
auto_awd: Auto AWD
|
54
|
+
|
55
|
+
transmission:
|
56
|
+
manual: Manual
|
57
|
+
auto: Auto
|
58
|
+
robot: Robot
|
59
|
+
|
60
|
+
drive:
|
61
|
+
unspecified: Unspecified
|
62
|
+
four_wd: 4WD
|
63
|
+
awd: AWD
|
64
|
+
single: Single
|
65
|
+
front: Front
|
66
|
+
rear: Rear
|
67
|
+
|
68
|
+
fuel_ac:
|
69
|
+
unspecified_air: Unspecified Fuel/Power With Air
|
70
|
+
unspecified_no_air: Unspecified Fuel/Power Without Air
|
71
|
+
diesel_air: Diesel Air
|
72
|
+
diesel_no_air: Diesel No Air
|
73
|
+
hybrid_air: Hybrid Air
|
74
|
+
hybrid_plug_in_air: Hybrid Plug in Air
|
75
|
+
electric_air: Electric (Distance < 250mi/400km) Air
|
76
|
+
electric_plus_air: Electric Plus (Distance ≥ 250mi/400km) Air
|
77
|
+
compressed_gas_air: LPG/Compressed Gas Air
|
78
|
+
compressed_gas_no_air: LPG/Compressed Gas No Air
|
79
|
+
hydrogen_air: Hydrogen Air
|
80
|
+
hydrogen_no_air: Hydrogen No Air
|
81
|
+
multi_fuel_air: Multi Fuel/Power Air
|
82
|
+
multi_fuel_no_air: Multi fuel/power No Air
|
83
|
+
petrol_air: Petrol Air
|
84
|
+
petrol_no_air: Petrol No Air
|
85
|
+
ethanol_air: Ethanol Air
|
86
|
+
ethanol_no_air: Ethanol No Air
|
87
|
+
|
88
|
+
fuel:
|
89
|
+
unspecified: Unspecified Fuel/Power
|
90
|
+
diesel: Diesel
|
91
|
+
hybrid: Hybrid
|
92
|
+
hybrid_plug_in: Hybrid Plug in
|
93
|
+
electric: Electric (Distance < 250mi/400km)
|
94
|
+
electric_plus: Electric Plus (Distance ≥ 250mi/400km)
|
95
|
+
compressed_gas: LPG/Compressed Gas
|
96
|
+
hydrogen: Hydrogen
|
97
|
+
multi_fuel: Multi fuel/power
|
98
|
+
petrol: Petrol
|
99
|
+
ethanol: Ethanol
|
100
|
+
|
101
|
+
ac:
|
102
|
+
air: Air
|
103
|
+
no_air: No Air
|
104
|
+
|
@@ -0,0 +1,104 @@
|
|
1
|
+
ru:
|
2
|
+
sipp:
|
3
|
+
category:
|
4
|
+
mini: мини
|
5
|
+
mini_elite: мини элит
|
6
|
+
economy: эконом
|
7
|
+
economy_elite: эконом элит
|
8
|
+
compact: компакт
|
9
|
+
compact_elite: компакт элит
|
10
|
+
intermediate: средний
|
11
|
+
intermediate_elite: средний элит
|
12
|
+
standard: стандартный
|
13
|
+
standard_elite: стандартный элит
|
14
|
+
fullsize: полноразмерный
|
15
|
+
fullsize_elite: полноразмерный элит
|
16
|
+
premium: премиум
|
17
|
+
premium_elite: premium элит
|
18
|
+
luxury: люкс
|
19
|
+
luxury_elite: люкс элит
|
20
|
+
oversize: оверсайз
|
21
|
+
special: специальный
|
22
|
+
|
23
|
+
type:
|
24
|
+
two_three_door: 2-3 двери
|
25
|
+
two_four_door: 2/4 двери
|
26
|
+
four_five_door: 4-5 двери
|
27
|
+
wagon_estate: универсал
|
28
|
+
passenger_van: пассажирский фургон
|
29
|
+
limousine_sedan: седан
|
30
|
+
sport: спорт
|
31
|
+
convertible: кабриолет
|
32
|
+
suv: SUV
|
33
|
+
open_air_all_terrain: внедорожник
|
34
|
+
special: специального назначения
|
35
|
+
pick_up_2_door: двухдверный пикап
|
36
|
+
pick_up_4_door: четырехдверный пикап
|
37
|
+
special_offer_car: автомобиль спецпредложения
|
38
|
+
coupe: купе
|
39
|
+
monospace: однообъемник
|
40
|
+
recreational_vehicle: автомобиль для отдыха
|
41
|
+
motor_home: дом на колесах
|
42
|
+
two_wheel_vehicle: двухколесное транспортное средство
|
43
|
+
roadster: родстер
|
44
|
+
crossover: кроссовер
|
45
|
+
commercial: коммерческий фургон
|
46
|
+
|
47
|
+
transmission_drive:
|
48
|
+
manual_unspecified_drive: МКПП, привод не указан
|
49
|
+
manual_4wd: МКПП, 4WD
|
50
|
+
manual_awd: МКПП, AWD
|
51
|
+
auto_unspecified_drive: АКПП, привод не указан
|
52
|
+
auto_4wd: АКПП, 4WD
|
53
|
+
auto_awd: АКПП, AWD
|
54
|
+
|
55
|
+
transmission:
|
56
|
+
manual: МКПП
|
57
|
+
auto: АКПП
|
58
|
+
robot: Робот
|
59
|
+
|
60
|
+
drive:
|
61
|
+
unspecified: привод не указан
|
62
|
+
four_wd: 4WD
|
63
|
+
awd: AWD
|
64
|
+
single: Монопривод
|
65
|
+
front: Передний
|
66
|
+
rear: Задний
|
67
|
+
|
68
|
+
fuel_ac:
|
69
|
+
unspecified_air: топливо не указано, кондиционер
|
70
|
+
unspecified_no_air: топливо не указано, без кондиционера
|
71
|
+
diesel_air: дизель, кондиционер
|
72
|
+
diesel_no_air: дизель, без кондиционера
|
73
|
+
hybrid_air: гибрид, кондиционер
|
74
|
+
hybrid_plug_in_air: гибрид с подзарядкой, кондиционер
|
75
|
+
electric_air: электрический (до 250 миль/400 км), кондиционер
|
76
|
+
electric_plus_air: электрический плюс (от 250 миль/400 км), кондиционер
|
77
|
+
compressed_gas_air: сжиженный газ, кондиционер
|
78
|
+
compressed_gas_no_air: сжиженный газ, без кондиционера
|
79
|
+
hydrogen_air: водород, кондиционер
|
80
|
+
hydrogen_no_air: водород, без кондиционера
|
81
|
+
multi_fuel_air: мультитопливный, кондиционер
|
82
|
+
multi_fuel_no_air: мультитопливный, без кондиционера
|
83
|
+
petrol_air: бензин, кондиционер
|
84
|
+
petrol_no_air: бензин, без кондиционера
|
85
|
+
ethanol_air: спирт, кондиционер
|
86
|
+
ethanol_no_air: спирт, без кондиционера
|
87
|
+
|
88
|
+
fuel:
|
89
|
+
unspecified: топливо не указано
|
90
|
+
diesel: дизель
|
91
|
+
hybrid: гибрид
|
92
|
+
hybrid_plug_in: гибрид с подзарядкой
|
93
|
+
electric: электрический (до 250 миль/400 км)
|
94
|
+
electric_plus: электрический плюс (от 250 миль/400 км)
|
95
|
+
compressed_gas: сжиженный газ
|
96
|
+
hydrogen: водород
|
97
|
+
multi_fuel: мультитопливный
|
98
|
+
petrol: бензин
|
99
|
+
ethanol: спирт
|
100
|
+
|
101
|
+
ac:
|
102
|
+
air: кондиционер
|
103
|
+
no_air: без кондиционера
|
104
|
+
|
data/lib/sipp/code.rb
CHANGED
@@ -1,4 +1,5 @@
|
|
1
1
|
require 'sipp/dictionary'
|
2
|
+
require 'sipp/localiser'
|
2
3
|
|
3
4
|
module SIPP
|
4
5
|
class Code
|
@@ -27,91 +28,97 @@ module SIPP
|
|
27
28
|
|
28
29
|
def category
|
29
30
|
validate_category
|
30
|
-
CATEGORY[code[0]]
|
31
|
+
Category.new CATEGORY[code[0]]
|
31
32
|
rescue CategoryError => e
|
32
33
|
nil
|
33
34
|
end
|
34
35
|
|
35
36
|
def type
|
36
37
|
validate_type
|
37
|
-
TYPE[code[1]]
|
38
|
+
Type.new TYPE[code[1]]
|
38
39
|
rescue TypeError => e
|
39
40
|
nil
|
40
41
|
end
|
41
42
|
|
42
43
|
def transmission_drive
|
43
44
|
validate_transmission_drive
|
44
|
-
TRANSMISSION_DRIVE[code[2]]
|
45
|
+
TransmissionDrive.new TRANSMISSION_DRIVE[code[2]]
|
45
46
|
rescue TransmissionDriveError => e
|
46
47
|
nil
|
47
48
|
end
|
48
49
|
|
49
50
|
def transmission
|
50
51
|
validate_transmission_drive
|
51
|
-
TRANSMISSION[code[2]]
|
52
|
+
Transmission.new TRANSMISSION[code[2]]
|
52
53
|
rescue TransmissionDriveError => e
|
53
54
|
nil
|
54
55
|
end
|
55
56
|
|
56
57
|
def transmission_manual?
|
57
58
|
validate_transmission_drive
|
58
|
-
|
59
|
+
:manual == transmission.to_sym ? true : false
|
59
60
|
rescue TransmissionDriveError => e
|
60
61
|
nil
|
61
62
|
end
|
62
63
|
|
63
64
|
def transmission_auto?
|
64
65
|
validate_transmission_drive
|
65
|
-
|
66
|
+
:auto == transmission.to_sym ? true : false
|
66
67
|
rescue TransmissionDriveError => e
|
67
68
|
nil
|
68
69
|
end
|
69
70
|
|
70
71
|
def drive
|
71
72
|
validate_transmission_drive
|
72
|
-
DRIVE[code[2]]
|
73
|
+
Drive.new DRIVE[code[2]]
|
73
74
|
rescue TransmissionDriveError => e
|
74
75
|
nil
|
75
76
|
end
|
76
77
|
|
77
78
|
def fuel_ac
|
78
79
|
validate_fuel_ac
|
79
|
-
FUEL_AC[code[3]]
|
80
|
+
FuelAC.new FUEL_AC[code[3]]
|
80
81
|
rescue FuelACError => e
|
81
82
|
nil
|
82
83
|
end
|
83
84
|
|
84
85
|
def fuel
|
85
86
|
validate_fuel_ac
|
86
|
-
FUEL[code[3]]
|
87
|
+
Fuel.new FUEL[code[3]]
|
87
88
|
rescue FuelACError => e
|
88
89
|
nil
|
89
90
|
end
|
90
91
|
|
91
92
|
def ac
|
92
93
|
validate_fuel_ac
|
93
|
-
AC[code[3]]
|
94
|
+
Ac.new AC[code[3]]
|
94
95
|
rescue FuelACError => e
|
95
96
|
nil
|
96
97
|
end
|
97
98
|
|
98
99
|
def ac?
|
99
100
|
validate_fuel_ac
|
100
|
-
|
101
|
+
:air == ac.to_sym ? true : false
|
101
102
|
rescue FuelACError => e
|
102
103
|
nil
|
103
104
|
end
|
104
105
|
|
106
|
+
SEPARATOR = ' - '
|
107
|
+
|
105
108
|
def to_s
|
106
|
-
[category, type, transmission_drive, fuel_ac].map{|c| c.nil? ? '#N/A' : c}.join(
|
109
|
+
[category, type, transmission_drive, fuel_ac].map{|c| c.nil? ? '#N/A' : c}.join(SEPARATOR)
|
107
110
|
rescue CodeError, CategoryError, TypeError, TransmissionDriveError, FuelACError
|
108
111
|
''
|
109
112
|
end
|
110
113
|
|
114
|
+
def as_json(options = nil)
|
115
|
+
[category, type, transmission, drive, fuel, ac].compact.map(&:as_json).inject(&:merge).merge({code: @code})
|
116
|
+
end
|
117
|
+
|
111
118
|
private
|
112
119
|
|
113
120
|
def validate_code
|
114
|
-
if @code.
|
121
|
+
if !@code || @code.empty? || 4 != @code.length
|
115
122
|
raise CodeError, :invalid_code
|
116
123
|
else
|
117
124
|
true
|
@@ -119,7 +126,7 @@ module SIPP
|
|
119
126
|
end
|
120
127
|
|
121
128
|
def validate_category
|
122
|
-
if @code[0].
|
129
|
+
if !@code[0] || @code[0].empty? || !CATEGORY.keys.include?(@code[0])
|
123
130
|
raise CategoryError, :invalid_category
|
124
131
|
else
|
125
132
|
true
|
@@ -127,7 +134,7 @@ module SIPP
|
|
127
134
|
end
|
128
135
|
|
129
136
|
def validate_type
|
130
|
-
if @code[1].
|
137
|
+
if !@code[1] || @code[1].empty? || !TYPE.keys.include?(@code[1])
|
131
138
|
raise TypeError, :invalid_type
|
132
139
|
else
|
133
140
|
true
|
@@ -135,7 +142,7 @@ module SIPP
|
|
135
142
|
end
|
136
143
|
|
137
144
|
def validate_transmission_drive
|
138
|
-
if @code[2].
|
145
|
+
if !@code[2] || @code[2].empty? || !TRANSMISSION_DRIVE.keys.include?(@code[2])
|
139
146
|
raise TransmissionDriveError, :invalid_transmission_drive
|
140
147
|
else
|
141
148
|
true
|
@@ -143,7 +150,7 @@ module SIPP
|
|
143
150
|
end
|
144
151
|
|
145
152
|
def validate_fuel_ac
|
146
|
-
if @code[3].
|
153
|
+
if !@code[3] || @code[3].empty? || !FUEL_AC.keys.include?(@code[3])
|
147
154
|
raise FuelACError, :invalid_fuel_ac
|
148
155
|
else
|
149
156
|
true
|
data/lib/sipp/dictionary.rb
CHANGED
@@ -1,138 +1,138 @@
|
|
1
1
|
module SIPP
|
2
2
|
module Dictionary
|
3
3
|
CATEGORY = {
|
4
|
-
'M' =>
|
5
|
-
'N' =>
|
6
|
-
'E' =>
|
7
|
-
'H' =>
|
8
|
-
'C' =>
|
9
|
-
'D' =>
|
10
|
-
'I' =>
|
11
|
-
'J' =>
|
12
|
-
'S' =>
|
13
|
-
'R' =>
|
14
|
-
'F' =>
|
15
|
-
'G' =>
|
16
|
-
'P' =>
|
17
|
-
'U' =>
|
18
|
-
'L' =>
|
19
|
-
'W' =>
|
20
|
-
'O' =>
|
21
|
-
'X' =>
|
4
|
+
'M' => :mini,
|
5
|
+
'N' => :mini_elite,
|
6
|
+
'E' => :economy,
|
7
|
+
'H' => :economy_elite,
|
8
|
+
'C' => :compact,
|
9
|
+
'D' => :compact_elite,
|
10
|
+
'I' => :intermediate,
|
11
|
+
'J' => :intermediate_elite,
|
12
|
+
'S' => :standard,
|
13
|
+
'R' => :standard_elite,
|
14
|
+
'F' => :fullsize,
|
15
|
+
'G' => :fullsize_elite,
|
16
|
+
'P' => :premium,
|
17
|
+
'U' => :premium_elite,
|
18
|
+
'L' => :luxury,
|
19
|
+
'W' => :luxury_elite,
|
20
|
+
'O' => :oversize,
|
21
|
+
'X' => :special,
|
22
22
|
}
|
23
23
|
|
24
24
|
TYPE = {
|
25
|
-
'B' =>
|
26
|
-
'C' =>
|
27
|
-
'D' =>
|
28
|
-
'W' =>
|
29
|
-
'V' =>
|
30
|
-
'L' =>
|
31
|
-
'S' =>
|
32
|
-
'T' =>
|
33
|
-
'F' =>
|
34
|
-
'J' =>
|
35
|
-
'X' =>
|
36
|
-
'P' =>
|
37
|
-
'Q' =>
|
38
|
-
'Z' =>
|
39
|
-
'E' =>
|
40
|
-
'M' =>
|
41
|
-
'R' =>
|
42
|
-
'H' =>
|
43
|
-
'Y' =>
|
44
|
-
'N' =>
|
45
|
-
'G' =>
|
46
|
-
'K' =>
|
25
|
+
'B' => :two_three_door,
|
26
|
+
'C' => :two_four_door,
|
27
|
+
'D' => :four_five_door,
|
28
|
+
'W' => :wagon_estate,
|
29
|
+
'V' => :passenger_van,
|
30
|
+
'L' => :limousine_sedan,
|
31
|
+
'S' => :sport,
|
32
|
+
'T' => :convertible,
|
33
|
+
'F' => :suv,
|
34
|
+
'J' => :open_air_all_terrain,
|
35
|
+
'X' => :special,
|
36
|
+
'P' => :pick_up_2_door,
|
37
|
+
'Q' => :pick_up_4_door,
|
38
|
+
'Z' => :special_offer_car,
|
39
|
+
'E' => :coupe,
|
40
|
+
'M' => :monospace,
|
41
|
+
'R' => :recreational_vehicle,
|
42
|
+
'H' => :motor_home,
|
43
|
+
'Y' => :two_wheel_vehicle,
|
44
|
+
'N' => :roadster,
|
45
|
+
'G' => :crossover,
|
46
|
+
'K' => :commercial,
|
47
47
|
}
|
48
48
|
|
49
49
|
TRANSMISSION_DRIVE = {
|
50
|
-
'M' =>
|
51
|
-
'N' =>
|
52
|
-
'C' =>
|
53
|
-
'A' =>
|
54
|
-
'B' =>
|
55
|
-
'D' =>
|
50
|
+
'M' => :manual_unspecified_drive,
|
51
|
+
'N' => :manual_4wd,
|
52
|
+
'C' => :manual_awd,
|
53
|
+
'A' => :auto_unspecified_drive,
|
54
|
+
'B' => :auto_4wd,
|
55
|
+
'D' => :auto_awd,
|
56
56
|
}
|
57
|
-
TRANSMISSION
|
58
|
-
'M' =>
|
59
|
-
'N' =>
|
60
|
-
'C' =>
|
61
|
-
'A' =>
|
62
|
-
'B' =>
|
63
|
-
'D' =>
|
57
|
+
TRANSMISSION = {
|
58
|
+
'M' => :manual,
|
59
|
+
'N' => :manual,
|
60
|
+
'C' => :manual,
|
61
|
+
'A' => :auto,
|
62
|
+
'B' => :auto,
|
63
|
+
'D' => :auto,
|
64
64
|
}
|
65
65
|
|
66
66
|
DRIVE = {
|
67
|
-
'M' =>
|
68
|
-
'N' =>
|
69
|
-
'C' =>
|
70
|
-
'A' =>
|
71
|
-
'B' =>
|
72
|
-
'D' =>
|
67
|
+
'M' => :unspecified,
|
68
|
+
'N' => :four_wd,
|
69
|
+
'C' => :awd,
|
70
|
+
'A' => :unspecified,
|
71
|
+
'B' => :four_wd,
|
72
|
+
'D' => :awd,
|
73
73
|
}
|
74
74
|
|
75
75
|
FUEL_AC = {
|
76
|
-
'R' =>
|
77
|
-
'N' =>
|
78
|
-
'D' =>
|
79
|
-
'Q' =>
|
80
|
-
'H' =>
|
81
|
-
'I' =>
|
82
|
-
'E' =>
|
83
|
-
'C' =>
|
84
|
-
'L' =>
|
85
|
-
'S' =>
|
86
|
-
'A' =>
|
87
|
-
'B' =>
|
88
|
-
'M' =>
|
89
|
-
'F' =>
|
90
|
-
'V' =>
|
91
|
-
'Z' =>
|
92
|
-
'U' =>
|
93
|
-
'X' =>
|
76
|
+
'R' => :unspecified_air,
|
77
|
+
'N' => :unspecified_no_air,
|
78
|
+
'D' => :diesel_air,
|
79
|
+
'Q' => :diesel_no_air,
|
80
|
+
'H' => :hybrid_air,
|
81
|
+
'I' => :hybrid_plug_in_air,
|
82
|
+
'E' => :electric_air,
|
83
|
+
'C' => :electric_plus_air,
|
84
|
+
'L' => :compressed_gas_air,
|
85
|
+
'S' => :compressed_gas_no_air,
|
86
|
+
'A' => :hydrogen_air,
|
87
|
+
'B' => :hydrogen_no_air,
|
88
|
+
'M' => :multi_fuel_air,
|
89
|
+
'F' => :multi_fuel_no_air,
|
90
|
+
'V' => :petrol_air,
|
91
|
+
'Z' => :petrol_no_air,
|
92
|
+
'U' => :ethanol_air,
|
93
|
+
'X' => :ethanol_no_air
|
94
94
|
}
|
95
95
|
|
96
96
|
FUEL = {
|
97
|
-
'R' =>
|
98
|
-
'N' =>
|
99
|
-
'D' =>
|
100
|
-
'Q' =>
|
101
|
-
'H' =>
|
102
|
-
'I' =>
|
103
|
-
'E' =>
|
104
|
-
'C' =>
|
105
|
-
'L' =>
|
106
|
-
'S' =>
|
107
|
-
'A' =>
|
108
|
-
'B' =>
|
109
|
-
'M' =>
|
110
|
-
'F' =>
|
111
|
-
'V' =>
|
112
|
-
'Z' =>
|
113
|
-
'U' =>
|
114
|
-
'X' =>
|
97
|
+
'R' => :unspecified,
|
98
|
+
'N' => :unspecified,
|
99
|
+
'D' => :diesel,
|
100
|
+
'Q' => :diesel,
|
101
|
+
'H' => :hybrid,
|
102
|
+
'I' => :hybrid_plug_in,
|
103
|
+
'E' => :electric,
|
104
|
+
'C' => :electric_plus,
|
105
|
+
'L' => :compressed_gas,
|
106
|
+
'S' => :compressed_gas,
|
107
|
+
'A' => :hydrogen,
|
108
|
+
'B' => :hydrogen,
|
109
|
+
'M' => :multi_fuel,
|
110
|
+
'F' => :multi_fuel,
|
111
|
+
'V' => :petrol,
|
112
|
+
'Z' => :petrol,
|
113
|
+
'U' => :ethanol,
|
114
|
+
'X' => :ethanol
|
115
115
|
}
|
116
116
|
|
117
117
|
AC = {
|
118
|
-
'R' =>
|
119
|
-
'N' =>
|
120
|
-
'D' =>
|
121
|
-
'Q' =>
|
122
|
-
'H' =>
|
123
|
-
'I' =>
|
124
|
-
'E' =>
|
125
|
-
'C' =>
|
126
|
-
'L' =>
|
127
|
-
'S' =>
|
128
|
-
'A' =>
|
129
|
-
'B' =>
|
130
|
-
'M' =>
|
131
|
-
'F' =>
|
132
|
-
'V' =>
|
133
|
-
'Z' =>
|
134
|
-
'U' =>
|
135
|
-
'X' =>
|
118
|
+
'R' => :air,
|
119
|
+
'N' => :no_air,
|
120
|
+
'D' => :air,
|
121
|
+
'Q' => :no_air,
|
122
|
+
'H' => :air,
|
123
|
+
'I' => :air,
|
124
|
+
'E' => :air,
|
125
|
+
'C' => :air,
|
126
|
+
'L' => :air,
|
127
|
+
'S' => :no_air,
|
128
|
+
'A' => :air,
|
129
|
+
'B' => :no_air,
|
130
|
+
'M' => :air,
|
131
|
+
'F' => :no_air,
|
132
|
+
'V' => :air,
|
133
|
+
'Z' => :no_air,
|
134
|
+
'U' => :air,
|
135
|
+
'X' => :no_air
|
136
136
|
}
|
137
137
|
end
|
138
138
|
end
|
data/lib/sipp/engine.rb
ADDED
@@ -0,0 +1,109 @@
|
|
1
|
+
require 'sipp/extended_dictionary'
|
2
|
+
module SIPP
|
3
|
+
|
4
|
+
class Extended
|
5
|
+
include ExtendedDictionary
|
6
|
+
|
7
|
+
def self.generate(capabilities)
|
8
|
+
category = CATEGORY[capabilities[:category]]
|
9
|
+
type = TYPE[capabilities[:type]]
|
10
|
+
transmission = TRANSMISSION[capabilities[:transmission]]
|
11
|
+
drive = DRIVE[capabilities[:drive]]
|
12
|
+
fuel = FUEL[capabilities[:fuel]]
|
13
|
+
ac = AC[capabilities[:ac]]
|
14
|
+
capabilities[:bags_big] = capabilities.delete(:bags) unless capabilities[:bags].nil?
|
15
|
+
%i[doors seats bags_big bags_small].each do |cap|
|
16
|
+
capabilities[cap] = nil if :unspecified == capabilities[cap]
|
17
|
+
end
|
18
|
+
|
19
|
+
[
|
20
|
+
category, type, transmission, drive, fuel, ac,
|
21
|
+
capabilities[:doors],
|
22
|
+
capabilities[:seats],
|
23
|
+
(capabilities[:bags_big] || capabilities[:bags]),
|
24
|
+
capabilities[:bags_small],
|
25
|
+
].map{|cap| cap || '*'}.join
|
26
|
+
end
|
27
|
+
|
28
|
+
|
29
|
+
attr_reader :code
|
30
|
+
def initialize(code = nil)
|
31
|
+
@code = code.to_s.strip.upcase
|
32
|
+
.ljust(10, '*') # pad everything absent as :unspecified
|
33
|
+
end
|
34
|
+
|
35
|
+
|
36
|
+
|
37
|
+
def category
|
38
|
+
Category.new CATEGORY.invert[code[0]]
|
39
|
+
end
|
40
|
+
|
41
|
+
def type
|
42
|
+
Type.new TYPE.invert[code[1]]
|
43
|
+
end
|
44
|
+
|
45
|
+
def transmission
|
46
|
+
Transmission.new TRANSMISSION.invert[code[2]]
|
47
|
+
end
|
48
|
+
def drive
|
49
|
+
Drive.new DRIVE.invert[code[3]]
|
50
|
+
end
|
51
|
+
def fuel
|
52
|
+
Fuel.new FUEL.invert[code[4]]
|
53
|
+
end
|
54
|
+
def ac
|
55
|
+
Ac.new AC.invert[code[5]]
|
56
|
+
end
|
57
|
+
def doors
|
58
|
+
result = code[6]&.to_i
|
59
|
+
if result.zero?
|
60
|
+
:unspecified
|
61
|
+
else
|
62
|
+
result
|
63
|
+
end
|
64
|
+
end
|
65
|
+
def seats
|
66
|
+
result = code[7]&.to_i
|
67
|
+
if result.zero?
|
68
|
+
:unspecified
|
69
|
+
else
|
70
|
+
result
|
71
|
+
end
|
72
|
+
end
|
73
|
+
def bags
|
74
|
+
result = code[8]&.to_i
|
75
|
+
if result.zero?
|
76
|
+
:unspecified
|
77
|
+
else
|
78
|
+
result
|
79
|
+
end
|
80
|
+
end
|
81
|
+
alias_method :bags_big, :bags
|
82
|
+
def bags_small
|
83
|
+
result = code[9]&.to_i
|
84
|
+
if result.zero?
|
85
|
+
:unspecified
|
86
|
+
else
|
87
|
+
result
|
88
|
+
end
|
89
|
+
end
|
90
|
+
|
91
|
+
def to_s
|
92
|
+
[
|
93
|
+
category, type, transmission, drive, fuel, ac,
|
94
|
+
doors, seats, bags_big, bags_small,
|
95
|
+
].join(Code::SEPARATOR)
|
96
|
+
end
|
97
|
+
|
98
|
+
def as_json(options = nil)
|
99
|
+
|
100
|
+
[category, type, transmission, drive, fuel, ac].compact.map(&:as_json).inject(&:merge).merge(
|
101
|
+
{
|
102
|
+
doors: doors,
|
103
|
+
seats: seats,
|
104
|
+
bags_big: bags,
|
105
|
+
bags_small: bags_small
|
106
|
+
})
|
107
|
+
end
|
108
|
+
end
|
109
|
+
end
|
@@ -0,0 +1,57 @@
|
|
1
|
+
module SIPP
|
2
|
+
WILDCARDS = {
|
3
|
+
nil => '*',
|
4
|
+
:unspecified => '*',
|
5
|
+
}
|
6
|
+
module ExtendedDictionary
|
7
|
+
# SIPP-compatible category
|
8
|
+
CATEGORY = SIPP::Code::CATEGORY.invert.merge(WILDCARDS)
|
9
|
+
|
10
|
+
# SIPP-compatible body type
|
11
|
+
TYPE = SIPP::Code::TYPE.invert.merge(WILDCARDS)
|
12
|
+
|
13
|
+
# Transmission type. SIPP-compatible but extended with robot/tiptronic (I wonder if anyone needs it)
|
14
|
+
TRANSMISSION = {
|
15
|
+
manual: 'M',
|
16
|
+
auto: 'A',
|
17
|
+
robot: 'R', # variations of robot/tiptronic etc
|
18
|
+
}.merge(WILDCARDS)
|
19
|
+
|
20
|
+
# Drive type. Incompatible with SIPP because the original SIPP is completely weird and more transmission-oriented
|
21
|
+
DRIVE = {
|
22
|
+
single: 'S',
|
23
|
+
front: 'F',
|
24
|
+
rear: 'R',
|
25
|
+
all: 'A', # AWD
|
26
|
+
fwd: 'X', # 4x4
|
27
|
+
}.merge(WILDCARDS)
|
28
|
+
|
29
|
+
# Fuel type. Mostly compatible with SIPP but you know... Made more human-guessable
|
30
|
+
FUEL = {
|
31
|
+
compressed_gas: "G",
|
32
|
+
diesel: "D",
|
33
|
+
electric: "E",
|
34
|
+
electric_plus: "C",
|
35
|
+
ethanol: "U",
|
36
|
+
hybrid: "H",
|
37
|
+
hybrid_plug_in: "I",
|
38
|
+
hydrogen: "A",
|
39
|
+
multi_fuel: "M",
|
40
|
+
petrol: "P",
|
41
|
+
}.merge(WILDCARDS)
|
42
|
+
|
43
|
+
# Most probably is subject to change in the future
|
44
|
+
# Surprisingly is compatible with SIPP
|
45
|
+
AC = {
|
46
|
+
multi_zone: 'M',
|
47
|
+
present: 'A',
|
48
|
+
absent: 'N',
|
49
|
+
false => 'N',
|
50
|
+
true => 'A',
|
51
|
+
air: 'A',
|
52
|
+
no_air: 'N',
|
53
|
+
}.merge(WILDCARDS)
|
54
|
+
|
55
|
+
end
|
56
|
+
end
|
57
|
+
|
@@ -0,0 +1,15 @@
|
|
1
|
+
require 'sipp/inverted_dictionary'
|
2
|
+
module SIPP
|
3
|
+
class Inverted
|
4
|
+
include InvertedDictionary
|
5
|
+
|
6
|
+
def self.generate(capabilities)
|
7
|
+
category = CATEGORY[capabilities[:category]]
|
8
|
+
type = TYPE[capabilities[:type]]
|
9
|
+
transmission_drive = TRANSMISSION_DRIVE[[capabilities[:transmission], (capabilities[:drive] || :unspecified)]]
|
10
|
+
fuel_ac = FUEL_AC[[(capabilities[:fuel] || :unspecified), capabilities[:ac]]]
|
11
|
+
|
12
|
+
[category, type, transmission_drive, fuel_ac].map{|cap| cap || '*'}.join
|
13
|
+
end
|
14
|
+
end
|
15
|
+
end
|
@@ -0,0 +1,38 @@
|
|
1
|
+
module SIPP
|
2
|
+
module InvertedDictionary
|
3
|
+
CATEGORY = SIPP::Code::CATEGORY.invert
|
4
|
+
|
5
|
+
TYPE = SIPP::Code::TYPE.invert
|
6
|
+
|
7
|
+
TRANSMISSION_DRIVE = {
|
8
|
+
[:manual, :unspecified] => "M",
|
9
|
+
[:manual, :four_wd] => "N",
|
10
|
+
[:manual, :awd] => "C",
|
11
|
+
[:auto, :unspecified] => "A",
|
12
|
+
[:auto, :four_wd] => "B",
|
13
|
+
[:auto, :awd] => "D"
|
14
|
+
}
|
15
|
+
|
16
|
+
FUEL_AC = {
|
17
|
+
[:unspecified, :air] => "R",
|
18
|
+
[:unspecified, :no_air] => "N",
|
19
|
+
[:diesel, :air] => "D",
|
20
|
+
[:diesel, :no_air] => "Q",
|
21
|
+
[:hybrid, :air] => "H",
|
22
|
+
[:hybrid_plug_in, :air] => "I",
|
23
|
+
[:electric, :air] => "E",
|
24
|
+
[:electric_plus, :air] => "C",
|
25
|
+
[:compressed_gas, :air] => "L",
|
26
|
+
[:compressed_gas, :no_air] => "S",
|
27
|
+
[:hydrogen, :air] => "A",
|
28
|
+
[:hydrogen, :no_air] => "B",
|
29
|
+
[:multi_fuel, :air] => "M",
|
30
|
+
[:multi_fuel, :no_air] => "F",
|
31
|
+
[:petrol, :air] => "V",
|
32
|
+
[:petrol, :no_air] => "Z",
|
33
|
+
[:ethanol, :air] => "U",
|
34
|
+
[:ethanol, :no_air] => "X",
|
35
|
+
}
|
36
|
+
end
|
37
|
+
end
|
38
|
+
|
data/lib/sipp/version.rb
CHANGED
data/lib/sipp.rb
CHANGED
@@ -1,15 +1,60 @@
|
|
1
1
|
require "sipp/version"
|
2
2
|
|
3
|
+
require "sipp/localiser"
|
3
4
|
module SIPP
|
4
|
-
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
5
|
+
Error = Class.new StandardError
|
6
|
+
CodeError = Class.new Error
|
7
|
+
CategoryError = Class.new Error
|
8
|
+
TypeError = Class.new Error
|
9
|
+
TransmissionDriveError = Class.new Error
|
10
|
+
FuelACError = Class.new Error
|
11
|
+
|
12
|
+
class SIPPCodeWrapper
|
13
|
+
include Localiser
|
14
|
+
|
15
|
+
def initialize(symbol)
|
16
|
+
@sym = symbol
|
17
|
+
end
|
18
|
+
|
19
|
+
def to_s
|
20
|
+
t klass_name, @sym
|
21
|
+
end
|
22
|
+
|
23
|
+
def klass_name
|
24
|
+
self.class.name.split('::').last
|
25
|
+
.gsub(/([A-Z]+)([A-Z][a-z])/, '\1_\2')
|
26
|
+
.gsub(/([a-z\d])([A-Z])/, '\1_\2')
|
27
|
+
.tr(' ', '_')
|
28
|
+
.downcase
|
29
|
+
end
|
12
30
|
|
13
|
-
|
31
|
+
def to_sym
|
32
|
+
@sym
|
33
|
+
end
|
34
|
+
|
35
|
+
def as_json
|
36
|
+
{ klass_name.to_sym => @sym }
|
37
|
+
end
|
38
|
+
end
|
39
|
+
|
40
|
+
Category = Class.new SIPPCodeWrapper
|
41
|
+
Type = Class.new SIPPCodeWrapper
|
42
|
+
TransmissionDrive = Class.new SIPPCodeWrapper
|
43
|
+
Transmission = Class.new SIPPCodeWrapper
|
44
|
+
Drive = Class.new SIPPCodeWrapper
|
45
|
+
FuelAC = Class.new SIPPCodeWrapper
|
46
|
+
Fuel = Class.new SIPPCodeWrapper
|
47
|
+
Ac = Class.new SIPPCodeWrapper
|
48
|
+
end
|
14
49
|
require "sipp/code"
|
15
|
-
require "sipp/dictionary"
|
50
|
+
require "sipp/dictionary"
|
51
|
+
require "sipp/inverted"
|
52
|
+
require "sipp/inverted_dictionary"
|
53
|
+
require "sipp/extended"
|
54
|
+
require "sipp/extended_dictionary"
|
55
|
+
require 'i18n'
|
56
|
+
I18n.load_path += Dir[File.expand_path("config/locales") + "/*.yml"]
|
57
|
+
# I18n.available_locales = [:en, :ru]
|
58
|
+
if defined?(Rails)
|
59
|
+
require 'sipp/engine'
|
60
|
+
end
|
data/sipp.gemspec
CHANGED
@@ -26,6 +26,7 @@ Gem::Specification.new do |spec|
|
|
26
26
|
spec.add_development_dependency "bundler", "~> 1.17"
|
27
27
|
spec.add_development_dependency "rake", "~> 10.0"
|
28
28
|
spec.add_development_dependency "rspec", "~> 3.0"
|
29
|
+
spec.add_development_dependency "pry"
|
29
30
|
|
30
|
-
spec.add_dependency "
|
31
|
+
spec.add_dependency "i18n"
|
31
32
|
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: sipp
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.1.
|
4
|
+
version: 0.1.7
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Max Buslaev
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date: 2022-
|
11
|
+
date: 2022-09-18 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bundler
|
@@ -53,19 +53,33 @@ dependencies:
|
|
53
53
|
- !ruby/object:Gem::Version
|
54
54
|
version: '3.0'
|
55
55
|
- !ruby/object:Gem::Dependency
|
56
|
-
name:
|
56
|
+
name: pry
|
57
57
|
requirement: !ruby/object:Gem::Requirement
|
58
58
|
requirements:
|
59
|
-
- - "
|
59
|
+
- - ">="
|
60
|
+
- !ruby/object:Gem::Version
|
61
|
+
version: '0'
|
62
|
+
type: :development
|
63
|
+
prerelease: false
|
64
|
+
version_requirements: !ruby/object:Gem::Requirement
|
65
|
+
requirements:
|
66
|
+
- - ">="
|
60
67
|
- !ruby/object:Gem::Version
|
61
|
-
version: '
|
68
|
+
version: '0'
|
69
|
+
- !ruby/object:Gem::Dependency
|
70
|
+
name: i18n
|
71
|
+
requirement: !ruby/object:Gem::Requirement
|
72
|
+
requirements:
|
73
|
+
- - ">="
|
74
|
+
- !ruby/object:Gem::Version
|
75
|
+
version: '0'
|
62
76
|
type: :runtime
|
63
77
|
prerelease: false
|
64
78
|
version_requirements: !ruby/object:Gem::Requirement
|
65
79
|
requirements:
|
66
|
-
- - "
|
80
|
+
- - ">="
|
67
81
|
- !ruby/object:Gem::Version
|
68
|
-
version: '
|
82
|
+
version: '0'
|
69
83
|
description: Translates car SIPP codes into something meaningful
|
70
84
|
email:
|
71
85
|
- max@buslaev.net
|
@@ -83,9 +97,17 @@ files:
|
|
83
97
|
- Rakefile
|
84
98
|
- bin/console
|
85
99
|
- bin/setup
|
100
|
+
- config/locales/en.yml
|
101
|
+
- config/locales/ru.yml
|
86
102
|
- lib/sipp.rb
|
87
103
|
- lib/sipp/code.rb
|
88
104
|
- lib/sipp/dictionary.rb
|
105
|
+
- lib/sipp/engine.rb
|
106
|
+
- lib/sipp/extended.rb
|
107
|
+
- lib/sipp/extended_dictionary.rb
|
108
|
+
- lib/sipp/inverted.rb
|
109
|
+
- lib/sipp/inverted_dictionary.rb
|
110
|
+
- lib/sipp/localiser.rb
|
89
111
|
- lib/sipp/version.rb
|
90
112
|
- sipp.gemspec
|
91
113
|
homepage: https://github.com/austerlitz/sipp
|