sibyl 0.1.0 → 0.2.0

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.
Files changed (53) hide show
  1. checksums.yaml +4 -4
  2. data/README.md +24 -10
  3. data/app/assets/images/old_moon/old_moon.png +0 -0
  4. data/app/assets/images/old_moon/old_moon_@2X.jpg +0 -0
  5. data/app/assets/images/old_moon/readme.txt +8 -0
  6. data/app/assets/images/ui-bg_diagonals-thick_15_0b3e6f_40x40.png +0 -0
  7. data/app/assets/images/ui-bg_dots-medium_30_0b58a2_4x4.png +0 -0
  8. data/app/assets/images/ui-bg_dots-small_20_333333_2x2.png +0 -0
  9. data/app/assets/images/ui-bg_dots-small_30_a32d00_2x2.png +0 -0
  10. data/app/assets/images/ui-bg_dots-small_40_00498f_2x2.png +0 -0
  11. data/app/assets/images/ui-bg_gloss-wave_20_111111_500x100.png +0 -0
  12. data/app/assets/images/ui-icons_00498f_256x240.png +0 -0
  13. data/app/assets/images/ui-icons_98d2fb_256x240.png +0 -0
  14. data/app/assets/images/ui-icons_9ccdfc_256x240.png +0 -0
  15. data/app/assets/images/ui-icons_ffffff_256x240.png +0 -0
  16. data/app/assets/javascripts/jquery-ui.js +18706 -0
  17. data/app/assets/javascripts/jquery-ui.min.js +13 -0
  18. data/app/assets/javascripts/jquery.min.js +5 -0
  19. data/app/assets/javascripts/sibyl/application.js +2 -0
  20. data/app/assets/javascripts/sibyl/editor.js +218 -2
  21. data/app/assets/stylesheets/atelier-seaside-dark.css +1 -0
  22. data/app/assets/stylesheets/default.css +1 -0
  23. data/app/assets/stylesheets/jquery-ui.css +1312 -0
  24. data/app/assets/stylesheets/jquery-ui.min.css +7 -0
  25. data/app/assets/stylesheets/jquery-ui.structure.css +886 -0
  26. data/app/assets/stylesheets/jquery-ui.structure.min.css +5 -0
  27. data/app/assets/stylesheets/jquery-ui.theme.css +443 -0
  28. data/app/assets/stylesheets/jquery-ui.theme.min.css +5 -0
  29. data/app/assets/stylesheets/sibyl/application.css +9 -0
  30. data/app/assets/stylesheets/sibyl/editor.css +148 -4
  31. data/app/controllers/sibyl/editor_controller.rb +81 -3
  32. data/app/views/layouts/sibyl/application.html.erb +3 -2
  33. data/app/views/sibyl/editor/create_scaffold.html.erb +0 -0
  34. data/app/views/sibyl/editor/edit.html.erb +83 -1
  35. data/app/views/sibyl/editor/index.html.erb +28 -2
  36. data/app/views/sibyl/editor/index_task.html.erb +25 -0
  37. data/app/views/sibyl/editor/new_scaffold.html.erb +35 -0
  38. data/config/routes.rb +10 -2
  39. data/lib/generators/sibyl/form/USAGE +8 -0
  40. data/lib/generators/sibyl/form/form_generator.rb +34 -0
  41. data/lib/generators/sibyl/install/USAGE +8 -0
  42. data/lib/generators/sibyl/install/install_generator.rb +17 -0
  43. data/lib/generators/sibyl/install/templates/sibyl.rb +1 -0
  44. data/lib/generators/sibyl/model/USAGE +8 -0
  45. data/lib/generators/sibyl/model/model_generator.rb +29 -0
  46. data/lib/sibyl/base.rb +101 -0
  47. data/lib/sibyl/engine.rb +7 -0
  48. data/lib/sibyl/form.rb +43 -0
  49. data/lib/sibyl/task.rb +123 -0
  50. data/lib/sibyl/version.rb +1 -1
  51. data/lib/sibyl.rb +2 -0
  52. data/lib/tasks/sibyl_tasks.rake +19 -4
  53. metadata +123 -2
data/lib/sibyl/task.rb ADDED
@@ -0,0 +1,123 @@
1
+ require 'prawn'
2
+ require 'zip'
3
+
4
+ module Sibyl
5
+ module Task
6
+ include Magick
7
+
8
+ def clear
9
+ @sibyl_elements = {}
10
+ @sibyl_pdfs = []
11
+ end
12
+ def prepare(obj = nil)
13
+ clear unless @sibyl_elements
14
+ obj = self if obj == nil
15
+ obj.attributes.each do |col,val|
16
+ STDERR.puts "attr: #{col}: #{val}"
17
+ @sibyl_elements[col] = val
18
+ end
19
+ end
20
+ def fill
21
+ prepare
22
+ STDERR.puts "Obj: #{self}"
23
+ STDERR.puts "Obj.class: #{self.class}"
24
+ @task = ActiveSupport::Inflector.underscore(self.class.to_s).pluralize
25
+ STDERR.puts "@task: #{@task}"
26
+ Dir[Rails.root.join("app", "sibyl", @task, "*.json").to_s].each do |json|
27
+ self.create_pdf(json, Rails.root.join("tmp"))
28
+ end
29
+ end
30
+ def create_pdf(json, dest_dir)
31
+ STDERR.puts "json: #{json}"
32
+ data = JSON.parse(File.read(json))
33
+ STDERR.puts "data: #{data.inspect}"
34
+ dir = Pathname.new(json.gsub(/\.json/i, ""))
35
+ STDERR.puts "dir: #{dir}"
36
+ STDERR.puts "dir.basename: #{dir.basename}"
37
+ pdf_path = Pathname.new(dest_dir.to_s).join( dir.basename.to_s.gsub(/\/$|\\$/, '') + ".pdf" )
38
+ STDERR.puts "pdf_path: #{pdf_path}"
39
+ pdf = nil
40
+ tmp_images = []
41
+ data.keys.each do |page_name|
42
+ img_path = dir.join(page_name).to_s
43
+ img_outpath = dest_dir.join(page_name).to_s
44
+ STDERR.puts "img_path: #{img_path}"
45
+ STDERR.puts "img_outpath: #{img_outpath}"
46
+ STDERR.puts "data[#{page_name}]: #{data[page_name]}"
47
+ if data[page_name].has_key? 'elements'
48
+ img = ImageList.new(img_path)
49
+ text = Magick::Draw.new
50
+ elements = data[page_name]['elements']
51
+ STDERR.puts "elements: #{elements}"
52
+ elements.keys.each do |col|
53
+ STDERR.puts "elments[#{col}]: #{elements[col]}"
54
+ if elements[col].has_key? 'fontsize'
55
+ STDERR.puts "setting fontsize: #{elements[col]['fontsize']}"
56
+ text.pointsize = elements[col]['fontsize'].to_f + 2
57
+ end
58
+ if elements[col].has_key?('x') and elements[col].has_key?('y')
59
+ STDERR.puts "received element: #{elements[col]['x']},#{elements[col]['y']}"
60
+ if self.respond_to? col
61
+ STDERR.puts "Setting: #{col} at #{elements[col]['x']},#{elements[col]['y']}"
62
+ text.annotate(img, 0,0,elements[col]['x'].to_i,elements[col]['y'].to_i + 15, self.send(col)) {
63
+ self.fill = 'black'
64
+ }
65
+ end
66
+ end
67
+ end
68
+ img.write(img_outpath)
69
+ tmp_images.push img_outpath
70
+ else
71
+ STDERR.puts "No elements to using default: #{img_path}"
72
+ img_outpath = img_path
73
+ end
74
+
75
+ img = Magick::Image.ping(img_outpath).first
76
+ width = img.columns
77
+ height = img.rows
78
+
79
+ # Image should be 300dpi
80
+ # LETTER = 612.00 x 792.0
81
+ # Which is 2550 px, 3300 px
82
+ # This works out to 612 / 2550 = 0.24
83
+ ratio = 0.24
84
+ pdf_width = width * ratio
85
+ pdf_height = height * ratio
86
+
87
+ if pdf
88
+ STDERR.puts "start_new_page"
89
+ pdf.start_new_page(:page_size => [pdf_width, pdf_height], :margin => 0)
90
+ else
91
+ STDERR.puts "generate_pdf"
92
+ pdf = Prawn::Document.new(:page_size => [pdf_width, pdf_height], :margin => 0)
93
+ end
94
+ STDERR.puts "#{page_name}: Putting: #{img_outpath} of #{width},#{height} at [0,#{pdf_height}]"
95
+ pdf.image img_outpath, :at => [0,pdf_height], :width => pdf_width
96
+ end
97
+ pdf.render_file pdf_path
98
+ STDERR.puts "Saved to: #{pdf_path}"
99
+ # Clean up tmp images
100
+ tmp_images.each do |img_path|
101
+ File.unlink img_path
102
+ end
103
+ @sibyl_pdfs.push pdf_path
104
+ return pdf_path
105
+ end
106
+
107
+ def zip_path
108
+ fill
109
+
110
+ dirpath = Rails.root.join('tmp', "#{@task}#{self.id}-#{SecureRandom.hex(8)}")
111
+ FileUtils.mkdir dirpath
112
+ zip_path = dirpath.join("#{@task}.zip").to_s
113
+ STDERR.puts "Creating: #{zip_path}"
114
+ Zip::File.open(zip_path, Zip::File::CREATE) do |zipfile|
115
+ @sibyl_pdfs.each do |pdf|
116
+ STDERR.puts "Adding: #{pdf}"
117
+ zipfile.add(Pathname.new(pdf.to_s).basename, pdf)
118
+ end
119
+ end
120
+ return zip_path
121
+ end
122
+ end
123
+ end
data/lib/sibyl/version.rb CHANGED
@@ -1,3 +1,3 @@
1
1
  module Sibyl
2
- VERSION = '0.1.0'
2
+ VERSION = '0.2.0'
3
3
  end
data/lib/sibyl.rb CHANGED
@@ -1,4 +1,6 @@
1
+ require "sibyl/form"
1
2
  require "sibyl/engine"
3
+ require "sibyl/base"
2
4
 
3
5
  module Sibyl
4
6
  # Your code goes here...
@@ -1,4 +1,19 @@
1
- # desc "Explaining what the task does"
2
- # task :sibyl do
3
- # # Task goes here
4
- # end
1
+ namespace :sibyl do
2
+ task :open do
3
+ desc "open tasks"
4
+ Sibyl::Engine.open
5
+ end
6
+ task :install do
7
+ initializer = Rails.root.join("config", "initializers", "sibyl.rb")
8
+ unless File.exists? initializer
9
+ File.open(initializer, "w") do |f|
10
+ f.write "Sibyl::Base.load"
11
+ end
12
+ end
13
+ routes_file = Rails.root.join("config", "routes.rb")
14
+ routes = File.read(routes_file).gsub(/Rails.application.routes.draw do/, "Rails.application.routes.draw do\n mount Sibyl::Engine => \"/sibyl\"\n")
15
+ File.open(routes_file, "w") do |f|
16
+ f.write routes
17
+ end
18
+ end
19
+ end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: sibyl
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.0
4
+ version: 0.2.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Janet jeffus
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2016-10-31 00:00:00.000000000 Z
11
+ date: 2016-12-21 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rails
@@ -30,6 +30,90 @@ dependencies:
30
30
  - - ">="
31
31
  - !ruby/object:Gem::Version
32
32
  version: 5.0.0.1
33
+ - !ruby/object:Gem::Dependency
34
+ name: rmagick
35
+ requirement: !ruby/object:Gem::Requirement
36
+ requirements:
37
+ - - "~>"
38
+ - !ruby/object:Gem::Version
39
+ version: 2.16.0
40
+ type: :runtime
41
+ prerelease: false
42
+ version_requirements: !ruby/object:Gem::Requirement
43
+ requirements:
44
+ - - "~>"
45
+ - !ruby/object:Gem::Version
46
+ version: 2.16.0
47
+ - !ruby/object:Gem::Dependency
48
+ name: awesome_print
49
+ requirement: !ruby/object:Gem::Requirement
50
+ requirements:
51
+ - - ">="
52
+ - !ruby/object:Gem::Version
53
+ version: '0'
54
+ type: :runtime
55
+ prerelease: false
56
+ version_requirements: !ruby/object:Gem::Requirement
57
+ requirements:
58
+ - - ">="
59
+ - !ruby/object:Gem::Version
60
+ version: '0'
61
+ - !ruby/object:Gem::Dependency
62
+ name: rubyzip
63
+ requirement: !ruby/object:Gem::Requirement
64
+ requirements:
65
+ - - ">="
66
+ - !ruby/object:Gem::Version
67
+ version: '0'
68
+ type: :runtime
69
+ prerelease: false
70
+ version_requirements: !ruby/object:Gem::Requirement
71
+ requirements:
72
+ - - ">="
73
+ - !ruby/object:Gem::Version
74
+ version: '0'
75
+ - !ruby/object:Gem::Dependency
76
+ name: launchy
77
+ requirement: !ruby/object:Gem::Requirement
78
+ requirements:
79
+ - - ">="
80
+ - !ruby/object:Gem::Version
81
+ version: '0'
82
+ type: :runtime
83
+ prerelease: false
84
+ version_requirements: !ruby/object:Gem::Requirement
85
+ requirements:
86
+ - - ">="
87
+ - !ruby/object:Gem::Version
88
+ version: '0'
89
+ - !ruby/object:Gem::Dependency
90
+ name: prawn
91
+ requirement: !ruby/object:Gem::Requirement
92
+ requirements:
93
+ - - ">="
94
+ - !ruby/object:Gem::Version
95
+ version: '0'
96
+ type: :runtime
97
+ prerelease: false
98
+ version_requirements: !ruby/object:Gem::Requirement
99
+ requirements:
100
+ - - ">="
101
+ - !ruby/object:Gem::Version
102
+ version: '0'
103
+ - !ruby/object:Gem::Dependency
104
+ name: thor-rails
105
+ requirement: !ruby/object:Gem::Requirement
106
+ requirements:
107
+ - - ">="
108
+ - !ruby/object:Gem::Version
109
+ version: '0'
110
+ type: :runtime
111
+ prerelease: false
112
+ version_requirements: !ruby/object:Gem::Requirement
113
+ requirements:
114
+ - - ">="
115
+ - !ruby/object:Gem::Version
116
+ version: '0'
33
117
  - !ruby/object:Gem::Dependency
34
118
  name: sqlite3
35
119
  requirement: !ruby/object:Gem::Requirement
@@ -55,8 +139,32 @@ files:
55
139
  - README.md
56
140
  - Rakefile
57
141
  - app/assets/config/sibyl_manifest.js
142
+ - app/assets/images/old_moon/old_moon.png
143
+ - app/assets/images/old_moon/old_moon_@2X.jpg
144
+ - app/assets/images/old_moon/readme.txt
145
+ - app/assets/images/ui-bg_diagonals-thick_15_0b3e6f_40x40.png
146
+ - app/assets/images/ui-bg_dots-medium_30_0b58a2_4x4.png
147
+ - app/assets/images/ui-bg_dots-small_20_333333_2x2.png
148
+ - app/assets/images/ui-bg_dots-small_30_a32d00_2x2.png
149
+ - app/assets/images/ui-bg_dots-small_40_00498f_2x2.png
150
+ - app/assets/images/ui-bg_gloss-wave_20_111111_500x100.png
151
+ - app/assets/images/ui-icons_00498f_256x240.png
152
+ - app/assets/images/ui-icons_98d2fb_256x240.png
153
+ - app/assets/images/ui-icons_9ccdfc_256x240.png
154
+ - app/assets/images/ui-icons_ffffff_256x240.png
155
+ - app/assets/javascripts/jquery-ui.js
156
+ - app/assets/javascripts/jquery-ui.min.js
157
+ - app/assets/javascripts/jquery.min.js
58
158
  - app/assets/javascripts/sibyl/application.js
59
159
  - app/assets/javascripts/sibyl/editor.js
160
+ - app/assets/stylesheets/atelier-seaside-dark.css
161
+ - app/assets/stylesheets/default.css
162
+ - app/assets/stylesheets/jquery-ui.css
163
+ - app/assets/stylesheets/jquery-ui.min.css
164
+ - app/assets/stylesheets/jquery-ui.structure.css
165
+ - app/assets/stylesheets/jquery-ui.structure.min.css
166
+ - app/assets/stylesheets/jquery-ui.theme.css
167
+ - app/assets/stylesheets/jquery-ui.theme.min.css
60
168
  - app/assets/stylesheets/sibyl/application.css
61
169
  - app/assets/stylesheets/sibyl/editor.css
62
170
  - app/controllers/sibyl/application_controller.rb
@@ -67,11 +175,24 @@ files:
67
175
  - app/mailers/sibyl/application_mailer.rb
68
176
  - app/models/sibyl/application_record.rb
69
177
  - app/views/layouts/sibyl/application.html.erb
178
+ - app/views/sibyl/editor/create_scaffold.html.erb
70
179
  - app/views/sibyl/editor/edit.html.erb
71
180
  - app/views/sibyl/editor/index.html.erb
181
+ - app/views/sibyl/editor/index_task.html.erb
182
+ - app/views/sibyl/editor/new_scaffold.html.erb
72
183
  - config/routes.rb
184
+ - lib/generators/sibyl/form/USAGE
185
+ - lib/generators/sibyl/form/form_generator.rb
186
+ - lib/generators/sibyl/install/USAGE
187
+ - lib/generators/sibyl/install/install_generator.rb
188
+ - lib/generators/sibyl/install/templates/sibyl.rb
189
+ - lib/generators/sibyl/model/USAGE
190
+ - lib/generators/sibyl/model/model_generator.rb
73
191
  - lib/sibyl.rb
192
+ - lib/sibyl/base.rb
74
193
  - lib/sibyl/engine.rb
194
+ - lib/sibyl/form.rb
195
+ - lib/sibyl/task.rb
75
196
  - lib/sibyl/version.rb
76
197
  - lib/tasks/sibyl_tasks.rake
77
198
  homepage: https://github.com/astaria/sibyl