dummy-apartment 0.0.3 → 0.1.0
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/README.md +13 -3
- data/lib/data.yml +1 -0
- data/lib/dummy-apartment.rb +39 -61
- data/lib/dummy-apartment/version.rb +1 -1
- data/spec/dummy-apartment_spec.rb +133 -67
- data/spec/spec_helper.rb +15 -0
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 9563bee67f5469fc997907410ac6db6af98f362e
|
4
|
+
data.tar.gz: 63f10965fb3110d8d45a2434aeab6f712392870d
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: afa71aa5c7a367a4fb16a07337e9072de2e8f20c8ba0c17d2a4490c6f7a94884a3f020e8dc9e732510346b8ad19277d379c548adb8c2319f19e199196e03452f
|
7
|
+
data.tar.gz: d74290cd5b5e7c118f55eb9559d9738c1891225c2a2ac9b63f0b0524c12ab902445d135134c224c3d621a315bcb84f2c42e3ad7ca19dc04ddf7be57c92f67d4f
|
data/README.md
CHANGED
@@ -11,6 +11,11 @@ This gem generates dummy information of apartment including
|
|
11
11
|
* keeping pets
|
12
12
|
* playable the musical instruments or not
|
13
13
|
* floor type
|
14
|
+
* direction the window facing
|
15
|
+
* air conditioner is equipped or not
|
16
|
+
* is self-locking door?
|
17
|
+
* whether the manager patrols
|
18
|
+
* names of closest stations
|
14
19
|
|
15
20
|
### Installation
|
16
21
|
|
@@ -32,12 +37,17 @@ Or just:
|
|
32
37
|
|
33
38
|
apartment = DummyApartment.generate
|
34
39
|
|
40
|
+
# Get attributes
|
35
41
|
apartment.address #=> "群馬県長谷市60"
|
36
42
|
apartment.building_name #=> "石井コーポ"
|
37
|
-
|
43
|
+
apartment.room_floor #=> 2
|
38
44
|
|
39
|
-
|
40
|
-
apartment
|
45
|
+
# Overwrite
|
46
|
+
apartment.building_name = "ハイツ谷川"
|
47
|
+
|
48
|
+
# Convert to Hash
|
49
|
+
apartment.to_hash
|
50
|
+
#=> {address: "群馬県長谷市60", building_name: "ハイツ谷川", ... }
|
41
51
|
|
42
52
|
### Contributing
|
43
53
|
|
data/lib/data.yml
CHANGED
@@ -4,3 +4,4 @@ building_name:
|
|
4
4
|
first_half: ["石井", "山城", "大井台", "片山", "大山", "植木", "長嶺", "東", "南", "西", "北", "市橋", "富岡", "田町", "江頭", "ポール", "牧", "片岡", "鶴", "太郎", "メゾン・ド", "SAKURA", "紫", "碧"]
|
5
5
|
second_half: ["コーポ", "ハイツ", "サンハイツ", "メゾン", "パレス", "ネオパレス", "プロミネンス", "カーサ", "Petit", "プチトマト", "パーク", "ネックス", "エスポワール", "エクセル", "グラン", "コンフォート", "エトワール", "フローラ", "リバティ", "荘"]
|
6
6
|
room_type: ["1R", "1K", "1DK", "1LDK", "2K", "2DK", "2LDK", "3K", "3DK", "3LDK"]
|
7
|
+
station: ["城東駅", "庄内駅", "白浜駅", "白石駅", "武田駅", "望月駅", "和田駅", "久保駅", "心斎橋駅", "仁木駅", "西ヶ原駅", "東駅", "西駅", "南駅", "北駅", "酒田駅", "桜木駅", "鯖江駅", "藤江駅", "富士見駅", "古川駅", "保見駅", "元町駅", "三雲駅", "水沢駅", "緑駅", "峰山駅", "宮下駅", "武蔵駅", "村山駅", "芝田駅", "中島駅", "鳴門駅", "小岩井駅", "郷間駅", "櫛田駅", "広井公園駅", "ヨウ素駅"]
|
data/lib/dummy-apartment.rb
CHANGED
@@ -12,74 +12,59 @@ class DummyApartment
|
|
12
12
|
@@dic ||= Psych.load(File.open(YML).read)
|
13
13
|
|
14
14
|
ATTRIBUTES = %i(address building_name geo top_floor room_floor room_number room_type keeping_pets) +
|
15
|
-
%i(playing_the_instruments place_for_washing_machine floor_type)
|
15
|
+
%i(playing_the_instruments place_for_washing_machine floor_type exposure) +
|
16
|
+
%i(air_conditioner_equipped self_locking manager_patrol nearest_stations)
|
16
17
|
|
17
|
-
|
18
|
+
attr_accessor *ATTRIBUTES
|
18
19
|
|
19
20
|
def self.generate
|
20
|
-
address
|
21
|
-
building_name
|
22
|
-
geo
|
23
|
-
top_floor
|
24
|
-
room_floor
|
25
|
-
room_number
|
26
|
-
room_type
|
27
|
-
keeping_pets
|
28
|
-
playing_the_instruments =
|
29
|
-
place_for_washing_machine =
|
30
|
-
floor_type
|
21
|
+
address = gen_address
|
22
|
+
building_name = gen_building_name
|
23
|
+
geo = gen_long_lat
|
24
|
+
top_floor = gen_top_floor
|
25
|
+
room_floor = gen_room_floor(top_floor)
|
26
|
+
room_number = gen_room_number(room_floor)
|
27
|
+
room_type = gen_room_type
|
28
|
+
keeping_pets = ['可', '不可', '要相談'].sample
|
29
|
+
playing_the_instruments = ['可', '不可'].sample
|
30
|
+
place_for_washing_machine = ['室内', '室外', '無し'].sample
|
31
|
+
floor_type = [:flooring, :tatami].sample
|
32
|
+
exposure = [:north, :south, :east, :west].sample
|
33
|
+
air_conditioner_equipped = gen_true_or_false
|
34
|
+
self_locking = gen_true_or_false
|
35
|
+
manager_patrol = gen_true_or_false
|
36
|
+
nearest_stations = gen_nearest_stations
|
31
37
|
|
32
38
|
values = ATTRIBUTES.map{ |attr| eval "#{attr}" }
|
33
39
|
DummyApartment.new(Hash[ATTRIBUTES.zip values])
|
34
40
|
end
|
35
41
|
|
36
42
|
def initialize(apartment_hash)
|
37
|
-
|
38
|
-
assign_attributes
|
43
|
+
assign_attributes(apartment_hash)
|
39
44
|
end
|
40
45
|
|
41
|
-
def
|
42
|
-
|
43
|
-
when String; @hash[key.to_sym]
|
44
|
-
when Symbol; @hash[key]
|
45
|
-
else; raise
|
46
|
-
end
|
46
|
+
def flooring?
|
47
|
+
@floor_type == :flooring
|
47
48
|
end
|
48
49
|
|
49
|
-
def
|
50
|
-
|
51
|
-
when String; assign(key.to_sym, value)
|
52
|
-
when Symbol; assign(key, value)
|
53
|
-
else; raise
|
54
|
-
end
|
50
|
+
def tatami?
|
51
|
+
@floor_type == :tatami
|
55
52
|
end
|
56
53
|
|
57
|
-
def
|
58
|
-
|
59
|
-
@hash[key] = value
|
60
|
-
instance_variable_set("@#{key}".to_sym, value)
|
61
|
-
end
|
54
|
+
def air_conditioner_equipped?
|
55
|
+
@air_conditioner_equipped
|
62
56
|
end
|
63
57
|
|
64
|
-
|
65
|
-
|
66
|
-
def #{attr}=(value)
|
67
|
-
@hash[:#{attr}] = value
|
68
|
-
@#{attr} = value
|
69
|
-
end
|
70
|
-
RUBY
|
58
|
+
def self_locking?
|
59
|
+
@self_locking
|
71
60
|
end
|
72
61
|
|
73
|
-
def
|
74
|
-
@
|
62
|
+
def manager_patrol?
|
63
|
+
@manager_patrol
|
75
64
|
end
|
76
65
|
|
77
|
-
def
|
78
|
-
|
79
|
-
end
|
80
|
-
|
81
|
-
def method_missing(method_name, *args)
|
82
|
-
@hash.send(method_name, *args) if @hash.respond_to? method_name
|
66
|
+
def to_hash
|
67
|
+
Hash[ATTRIBUTES.map{|attr| [attr, instance_variable_get("@#{attr}")] }]
|
83
68
|
end
|
84
69
|
|
85
70
|
def self.gen_address
|
@@ -123,29 +108,22 @@ class DummyApartment
|
|
123
108
|
types.sample
|
124
109
|
end
|
125
110
|
|
126
|
-
def self.
|
127
|
-
[
|
128
|
-
end
|
129
|
-
|
130
|
-
def self.gen_playing_the_instruments
|
131
|
-
['可', '不可'].sample
|
132
|
-
end
|
133
|
-
|
134
|
-
def self.gen_place_for_washing_machine
|
135
|
-
['室内', '室外', '無し'].sample
|
111
|
+
def self.gen_true_or_false
|
112
|
+
[true, false].sample
|
136
113
|
end
|
137
114
|
|
138
|
-
def self.
|
139
|
-
|
115
|
+
def self.gen_nearest_stations
|
116
|
+
number = Math.sqrt(rand 1..4).floor # 1 with 3/4, 2 with 1/4
|
117
|
+
@@dic['station'].sample number
|
140
118
|
end
|
141
119
|
|
142
120
|
private_class_method *self.public_methods.grep(/\Agen_/)
|
143
121
|
|
144
122
|
private
|
145
123
|
|
146
|
-
def assign_attributes
|
124
|
+
def assign_attributes(hash)
|
147
125
|
ATTRIBUTES.each do |attr|
|
148
|
-
self.instance_variable_set("@#{attr}".to_sym,
|
126
|
+
self.instance_variable_set("@#{attr}".to_sym, hash[attr])
|
149
127
|
end
|
150
128
|
end
|
151
129
|
end
|
@@ -9,32 +9,29 @@ describe DummyApartment do
|
|
9
9
|
expect(@apartment).to be_a DummyApartment
|
10
10
|
end
|
11
11
|
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
it 'should access the attribute via the method which has same name as the attribute' do
|
18
|
-
expect(@apartment.room_number).to eql @apartment[:room_number]
|
19
|
-
expect(@apartment.address).to eql @apartment[:address]
|
20
|
-
end
|
12
|
+
describe 'to_hash Method' do
|
13
|
+
it 'should return a Hash object' do
|
14
|
+
expect(@apartment.to_hash).to be_a Hash
|
15
|
+
end
|
21
16
|
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
17
|
+
describe 'The Hash' do
|
18
|
+
it 'should consist with the DummyApartment object' do
|
19
|
+
hash = @apartment.to_hash
|
20
|
+
DummyApartment::ATTRIBUTES.each do |attr|
|
21
|
+
expect(hash[attr]).to eql @apartment.send(attr)
|
22
|
+
end
|
26
23
|
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
expect(@apartment.address).to eql 'somewhere'
|
24
|
+
@apartment.address = 'somewhere'
|
25
|
+
expect(@apartment.to_hash[:address]).to eql 'somewhere'
|
26
|
+
end
|
27
|
+
end
|
32
28
|
end
|
33
29
|
|
34
|
-
it 'should have
|
35
|
-
|
36
|
-
|
37
|
-
|
30
|
+
it 'should have the accessor methods' do
|
31
|
+
DummyApartment::ATTRIBUTES.each do |attr|
|
32
|
+
expect(@apartment.respond_to? attr).to be_true
|
33
|
+
expect(@apartment.respond_to? "#{attr}=").to be_true
|
34
|
+
end
|
38
35
|
end
|
39
36
|
|
40
37
|
it 'should raise when pass an argument which is not String or Symbol' do
|
@@ -47,121 +44,190 @@ describe DummyApartment do
|
|
47
44
|
end
|
48
45
|
|
49
46
|
describe 'Building Name' do
|
50
|
-
let(:name){ @apartment[:building_name] }
|
51
|
-
|
52
47
|
it 'should not be empty' do
|
53
|
-
|
48
|
+
100.times do
|
49
|
+
expect(Build.building_name).not_to be_empty
|
50
|
+
end
|
54
51
|
end
|
55
52
|
end
|
56
53
|
|
57
54
|
describe 'Address' do
|
58
|
-
let(:address){ @apartment[:address] }
|
59
|
-
|
60
55
|
it 'should match address format' do
|
61
|
-
|
56
|
+
100.times do
|
57
|
+
expect(Build.address).to match /[都道府県].+[市町村].*[0-9]/
|
58
|
+
end
|
62
59
|
end
|
63
60
|
end
|
64
61
|
|
65
62
|
describe 'Geo' do
|
66
|
-
let(:geo){ @apartment[:geo] }
|
67
|
-
|
68
63
|
it 'should be a couple of Float' do
|
69
|
-
expect(geo.map(&:class)).to eql [Float, Float]
|
64
|
+
expect(Build.geo.map(&:class)).to eql [Float, Float]
|
70
65
|
end
|
71
66
|
end
|
72
67
|
|
73
68
|
describe 'Room Floor and Top Floor' do
|
74
|
-
let(:top_floor) { @apartment[:top_floor] }
|
75
|
-
let(:room_floor){ @apartment[:room_floor] }
|
76
|
-
|
77
69
|
it 'should have valid floor information' do
|
78
|
-
|
79
|
-
|
80
|
-
|
70
|
+
100.times do
|
71
|
+
top_floor, room_floor = Build[:top_floor, :room_floor]
|
72
|
+
|
73
|
+
expect( top_floor).to be >= room_floor
|
74
|
+
expect( top_floor).to be >= 1
|
75
|
+
expect(room_floor).to be >= 1
|
76
|
+
end
|
81
77
|
end
|
82
78
|
end
|
83
79
|
|
84
80
|
describe 'Room Number' do
|
85
|
-
let(:room_floor) { @apartment[:room_floor] }
|
86
|
-
let(:room_number){ @apartment[:room_number] }
|
87
|
-
|
88
81
|
it 'should be a three-character string' do
|
82
|
+
room_number = Build.room_number
|
83
|
+
|
89
84
|
expect(room_number).to be_a String
|
90
85
|
expect(room_number.length).to eql 3
|
91
86
|
end
|
92
87
|
|
93
88
|
it 'should be consistent with room floor' do
|
94
|
-
|
89
|
+
100.times do
|
90
|
+
room_number, room_floor = Build[:room_number, :room_floor]
|
91
|
+
expect(room_number).to start_with room_floor.to_s
|
92
|
+
end
|
95
93
|
end
|
96
94
|
end
|
97
95
|
|
98
96
|
describe 'Room Type' do
|
99
|
-
let(:room_type){ @apartment
|
97
|
+
let(:room_type){ @apartment.room_type }
|
100
98
|
|
101
99
|
it 'should be a String object' do
|
102
|
-
expect(room_type).to be_a String
|
100
|
+
expect(Build.room_type).to be_a String
|
103
101
|
end
|
104
102
|
|
105
103
|
it 'should be match the format' do
|
106
|
-
|
104
|
+
100.times do
|
105
|
+
expect(Build.room_type).to match /\A\d(R|[LDK]{1,3})\z/
|
106
|
+
end
|
107
107
|
end
|
108
108
|
end
|
109
109
|
|
110
110
|
describe 'Keeping Pets' do
|
111
|
-
let(:keeping_pets){ @apartment[:keeping_pets] }
|
112
|
-
|
113
111
|
it 'should be a String object' do
|
114
|
-
expect(keeping_pets).to be_a String
|
112
|
+
expect(Build.keeping_pets).to be_a String
|
115
113
|
end
|
116
114
|
|
117
115
|
it 'should equal "可", "不可" or "要相談"' do
|
118
|
-
|
116
|
+
100.times do
|
117
|
+
expect(Build.keeping_pets).to match /\A(可|不可|要相談)\z/
|
118
|
+
end
|
119
119
|
end
|
120
120
|
end
|
121
121
|
|
122
122
|
describe 'Playing the Instruments' do
|
123
|
-
let(:playing_the_instruments){ @apartment[:playing_the_instruments] }
|
124
|
-
|
125
123
|
it 'should be a String object' do
|
126
|
-
expect(playing_the_instruments).to be_a String
|
124
|
+
expect(Build.playing_the_instruments).to be_a String
|
127
125
|
end
|
128
126
|
|
129
127
|
it 'should equal "可" or "不可"' do
|
130
|
-
|
128
|
+
100.times do
|
129
|
+
expect(Build.playing_the_instruments).to match /\A不?可\z/
|
130
|
+
end
|
131
131
|
end
|
132
132
|
end
|
133
133
|
|
134
134
|
describe 'Place for Washing Machine' do
|
135
|
-
let(:place_for_washing_machine){ @apartment[:place_for_washing_machine] }
|
136
|
-
|
137
135
|
it 'should be a String object' do
|
138
|
-
expect(place_for_washing_machine).to be_a String
|
136
|
+
expect(Build.place_for_washing_machine).to be_a String
|
139
137
|
end
|
140
138
|
|
141
139
|
it 'should equal "室内", "室外" or "無し"' do
|
142
|
-
|
140
|
+
100.times do
|
141
|
+
expect(Build.place_for_washing_machine).to match /\A(室内|室外|無し)\z/
|
142
|
+
end
|
143
143
|
end
|
144
144
|
end
|
145
145
|
|
146
146
|
describe 'Floor Type' do
|
147
|
-
let(:floor_type){ @apartment[:floor_type] }
|
148
|
-
|
149
147
|
it 'should be a Symbol' do
|
150
|
-
expect(floor_type).to be_a Symbol
|
148
|
+
expect(Build.floor_type).to be_a Symbol
|
151
149
|
end
|
152
150
|
|
153
151
|
it 'should equal :flooring or :tatami' do
|
154
|
-
|
152
|
+
100.times do
|
153
|
+
expect([:flooring, :tatami]).to include Build.floor_type
|
154
|
+
end
|
155
155
|
end
|
156
156
|
|
157
157
|
it 'should consistent between #floor_type, #tatami? and #flooring?' do
|
158
|
-
|
159
|
-
|
160
|
-
|
161
|
-
|
162
|
-
|
163
|
-
|
164
|
-
|
158
|
+
100.times do
|
159
|
+
apartment = DummyApartment.generate
|
160
|
+
|
161
|
+
case apartment.floor_type
|
162
|
+
when :flooring
|
163
|
+
expect(apartment.flooring?).to be_true
|
164
|
+
expect(apartment.tatami?).to be_false
|
165
|
+
when :tatami
|
166
|
+
expect(apartment.flooring?).to be_false
|
167
|
+
expect(apartment.tatami?).to be_true
|
168
|
+
end
|
169
|
+
end
|
170
|
+
end
|
171
|
+
end
|
172
|
+
|
173
|
+
describe 'Exposure' do
|
174
|
+
it 'should be a Symbol' do
|
175
|
+
expect(Build.exposure).to be_a Symbol
|
176
|
+
end
|
177
|
+
|
178
|
+
it 'should be equal :north, :south, :east or :west' do
|
179
|
+
100.times do
|
180
|
+
expect([:north, :south, :east, :west]).to include Build.exposure
|
181
|
+
end
|
182
|
+
end
|
183
|
+
end
|
184
|
+
|
185
|
+
describe 'Air Conditioner' do
|
186
|
+
it 'should be consist between #air_conditioner_equipped and #air_conditioner_equipped?' do
|
187
|
+
100.times do
|
188
|
+
apartment = DummyApartment.generate
|
189
|
+
expect(apartment.air_conditioner_equipped).to eql apartment.air_conditioner_equipped?
|
190
|
+
end
|
191
|
+
end
|
192
|
+
end
|
193
|
+
|
194
|
+
describe 'Self Locking' do
|
195
|
+
it 'should be consist between #self_locking and #self_locking?' do
|
196
|
+
100.times do
|
197
|
+
apartment = DummyApartment.generate
|
198
|
+
expect(apartment.self_locking).to eql apartment.self_locking?
|
199
|
+
end
|
200
|
+
end
|
201
|
+
end
|
202
|
+
|
203
|
+
describe "Manager's Patrol" do
|
204
|
+
it 'should be consist between #manager_patrol and #manager_patrol?' do
|
205
|
+
100.times do
|
206
|
+
apartment = DummyApartment.generate
|
207
|
+
expect(apartment.manager_patrol).to eql apartment.manager_patrol?
|
208
|
+
end
|
209
|
+
end
|
210
|
+
end
|
211
|
+
|
212
|
+
describe 'Nearest Stations' do
|
213
|
+
let(:nearest_stations){ @apartment.nearest_stations }
|
214
|
+
|
215
|
+
it 'should be an Array of Strings' do
|
216
|
+
expect(nearest_stations).to be_an Array
|
217
|
+
expect(nearest_stations.all?{|s| String === s}).to be_true
|
218
|
+
end
|
219
|
+
|
220
|
+
it 'should be an Array whose size is one or two' do
|
221
|
+
100.times do
|
222
|
+
expect(Build.nearest_stations.size).to be_between(1, 2)
|
223
|
+
end
|
224
|
+
end
|
225
|
+
|
226
|
+
describe "Stations' Name" do
|
227
|
+
it "should end with '駅'" do
|
228
|
+
100.times do
|
229
|
+
expect(Build.nearest_stations.all?{|name| name.end_with? '駅'}).to be_true
|
230
|
+
end
|
165
231
|
end
|
166
232
|
end
|
167
233
|
end
|
data/spec/spec_helper.rb
CHANGED
@@ -2,3 +2,18 @@ lib = File.expand_path('../../lib', __FILE__)
|
|
2
2
|
$LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
|
3
3
|
|
4
4
|
require 'dummy-apartment'
|
5
|
+
|
6
|
+
module Build
|
7
|
+
def [](*args)
|
8
|
+
apartment = DummyApartment.generate
|
9
|
+
args.each_with_object([]) { |arg, array|
|
10
|
+
array << apartment.send(arg)
|
11
|
+
}
|
12
|
+
end
|
13
|
+
|
14
|
+
def method_missing(name, *args)
|
15
|
+
DummyApartment.generate.send(name, *args)
|
16
|
+
end
|
17
|
+
|
18
|
+
module_function :[], :method_missing
|
19
|
+
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: dummy-apartment
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0
|
4
|
+
version: 0.1.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Joe-noh
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2014-05-
|
11
|
+
date: 2014-05-18 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bundler
|