butter_sand 0.0.2 → 0.0.3

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.
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