obf 0.2.3 → 0.2.4

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 5afc4eec32460327902d440eb155542c74c03d66
4
- data.tar.gz: f07ee3b08cbd8d54a8871d899d1c706e7d11bdc2
3
+ metadata.gz: 3dd93aa5841bcdf4538a71b0338ab2b13f3ea674
4
+ data.tar.gz: c3b6ecf6cdeba8605bd34ac2a890b1e9f8345b4f
5
5
  SHA512:
6
- metadata.gz: 2922588d938f988d71e032e826c89c56377d8f208edd8cbd6e082f0307d27767fed792ca10f03652cc49c6f9f6dfdf976323db91820fde343d6d9edd653edbab
7
- data.tar.gz: 85c9884e240b60e9ba76de7b8b927779d20386ab640495a3e1075aefa6c412d02d5d6f150db4f3fd65ada8e7334f19ff0fc189bb2b58b01676d52fe89966e49b
6
+ metadata.gz: ac95324522ab772b27ded6a24215d86128b809c0b3f71cc4b08c27b15e815f948de8cb0148e67c2ab06f198e6156930b607d6c7412b7232a7d3ceb1b948d2895
7
+ data.tar.gz: 483a7f515b1fc3b96bb87cf335dc5d9efeb044da802d117e94450b61d49ba2addc9b91eda38b2cc7921eea8e08cdb1fb1903ba3c9965ceddaaf5d5a5fd8658c3
data/README.md CHANGED
@@ -1,174 +1,22 @@
1
- # Canvas API
1
+ # OBF Parser
2
2
 
3
- This ruby library is to make it easier to use the
4
- [Canvas API](http://api.instructure.com).
3
+ This ruby library is to make it easier to handle .obf and .obz files
5
4
 
6
5
  ## Installation
7
- This is packaged as the `canvas-api` rubygem, so you can just add the dependency to
6
+ This is packaged as the `obf` rubygem, so you can just add the dependency to
8
7
  your Gemfile or install the gem on your system:
9
8
 
10
- gem install canvas-api
9
+ gem install obf
11
10
 
12
11
  To require the library in your project:
13
12
 
14
- require 'canvas-api'
13
+ require 'obf'
15
14
 
16
15
  ## Usage
17
16
 
18
- ### OAuth Dance
19
-
20
- Before you can make API calls you need an access token on behalf of the current user.
21
- In order to get an access token you'll need to do the OAuth dance (and for that you'll
22
- need a client_id and secret. Talk to the Canvas admin about getting these values):
23
-
24
- ```ruby
25
- canvas = Canvas::API.new(:host => "https://canvas.example.com", :client_id => 123, :secret => "abcdef")
26
- url = canvas.oauth_url("https://my.site/oauth_success")
27
- # => "https://canvas.example.com/login/oauth2/auth?client_id=123&response_type=code&redirect_uri=http%3A%2F%2Fmy.site%2Foauth_success
28
- redirect to(url)
29
- ```
30
-
31
- And then when the browser redirects to oauth_success:
32
-
33
- ```ruby
34
- canvas = Canvas::API.new(:host => "https://canvas.example.com", :client_id => 123, :secret => "abcdef")
35
- code = params['code']
36
- canvas.retrieve_access_token(code, 'https://my.site/oauth_success') # this callback_url must match the one provided in the first step
37
- # => {access_token: "qwert"}
38
- ```
39
- ### General API Calls
40
-
41
- Once you've got an access token for a user you should save it (securely!) for future use. To use the API call:
42
-
43
- ```ruby
44
- canvas = Canvas::API.new(:host => "https://canvas.example.com", :token => "qwert")
45
- canvas.get("/api/v1/users/self/profile")
46
- # => {id: 90210, name: "Annie Wilson", ... }
47
- ```
48
-
49
- For POST and PUT requests the second parameter is the form parameters to append, either as a hash or
50
- an array of arrays:
51
-
52
17
  ```ruby
53
- canvas = Canvas::API.new(:host => "https://canvas.example.com", :token => "qwert")
54
- canvas.put("/api/v1/users/self", {'user[name]' => 'Dixon Wilson', 'user[short_name]' => 'Dixon'})
55
- # => {id: 90210, name: "Dixon Wilson", ... }
56
- canvas.put("/api/v1/users/self", {'user' => {'name' => 'Dixon Wilson', 'short_name' => 'Dixon'}}) # this is synonymous with the previous call
57
- # => {id: 90210, name: "Dixon Wilson", ... }
58
- canvas.put("/api/v1/users/self", [['user[name]', 'Dixon Wilson'],['user[short_name]', 'Dixon']]) # this is synonymous with the previous call
59
- # => {id: 90210, name: "Dixon Wilson", ... }
18
+ OBF::PDF.from_external(data, 'my.pdf')
60
19
  ```
61
20
 
62
- On GET requests you can either append query parameters to the actual path or as a hashed second argument:
63
-
64
- ```ruby
65
- canvas = Canvas::API.new(:host => "https://canvas.example.com", :token => "qwert")
66
- canvas.get("/api/v1/users/self/enrollments?type[]=TeacherEnrollment&type[]=TaEnrollment")
67
- # => [{id: 1234, course_id: 5678, ... }, {id: 2345, course_id: 6789, ...}]
68
- canvas.get("/api/v1/users/self/enrollments", {'type' => ['TeacherEnrollment', 'TaEnrollment']}) # this is synonymous with the previous call
69
- # => [{id: 1234, course_id: 5678, ... }, {id: 2345, course_id: 6789, ...}]
70
- ```
71
-
72
- ### Pagination
73
-
74
- API endpoints that return lists are often paginated, meaning they will only return the first X results
75
- (where X depends on the endpoint and, possibly, the per_page parameter you optionally set). To get more
76
- results you'll need to make additional API calls:
77
-
78
- ```ruby
79
- canvas = Canvas::API.new(:host => "https://canvas.example.com", :token => "qwert")
80
- list = canvas.get("/api/v1/calendar_events?all_events=true")
81
- list.length
82
- # => 50
83
- list.more?
84
- # => true (if there's another page of results)
85
- list.next_page!
86
- # => [...] (returns the next page of results)
87
- list.length
88
- # => 100 (also concatenates the results on to the previous list, if that's more convenient)
89
- list.next_page!
90
- # => [...]
91
- list.length
92
- # => 150
93
- ```
94
-
95
- ### Additional Utilities
96
-
97
- There are also some helper methods that can make some of the other tricky parts of the Canvas API a little more approachable.
98
-
99
- #### File Uploads
100
-
101
- Uploading files ia typically a multi-step process. There are three different ways to upload
102
- files.
103
-
104
- Upload a file from the local file system:
105
-
106
-
107
- ```ruby
108
- canvas = Canvas::API.new(:host => "https://canvas.example.com", :token => "qwert")
109
- canvas.upload_file_from_local("/api/v1/users/self/files", File.open("/path/to/file.jpg"), :content_type => "image/jpeg")
110
- # => {id: 1, display_name: "file.jpg", ... }
111
- ```
112
-
113
- Upload a file synchronously from a remote URL:
114
-
115
- ```ruby
116
- canvas = Canvas::API.new(:host => "https://canvas.example.com", :token => "qwert")
117
- canvas.upload_file_from_url("/api/v1/users/self/files", :name => "image.jpg", :size => 12345, :url => "http://www.example.com/image.jpg")
118
- # => {id: 1, display_name: "image.jpg", ... }
119
- ```
120
-
121
- Upload a file asynchronouysly from a remote URL:
122
-
123
- ```ruby
124
- canvas = Canvas::API.new(:host => "https://canvas.example.com", :token => "qwert")
125
- status_url = canvas.upload_file_from_url("/api/v1/users/self/files", :asynch => true, :name => "image.jpg", :size => 12345, :url => "http://www.example.com/image.jpg")
126
- # => "/api/v1/file_status/url"
127
- canvas.get(status_url)
128
- # => {upload_status: "pending"}
129
- canvas.get(status_url)
130
- # => {upload_status: "ready", attachment: {id: 1, display_name: "image.jpg", ... } }
131
- ```
132
-
133
- ```ruby
134
- canvas = Canvas::API.new(:host => "https://canvas.example.com", :token => "qwert")
135
- status_url = canvas.upload_file_from_url("/api/v1/users/self/files", :asynch => true, :name => "image.jpg", :size => 12345, :url => "http://www.example.com/image.jpg")
136
- # => "/api/v1/file_status/url"
137
- canvas.get(status_url)
138
- # => {upload_status: "errored", message: "Invalid response code, expected 200 got 404"}
139
- ```
140
-
141
- For any of these upload types you can optionally provide additional configuration parameters if
142
- the upload endpoint is to an area of Canvas that supports folders (user files, course files, etc.)
143
-
144
- ```ruby
145
- canvas = Canvas::API.new(:host => "https://canvas.example.com", :token => "qwert")
146
- #
147
- # upload the file to a known folder with id 1234
148
- canvas.upload_file_from_url("/api/v1/users/self/files", :parent_folder_id => 1234, :name => "image.jpg", :size => 12345, :url => "http://www.example.com/image.jpg")
149
- # => {id: 1, display_name: "image.jpg", ... }
150
- #
151
- # upload the file to a folder with the path "/friends"
152
- canvas.upload_file_from_url("/api/v1/users/self/files", :parent_folder_path => "/friends", :name => "image.jpg", :size => 12345, :url => "http://www.example.com/image.jpg")
153
- # => {id: 1, display_name: "image.jpg", ... }
154
- #
155
- # rename this file instead of overwriting a file with the same name (overwrite is the default)
156
- canvas.upload_file_from_url("/api/v1/users/self/files", :on_duplicate => "rename", :name => "image.jpg", :size => 12345, :url => "http://www.example.com/image.jpg")
157
- # => {id: 1, display_name: "image.jpg", ... }
158
- ```
159
-
160
-
161
-
162
- #### SIS ID Encoding
163
-
164
- In addition to regular IDs, Canvas supports [SIS IDs](https://canvas.instructure.com/doc/api/file.object_ids.html) defined
165
- by other systems. Sometimes these IDs contain non-standard characters, which can cause problems when
166
- trying to use them via the API. In those cases you can do the following:
167
-
168
- ```ruby
169
- sis_course_id = canvas.encode_id("sis_course_id", "r#-789")
170
- # => "hex:sis_course_id:72232d373839"
171
- canvas.get("/api/v1/courses/#{sis_course_id}/enrollments")
172
- # => [...]
173
- ```
21
+ TODO...
174
22
 
@@ -156,7 +156,7 @@ module OBF::External
156
156
  end
157
157
 
158
158
  ['images', 'sounds'].each do |type|
159
- obj[type].each do |item|
159
+ (obj[type] || []).each do |item|
160
160
  item['data_or_url'] = item['data']
161
161
  if !item['data_or_url'] && item['path'] && opts['zipper']
162
162
  content_type = item['content_type']
@@ -48,6 +48,14 @@ module OBF::PDF
48
48
  end
49
49
  end
50
50
 
51
+ def self.fix_color(str)
52
+ @@colors ||= {}
53
+ return @@colors[str] if @@colors[str]
54
+ color = `node lib/tinycolor_convert.js "#{str}"`.strip
55
+ @@colors[str] = color
56
+ color
57
+ end
58
+
51
59
  def self.build_page(pdf, obj, options)
52
60
  OBF::Utils.as_progress_percent(0, 1.0) do
53
61
  doc_width = 11*72 - 72
@@ -104,20 +112,22 @@ module OBF::PDF
104
112
  fill = "ffffff"
105
113
  border = "eeeeee"
106
114
  if button['background_color']
107
- fill = `node lib/tinycolor_convert.js "#{button['background_color']}"`.strip
115
+ fill = fix_color(button['background_color'])
108
116
  end
109
117
  if button['border_color']
110
- border = `node lib/tinycolor_convert.js "#{button['border_color']}"`.strip
118
+ border = fix_color(button['border_color'])
111
119
  end
112
120
  pdf.fill_color fill
113
121
  pdf.stroke_color border
114
122
  pdf.fill_and_stroke_rounded_rectangle [0, button_height], button_width, button_height, default_radius
115
123
  pdf.bounding_box([5, button_height - 5], :width => button_width - 10, :height => button_height - text_height - 5) do
116
- image = obj['images_hash'][button['image_id']]
117
- image_local_path = image && OBF::Utils.save_image(image, options['zipper'])
118
- if image_local_path && File.exist?(image_local_path)
119
- pdf.image image_local_path, :fit => [button_width - 10, button_height - text_height - 5], :position => :center, :vposition => :center
120
- File.unlink image_local_path
124
+ image = (obj['images_hash'] || {})[button['image_id']]
125
+ if image
126
+ image_local_path = image && OBF::Utils.save_image(image, options['zipper'])
127
+ if image_local_path && File.exist?(image_local_path)
128
+ pdf.image image_local_path, :fit => [button_width - 10, button_height - text_height - 5], :position => :center, :vposition => :center
129
+ File.unlink image_local_path
130
+ end
121
131
  end
122
132
  end
123
133
  if options['pages'] && button['load_board']
@@ -132,7 +132,7 @@ module OBF::Utils
132
132
  hash[item['id']] = item
133
133
  end
134
134
  json["#{key}_hash"] = hash
135
- else
135
+ elsif json["#{key}_hash"]
136
136
  array = []
137
137
  json["#{key}_hash"].each do |id, item|
138
138
  item['id'] ||= id
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: obf
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.2.3
4
+ version: 0.2.4
5
5
  platform: ruby
6
6
  authors:
7
7
  - Brian Whitmer
@@ -127,7 +127,7 @@ files:
127
127
  - lib/obf/png.rb
128
128
  - lib/obf/utils.rb
129
129
  - lib/tinycolor_convert.js
130
- homepage: http://rubygems.org/gems/obf
130
+ homepage: https://github.com/CoughDrop/obf
131
131
  licenses:
132
132
  - MIT
133
133
  metadata: {}