bikepoa-tools 0.2.0 → 0.3.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.
data/README.md CHANGED
@@ -4,14 +4,33 @@
4
4
  bikepoa-tools
5
5
  =============
6
6
 
7
- A simple API to interact with information systems of [BikePOA](http://mobilicidade.com.br/bikepoa/), the
7
+ Gem containing a simple API to interact with information systems of [BikePOA](http://mobilicidade.com.br/bikepoa/), the
8
8
  bicycle-sharing program of Porto Alegre, Brazil.
9
9
 
10
+ installation
11
+ ============
12
+
13
+ To install the version that was released as a gem most recently, simply use
14
+
15
+ ```
16
+ ~$ gem install bikepoa-tools
17
+ ```
18
+
19
+ If you want to be on top of things and use the latest github version, use
20
+
21
+ ```
22
+ ~$ git clone git@github.com:fmobus/bikepoa-tools.git
23
+ ~$ cd bikepoa-tools
24
+ ~/bikepoa-tools$ rake build
25
+ ~/bikepoa-tools$ rake install
26
+ ```
27
+
28
+
10
29
  usage
11
30
  =====
12
31
 
13
32
  ```ruby
14
- >>> require './lib/bikepoa'
33
+ >>> require 'bikepoa'
15
34
  >>> client = BikePOA::Client.new
16
35
  >>> client.stations
17
36
  [
@@ -38,9 +57,8 @@ usage
38
57
  ]
39
58
  ```
40
59
 
41
- todo
60
+ Wishlist
42
61
  ====
43
62
 
44
- * Package it as a gem
45
63
  * Add latitude and longitude to Station
46
64
  * Less crude interface in Station
data/VERSION CHANGED
@@ -1 +1 @@
1
- 0.2.0
1
+ 0.3.0
@@ -5,7 +5,7 @@
5
5
 
6
6
  Gem::Specification.new do |s|
7
7
  s.name = "bikepoa-tools"
8
- s.version = "0.2.0"
8
+ s.version = "0.3.0"
9
9
 
10
10
  s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
11
11
  s.authors = ["Felipe Mobus"]
@@ -1,17 +1,20 @@
1
1
  module BikePOA
2
2
  module Helpers
3
3
  module ForceField
4
+ FORCED_FIELDS = {}
4
5
  def self.included(base)
5
6
  base.send :extend, ClassMethods
6
7
  end
7
8
 
9
+ def []=(property, value)
10
+ transform = FORCED_FIELDS[property.to_sym]
11
+ value = transform.call(value) if transform
12
+ super(property, value)
13
+ end
14
+
8
15
  module ClassMethods
9
16
  def force_integer(field)
10
- class_eval do
11
- define_method("#{field}=".to_sym) do |value|
12
- self.[]=(field, Integer(value))
13
- end
14
- end
17
+ FORCED_FIELDS[field.to_sym] = lambda { |value| Integer(value) }
15
18
  end
16
19
  end
17
20
  end
data/spec/helpers_spec.rb CHANGED
@@ -1,22 +1,42 @@
1
1
 
2
2
  describe BikePOA::Helpers::ForceField do
3
- class DummySubject < Hashie::Dash
4
- include BikePOA::Helpers::ForceField
5
- property :number
6
- force_integer :number
7
- end
3
+ describe 'force integer' do
8
4
 
9
- let(:dummy) { DummySubject.new }
5
+ class DummySubject < Hashie::Dash
6
+ include BikePOA::Helpers::ForceField
7
+ property :normal
8
+ property :number
10
9
 
11
- describe 'force integer' do
12
- it "accepts any value that is castable to integer" do
13
- expect { dummy.number = '42' }.to_not raise_error(ArgumentError)
14
- expect { dummy.number = 42 }.to_not raise_error(ArgumentError)
15
- expect { dummy.number = 42.0 }.to_not raise_error(ArgumentError)
10
+ force_integer :number
16
11
  end
17
- it "raises when the value is not castable to integer" do
18
- expect { dummy.number = "abc" }.to raise_error(ArgumentError)
19
- expect { dummy.number = "a12" }.to raise_error(ArgumentError)
12
+
13
+ describe "when setting property directly" do
14
+ let(:dummy) { DummySubject.new }
15
+
16
+ it "accepts any value that is castable to integer" do
17
+ expect { dummy.number = '42' }.to_not raise_error(ArgumentError)
18
+ expect { dummy.number = 42 }.to_not raise_error(ArgumentError)
19
+ expect { dummy.number = 42.0 }.to_not raise_error(ArgumentError)
20
+ end
21
+ it "raises when the value is not castable to integer" do
22
+ expect { dummy.number = "abc" }.to raise_error(ArgumentError)
23
+ expect { dummy.number = "a12" }.to raise_error(ArgumentError)
24
+ end
25
+ it 'lets you put anything into non-forced fields' do
26
+ expect { DummySubject.new(normal: 'abc1123') }.to_not raise_error
27
+ end
28
+ end
29
+
30
+ describe "when loading the Dash from a hash" do
31
+ it 'accepts values castable to integer' do
32
+ expect { DummySubject.new(number: '678') }.to_not raise_error(ArgumentError)
33
+ end
34
+ it "raises when one of the forced-fields is invalid" do
35
+ expect { DummySubject.new(number: "abc") }.to raise_error(ArgumentError)
36
+ end
37
+ it 'lets you put anything into non-forced fields' do
38
+ expect { DummySubject.new(normal: 'abc1123') }.to_not raise_error
39
+ end
20
40
  end
21
41
  end
22
42
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: bikepoa-tools
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.2.0
4
+ version: 0.3.0
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors: