fulfil 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.
- checksums.yaml +7 -0
- data/lib/fulfil/base.rb +44 -0
- data/lib/fulfil/constants.rb +5 -0
- data/lib/fulfil/errors/base_error.rb +7 -0
- data/lib/fulfil/product.rb +16 -0
- data/lib/fulfil/request.rb +83 -0
- data/lib/fulfil/version.rb +3 -0
- data/lib/fulfil.rb +12 -0
- metadata +133 -0
checksums.yaml
ADDED
@@ -0,0 +1,7 @@
|
|
1
|
+
---
|
2
|
+
SHA1:
|
3
|
+
metadata.gz: 69b547ea14ce54b22cb8b9e33c3da0fc60872fca
|
4
|
+
data.tar.gz: 2a335cfebd8a62ce25112ae99ee5edfc6cf70cb4
|
5
|
+
SHA512:
|
6
|
+
metadata.gz: 23b30ab2b82afa7c8a8f1344b5f4d65aa0d2a0798684e5632997dfddcc6822a9a1fb2a6e08fcb8867abe8d69bbe59da460d066d88d41caab179f6c593d93eb49
|
7
|
+
data.tar.gz: f9604a77e96c2e5a83dbc76107dbef7f13ba2d710a8e52f048ad9248eed5d671f7bd09ccbdeaf762523bdc709ffa90e29254c8af2ae796feb7f64a2472533960
|
data/lib/fulfil/base.rb
ADDED
@@ -0,0 +1,44 @@
|
|
1
|
+
# This is the base class for all models. Each object in response is an object of this class.
|
2
|
+
|
3
|
+
require 'fulfil'
|
4
|
+
require 'json'
|
5
|
+
module Fulfil
|
6
|
+
class Base
|
7
|
+
|
8
|
+
def initialize(args)
|
9
|
+
@args = args
|
10
|
+
end
|
11
|
+
|
12
|
+
class << self
|
13
|
+
# Method to get single object using ID
|
14
|
+
def get(id)
|
15
|
+
raise ArgumentError, 'Please provide an ID' if id.to_s.empty?
|
16
|
+
request.get id
|
17
|
+
end
|
18
|
+
|
19
|
+
# Method to get all objects in a model
|
20
|
+
def all(page=1,per_page=10)
|
21
|
+
request.all({:page => page, :per_page => per_page})
|
22
|
+
end
|
23
|
+
|
24
|
+
# Method to find specific object in a model using filters
|
25
|
+
def find(filter=[],page=1,per_page=10)
|
26
|
+
raise ArgumentError, 'Please provide a filter' if filter.empty?
|
27
|
+
request.find({:filter => filter, :page => page, :per_page => per_page})
|
28
|
+
end
|
29
|
+
|
30
|
+
# TODO
|
31
|
+
#def create(data)
|
32
|
+
#request.create(data)
|
33
|
+
#eend
|
34
|
+
|
35
|
+
end
|
36
|
+
|
37
|
+
# This will return arguments as object methods.
|
38
|
+
def method_missing(method)
|
39
|
+
method = method.to_s
|
40
|
+
raise NoMethodError, "No such method: #{method}" unless @args.keys.include? method
|
41
|
+
@args[method]
|
42
|
+
end
|
43
|
+
end
|
44
|
+
end
|
@@ -0,0 +1,16 @@
|
|
1
|
+
# Product Model
|
2
|
+
require 'fulfil'
|
3
|
+
require 'fulfil/constants'
|
4
|
+
require 'fulfil/request'
|
5
|
+
require 'fulfil/base'
|
6
|
+
|
7
|
+
module Fulfil
|
8
|
+
class Product < Base
|
9
|
+
class << self
|
10
|
+
private
|
11
|
+
def request
|
12
|
+
Fulfil::Request.new(Fulfil::PRODUCT_PATH)
|
13
|
+
end
|
14
|
+
end
|
15
|
+
end
|
16
|
+
end
|
@@ -0,0 +1,83 @@
|
|
1
|
+
# Used to issue requests to API. All models call this class to issue requests.
|
2
|
+
require 'fulfil'
|
3
|
+
require 'fulfil/constants'
|
4
|
+
require 'fulfil/errors/base_error'
|
5
|
+
require 'curb'
|
6
|
+
|
7
|
+
module Fulfil
|
8
|
+
class Request
|
9
|
+
def initialize(url)
|
10
|
+
check_auth_params
|
11
|
+
@options ={
|
12
|
+
base_url: (Fulfil::BASE_URL % {subdomain: Fulfil.authentication[:subdomain]}) << url,
|
13
|
+
api_key: Fulfil.authentication[:api_key]
|
14
|
+
}
|
15
|
+
end
|
16
|
+
|
17
|
+
def get(id)
|
18
|
+
request :get, {}, "/#{id}"
|
19
|
+
end
|
20
|
+
|
21
|
+
def all(data)
|
22
|
+
request :get, data
|
23
|
+
end
|
24
|
+
|
25
|
+
def find(data)
|
26
|
+
request :get, data
|
27
|
+
end
|
28
|
+
|
29
|
+
# TODO
|
30
|
+
#def create(data)
|
31
|
+
# request :post, data
|
32
|
+
#end
|
33
|
+
|
34
|
+
private
|
35
|
+
|
36
|
+
# USed to check if auth is done properly before making calls
|
37
|
+
def check_auth_params
|
38
|
+
if (Fulfil.authentication.nil? || Fulfil.authentication[:subdomain].empty? || Fulfil.authentication[:api_key].empty?)
|
39
|
+
raise Fulfil::AuthenticationError, "Please set your subdomain and api key"
|
40
|
+
end
|
41
|
+
end
|
42
|
+
|
43
|
+
# Issue request and get response
|
44
|
+
def request(http_method, data={}, url="")
|
45
|
+
final_url = @options[:base_url] << url
|
46
|
+
begin
|
47
|
+
case http_method
|
48
|
+
when :get
|
49
|
+
response = Curl.get(final_url, data) do |http|
|
50
|
+
http.headers['x-api-key'] = @options[:api_key]
|
51
|
+
http.headers['Accept'] = 'application/json'
|
52
|
+
end
|
53
|
+
end
|
54
|
+
rescue Curl::Err::HostResolutionError
|
55
|
+
raise Fulfil::HostResolutionError, "Invalid Subdomain"
|
56
|
+
end
|
57
|
+
parse_response response
|
58
|
+
end
|
59
|
+
|
60
|
+
def parse_response response
|
61
|
+
if response.response_code == 401
|
62
|
+
raise Fulfil::UnauthorizedError, "Unauthorized access"
|
63
|
+
else
|
64
|
+
create_response response
|
65
|
+
end
|
66
|
+
end
|
67
|
+
|
68
|
+
# Recursively builds response as object of Fulfil::Base class.
|
69
|
+
def create_response response
|
70
|
+
json = JSON.parse(response.body_str)
|
71
|
+
if json.is_a?(Array)
|
72
|
+
result = json.map {|result| Fulfil::Base.new(result)}
|
73
|
+
else
|
74
|
+
result = Fulfil::Base.new(json)
|
75
|
+
if result.type == "UserError"
|
76
|
+
raise Fulfil::UserError, result.message
|
77
|
+
end
|
78
|
+
end
|
79
|
+
result
|
80
|
+
end
|
81
|
+
|
82
|
+
end
|
83
|
+
end
|
data/lib/fulfil.rb
ADDED
@@ -0,0 +1,12 @@
|
|
1
|
+
# Basic authentication
|
2
|
+
require "fulfil/version"
|
3
|
+
require "fulfil/product"
|
4
|
+
|
5
|
+
module Fulfil
|
6
|
+
class << self
|
7
|
+
attr_accessor :authentication, :base_url
|
8
|
+
def setup(subdomain,api_key)
|
9
|
+
self.authentication = { subdomain: subdomain, api_key: api_key }
|
10
|
+
end
|
11
|
+
end
|
12
|
+
end
|
metadata
ADDED
@@ -0,0 +1,133 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: fulfil
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.0.1
|
5
|
+
platform: ruby
|
6
|
+
authors:
|
7
|
+
- Manoj M J
|
8
|
+
autorequire:
|
9
|
+
bindir: bin
|
10
|
+
cert_chain: []
|
11
|
+
date: 2016-07-17 00:00:00.000000000 Z
|
12
|
+
dependencies:
|
13
|
+
- !ruby/object:Gem::Dependency
|
14
|
+
name: bundler
|
15
|
+
requirement: !ruby/object:Gem::Requirement
|
16
|
+
requirements:
|
17
|
+
- - "~>"
|
18
|
+
- !ruby/object:Gem::Version
|
19
|
+
version: '1.6'
|
20
|
+
type: :development
|
21
|
+
prerelease: false
|
22
|
+
version_requirements: !ruby/object:Gem::Requirement
|
23
|
+
requirements:
|
24
|
+
- - "~>"
|
25
|
+
- !ruby/object:Gem::Version
|
26
|
+
version: '1.6'
|
27
|
+
- !ruby/object:Gem::Dependency
|
28
|
+
name: rake
|
29
|
+
requirement: !ruby/object:Gem::Requirement
|
30
|
+
requirements:
|
31
|
+
- - "~>"
|
32
|
+
- !ruby/object:Gem::Version
|
33
|
+
version: '10.4'
|
34
|
+
- - ">="
|
35
|
+
- !ruby/object:Gem::Version
|
36
|
+
version: 10.4.2
|
37
|
+
type: :development
|
38
|
+
prerelease: false
|
39
|
+
version_requirements: !ruby/object:Gem::Requirement
|
40
|
+
requirements:
|
41
|
+
- - "~>"
|
42
|
+
- !ruby/object:Gem::Version
|
43
|
+
version: '10.4'
|
44
|
+
- - ">="
|
45
|
+
- !ruby/object:Gem::Version
|
46
|
+
version: 10.4.2
|
47
|
+
- !ruby/object:Gem::Dependency
|
48
|
+
name: rspec
|
49
|
+
requirement: !ruby/object:Gem::Requirement
|
50
|
+
requirements:
|
51
|
+
- - "~>"
|
52
|
+
- !ruby/object:Gem::Version
|
53
|
+
version: '3.5'
|
54
|
+
type: :development
|
55
|
+
prerelease: false
|
56
|
+
version_requirements: !ruby/object:Gem::Requirement
|
57
|
+
requirements:
|
58
|
+
- - "~>"
|
59
|
+
- !ruby/object:Gem::Version
|
60
|
+
version: '3.5'
|
61
|
+
- !ruby/object:Gem::Dependency
|
62
|
+
name: curb
|
63
|
+
requirement: !ruby/object:Gem::Requirement
|
64
|
+
requirements:
|
65
|
+
- - "~>"
|
66
|
+
- !ruby/object:Gem::Version
|
67
|
+
version: 0.9.3
|
68
|
+
type: :runtime
|
69
|
+
prerelease: false
|
70
|
+
version_requirements: !ruby/object:Gem::Requirement
|
71
|
+
requirements:
|
72
|
+
- - "~>"
|
73
|
+
- !ruby/object:Gem::Version
|
74
|
+
version: 0.9.3
|
75
|
+
- !ruby/object:Gem::Dependency
|
76
|
+
name: json
|
77
|
+
requirement: !ruby/object:Gem::Requirement
|
78
|
+
requirements:
|
79
|
+
- - "~>"
|
80
|
+
- !ruby/object:Gem::Version
|
81
|
+
version: '2.0'
|
82
|
+
- - ">="
|
83
|
+
- !ruby/object:Gem::Version
|
84
|
+
version: 2.0.1
|
85
|
+
type: :runtime
|
86
|
+
prerelease: false
|
87
|
+
version_requirements: !ruby/object:Gem::Requirement
|
88
|
+
requirements:
|
89
|
+
- - "~>"
|
90
|
+
- !ruby/object:Gem::Version
|
91
|
+
version: '2.0'
|
92
|
+
- - ">="
|
93
|
+
- !ruby/object:Gem::Version
|
94
|
+
version: 2.0.1
|
95
|
+
description: ''
|
96
|
+
email:
|
97
|
+
- manojmj92@gmail.com
|
98
|
+
executables: []
|
99
|
+
extensions: []
|
100
|
+
extra_rdoc_files: []
|
101
|
+
files:
|
102
|
+
- lib/fulfil.rb
|
103
|
+
- lib/fulfil/base.rb
|
104
|
+
- lib/fulfil/constants.rb
|
105
|
+
- lib/fulfil/errors/base_error.rb
|
106
|
+
- lib/fulfil/product.rb
|
107
|
+
- lib/fulfil/request.rb
|
108
|
+
- lib/fulfil/version.rb
|
109
|
+
homepage: ''
|
110
|
+
licenses:
|
111
|
+
- MIT
|
112
|
+
metadata: {}
|
113
|
+
post_install_message:
|
114
|
+
rdoc_options: []
|
115
|
+
require_paths:
|
116
|
+
- lib
|
117
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
118
|
+
requirements:
|
119
|
+
- - ">="
|
120
|
+
- !ruby/object:Gem::Version
|
121
|
+
version: '0'
|
122
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
123
|
+
requirements:
|
124
|
+
- - ">="
|
125
|
+
- !ruby/object:Gem::Version
|
126
|
+
version: '0'
|
127
|
+
requirements: []
|
128
|
+
rubyforge_project:
|
129
|
+
rubygems_version: 2.2.2
|
130
|
+
signing_key:
|
131
|
+
specification_version: 4
|
132
|
+
summary: fulfil.io REST API Gem
|
133
|
+
test_files: []
|