dummy-apartment 0.0.1 → 0.0.2
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/README.md +4 -1
- data/lib/dummy-apartment/version.rb +1 -1
- data/lib/dummy-apartment.rb +67 -16
- data/spec/dummy-apartment_spec.rb +44 -10
- 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: 9c139f0d0104103f901fe458ba0dbf5035b5c24d
|
4
|
+
data.tar.gz: 38dde2e944cfa50ee493ecbf23c37bbc9b4701e2
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 5a415f9fd3f5faa2615de7a240dc1d2c706e9ae4e6dfb09fa46ec7929eaa9fecaa32eb855fce7208bcbb9451d14a37fe699507db28ae48f6eb7bba006f064457
|
7
|
+
data.tar.gz: 2c07a8d52b73e18487b2cbffa204e7514cba70e0fe892011685ba4e4752d7bdca9030a434a1bc5454ba37e4d80f9c9ce3cdc1e26c22e600ff503c71870888340
|
data/README.md
CHANGED
@@ -24,7 +24,7 @@ Or just:
|
|
24
24
|
|
25
25
|
### Usage
|
26
26
|
|
27
|
-
DummyApartment.generate
|
27
|
+
apartment = DummyApartment.generate
|
28
28
|
#=> {:address => "群馬県長谷市60",
|
29
29
|
# :building_name => "江頭Petit",
|
30
30
|
# :geo => [36.878327083956236, 139.92838722714708],
|
@@ -32,6 +32,9 @@ Or just:
|
|
32
32
|
# :room_floor => 2,
|
33
33
|
# :room_number => "203"}
|
34
34
|
|
35
|
+
apartment.room_floor #=> 2
|
36
|
+
apartment[:room_floor] #=> 2
|
37
|
+
apartment['room_floor'] #=> 2
|
35
38
|
|
36
39
|
### Contributing
|
37
40
|
|
data/lib/dummy-apartment.rb
CHANGED
@@ -11,29 +11,72 @@ class DummyApartment
|
|
11
11
|
|
12
12
|
@@dic ||= Psych.load(File.open(YML).read)
|
13
13
|
|
14
|
+
ATTRIBUTES = %i(address building_name geo top_floor room_floor room_number)
|
15
|
+
|
16
|
+
attr_reader *ATTRIBUTES
|
17
|
+
|
14
18
|
def self.generate
|
15
|
-
address
|
16
|
-
|
17
|
-
geo
|
18
|
-
top_floor
|
19
|
-
room_floor
|
20
|
-
room_number
|
21
|
-
|
22
|
-
{
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
19
|
+
address = gen_address
|
20
|
+
building_name = gen_building_name
|
21
|
+
geo = gen_long_lat
|
22
|
+
top_floor = gen_top_floor
|
23
|
+
room_floor = gen_room_floor(top_floor)
|
24
|
+
room_number = gen_room_number(room_floor)
|
25
|
+
|
26
|
+
values = ATTRIBUTES.map{ |attr| eval "#{attr}" }
|
27
|
+
DummyApartment.new(Hash[ATTRIBUTES.zip values])
|
28
|
+
end
|
29
|
+
|
30
|
+
def initialize(apartment_hash)
|
31
|
+
@hash = apartment_hash
|
32
|
+
assign_attributes
|
33
|
+
end
|
34
|
+
|
35
|
+
def [](key)
|
36
|
+
case key
|
37
|
+
when String; @hash[key.to_sym]
|
38
|
+
when Symbol; @hash[key]
|
39
|
+
else; raise
|
40
|
+
end
|
41
|
+
end
|
42
|
+
|
43
|
+
def []=(key, value)
|
44
|
+
case key
|
45
|
+
when String; assign(key.to_sym, value)
|
46
|
+
when Symbol; assign(key, value)
|
47
|
+
else; raise
|
48
|
+
end
|
49
|
+
end
|
50
|
+
|
51
|
+
def assign(key, value)
|
52
|
+
if ATTRIBUTES.member? key
|
53
|
+
@hash[key] = value
|
54
|
+
instance_variable_set("@#{key}".to_sym, value)
|
55
|
+
end
|
56
|
+
end
|
57
|
+
|
58
|
+
ATTRIBUTES.each do |attr|
|
59
|
+
eval <<-RUBY
|
60
|
+
def #{attr}=(value)
|
61
|
+
@hash[:#{attr}] = value
|
62
|
+
@#{attr} = value
|
63
|
+
end
|
64
|
+
RUBY
|
65
|
+
end
|
66
|
+
|
67
|
+
def method_missing(method_name, *args)
|
68
|
+
@hash.send(method_name, *args) if @hash.respond_to? method_name
|
27
69
|
end
|
28
70
|
|
29
71
|
def self.gen_address
|
30
72
|
prefs = @@dic['prefectures']
|
31
73
|
cities = @@dic['cities']
|
32
|
-
number = NON_ZERO.sample
|
33
|
-
number += rand(5).times.select{ NUM_DASH.sample }.join
|
34
|
-
number.gsub!(/\-0|0\-/, '-')
|
35
74
|
|
36
|
-
|
75
|
+
street = NON_ZERO.sample + NUM.sample(rand 1..3).join
|
76
|
+
dash_index = rand(street.length-1)
|
77
|
+
street.insert(dash_index, '-') if dash_index != 0 and dash_index != street.length
|
78
|
+
|
79
|
+
[prefs.sample, cities.sample, street].join
|
37
80
|
end
|
38
81
|
|
39
82
|
def self.gen_building_name
|
@@ -62,5 +105,13 @@ class DummyApartment
|
|
62
105
|
end
|
63
106
|
|
64
107
|
private_class_method *self.public_methods.grep(/\Agen_/)
|
108
|
+
|
109
|
+
private
|
110
|
+
|
111
|
+
def assign_attributes
|
112
|
+
ATTRIBUTES.each do |attr|
|
113
|
+
self.instance_variable_set("@#{attr}".to_sym, @hash[attr])
|
114
|
+
end
|
115
|
+
end
|
65
116
|
end
|
66
117
|
|
@@ -1,10 +1,44 @@
|
|
1
1
|
require 'spec_helper'
|
2
2
|
|
3
3
|
describe DummyApartment do
|
4
|
-
|
4
|
+
before do
|
5
|
+
@apartment = DummyApartment.generate
|
6
|
+
end
|
7
|
+
|
8
|
+
it 'should generate a DummyApartment object' do
|
9
|
+
expect(@apartment).to be_a DummyApartment
|
10
|
+
end
|
11
|
+
|
12
|
+
it 'should delegate to Hash' do
|
13
|
+
expect(@apartment.respond_to? :keys).to be_false
|
14
|
+
expect(@apartment.keys).to be_an Array
|
15
|
+
end
|
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
|
21
|
+
|
22
|
+
it 'should access the attribute using both String and Symbol' do
|
23
|
+
expect(@apartment['address']).to eql @apartment.address
|
24
|
+
expect(@apartment[:address]).to eql @apartment.address
|
25
|
+
end
|
26
|
+
|
27
|
+
it 'should be overwritten its attributes' do
|
28
|
+
@apartment.address = ''
|
29
|
+
expect(@apartment.address).to be_empty
|
30
|
+
@apartment[:address] = 'somewhere'
|
31
|
+
expect(@apartment.address).to eql 'somewhere'
|
32
|
+
end
|
33
|
+
|
34
|
+
it 'should have consistency' do
|
35
|
+
@apartment.address = 'somewhere'
|
36
|
+
expect(@apartment.address).to eql @apartment[:address]
|
37
|
+
expect(@apartment.address).to eql @apartment['address']
|
38
|
+
end
|
5
39
|
|
6
|
-
it 'should
|
7
|
-
expect
|
40
|
+
it 'should raise when pass an argument which is not String or Symbol' do
|
41
|
+
expect { @apartment[0] }.to raise_error
|
8
42
|
end
|
9
43
|
|
10
44
|
it 'should have no public class method starts with "gen_"' do
|
@@ -13,7 +47,7 @@ describe DummyApartment do
|
|
13
47
|
end
|
14
48
|
|
15
49
|
describe 'Building Name' do
|
16
|
-
let(:name){ apartment[:building_name] }
|
50
|
+
let(:name){ @apartment[:building_name] }
|
17
51
|
|
18
52
|
it 'should not be empty' do
|
19
53
|
expect(name).not_to be_empty
|
@@ -21,7 +55,7 @@ describe DummyApartment do
|
|
21
55
|
end
|
22
56
|
|
23
57
|
describe 'Address' do
|
24
|
-
let(:address){ apartment[:address] }
|
58
|
+
let(:address){ @apartment[:address] }
|
25
59
|
|
26
60
|
it 'should match address format' do
|
27
61
|
expect(address).to match /[都道府県].+[市町村].*[0-9]/
|
@@ -29,7 +63,7 @@ describe DummyApartment do
|
|
29
63
|
end
|
30
64
|
|
31
65
|
describe 'Geo' do
|
32
|
-
let(:geo){ apartment[:geo] }
|
66
|
+
let(:geo){ @apartment[:geo] }
|
33
67
|
|
34
68
|
it 'should be a couple of Float' do
|
35
69
|
expect(geo.map(&:class)).to eql [Float, Float]
|
@@ -37,8 +71,8 @@ describe DummyApartment do
|
|
37
71
|
end
|
38
72
|
|
39
73
|
describe 'Room Floor and Top Floor' do
|
40
|
-
let(:top_floor) { apartment[:top_floor] }
|
41
|
-
let(:room_floor){ apartment[:room_floor] }
|
74
|
+
let(:top_floor) { @apartment[:top_floor] }
|
75
|
+
let(:room_floor){ @apartment[:room_floor] }
|
42
76
|
|
43
77
|
it 'should have valid floor information' do
|
44
78
|
expect( top_floor).to be >= room_floor
|
@@ -48,8 +82,8 @@ describe DummyApartment do
|
|
48
82
|
end
|
49
83
|
|
50
84
|
describe 'Room Number' do
|
51
|
-
let(:room_floor) { apartment[:room_floor] }
|
52
|
-
let(:room_number){ apartment[:room_number] }
|
85
|
+
let(:room_floor) { @apartment[:room_floor] }
|
86
|
+
let(:room_number){ @apartment[:room_number] }
|
53
87
|
|
54
88
|
it 'should be a three-character string' do
|
55
89
|
expect(room_number).to be_a String
|
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.0.2
|
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-16 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bundler
|