rfid_api 0.0.2 → 0.0.4

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/Gemfile CHANGED
@@ -2,3 +2,9 @@ source "http://rubygems.org"
2
2
 
3
3
  # Specify your gem's dependencies in rfid_api.gemspec
4
4
  gemspec
5
+
6
+ group :test do
7
+ gem "rspec", "~> 2.7.0"
8
+ gem 'rack-test'
9
+ gem "fakeweb", "~> 1.3.0"
10
+ end
@@ -1,13 +1,14 @@
1
+ require "active_support/core_ext"
1
2
  require "active_model"
2
3
  require "httparty"
3
4
  require "ostruct"
4
- require 'yajl/json_gem'
5
+ require "yajl/json_gem"
5
6
 
6
7
  module RfidApi
7
- class Client < OpenStruct
8
+ class Client < ::OpenStruct
8
9
  include ::HTTParty
9
10
 
10
- extend ActiveModel::Naming
11
+ extend ::ActiveModel::Naming
11
12
 
12
13
  # https://rfidapi.aimbulance.com/api/v1/devices.xml
13
14
  base_uri File.join("https://rfidapi.aimbulance.com", "api", RfidApi.api_version)
@@ -17,6 +18,8 @@ module RfidApi
17
18
 
18
19
  delegate :create, :update, :get, :plural_name, :format, :resources, :to => "self.class"
19
20
 
21
+ attr_writer :destroyed
22
+
20
23
  class << self
21
24
 
22
25
  # Gets the resource_name
@@ -40,7 +43,8 @@ module RfidApi
40
43
  end
41
44
 
42
45
  def update(id, attributes)
43
- resource put("/#{plural_name}/#{id}.#{format}", :body => { singular_name => attributes })
46
+ response = put("/#{plural_name}/#{id}.#{format}", :body => { singular_name => attributes })
47
+ resource(response, attributes)
44
48
  end
45
49
 
46
50
  def all(options = {})
@@ -52,7 +56,9 @@ module RfidApi
52
56
  end
53
57
 
54
58
  def destroy(id)
55
- resource delete("/#{plural_name}/#{id}.#{format}")
59
+ record = resource( delete("/#{plural_name}/#{id}.#{format}") )
60
+ record.destroyed = (record && record.valid?)
61
+ record
56
62
  end
57
63
 
58
64
  def model_name
@@ -69,26 +75,16 @@ module RfidApi
69
75
  @plural_name ||= resource_name.to_s.downcase.pluralize
70
76
  end
71
77
 
72
- def resources(response, options = {})
73
- if response
78
+ def resources(response, attributes = {})
79
+ if response && [200, 201, 422].include?(response.code)
74
80
  body = post_parse(response.parsed_response)
75
-
76
- if [200, 201].include?(response.code)
77
- [body].flatten.collect { |item| new(item) }
78
- elsif [422].include?(response.code)
79
- [body].flatten.collect do |item|
80
- item = new(options)
81
- item.errors = body[singular_name]["errors"]
82
- item
83
- end
84
- else
85
- nil
86
- end
81
+ [body].flatten.collect { |item| new(item) }
87
82
  end
88
83
  end
89
84
 
90
- def resource(resource, options = {})
91
- resources(resource, options).first
85
+ def resource(response, attributes = {})
86
+ array = resources(response, attributes)
87
+ array.nil? ? nil : array.first
92
88
  end
93
89
 
94
90
  def post_parse(body)
@@ -101,6 +97,14 @@ module RfidApi
101
97
  end
102
98
  end
103
99
 
100
+ def initialize(hash = nil)
101
+ if hash && (hash[:errors] || hash['errors'])
102
+ self.errors = (hash.delete(:errors) || hash.delete('errors'))
103
+ end
104
+
105
+ super(hash)
106
+ end
107
+
104
108
  def to_key
105
109
  [_id]
106
110
  end
@@ -114,10 +118,7 @@ module RfidApi
114
118
  end
115
119
 
116
120
  def destroy
117
- unless new_record?
118
- self.class.destroy(_id)
119
- @destroyed = true
120
- end
121
+ self.class.destroy(_id) unless new_record?
121
122
  end
122
123
 
123
124
  def new_record?
@@ -125,11 +126,15 @@ module RfidApi
125
126
  end
126
127
 
127
128
  def persisted?
128
- !(new_record? || destroyed?)
129
+ !(new_record? || destroyed?) && valid?
129
130
  end
130
131
 
131
132
  def destroyed?
132
- @destroyed == true
133
+ @destroyed === true
134
+ end
135
+
136
+ def valid?
137
+ errors.empty?
133
138
  end
134
139
 
135
140
  def errors
@@ -142,13 +147,20 @@ module RfidApi
142
147
  end
143
148
  end
144
149
 
150
+ def read_attribute(name)
151
+ @table[name.to_sym]
152
+ end
153
+
154
+ def write_attribute(name, value)
155
+ @table[name.to_sym] = value
156
+ end
157
+
145
158
  def datetime(colum_name)
146
159
  begin
147
160
  DateTime.parse(send(colum_name))
148
161
  rescue Exception => e
149
162
  nil
150
163
  end
151
- end
152
-
164
+ end
153
165
  end
154
166
  end
@@ -1,3 +1,3 @@
1
1
  module RfidApi
2
- VERSION = "0.0.2".freeze
2
+ VERSION = "0.0.4".freeze
3
3
  end
@@ -0,0 +1,96 @@
1
+ require "spec_helper"
2
+
3
+ describe RfidApi::Device do
4
+ include ModelsHelper
5
+
6
+ it "should be valid" do
7
+ RfidApi::Device.should be_a(Class)
8
+ end
9
+
10
+ it "should get devices" do
11
+ FakeWeb.register_uri(:get, File.join(rfid_url, "devices.json"),
12
+ :body => [device_attrs, device_attrs("_id" => 2) ].to_json)
13
+
14
+ devices = RfidApi::Device.all
15
+ devices.should_not be_empty
16
+ end
17
+
18
+ it "should get one device" do
19
+ attrs = device_attrs("_id" => "4e312bafc546615929000001")
20
+
21
+ FakeWeb.register_uri(:get, File.join(rfid_url, "devices", "#{attrs['_id']}.json"),
22
+ :body => attrs.to_json)
23
+
24
+ device = RfidApi::Device.find(attrs["_id"])
25
+
26
+ attrs.each do |key, value|
27
+ device.send(key).should == JSON.parse(value.to_json)
28
+ end
29
+ end
30
+
31
+ it "should return nil if RFID service not available" do
32
+ id = "4e312bafc546615929000001"
33
+ FakeWeb.register_uri(:get, File.join(rfid_url, "devices", "#{id}.json"),
34
+ :body => '{"error":{"message":"Some error","info":"Some error"}}', :status => ["500", "Service not available"])
35
+
36
+ device = RfidApi::Device.find(id)
37
+ device.should be_nil
38
+ end
39
+
40
+ context "create/update/destroy" do
41
+ before(:each) do
42
+ @attrs = device_attrs("title" => "Test device")
43
+ @attrs.delete_if {|key, value| ["_id", "created_at", "updated_at", "relays"].include?(key) }
44
+ end
45
+
46
+ it "should create new device" do
47
+ FakeWeb.register_uri(:post, File.join(rfid_url, "devices.json"),
48
+ :body => '{"created_at":"2011-12-06T13:24:13+02:00","latitude":0.0,"secret_token":"sfoYxCgnYkCuNvZCpgxH","title":"Test device","updated_at":"2011-12-06T13:24:13+02:00","_id":"4eddfb5dc546612e14000063","longitude":0.0}')
49
+
50
+ device = RfidApi::Device.create(@attrs)
51
+ device.secret_token.should_not == @attrs['secret_token']
52
+ device.title.should == @attrs['title']
53
+ device.to_param.should_not be_blank
54
+ device.should_not be_new_record
55
+ device.should be_persisted
56
+ end
57
+
58
+ it "should not create new device with invalid params" do
59
+ FakeWeb.register_uri(:post, File.join(rfid_url, "devices.json"),
60
+ :body => '{"created_at":null,"latitude":"wrong","secret_token":"2ny2RWAsSn7cRVlxmsVI","title":"","updated_at":null,"_id":"4eddfc65c546612e14000066","errors":{"title":["can\'t be blank"],"latitude":["is not a number"]},"longitude":0.0}')
61
+
62
+ @attrs["title"] = ''
63
+ @attrs["latitude"] = 'wrong'
64
+
65
+ device = RfidApi::Device.create(@attrs)
66
+ device.secret_token.should_not == @attrs['secret_token']
67
+ device.title.should == @attrs['title']
68
+ device.latitude.should == @attrs['latitude']
69
+ device.errors.should_not be_empty
70
+ device.should_not be_valid
71
+ device.should_not be_persisted
72
+ end
73
+
74
+ it "should update device by id" do
75
+ id = "4eddfb5dc546612e14000063"
76
+
77
+ FakeWeb.register_uri(:put, File.join(rfid_url, "devices", "#{id}.json"),
78
+ :body => '{"created_at":"2011-12-06T13:24:13+02:00","latitude":0.0,"secret_token":"sfoYxCgnYkCuNvZCpgxH","title":"Update","updated_at":"2011-12-06T13:24:13+02:00","_id":"4eddfb5dc546612e14000063","longitude":0.0}')
79
+
80
+ device = RfidApi::Device.update(id, :title => "Update")
81
+ device.title.should == "Update"
82
+ device.should be_valid
83
+ device.should be_persisted
84
+ end
85
+
86
+ it "should destroy device by id" do
87
+ id = "4eddfb5dc546612e14000063"
88
+
89
+ FakeWeb.register_uri(:delete, File.join(rfid_url, "devices", "#{id}.json"),
90
+ :body => '{"created_at":"2011-12-06T13:24:13+02:00","latitude":0.0,"secret_token":"sfoYxCgnYkCuNvZCpgxH","title":"Noname","updated_at":"2011-12-06T13:24:13+02:00","_id":"4eddfb5dc546612e14000063","longitude":0.0}')
91
+
92
+ device = RfidApi::Device.destroy(id)
93
+ device.should be_destroyed
94
+ end
95
+ end
96
+ end
@@ -0,0 +1,25 @@
1
+ require 'spec_helper'
2
+
3
+ describe RfidApi do
4
+ it "should be valid" do
5
+ RfidApi.should be_a(Module)
6
+ end
7
+
8
+ context "setup" do
9
+ before(:each) do
10
+ RfidApi.setup do |config|
11
+ config.username = "user"
12
+ config.password = "pass"
13
+ config.format = :json
14
+ config.api_version = "v2"
15
+ end
16
+ end
17
+
18
+ it "should set config options" do
19
+ RfidApi.username.should == "user"
20
+ RfidApi.password.should == "pass"
21
+ RfidApi.format.should == :json
22
+ RfidApi.api_version.should == "v2"
23
+ end
24
+ end
25
+ end
@@ -0,0 +1,33 @@
1
+ require "rubygems"
2
+ require "bundler/setup"
3
+
4
+ $:.push File.expand_path(File.join(File.dirname(__FILE__), '..', 'lib'))
5
+ require "rfid_api"
6
+ require "fakeweb"
7
+
8
+ # Load support files
9
+ Dir["#{File.dirname(__FILE__)}/support/**/*.rb"].each { |f| require f }
10
+
11
+ RfidApi.setup do |config|
12
+ config.username = 'user'
13
+ config.password = 'password'
14
+ config.logger = nil
15
+ end
16
+
17
+ RSpec.configure do |config|
18
+ # Remove this line if you don't want RSpec's should and should_not
19
+ # methods or matchers
20
+ require 'rspec/expectations'
21
+ config.include RSpec::Matchers
22
+
23
+ # == Mock Framework
24
+ config.mock_with :rspec
25
+
26
+ config.before(:suite) do
27
+ FakeWeb.allow_net_connect = false
28
+ end
29
+
30
+ config.after(:suite) do
31
+ FakeWeb.allow_net_connect = true
32
+ end
33
+ end
@@ -0,0 +1,23 @@
1
+ module ModelsHelper
2
+ def rfid_auth
3
+ [RfidApi.username, RfidApi.password].join(':')
4
+ end
5
+
6
+ def rfid_url
7
+ "https://#{rfid_auth}@rfidapi.aimbulance.com/api/v1"
8
+ end
9
+
10
+ def device_attrs(attrs = {})
11
+ attrs = {
12
+ "relays" => [],
13
+ "created_at" => Time.now,
14
+ "latitude" => 0,
15
+ "secret_token" => "Tpj1gs26b5XJPikc36ST",
16
+ "title" => "Noname",
17
+ "updated_at" => Time.now,
18
+ "_id" => "4e312bafc546615929000001",
19
+ "longitude" => 0,
20
+ "action_klass_name" => "DefaultAction"
21
+ }.merge(attrs)
22
+ end
23
+ end
metadata CHANGED
@@ -1,13 +1,13 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: rfid_api
3
3
  version: !ruby/object:Gem::Version
4
- hash: 27
4
+ hash: 23
5
5
  prerelease:
6
6
  segments:
7
7
  - 0
8
8
  - 0
9
- - 2
10
- version: 0.0.2
9
+ - 4
10
+ version: 0.0.4
11
11
  platform: ruby
12
12
  authors:
13
13
  - Igor Galeta
@@ -15,8 +15,7 @@ autorequire:
15
15
  bindir: bin
16
16
  cert_chain: []
17
17
 
18
- date: 2011-10-29 00:00:00 +03:00
19
- default_executable:
18
+ date: 2011-12-08 00:00:00 Z
20
19
  dependencies:
21
20
  - !ruby/object:Gem::Dependency
22
21
  name: yajl-ruby
@@ -101,7 +100,10 @@ files:
101
100
  - lib/rfid_api/social_account.rb
102
101
  - lib/rfid_api/version.rb
103
102
  - rfid_api.gemspec
104
- has_rdoc: true
103
+ - spec/models/device_spec.rb
104
+ - spec/rfid_api_spec.rb
105
+ - spec/spec_helper.rb
106
+ - spec/support/helpers/models_helper.rb
105
107
  homepage: https://github.com/galetahub/rfid_api
106
108
  licenses: []
107
109
 
@@ -131,7 +133,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
131
133
  requirements: []
132
134
 
133
135
  rubyforge_project: rfid_api
134
- rubygems_version: 1.6.2
136
+ rubygems_version: 1.8.10
135
137
  signing_key:
136
138
  specification_version: 3
137
139
  summary: Simple client for RFID API