butter_sand 0.0.2 → 0.0.3

Sign up to get free protection for your applications and to get access to all the features.
File without changes
@@ -0,0 +1,9 @@
1
+ language: ruby
2
+ rvm:
3
+ - "1.8.7"
4
+ - "1.9.2"
5
+ - "1.9.3"
6
+ - rbx-18mode
7
+ - rbx-19mode
8
+ # uncomment this line if your project needs to run something other than `rake`:
9
+ # script: bundle exec rspec spec
data/Gemfile CHANGED
@@ -1,4 +1,6 @@
1
1
  source 'https://rubygems.org'
2
2
 
3
+ gem 'rake'
4
+ gem 'coveralls', :require => false
3
5
  # Specify your gem's dependencies in butter_sand.gemspec
4
6
  gemspec
data/README.md CHANGED
@@ -1,5 +1,11 @@
1
1
  # ButterSand
2
2
 
3
+ [![Gem Version](https://badge.fury.io/rb/butter_sand.png)](https://rubygems.org/gems/butter_sand)
4
+ [![Build Status](https://travis-ci.org/shunsugai/butter_sand.png?branch=master)](https://travis-ci.org/shunsugai/butter_sand)
5
+ [![Coverage Status](https://coveralls.io/repos/shunsugai/butter_sand/badge.png?branch=master)](https://coveralls.io/r/shunsugai/butter_sand?branch=master)
6
+ [![Code Climate](https://codeclimate.com/github/shunsugai/butter_sand.png)](https://codeclimate.com/github/shunsugai/butter_sand)
7
+ [![Dependency Status](https://gemnasium.com/shunsugai/butter_sand.png)](https://gemnasium.com/shunsugai/butter_sand)
8
+
3
9
  六花亭さんの催事情報ページの内容を取得するためのRubyラッパーです
4
10
 
5
11
  ## インストール方法
@@ -7,26 +7,39 @@ module ButterSand
7
7
  module Events
8
8
  PATH_SAIJI = '/contents/shop/saiji/'
9
9
 
10
- # @return [Array<ButterSand::Event>]
10
+ # Returns list of all event information listed on the page. When there is no event information to be held, returns empty array.
11
+ #
12
+ # @return [Array<ButterSand::Event>] event information listed on the page
11
13
  def all
12
14
  ButterSand::Parser.to_array(get(PATH_SAIJI)).map {|event| ButterSand::Event.new(event)}
13
15
  end
14
16
 
17
+ # Returns list of event information being held. When there is no corresponding data, returns empty array.
18
+ #
19
+ # @return [Array<ButterSand::Event>] event information being held
15
20
  def on_sale
16
- all.select {|event| (event.starts..event.ends) === Date.today}
21
+ all.select {|event| (event.starts..event.ends) === (@date_for_test || Date.today)}
17
22
  end
18
23
 
19
- # @return [Array<ButterSand::Event>]
24
+ # Returns list of event information that starts today. When there is no corresponding data, returns empty array.
25
+ #
26
+ # @return [Array<ButterSand::Event>] event information that starts today
20
27
  def starts_today
21
- all.select {|event| event.starts == Date.today}
28
+ all.select {|event| event.starts == (@date_for_test || Date.today)}
22
29
  end
23
30
 
24
- # @return [Array<ButterSand::Event>]
31
+ # Returns list of event information that ends today. When there is no corresponding data, returns empty array.
32
+ #
33
+ # @return [Array<ButterSand::Event>] event information that ends today
25
34
  def ends_today
26
- all.select {|event| event.ends == Date.today}
35
+ all.select {|event| event.ends == (@date_for_test || Date.today)}
27
36
  end
28
37
 
29
- # @return [Array<ButterSand::Event>]
38
+ # Returns list of event information selected with given prefecture name. When there is no corresponding data, returns empty array.
39
+ #
40
+ # @raise [ArgumentError] Error raised when supplied prefecture name is not valid
41
+ # @param name [String] prefecture name
42
+ # @return [Array<ButterSand::Event>] event information selected with given prefecture name
30
43
  def find_by_prefecture(name)
31
44
  raise ArgumentError , 'Illegal argument' unless name.kind_of? String
32
45
  all.select {|event| event.prefecture == name}
@@ -23,7 +23,7 @@ module ButterSand
23
23
  end
24
24
 
25
25
  def connection
26
- @connection ||= Faraday.new ROOT_URL, ssl: {verify: false} do |conn|
26
+ @connection ||= Faraday.new ROOT_URL, :ssl => {:verify => false} do |conn|
27
27
  conn.use Faraday::Response::RaiseButterSandError
28
28
  conn.use Faraday::Adapter::NetHttp
29
29
  end
@@ -6,34 +6,49 @@ require 'nokogiri'
6
6
  module ButterSand
7
7
  class Parser
8
8
  class << self
9
+
10
+ KEY_DATE_INFO = 0
11
+ KEY_PREFECTURE = 1
12
+ KEY_SHOP_NAME = 2
13
+ KEY_PHONE_NUM = 3
14
+
15
+ KEY_DATE_STARTS = 0
16
+ KEY_DATE_ENDS = 1
17
+
9
18
  # @return [Array<Hash>]
10
19
  def to_array(body)
11
- shops = []
12
- raw_events(Nokogiri::HTML(body)).each do |elem|
13
- str_elems = elem.split(/\n\s+/)
14
-
15
- next if str_elems.length < 4
16
- next unless str_elems[3].strip.phone_number?
17
- begin
18
- dates = str_elems[0].date_to_ary
19
- rescue ArgumentError => e
20
- print e.message, "\n"
21
- next
22
- end
23
-
24
- shops << {
25
- shop: str_elems[2],
26
- prefecture: str_elems[1],
27
- phone: str_elems[3].strip,
28
- starts: dates[0],
29
- ends: dates[1]
30
- }
31
- end
32
- shops
20
+ valid_infos = raw_events(Nokogiri::HTML(body)).select { |elem| is_valid_data? elem }
21
+ valid_infos.map { |elem| shop_data_hash(elem.split(/\n\s+/)) }
33
22
  end
34
23
 
35
24
  private
36
25
 
26
+ # @retrn [Hash]
27
+ def shop_data_hash(list)
28
+ dates = list[KEY_DATE_INFO].date_to_ary
29
+ {
30
+ :shop => list[KEY_SHOP_NAME],
31
+ :prefecture => list[KEY_PREFECTURE],
32
+ :phone => list[KEY_PHONE_NUM].strip,
33
+ :starts => dates[KEY_DATE_STARTS],
34
+ :ends => dates[KEY_DATE_ENDS]
35
+ }
36
+ end
37
+
38
+ # @return [Boolean]
39
+ def is_valid_data?(raw_data)
40
+ str_elems = raw_data.split(/\n\s+/)
41
+ return false if str_elems.length < 4
42
+ return false unless str_elems[KEY_PHONE_NUM].strip.phone_number?
43
+ begin
44
+ dates = str_elems[KEY_DATE_INFO].date_to_ary
45
+ rescue ArgumentError => e
46
+ print e.message, "\n"
47
+ return false
48
+ end
49
+ true
50
+ end
51
+
37
52
  # @return [Array<String>]
38
53
  def raw_events(body)
39
54
  each_state = state_names.map {|state| body.css(state).map(&:text).remove_at(0)}
@@ -1,3 +1,3 @@
1
1
  module ButterSand
2
- VERSION = "0.0.2"
2
+ VERSION = "0.0.3"
3
3
  end
@@ -13,6 +13,64 @@ describe ButterSand::API::Events do
13
13
  it { should have(5).items }
14
14
  end
15
15
 
16
+ describe 'on_sale' do
17
+ before do
18
+ @butter_sand = ButterSand::Client.new
19
+ @butter_sand.instance_eval { @date_for_test = Date.parse('2013-03-14') }
20
+ end
21
+
22
+ subject { @butter_sand.on_sale }
23
+ it { should have(1).item }
24
+ end
25
+
26
+ describe 'starts_today' do
27
+ before do
28
+ @butter_sand = ButterSand::Client.new
29
+ end
30
+
31
+ subject { @butter_sand.starts_today }
32
+
33
+ context 'with no corresponding event' do
34
+ before do
35
+ @butter_sand.instance_eval { @date_for_test = Date.parse('2012-12-31') }
36
+ end
37
+
38
+ it { should have(0).item }
39
+ end
40
+
41
+ context 'with some corresponding events' do
42
+ before do
43
+ @butter_sand.instance_eval { @date_for_test = Date.parse('2013-01-15') }
44
+ end
45
+
46
+ it { should have(1).item }
47
+ end
48
+ end
49
+
50
+ describe 'ends_today' do
51
+ before do
52
+ @butter_sand = ButterSand::Client.new
53
+ end
54
+
55
+ subject { @butter_sand.ends_today }
56
+
57
+ context 'with no corresponding event' do
58
+ before do
59
+ @butter_sand.instance_eval { @date_for_test = Date.parse('2013-01-01') }
60
+ end
61
+
62
+ it { should have(0).item }
63
+ end
64
+
65
+ context 'with some corresponding events' do
66
+ before do
67
+ @butter_sand.instance_eval { @date_for_test = Date.parse('2013-02-28') }
68
+ end
69
+
70
+ it { should have(1).item }
71
+ end
72
+ end
73
+
16
74
  describe 'find_by_prefecture' do
17
75
  it 'should have an item' do
18
76
  ButterSand.send(:find_by_prefecture, '東京').should have(1).item
@@ -6,12 +6,24 @@ describe ButterSand::Client do
6
6
 
7
7
  describe 'get' do
8
8
  context '400' do
9
- before do
10
- stub_request(:get, url).to_return(:status => 400, :body => {'error' => 'Bad Request'})
9
+ context 'with no error message' do
10
+ before do
11
+ stub_request(:get, url).to_return(:status => 400, :body => {'error' => ''})
12
+ end
13
+
14
+ it 'should raise ButterSand::BadRequest' do
15
+ lambda{ ButterSand.get(path_saiji) }.should raise_error ButterSand::BadRequest, 'GET https://www.rokkatei-eshop.com/contents/shop/saiji/: 400'
16
+ end
11
17
  end
12
18
 
13
- it 'should raise ButterSand::BadRequest' do
14
- lambda{ ButterSand.get(path_saiji) }.should raise_error ButterSand::BadRequest
19
+ context 'with error message' do
20
+ before do
21
+ stub_request(:get, url).to_return(:status => 400, :body => {'error' => 'BadRequest'})
22
+ end
23
+
24
+ it 'should raise ButterSand::BadRequest' do
25
+ lambda{ ButterSand.get(path_saiji) }.should raise_error ButterSand::BadRequest, 'BadRequest'
26
+ end
15
27
  end
16
28
  end
17
29
 
@@ -21,7 +33,7 @@ describe ButterSand::Client do
21
33
  end
22
34
 
23
35
  it 'should raise ButterSand::Unauthorized' do
24
- lambda{ ButterSand.get(path_saiji) }.should raise_error ButterSand::Unauthorized
36
+ lambda{ ButterSand.get(path_saiji) }.should raise_error ButterSand::Unauthorized, 'Unauthorized'
25
37
  end
26
38
  end
27
39
 
@@ -31,7 +43,7 @@ describe ButterSand::Client do
31
43
  end
32
44
 
33
45
  it 'should raise ButterSand::Unauthorized' do
34
- lambda{ ButterSand.get(path_saiji) }.should raise_error ButterSand::Forbidden
46
+ lambda{ ButterSand.get(path_saiji) }.should raise_error ButterSand::Forbidden, 'Forbidden'
35
47
  end
36
48
  end
37
49
 
@@ -41,7 +53,7 @@ describe ButterSand::Client do
41
53
  end
42
54
 
43
55
  it 'should raise ButterSand::NotFound' do
44
- lambda{ ButterSand.get(path_saiji) }.should raise_error ButterSand::NotFound
56
+ lambda{ ButterSand.get(path_saiji) }.should raise_error ButterSand::NotFound, 'Not Found'
45
57
  end
46
58
  end
47
59
 
@@ -51,7 +63,7 @@ describe ButterSand::Client do
51
63
  end
52
64
 
53
65
  it 'should raise ButterSand::NotAcceptable' do
54
- lambda{ ButterSand.get(path_saiji) }.should raise_error ButterSand::NotAcceptable
66
+ lambda{ ButterSand.get(path_saiji) }.should raise_error ButterSand::NotAcceptable, 'Not Acceptable'
55
67
  end
56
68
  end
57
69
 
@@ -61,7 +73,7 @@ describe ButterSand::Client do
61
73
  end
62
74
 
63
75
  it 'should raise ButterSand::InternalServerError' do
64
- lambda{ ButterSand.get(path_saiji) }.should raise_error ButterSand::InternalServerError
76
+ lambda{ ButterSand.get(path_saiji) }.should raise_error ButterSand::InternalServerError, 'Internal Server Error'
65
77
  end
66
78
  end
67
79
 
@@ -71,7 +83,7 @@ describe ButterSand::Client do
71
83
  end
72
84
 
73
85
  it 'should raise ButterSand::ServiceUnavailable' do
74
- lambda{ ButterSand.get(path_saiji) }.should raise_error ButterSand::ServiceUnavailable
86
+ lambda{ ButterSand.get(path_saiji) }.should raise_error ButterSand::ServiceUnavailable, 'Internal Server Error'
75
87
  end
76
88
  end
77
89
  end
@@ -7,8 +7,7 @@ describe ButterSand::Parser do
7
7
 
8
8
  context 'with some events' do
9
9
  before do
10
- stub_request(:get, 'https://www.rokkatei-eshop.com/contents/shop/saiji/')
11
- .to_return(:status => 200, :body => fixture('marusei.html'))
10
+ stub_request(:get, 'https://www.rokkatei-eshop.com/contents/shop/saiji/').to_return(:status => 200, :body => fixture('marusei.html'))
12
11
  @response = ButterSand.get(path_saiji)
13
12
  @response_array = ButterSand::Parser.to_array(@response)
14
13
  end
@@ -23,7 +22,7 @@ describe ButterSand::Parser do
23
22
  end
24
23
 
25
24
  it 'includes Hash' do
26
- @response_array.sample.should be_kind_of Hash
25
+ @response_array.first.should be_kind_of Hash
27
26
  end
28
27
 
29
28
  it "first item's shop name should be 'うすい百貨店'" do
@@ -50,8 +49,7 @@ describe ButterSand::Parser do
50
49
 
51
50
  context 'with no event' do
52
51
  before do
53
- stub_request(:get, 'https://www.rokkatei-eshop.com/contents/shop/saiji/')
54
- .to_return(:status => 200, :body => fixture('marusei_no_event.html'))
52
+ stub_request(:get, 'https://www.rokkatei-eshop.com/contents/shop/saiji/').to_return(:status => 200, :body => fixture('marusei_no_event.html'))
55
53
  @response = ButterSand.get(path_saiji)
56
54
  @response_array = ButterSand::Parser.to_array(@response)
57
55
  end
@@ -8,6 +8,9 @@ require 'bundler/setup'
8
8
  require 'butter_sand'
9
9
  require 'faraday/response/raise_butter_sand_error'
10
10
  require 'webmock/rspec'
11
+ require 'date'
12
+ require 'coveralls'
13
+ Coveralls.wear!
11
14
 
12
15
  RSpec.configure do |config|
13
16
  config.order = 'random'
@@ -19,4 +22,4 @@ end
19
22
 
20
23
  def fixture(file)
21
24
  File.new(fixture_path + '/' + file)
22
- end
25
+ end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: butter_sand
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.2
4
+ version: 0.0.3
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -9,7 +9,7 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2013-03-07 00:00:00.000000000 Z
12
+ date: 2013-05-11 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: faraday
@@ -146,8 +146,10 @@ executables: []
146
146
  extensions: []
147
147
  extra_rdoc_files: []
148
148
  files:
149
+ - .coveralls.yml
149
150
  - .gitignore
150
151
  - .rspec
152
+ - .travis.yml
151
153
  - Gemfile
152
154
  - LICENSE.txt
153
155
  - README.md