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 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
@@ -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,5 @@
1
+ # All constants go here.
2
+ module Fulfil
3
+ BASE_URL = "https://%{subdomain}.fulfil.io/api/v1/model/".freeze
4
+ PRODUCT_PATH = "product.product".freeze
5
+ end
@@ -0,0 +1,7 @@
1
+ # All errors goes here.
2
+ module Fulfil
3
+ class UnauthorizedError < StandardError ; end
4
+ class AuthenticationError < StandardError ; end
5
+ class UserError < StandardError ; end
6
+ class HostResolutionError < StandardError ; end
7
+ 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
@@ -0,0 +1,3 @@
1
+ module Fulfil
2
+ VERSION = "0.0.1"
3
+ 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: []