pimento 0.0.1 → 0.0.2

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 (49) hide show
  1. data/.gitignore +3 -0
  2. data/{spec/spec.opts → .rspec} +0 -0
  3. data/Gemfile +4 -0
  4. data/README.rdoc +6 -5
  5. data/Rakefile +6 -41
  6. data/examples/banner.rb +74 -0
  7. data/lib/pimento.rb +4 -2
  8. data/lib/pimento/canvas.rb +55 -13
  9. data/lib/pimento/component.rb +69 -0
  10. data/lib/pimento/component/bevel_button.rb +5 -0
  11. data/lib/pimento/component/check_box.rb +5 -0
  12. data/lib/pimento/component/circular_progress_indicator.rb +7 -0
  13. data/lib/pimento/component/disclosure_button.rb +5 -0
  14. data/lib/pimento/component/disclosure_triangle.rb +5 -0
  15. data/lib/pimento/component/help_button.rb +5 -0
  16. data/lib/pimento/component/horizontal_slider.rb +5 -0
  17. data/lib/pimento/component/popup_button.rb +5 -0
  18. data/lib/pimento/component/progress_indicator.rb +7 -0
  19. data/lib/pimento/component/round_button.rb +5 -0
  20. data/lib/pimento/component/rounded_rect_button.rb +5 -0
  21. data/lib/pimento/component/search_field.rb +5 -0
  22. data/lib/pimento/component/vertical_slider.rb +5 -0
  23. data/lib/pimento/renderable.rb +8 -0
  24. data/lib/pimento/util.rb +11 -0
  25. data/pimento.gemspec +17 -59
  26. data/spec/fixtures/1dot.xib +207 -222
  27. data/spec/fixtures/empty.xib +164 -174
  28. data/spec/pimento_spec.rb +2 -0
  29. data/spec/spec_helper.rb +7 -4
  30. data/template/bevel_button_ro.xml.erb +24 -0
  31. data/template/{canvas.xib.erb → canvas.xml.erb} +15 -52
  32. data/template/check_box_ro.xml.erb +31 -0
  33. data/template/circular_progress_indicator_ro.xml.erb +10 -0
  34. data/template/disclosure_button_ro.xml.erb +44 -0
  35. data/template/disclosure_triangle_ro.xml.erb +24 -0
  36. data/template/help_button_ro.xml.erb +24 -0
  37. data/template/horizontal_slider_ro.xml.erb +27 -0
  38. data/template/or_1.xml.erb +5 -0
  39. data/template/or_2.xml.erb +14 -0
  40. data/template/popup_button_ro.xml.erb +23 -0
  41. data/template/progress_indicator_ro.xml.erb +10 -0
  42. data/template/round_button_ro.xml.erb +24 -0
  43. data/template/rounded_rect_button_ro.xml.erb +24 -0
  44. data/template/search_field_ro.xml.erb +39 -0
  45. data/template/vertical_slider_ro.xml.erb +26 -0
  46. metadata +98 -69
  47. data/.document +0 -5
  48. data/examples/hello.rb +0 -32
  49. data/lib/pimento/dot.rb +0 -12
data/.gitignore CHANGED
@@ -19,3 +19,6 @@ rdoc
19
19
  pkg
20
20
 
21
21
  ## PROJECT::SPECIFIC
22
+
23
+ Gemfile.lock
24
+ .bundle
File without changes
data/Gemfile ADDED
@@ -0,0 +1,4 @@
1
+ source 'https://rubygems.org'
2
+
3
+ # Specify your gem's dependencies in mac-event-monitor.gemspec
4
+ gemspec
data/README.rdoc CHANGED
@@ -2,17 +2,18 @@
2
2
 
3
3
  Draw graphics using Mac OS X GUI Components
4
4
 
5
- http://buycheapviagraonlinenow.com/files/hello.png
5
+ http://buycheapviagraonlinenow.com/files/pimento.png
6
6
 
7
- == Sypnosis
7
+ == Synopsis
8
8
 
9
9
  require 'ubygems'
10
10
  require 'pimento'
11
11
 
12
- c = Pimento::Canvas.new(0, 0, 300, 200)
12
+ c = Pimento::Canvas.new(0, 0, 620, 200)
13
13
 
14
- c.point(20, 20)
15
- c.line(100, 20, 100, 180)
14
+ c.point(20, 20, 20, 180)
15
+ c.line(20, 100, 100, 100)
16
+ c.line_with_dots(100, 20, 100, 180)
16
17
 
17
18
  c.to_xml.save('foo.xib')
18
19
 
data/Rakefile CHANGED
@@ -1,46 +1,11 @@
1
- require 'rubygems'
1
+ #!/usr/bin/env rake
2
2
  require 'rake'
3
+ require "bundler/gem_tasks"
3
4
 
4
- begin
5
- require 'jeweler'
6
- Jeweler::Tasks.new do |gem|
7
- gem.name = "pimento"
8
- gem.summary = %Q{Draw graphics using Mac OS X GUI Components}
9
- gem.description = %Q{Draw graphics using Mac OS X GUI Components}
10
- gem.email = "youpy@buycheapviagraonlinenow.com"
11
- gem.homepage = "http://github.com/youpy/pimento"
12
- gem.authors = ["youpy"]
13
- gem.add_development_dependency "rspec", ">= 1.2.9"
14
- gem.add_dependency "libxml-ruby"
15
- # gem is a Gem::Specification... see http://www.rubygems.org/read/chapter/20 for additional settings
16
- end
17
- Jeweler::GemcutterTasks.new
18
- rescue LoadError
19
- puts "Jeweler (or a dependency) not available. Install it with: gem install jeweler"
5
+ require 'rspec/core'
6
+ require 'rspec/core/rake_task'
7
+ RSpec::Core::RakeTask.new(:spec) do |spec|
8
+ spec.pattern = FileList['spec/**/*_spec.rb']
20
9
  end
21
10
 
22
- require 'spec/rake/spectask'
23
- Spec::Rake::SpecTask.new(:spec) do |spec|
24
- spec.libs << 'lib' << 'spec'
25
- spec.spec_files = FileList['spec/**/*_spec.rb']
26
- end
27
-
28
- Spec::Rake::SpecTask.new(:rcov) do |spec|
29
- spec.libs << 'lib' << 'spec'
30
- spec.pattern = 'spec/**/*_spec.rb'
31
- spec.rcov = true
32
- end
33
-
34
- task :spec => :check_dependencies
35
-
36
11
  task :default => :spec
37
-
38
- require 'rake/rdoctask'
39
- Rake::RDocTask.new do |rdoc|
40
- version = File.exist?('VERSION') ? File.read('VERSION') : ""
41
-
42
- rdoc.rdoc_dir = 'rdoc'
43
- rdoc.title = "pimento #{version}"
44
- rdoc.rdoc_files.include('README*')
45
- rdoc.rdoc_files.include('lib/**/*.rb')
46
- end
@@ -0,0 +1,74 @@
1
+ # based on http://gist.github.com/411787
2
+
3
+ require 'ubygems'
4
+ require 'pimento'
5
+
6
+ str = ARGV.shift
7
+ exit unless str =~ /^[\d\w ]+$/
8
+ x = 50
9
+ c = Pimento::Canvas.new 0,0,x+str.size*x*2,x*4
10
+ d = [
11
+ lambda {|i| c.line x+i*2*x,x,2*x+i*2*x,x },
12
+ lambda {|i| c.line x+i*2*x,2*x,2*x+i*2*x,2*x },
13
+ lambda {|i| c.line x+i*2*x,3*x,2*x+i*2*x,3*x },
14
+ lambda {|i| c.line x+i*2*x,x,x+i*2*x,2*x },
15
+ lambda {|i| c.line x+i*2*x,2*x,x+i*2*x,3*x },
16
+ lambda {|i| c.line 2*x+i*2*x,x,2*x+i*2*x,2*x },
17
+ lambda {|i| c.line 2*x+i*2*x,2*x,2*x+i*2*x,3*x },
18
+ lambda {|i| c.line x+i*2*x,x,1.5*x+i*2*x,2*x },
19
+ lambda {|i| c.line 1.5*x+i*2*x,2*x,2*x+i*2*x,x },
20
+ lambda {|i| c.line x+i*2*x,3*x,1.5*x+i*2*x,2*x },
21
+ lambda {|i| c.line 1.5*x+i*2*x,2*x,2*x+i*2*x,3*x },
22
+ lambda {|i| c.line 1.5*x+i*2*x,2*x,2*x+i*2*x,2*x },
23
+ lambda {|i| c.line x+i*2*x,2*x,1.5*x+i*2*x,2*x },
24
+ lambda {|i| c.line 1.5*x+i*2*x,x,1.5*x+i*2*x,2*x },
25
+ lambda {|i| c.line 1.5*x+i*2*x,2*x,1.5*x+i*2*x,3*x },
26
+ lambda {|i| c.line x+i*2*x,x,2*x+i*2*x,3*x },
27
+ ]
28
+ n = {
29
+ ' ' => [],
30
+ '0' => [0,2,3,4,5,6],
31
+ '1' => [5,6],
32
+ '2' => [0,1,2,5,4],
33
+ '3' => [0,1,2,5,6],
34
+ '4' => [1,3,5,6],
35
+ '5' => [0,1,2,3,6],
36
+ '6' => [0,1,2,3,4,6],
37
+ '7' => [0,5,6],
38
+ '8' => [0,1,2,3,4,5,6],
39
+ '9' => [0,1,2,3,5,6],
40
+ 'A' => [0,1,3,4,5,6],
41
+ 'B' => [1,2,3,4,6],
42
+ 'C' => [0,2,3,4],
43
+ 'D' => [1,2,4,5,6],
44
+ 'E' => [0,1,2,3,4],
45
+ 'F' => [0,1,3,4],
46
+ 'G' => [0,2,3,4,6,11],
47
+ 'H' => [1,3,4,5,6],
48
+ 'I' => [13,14],
49
+ 'J' => [2,5,6],
50
+ 'K' => [3,4,8,10,12],
51
+ 'L' => [2,3,4],
52
+ 'M' => [0,3,4,5,6,13],
53
+ 'N' => [3,4,5,6,15],
54
+ 'O' => [0,2,3,4,5,6],
55
+ 'P' => [0,1,3,4,5],
56
+ 'Q' => [0,2,3,4,5,6,10],
57
+ 'R' => [0,1,3,4,5,10],
58
+ 'S' => [0,1,2,3,6],
59
+ 'T' => [0,13,14],
60
+ 'U' => [2,3,4,5,6],
61
+ 'V' => [3,4,8,9],
62
+ 'W' => [2,3,4,5,6,14],
63
+ 'X' => [7,8,9,10],
64
+ 'Y' => [1,2,3,5,6],
65
+ 'Z' => [0,2,8,9],
66
+ }
67
+ str.to_s.split(//).each_with_index do |ch, i|
68
+ n[ch.upcase].reverse.each do |r|
69
+ d[r].call i
70
+ end
71
+ end
72
+
73
+ c.to_xml.save 'a.xib'
74
+ #`open a.xib`
data/lib/pimento.rb CHANGED
@@ -1,6 +1,8 @@
1
1
  module Pimento
2
+ VERSION = '0.0.2'
2
3
  end
3
4
 
5
+ require 'pimento/renderable'
6
+ require 'pimento/component'
4
7
  require 'pimento/canvas'
5
- require 'pimento/dot'
6
-
8
+ require 'pimento/util'
@@ -4,24 +4,23 @@ require 'xml'
4
4
 
5
5
  module Pimento
6
6
  class Canvas
7
- attr_accessor :step
7
+ include Renderable
8
+
9
+ attr_reader :width, :height
10
+
11
+ FIRST_ID = 741820390
12
+ FIRST_OBJ = 3
8
13
 
9
14
  def initialize(top, left, width, height)
10
- @step = 5
11
15
  @top = top
12
16
  @left = left
13
17
  @width = width
14
18
  @height = height
15
- @dots = []
16
- @obj_count = 2
17
- @id = 741820390
18
- @cell_id = 799499906
19
+ @components = []
19
20
  end
20
21
 
21
22
  def point(x, y)
22
- @dots << Dot.new(x, y, @id, @cell_id)
23
- @id += 1
24
- @cell_id += 1
23
+ @components << Component.for(:dot).new(self, x, y)
25
24
  end
26
25
 
27
26
  def line(x1, y1, x2, y2)
@@ -30,16 +29,59 @@ module Pimento
30
29
  w = (x2 - x1).abs
31
30
  h = (y2 - y1).abs
32
31
 
33
- num_dots = ((w > h) ? w : h) / @step
32
+ case
33
+ when y1 == y2
34
+ @components << Component.for(:horizontal_line).new(self, x, y, w)
35
+ when x1 == x2
36
+ @components << Component.for(:vertical_line).new(self, x, y, h)
37
+ else
38
+ line_with_dots(x1, y1, x2, y2)
39
+ end
40
+ end
41
+
42
+ def line_with_dots(x1, y1, x2, y2, step = 20)
43
+ x = x1
44
+ y = y1
45
+ w = (x2 - x1).abs
46
+ h = (y2 - y1).abs
34
47
 
35
- num_dots.times do |i|
48
+ num_dots = ((w > h) ? w : h) / step
49
+ (num_dots + 1).times do |i|
36
50
  point(x1 + ((x2 - x1) / num_dots * i).to_i, y1 + ((y2 - y1) / num_dots * i).to_i)
37
51
  end
38
52
  end
39
53
 
40
54
  def to_xml
41
- template = open(File.dirname(__FILE__) + '/../../template/canvas.xib.erb').read
42
- XML::Document.string(ERB.new(template).result(binding))
55
+ XML::Document.string(render('canvas'), :options =>
56
+ XML::Parser::Options::NOENT | XML::Parser::Options::NOBLANKS)
57
+ end
58
+
59
+ private
60
+
61
+ def render_objects
62
+ id_offset = FIRST_ID
63
+ result = ''
64
+
65
+ @components.each do |component|
66
+ result += component.render_object(id_offset)
67
+ id_offset += component.num_objects
68
+ end
69
+
70
+ result
71
+ end
72
+
73
+ def render_object_records
74
+ obj_offset = FIRST_OBJ
75
+ id_offset = FIRST_ID
76
+ result = ''
77
+
78
+ @components.each do |component|
79
+ result += component.render_object_record(id_offset, obj_offset)
80
+ obj_offset += component.num_objects
81
+ id_offset += component.num_objects
82
+ end
83
+
84
+ result
43
85
  end
44
86
  end
45
87
  end
@@ -0,0 +1,69 @@
1
+ module Pimento
2
+ class Component
3
+ include Renderable
4
+
5
+ attr_reader :x, :y
6
+
7
+ @@klasses = {}
8
+
9
+ class << self
10
+ def handles(*types)
11
+ types.each do |type|
12
+ @@klasses[type] ||= []
13
+ @@klasses[type] << self
14
+ end
15
+ end
16
+
17
+ def for(type)
18
+ @@klasses[type][rand(@@klasses[type].length)]
19
+ end
20
+ end
21
+
22
+ def initialize(canvas, x, y)
23
+ @x = x
24
+ @y = y
25
+ @canvas = canvas
26
+ end
27
+
28
+ def num_objects
29
+ 2
30
+ end
31
+
32
+ def render_object(id_offset)
33
+ render(template_name('ro'), :id_offset => id_offset).to_s
34
+ end
35
+
36
+ def render_object_record(id_offset, obj_offset)
37
+ render('or_%i' % num_objects, :id_offset => id_offset, :obj_offset => obj_offset).to_s
38
+ end
39
+
40
+ def template_name(suffix)
41
+ basename = Util.underscore(self.class.to_s.split(/::/).last)
42
+ [basename, suffix].join('_')
43
+ end
44
+ end
45
+
46
+ class DotComponent < Component; end
47
+
48
+ class HorizontalLineComponent < Component
49
+ attr_accessor :width
50
+
51
+ def initialize(canvas, x, y, width)
52
+ super(canvas, x, y)
53
+ @width = width
54
+ end
55
+ end
56
+
57
+ class VerticalLineComponent < Component
58
+ attr_accessor :height
59
+
60
+ def initialize(canvas, x, y, height)
61
+ super(canvas, x, y)
62
+ @height = height
63
+ end
64
+ end
65
+ end
66
+
67
+ Dir[File.expand_path(File.dirname(__FILE__) + '/component/*.rb')].each do |file|
68
+ require file
69
+ end
@@ -0,0 +1,5 @@
1
+ module Pimento
2
+ class BevelButton < VerticalLineComponent
3
+ handles :vertical_line
4
+ end
5
+ end
@@ -0,0 +1,5 @@
1
+ module Pimento
2
+ class CheckBox < DotComponent
3
+ handles :dot
4
+ end
5
+ end
@@ -0,0 +1,7 @@
1
+ module Pimento
2
+ class CircularProgressIndicator < DotComponent
3
+ handles :dot
4
+
5
+ def num_objects; 1; end
6
+ end
7
+ end
@@ -0,0 +1,5 @@
1
+ module Pimento
2
+ class DisclosureButton < DotComponent
3
+ handles :dot
4
+ end
5
+ end
@@ -0,0 +1,5 @@
1
+ module Pimento
2
+ class DisclosureTriangle < DotComponent
3
+ handles :dot
4
+ end
5
+ end
@@ -0,0 +1,5 @@
1
+ module Pimento
2
+ class HelpButton < DotComponent
3
+ handles :dot
4
+ end
5
+ end
@@ -0,0 +1,5 @@
1
+ module Pimento
2
+ class HorizontalSlider < HorizontalLineComponent
3
+ handles :horizontal_line
4
+ end
5
+ end
@@ -0,0 +1,5 @@
1
+ module Pimento
2
+ class PopupButton < HorizontalLineComponent
3
+ handles :horizontal_line
4
+ end
5
+ end
@@ -0,0 +1,7 @@
1
+ module Pimento
2
+ class ProgressIndicator < HorizontalLineComponent
3
+ handles :horizontal_line
4
+
5
+ def num_objects; 1; end
6
+ end
7
+ end
@@ -0,0 +1,5 @@
1
+ module Pimento
2
+ class RoundButton < DotComponent
3
+ handles :dot
4
+ end
5
+ end
@@ -0,0 +1,5 @@
1
+ module Pimento
2
+ class RoundedRectButton < HorizontalLineComponent
3
+ handles :horizontal_line
4
+ end
5
+ end
@@ -0,0 +1,5 @@
1
+ module Pimento
2
+ class SearchField < HorizontalLineComponent
3
+ handles :horizontal_line
4
+ end
5
+ end
@@ -0,0 +1,5 @@
1
+ module Pimento
2
+ class VerticalSlider < VerticalLineComponent
3
+ handles :vertical_line
4
+ end
5
+ end