rfid_api 0.0.1
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/.gitignore +4 -0
- data/Gemfile +4 -0
- data/README.rdoc +25 -0
- data/Rakefile +2 -0
- data/lib/rfid_api/action.rb +24 -0
- data/lib/rfid_api/card.rb +5 -0
- data/lib/rfid_api/client.rb +154 -0
- data/lib/rfid_api/device.rb +13 -0
- data/lib/rfid_api/event.rb +5 -0
- data/lib/rfid_api/social_account.rb +9 -0
- data/lib/rfid_api/version.rb +3 -0
- data/lib/rfid_api.rb +26 -0
- data/rfid_api.gemspec +27 -0
- metadata +139 -0
data/.gitignore
ADDED
data/Gemfile
ADDED
data/README.rdoc
ADDED
@@ -0,0 +1,25 @@
|
|
1
|
+
= RFID API client
|
2
|
+
|
3
|
+
== Install
|
4
|
+
|
5
|
+
gem 'rfid_api'
|
6
|
+
|
7
|
+
== Configure
|
8
|
+
|
9
|
+
RfidApi.setup do |config|
|
10
|
+
config.username = 'user'
|
11
|
+
config.password = 'password'
|
12
|
+
end
|
13
|
+
|
14
|
+
== Usage
|
15
|
+
|
16
|
+
@cards = RfidApi::Card.all
|
17
|
+
|
18
|
+
@device = RfidApi::Device.create(params[:rfid_api_device])
|
19
|
+
|
20
|
+
@device = RfidApi::Device.update(params[:id], params[:rfid_api_device])
|
21
|
+
|
22
|
+
@device = RfidApi::Device.find(params[:id])
|
23
|
+
@device.destroy
|
24
|
+
|
25
|
+
Copyright (c) 2011 Aimbulance, released under the MIT license
|
data/Rakefile
ADDED
@@ -0,0 +1,24 @@
|
|
1
|
+
module RfidApi
|
2
|
+
class Action < Client
|
3
|
+
self.resource_name = "action"
|
4
|
+
|
5
|
+
class << self
|
6
|
+
def find(device_id, id, options = {})
|
7
|
+
resource get("/devices/#{device_id}/#{plural_name}/#{id}.#{format}", :query => options)
|
8
|
+
end
|
9
|
+
|
10
|
+
def create(device_id, attributes)
|
11
|
+
response = post("/devices/#{device_id}/#{plural_name}.#{format}", :body => { singular_name => attributes })
|
12
|
+
resource(response, attributes)
|
13
|
+
end
|
14
|
+
|
15
|
+
def update(device_id, id, attributes)
|
16
|
+
resource put("/devices/#{device_id}/#{plural_name}/#{id}.#{format}", :body => { singular_name => attributes })
|
17
|
+
end
|
18
|
+
|
19
|
+
def destroy(device_id, id)
|
20
|
+
resource delete("/devices/#{device_id}/#{plural_name}/#{id}.#{format}")
|
21
|
+
end
|
22
|
+
end
|
23
|
+
end
|
24
|
+
end
|
@@ -0,0 +1,154 @@
|
|
1
|
+
require "active_model"
|
2
|
+
require "httparty"
|
3
|
+
require "ostruct"
|
4
|
+
require 'yajl/json_gem'
|
5
|
+
|
6
|
+
module RfidApi
|
7
|
+
class Client < OpenStruct
|
8
|
+
include ::HTTParty
|
9
|
+
|
10
|
+
extend ActiveModel::Naming
|
11
|
+
|
12
|
+
# https://rfidapi.aimbulance.com/api/v1/devices.xml
|
13
|
+
base_uri File.join("https://rfidapi.aimbulance.com", "api", RfidApi.api_version)
|
14
|
+
basic_auth RfidApi.username, RfidApi.password
|
15
|
+
format RfidApi.format
|
16
|
+
debug_output File.open(Rails.root.join('log', 'rfid_api.log'), "a")
|
17
|
+
|
18
|
+
delegate :create, :update, :get, :plural_name, :format, :resources, :to => "self.class"
|
19
|
+
|
20
|
+
class << self
|
21
|
+
|
22
|
+
# Gets the resource_name
|
23
|
+
def resource_name
|
24
|
+
# Not using superclass_delegating_reader. See +site+ for explanation
|
25
|
+
if defined?(@resource_name)
|
26
|
+
@resource_name
|
27
|
+
elsif superclass != Object && superclass.proxy
|
28
|
+
superclass.proxy.dup.freeze
|
29
|
+
end
|
30
|
+
end
|
31
|
+
|
32
|
+
# Set resource_name
|
33
|
+
def resource_name=(name)
|
34
|
+
@resource_name = name
|
35
|
+
end
|
36
|
+
|
37
|
+
def create(attributes)
|
38
|
+
response = post("/#{plural_name}.#{format}", :body => { singular_name => attributes })
|
39
|
+
resource(response, attributes)
|
40
|
+
end
|
41
|
+
|
42
|
+
def update(id, attributes)
|
43
|
+
resource put("/#{plural_name}/#{id}.#{format}", :body => { singular_name => attributes })
|
44
|
+
end
|
45
|
+
|
46
|
+
def all(options = {})
|
47
|
+
resources get("/#{plural_name}.#{format}", :query => options)
|
48
|
+
end
|
49
|
+
|
50
|
+
def find(id, options = {})
|
51
|
+
resource get("/#{plural_name}/#{id}.#{format}", :query => options)
|
52
|
+
end
|
53
|
+
|
54
|
+
def destroy(id)
|
55
|
+
resource delete("/#{plural_name}/#{id}.#{format}")
|
56
|
+
end
|
57
|
+
|
58
|
+
def model_name
|
59
|
+
@_model_name ||= ActiveModel::Name.new(self)
|
60
|
+
end
|
61
|
+
|
62
|
+
protected
|
63
|
+
|
64
|
+
def singular_name
|
65
|
+
@singular_name ||= resource_name.to_s.downcase.singularize
|
66
|
+
end
|
67
|
+
|
68
|
+
def plural_name
|
69
|
+
@plural_name ||= resource_name.to_s.downcase.pluralize
|
70
|
+
end
|
71
|
+
|
72
|
+
def resources(response, options = {})
|
73
|
+
if response
|
74
|
+
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
|
87
|
+
end
|
88
|
+
end
|
89
|
+
|
90
|
+
def resource(resource, options = {})
|
91
|
+
resources(resource, options).first
|
92
|
+
end
|
93
|
+
|
94
|
+
def post_parse(body)
|
95
|
+
return body unless body.is_a?(String)
|
96
|
+
|
97
|
+
case format
|
98
|
+
when :json then Yajl::Parser.new.parse(body)
|
99
|
+
when :xml then Nokogiri::XML.parse(body)
|
100
|
+
end
|
101
|
+
end
|
102
|
+
end
|
103
|
+
|
104
|
+
def to_key
|
105
|
+
[_id]
|
106
|
+
end
|
107
|
+
|
108
|
+
def to_param
|
109
|
+
_id
|
110
|
+
end
|
111
|
+
|
112
|
+
def save
|
113
|
+
new_record? ? create(@table) : update(_id, @table)
|
114
|
+
end
|
115
|
+
|
116
|
+
def destroy
|
117
|
+
unless new_record?
|
118
|
+
self.class.destroy(_id)
|
119
|
+
@destroyed = true
|
120
|
+
end
|
121
|
+
end
|
122
|
+
|
123
|
+
def new_record?
|
124
|
+
_id.blank?
|
125
|
+
end
|
126
|
+
|
127
|
+
def persisted?
|
128
|
+
!(new_record? || destroyed?)
|
129
|
+
end
|
130
|
+
|
131
|
+
def destroyed?
|
132
|
+
@destroyed == true
|
133
|
+
end
|
134
|
+
|
135
|
+
def errors
|
136
|
+
@errors ||= ActiveModel::Errors.new(self)
|
137
|
+
end
|
138
|
+
|
139
|
+
def errors=(attributes)
|
140
|
+
attributes.each do |key, value|
|
141
|
+
[value].flatten.each { |message| errors.add(key, message) }
|
142
|
+
end
|
143
|
+
end
|
144
|
+
|
145
|
+
def datetime(colum_name)
|
146
|
+
begin
|
147
|
+
DateTime.parse(send(colum_name))
|
148
|
+
rescue Exception => e
|
149
|
+
nil
|
150
|
+
end
|
151
|
+
end
|
152
|
+
|
153
|
+
end
|
154
|
+
end
|
@@ -0,0 +1,13 @@
|
|
1
|
+
module RfidApi
|
2
|
+
class Device < Client
|
3
|
+
self.resource_name = "device"
|
4
|
+
|
5
|
+
def events(options = {})
|
6
|
+
resources get("/#{plural_name}/#{_id}/events.#{format}", :query => options)
|
7
|
+
end
|
8
|
+
|
9
|
+
def actions(options = {})
|
10
|
+
resources get("/#{plural_name}/#{_id}/actions.#{format}", :query => options)
|
11
|
+
end
|
12
|
+
end
|
13
|
+
end
|
data/lib/rfid_api.rb
ADDED
@@ -0,0 +1,26 @@
|
|
1
|
+
require 'active_support/core_ext/module/attribute_accessors'
|
2
|
+
|
3
|
+
module RfidApi
|
4
|
+
autoload :Client, 'rfid_api/client'
|
5
|
+
autoload :Device, 'rfid_api/device'
|
6
|
+
autoload :Card, 'rfid_api/card'
|
7
|
+
autoload :Event, 'rfid_api/event'
|
8
|
+
autoload :SocialAccount, 'rfid_api/social_account'
|
9
|
+
autoload :Action, 'rfid_api/action'
|
10
|
+
|
11
|
+
mattr_accessor :username
|
12
|
+
@@username = 'user'
|
13
|
+
|
14
|
+
mattr_accessor :password
|
15
|
+
@@password = 'password'
|
16
|
+
|
17
|
+
mattr_accessor :format
|
18
|
+
@@format = :json
|
19
|
+
|
20
|
+
mattr_accessor :api_version
|
21
|
+
@@api_version = 'v1'
|
22
|
+
|
23
|
+
def self.setup
|
24
|
+
yield self
|
25
|
+
end
|
26
|
+
end
|
data/rfid_api.gemspec
ADDED
@@ -0,0 +1,27 @@
|
|
1
|
+
# -*- encoding: utf-8 -*-
|
2
|
+
$:.push File.expand_path("../lib", __FILE__)
|
3
|
+
require "rfid_api/version"
|
4
|
+
|
5
|
+
Gem::Specification.new do |s|
|
6
|
+
s.name = "rfid_api"
|
7
|
+
s.version = RfidApi::VERSION
|
8
|
+
s.platform = Gem::Platform::RUBY
|
9
|
+
s.authors = ["Igor Galeta"]
|
10
|
+
s.email = ["galeta.igor@gmail.com"]
|
11
|
+
s.homepage = "https://github.com/galetahub/rfid_api"
|
12
|
+
s.summary = %q{Simple client for RFID API}
|
13
|
+
s.description = %q{Simple client to work with RFID API}
|
14
|
+
|
15
|
+
s.rubyforge_project = "rfid_api"
|
16
|
+
|
17
|
+
s.files = `git ls-files`.split("\n")
|
18
|
+
s.test_files = `git ls-files -- {test,spec,features}/*`.split("\n")
|
19
|
+
s.executables = `git ls-files -- bin/*`.split("\n").map{ |f| File.basename(f) }
|
20
|
+
s.require_paths = ["lib"]
|
21
|
+
s.extra_rdoc_files = ["README.rdoc"]
|
22
|
+
|
23
|
+
s.add_dependency("yajl-ruby", "~> 1.0.0")
|
24
|
+
s.add_dependency("httparty", "~> 0.8.1")
|
25
|
+
s.add_dependency("activesupport", ">= 0")
|
26
|
+
s.add_dependency("activemodel", ">= 0")
|
27
|
+
end
|
metadata
ADDED
@@ -0,0 +1,139 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: rfid_api
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
hash: 29
|
5
|
+
prerelease:
|
6
|
+
segments:
|
7
|
+
- 0
|
8
|
+
- 0
|
9
|
+
- 1
|
10
|
+
version: 0.0.1
|
11
|
+
platform: ruby
|
12
|
+
authors:
|
13
|
+
- Igor Galeta
|
14
|
+
autorequire:
|
15
|
+
bindir: bin
|
16
|
+
cert_chain: []
|
17
|
+
|
18
|
+
date: 2011-10-28 00:00:00 +03:00
|
19
|
+
default_executable:
|
20
|
+
dependencies:
|
21
|
+
- !ruby/object:Gem::Dependency
|
22
|
+
name: yajl-ruby
|
23
|
+
prerelease: false
|
24
|
+
requirement: &id001 !ruby/object:Gem::Requirement
|
25
|
+
none: false
|
26
|
+
requirements:
|
27
|
+
- - ~>
|
28
|
+
- !ruby/object:Gem::Version
|
29
|
+
hash: 23
|
30
|
+
segments:
|
31
|
+
- 1
|
32
|
+
- 0
|
33
|
+
- 0
|
34
|
+
version: 1.0.0
|
35
|
+
type: :runtime
|
36
|
+
version_requirements: *id001
|
37
|
+
- !ruby/object:Gem::Dependency
|
38
|
+
name: httparty
|
39
|
+
prerelease: false
|
40
|
+
requirement: &id002 !ruby/object:Gem::Requirement
|
41
|
+
none: false
|
42
|
+
requirements:
|
43
|
+
- - ~>
|
44
|
+
- !ruby/object:Gem::Version
|
45
|
+
hash: 61
|
46
|
+
segments:
|
47
|
+
- 0
|
48
|
+
- 8
|
49
|
+
- 1
|
50
|
+
version: 0.8.1
|
51
|
+
type: :runtime
|
52
|
+
version_requirements: *id002
|
53
|
+
- !ruby/object:Gem::Dependency
|
54
|
+
name: activesupport
|
55
|
+
prerelease: false
|
56
|
+
requirement: &id003 !ruby/object:Gem::Requirement
|
57
|
+
none: false
|
58
|
+
requirements:
|
59
|
+
- - ">="
|
60
|
+
- !ruby/object:Gem::Version
|
61
|
+
hash: 3
|
62
|
+
segments:
|
63
|
+
- 0
|
64
|
+
version: "0"
|
65
|
+
type: :runtime
|
66
|
+
version_requirements: *id003
|
67
|
+
- !ruby/object:Gem::Dependency
|
68
|
+
name: activemodel
|
69
|
+
prerelease: false
|
70
|
+
requirement: &id004 !ruby/object:Gem::Requirement
|
71
|
+
none: false
|
72
|
+
requirements:
|
73
|
+
- - ">="
|
74
|
+
- !ruby/object:Gem::Version
|
75
|
+
hash: 3
|
76
|
+
segments:
|
77
|
+
- 0
|
78
|
+
version: "0"
|
79
|
+
type: :runtime
|
80
|
+
version_requirements: *id004
|
81
|
+
description: Simple client to work with RFID API
|
82
|
+
email:
|
83
|
+
- galeta.igor@gmail.com
|
84
|
+
executables: []
|
85
|
+
|
86
|
+
extensions: []
|
87
|
+
|
88
|
+
extra_rdoc_files:
|
89
|
+
- README.rdoc
|
90
|
+
files:
|
91
|
+
- .gitignore
|
92
|
+
- Gemfile
|
93
|
+
- README.rdoc
|
94
|
+
- Rakefile
|
95
|
+
- lib/rfid_api.rb
|
96
|
+
- lib/rfid_api/action.rb
|
97
|
+
- lib/rfid_api/card.rb
|
98
|
+
- lib/rfid_api/client.rb
|
99
|
+
- lib/rfid_api/device.rb
|
100
|
+
- lib/rfid_api/event.rb
|
101
|
+
- lib/rfid_api/social_account.rb
|
102
|
+
- lib/rfid_api/version.rb
|
103
|
+
- rfid_api.gemspec
|
104
|
+
has_rdoc: true
|
105
|
+
homepage: https://github.com/galetahub/rfid_api
|
106
|
+
licenses: []
|
107
|
+
|
108
|
+
post_install_message:
|
109
|
+
rdoc_options: []
|
110
|
+
|
111
|
+
require_paths:
|
112
|
+
- lib
|
113
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
114
|
+
none: false
|
115
|
+
requirements:
|
116
|
+
- - ">="
|
117
|
+
- !ruby/object:Gem::Version
|
118
|
+
hash: 3
|
119
|
+
segments:
|
120
|
+
- 0
|
121
|
+
version: "0"
|
122
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
123
|
+
none: false
|
124
|
+
requirements:
|
125
|
+
- - ">="
|
126
|
+
- !ruby/object:Gem::Version
|
127
|
+
hash: 3
|
128
|
+
segments:
|
129
|
+
- 0
|
130
|
+
version: "0"
|
131
|
+
requirements: []
|
132
|
+
|
133
|
+
rubyforge_project: rfid_api
|
134
|
+
rubygems_version: 1.6.2
|
135
|
+
signing_key:
|
136
|
+
specification_version: 3
|
137
|
+
summary: Simple client for RFID API
|
138
|
+
test_files: []
|
139
|
+
|