6px 1.0.0 → 1.0.1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (3) hide show
  1. checksums.yaml +4 -4
  2. data/lib/6px/client.rb +59 -28
  3. metadata +1 -1
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 3a24925555b5af31ab2a95c19b40b3cacda0f529
4
- data.tar.gz: 0691e0b3027586c2945ce2336cd21422f1ef3995
3
+ metadata.gz: 39535251eeafaa74bbdee0614a85c2f58dc7311c
4
+ data.tar.gz: cba260fbc32f9bc9fa2b57447f73455338dfde3c
5
5
  SHA512:
6
- metadata.gz: 42d6211294c698e54ac9f7d213cecf771ec9436d1d606f75ba0edf3c779883b4e38292c9b5390ea3b7c8361692aa4a457305b09e24cb57b79b0fde61a9df4f95
7
- data.tar.gz: dc25ebd34888fffe67ab132357bbe08e794da547619216acf118c3b16d1dd7803e03ef59ce166a8e960a55e2bc5b52b42c5724b2bc5e3e4b23e6d1f833fe7d9b
6
+ metadata.gz: 37e56948033e7b5d88e3860eaaf0eaefc4c77c3521091bf370b1e513405ed7dd5399c0845c79ee952ed3696d4de5bf167c4d61179a1ef61e0218fc3cda84dfe0
7
+ data.tar.gz: 7dc75ac6f1aa1e8f35039eba210aab888df3c61a3c99746bc03aed9b1bc2f412171c5b113da7fe61a52357d794b82453e43e16d8a3285d5dd60c63392fd9b4eb
@@ -1,6 +1,7 @@
1
1
  require 'json'
2
+ require 'base64'
2
3
 
3
- class SixPX
4
+ class PX
4
5
  include HTTParty
5
6
 
6
7
  METHOD_NAMES = [:rotate, :resize, :crop, :filter, :layer, :analyze]
@@ -17,10 +18,9 @@ class SixPX
17
18
  self.class.default_params key: api_key, secret: api_secret
18
19
  @payload = {}
19
20
  @inputs = {}
21
+ @outputs = []
22
+ @output = {}
20
23
  @methods = []
21
- @refs = {}
22
- @type = 'jpeg'
23
- @url = ''
24
24
  @data = {}
25
25
  @callback = ''
26
26
  end
@@ -35,27 +35,38 @@ class SixPX
35
35
  JSON.parse(response)
36
36
  end
37
37
 
38
- # Sets images to that need to be processed
39
- def inputs(inputs)
40
- @inputs = inputs
38
+ def output(images)
39
+ @outputs << @output unless @output.empty?
40
+
41
+ @output = {
42
+ ref: images,
43
+ type: 'images/jpeg',
44
+ url: '',
45
+ methods: []
46
+ }
47
+
41
48
  self
42
49
  end
43
50
 
44
- # Add whichs images to process
45
- def refs(refs)
46
- @refs = refs
51
+ # Sets images to that need to be processed
52
+ def inputs(inputs)
53
+ inputs.each do |k,v|
54
+ puts k, v
55
+ @inputs[k] = encode_image(v)
56
+ end
57
+
47
58
  self
48
59
  end
49
60
 
50
61
  # Sets what type the output should be in. Default is jpeg.
51
62
  def type(type)
52
- @type = type
63
+ @output[:type] = type
53
64
  self
54
65
  end
55
66
 
56
67
  # Sets output url
57
68
  def url(url)
58
- @url = url
69
+ @output[:url] = url
59
70
  self
60
71
  end
61
72
 
@@ -80,46 +91,67 @@ class SixPX
80
91
  end
81
92
 
82
93
  # Builds and sends the payload to 6px
83
- def send
94
+ def save
84
95
  payload = build_payload.to_json
85
96
  empty_variables
97
+ puts payload
86
98
  response = self.class.post("jobs", body: payload).body
87
99
  JSON.parse(response)
88
100
  end
89
101
 
90
102
  private
91
103
 
104
+ # Replaces underscores with periods in hash
92
105
  def clean_up_search_params(params)
93
106
  parsed_hash = {}
94
107
  params.each {|i,k| parsed_hash[i.to_s.gsub('_', '.')] = k }
95
108
  parsed_hash
96
109
  end
97
110
 
111
+ # Encodes the images in Base64 if they are not hosted
112
+ def encode_image(url)
113
+ return url if URI.parse(url).scheme
114
+
115
+ raw_image = open(url, 'r').read
116
+ image_type = image_type(url)
117
+ encoded_image = Base64.encode64(raw_image)
118
+
119
+ "#{image_type};base64,#{encoded_image}"
120
+ end
121
+
122
+ def image_type(path)
123
+ png = Regexp.new("\x89PNG".force_encoding("binary"))
124
+ jpg = Regexp.new("\xff\xd8\xff\xe0\x00\x10JFIF".force_encoding("binary"))
125
+ jpg2 = Regexp.new("\xff\xd8\xff\xe1(.*){2}Exif".force_encoding("binary"))
126
+ case IO.read(path, 10)
127
+ when /^GIF8/ then 'images/gif'
128
+ when /^#{png}/ then 'images/png'
129
+ when /^#{jpg}/, /^#{jpg2}/ then 'images/jpg'
130
+ end
131
+ end
132
+
98
133
  # Add methods to method hash
99
134
  def add_method(method, options)
100
- @methods << {
135
+ @output[:methods] << {
101
136
  'method' => method,
102
137
  'options' => options
103
138
  }
104
139
  end
105
140
 
106
- # Builds the final payload to send
141
+ # Builds the final payload to save
107
142
  def build_payload
108
- {
143
+ @outputs << @output
144
+
145
+ payload = {
109
146
  input: @inputs,
110
- output: [
111
- {
112
- methods: @methods,
113
- type: "image/#{@type}",
114
- ref: @refs,
115
- url: @url
116
- }
117
- ],
118
147
  data: @data,
119
148
  callback: {
120
149
  url: @callback
121
- }
150
+ },
151
+ output: @outputs
122
152
  }
153
+
154
+ payload
123
155
  end
124
156
 
125
157
  # Resets instance variables after request is sent
@@ -127,10 +159,9 @@ class SixPX
127
159
  @payload = {}
128
160
  @inputs = {}
129
161
  @methods = []
130
- @refs = {}
131
- @type = 'jpeg'
132
- @url = ''
133
162
  @data = {}
134
163
  @callback = ''
164
+ @outputs = []
165
+ @output = {}
135
166
  end
136
167
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: 6px
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.0.0
4
+ version: 1.0.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Nick Quaranto