opine 0.0.4 → 0.0.5

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 CHANGED
@@ -1,15 +1,7 @@
1
1
  ---
2
- !binary "U0hBMQ==":
3
- metadata.gz: !binary |-
4
- ZGU3OTQ4Njg0MTE0NzViM2FiNDYwNTNhYWMxZWRkMjc2ZDFhMWFjYQ==
5
- data.tar.gz: !binary |-
6
- Y2Y1M2U1Y2I4MWM1MWRjZTk5NjcyMjJhODljZTNjNzM4Mjg2Mzk3MQ==
2
+ SHA1:
3
+ metadata.gz: 3e2d0320777408b9078bd739906370540a2e471b
4
+ data.tar.gz: 88c4f25bfea2f3d47057f893c27208ab59533112
7
5
  SHA512:
8
- metadata.gz: !binary |-
9
- ZWRmNDMyZmVmNjE5ZTI1ZTIxMmRlYTBmZDQ4NjQ0OTg0ZGM0ZDExY2MyNmU4
10
- MDg3NjllNTZjYzQyZTkxYzcyNWNkNDZiMjY2N2JkYTRhM2FkNmQ2MTI3YTU0
11
- MzgxMDM3ZjkzMmU0NGEwZmExNzU2MjQ2YzIyZjNjMmI0OTY1ZTY=
12
- data.tar.gz: !binary |-
13
- NWE3N2JmZTBkYzU4YzExZGZjMjk3NzdiYzlkNjJlZWYzM2IyN2Y1MTBlYzRi
14
- NTAwNGRiZWJjZjNlZjkxZDVmZGIxNjYyMzQ1YmQ3MmM5YjBkYzRiY2JiNDQx
15
- YjliZGFmZDg4ZGViODA4NjRjMjc5MmM0ZDM4OTkxMGY4M2Y1YmU=
6
+ metadata.gz: d133ab31c18fecae3f9e1e23b292f85502686c1ecd482875198497ae80f2e93d2b140c31d77fd5d75be6479fa7da7523f3a1c60074490530206443e2f6e35f87
7
+ data.tar.gz: 97e693017ba3de3a4d607bade2ea0bfdce270a83ad4a2abf72e54a383444725574890e269317bd9abb1c8417f1cacfe4abb536f41b3c97667de496a6230a0768
data/Gemfile CHANGED
@@ -1,17 +1,20 @@
1
1
  source "http://rubygems.org"
2
2
 
3
3
  if RUBY_PLATFORM =~ /darwin/
4
- gem 'cocoa', ">= 0.1.5"
4
+ gem 'cocoa', '>= 0.1.6'
5
5
  end
6
6
  gem 'cairo'
7
+ gem 'activesupport', '~> 4.0'
7
8
 
8
9
  group :development do
9
10
  gem 'opine', :path => '.' unless File.basename($0) == 'rake' && $*.first == 'gemspec'
10
11
  gem 'sqlite3'
11
12
  gem 'activerecord', '~> 4.0'
12
- gem 'activesupport', '~> 4.0'
13
13
 
14
14
  gem 'bacon'
15
+ gem 'mocha-on-bacon'
16
+ gem 'mocha'
17
+
15
18
  # gem "shoulda", ">= 0"
16
19
  gem "rdoc", "~> 3.12"
17
20
  gem "bundler", "~> 1.0"
data/VERSION CHANGED
@@ -1 +1 @@
1
- 0.0.4
1
+ 0.0.5
data/examples/table.rb ADDED
@@ -0,0 +1,32 @@
1
+ require 'opine'
2
+ require 'active_record'
3
+
4
+ ActiveRecord::Base.logger = Logger.new(STDERR)
5
+
6
+ ActiveRecord::Base.establish_connection(
7
+ :adapter => "sqlite3",
8
+ :database => ":memory:"
9
+ )
10
+
11
+ ActiveRecord::Schema.define do
12
+ create_table :records do |table|
13
+ table.column :name, :string
14
+ end
15
+ end
16
+
17
+ class Record < ActiveRecord::Base
18
+ end
19
+
20
+ (1..10).each do |i|
21
+ Record.create! :name => "Record #{i}"
22
+ end
23
+
24
+ Opine.app do
25
+ window :title => 'Table example' do
26
+ table Record.all, :columns => [:id, :name] do
27
+ on_select_row do |index|
28
+ puts "SELECTED ROW #{index}"
29
+ end
30
+ end
31
+ end
32
+ end
data/lib/opine.rb CHANGED
@@ -1,4 +1,6 @@
1
1
 
2
+ require 'active_support/core_ext/module/delegation'
3
+
2
4
  module Opine
3
5
  def self.platform
4
6
  @platform ||= case RUBY_PLATFORM
@@ -21,8 +23,10 @@ require 'cairo'
21
23
  module Opine::Native; end
22
24
  module Opine::Dark; end
23
25
 
26
+ require 'opine/rect'
27
+
24
28
  require 'opine/widget'
25
- [:application, :alert, :window].each do |widget|
29
+ [:application, :alert, :view, :window, :table].each do |widget|
26
30
  [:native, :dark].each do |theme|
27
31
  [
28
32
  "#{widget}",
data/lib/opine/rect.rb ADDED
@@ -0,0 +1,17 @@
1
+ class Opine::Rect
2
+ attr_accessor :x,:y,:width,:height
3
+
4
+ def initialize options
5
+ options.each do |key,value|
6
+ send("#{key}=".to_sym,value)
7
+ end
8
+ end
9
+
10
+ def native
11
+ Cocoa::NSRect.new(x: x, y: y, width: width, height: height)
12
+ end
13
+
14
+ def ==(other)
15
+ x == other.x && y == other.y && width = other.width && height == other.height
16
+ end
17
+ end
@@ -1,9 +1,21 @@
1
1
  class Opine::Application < Opine::Widget
2
- attr_accessor :application, :theme
2
+ attr_accessor :application
3
+
4
+ DEFAULTS = { :theme => :native }
5
+
6
+ def theme
7
+ @@theme
8
+ end
9
+ def theme= theme
10
+ @@theme = theme
11
+ end
12
+ def self.theme
13
+ @@theme
14
+ end
3
15
  end
4
16
 
5
17
  module Opine
6
- def self.app(options={ :theme => :native },&block)
7
- Application.new(options,&block)
18
+ def self.app(options={},&block)
19
+ Opine::Native::Application.new(Opine::Application::DEFAULTS.merge(options),&block)
8
20
  end
9
21
  end
@@ -1,5 +1,5 @@
1
1
 
2
- class Opine::Application < Opine::Widget
2
+ class Opine::Native::Application < Opine::Application
3
3
 
4
4
  class OSXApplication < Cocoa::NSObject
5
5
  attr_accessor :block, :application
@@ -0,0 +1,13 @@
1
+ class Opine::Table < Opine::Widget
2
+ attr_accessor :parent, :resources, :columns, :native
3
+
4
+ def on_select_row(&block)
5
+ hooks[:on_select_row] = block
6
+ end
7
+ end
8
+
9
+ class Opine::Window
10
+ def table(resources, options={}, &block)
11
+ "Opine::#{Opine::Application.theme.to_s.camelize}::Table".constantize.new(self,resources, options, &block)
12
+ end
13
+ end
@@ -0,0 +1,76 @@
1
+ class Opine::Native::Table < Opine::Table
2
+ delegate :hooks, :reload, :to => :native
3
+
4
+ class OSXTable < Cocoa::NSObject
5
+ attr_accessor :table_view, :hooks
6
+ def initialize parent,resources,options,&block
7
+ super()
8
+
9
+ @parent = parent
10
+ @resources = resources
11
+ @columns = options[:columns] || @resources.columns.map{ |col| col.name }
12
+ @hooks = {}
13
+
14
+ table_container = Cocoa::NSScrollView.alloc.initWithFrame parent.frame.native
15
+ @table_view = Cocoa::NSTableView.alloc.initWithFrame parent.frame.native
16
+
17
+ columns = @columns.map do |name|
18
+ col = Cocoa::NSTableColumn.alloc.initWithIdentifier name.to_s
19
+ col.headerCell.setTitle name.to_s.humanize
20
+ col.setWidth parent.frame.width / @columns.size
21
+ table_view.addTableColumn col
22
+ col
23
+ end
24
+
25
+ table_view.setDelegate self
26
+ table_view.setDataSource self
27
+ table_view.reloadData
28
+
29
+ table_container.setDocumentView table_view
30
+ table_container.setHasVerticalScroller true
31
+
32
+ if parent.is_a? Opine::Window
33
+ parent.content_view << table_container
34
+ end
35
+
36
+ table_container.setAutoresizingMask NSViewWidthSizable | NSViewHeightSizable
37
+
38
+ table_container.release
39
+ table_view.release
40
+ columns.each do |col|
41
+ col.release
42
+ end
43
+ end
44
+
45
+ def reload
46
+ @cache = @resources.to_a
47
+ table_view.reloadData
48
+ end
49
+
50
+ private
51
+ def cache
52
+ @cache ||= @resources.to_a
53
+ end
54
+
55
+ def numberOfRowsInTableView table_view
56
+ cache.size
57
+ end
58
+
59
+ def tableView(table_view, objectValueForTableColumn: nil, row: nil)
60
+ cache[row].send(objectValueForTableColumn.identifier.to_s.to_sym).to_s
61
+ end
62
+
63
+ def tableView(table_view, shouldSelectRow: nil)
64
+ hooks[:on_select_row].call(shouldSelectRow) if hooks[:on_select_row]
65
+ true
66
+ end
67
+ end
68
+
69
+ def initialize window,resources,options,&block
70
+ @parent = parent
71
+ @resources = resources
72
+ @resources = @resources.to_s.singularize.classify.constantize.all if @resources.is_a?(Symbol)
73
+ @native = OSXTable.new(window,@resources,options,&block)
74
+ instance_eval(&block) if block
75
+ end
76
+ end
@@ -0,0 +1,9 @@
1
+ class Opine::View < Opine::Widget
2
+ attr_accessor :view
3
+ def initialize view
4
+ @view = view
5
+ end
6
+ def << whatever
7
+ view.addSubview whatever
8
+ end
9
+ end
@@ -1,9 +1,15 @@
1
1
  class Opine::Window < Opine::Widget
2
- attr_accessor :window, :title
2
+ attr_accessor :window, :title, :content_view, :frame
3
+ delegate :x, :y, :width, :height, :x=, :y=, :width=, :height=, :to => :frame
4
+
5
+ DEFAULTS = {
6
+ :title => 'ruby',
7
+ :frame => Opine::Rect.new(x: 0, y: 0, width: 320, height: 240)
8
+ }
3
9
  end
4
10
 
5
11
  class Opine::Application
6
- def window(options={ :title => 'ruby' },&block)
7
- "Opine::#{theme.to_s.camelize}::Window".constantize.new(options,&block)
12
+ def window(options={},&block)
13
+ "Opine::#{theme.to_s.camelize}::Window".constantize.new(Opine::Window::DEFAULTS.merge(options),&block)
8
14
  end
9
15
  end
@@ -1,3 +1,4 @@
1
+ class Opine::Dark::Window < Opine::Native::Window
1
2
 
2
3
  class TitleView < Cocoa::NSView
3
4
  def drawRect rect
@@ -87,14 +88,12 @@
87
88
  end
88
89
  end
89
90
 
90
- class Opine::Dark::Window < Opine::Native::Window
91
91
  def initialize(options,&block)
92
92
  super do |win|
93
93
  win.window.setOpaque false
94
94
  win.window.setHasShadow true
95
95
 
96
- height = window.frame[:size][:height]
97
- view = TitleView.alloc.initWithFrame NSRect.new(x: 0, y: height-22, width: 200, height: 22)
96
+ view = TitleView.alloc.initWithFrame NSRect.new(x: frame.x, y: frame.height-22, width: frame.width, height: 22)
98
97
  window.contentView.addSubview view
99
98
  view.setAutoresizingMask(NSViewWidthSizable | NSViewHeightSizable)
100
99
 
@@ -1,7 +1,7 @@
1
1
 
2
2
  class Opine::Native::Window < Opine::Window
3
3
  def initialize(options,&block)
4
- @window = Cocoa::NSWindow.alloc.initWithContentRect(NSRect.new(x: 0, y: 0, width: 200, height: 200),
4
+ @window = Cocoa::NSWindow.alloc.initWithContentRect(options[:frame].native,
5
5
  styleMask: native_style,
6
6
  backing: NSBackingStoreBuffered,
7
7
  defer: false)
@@ -15,7 +15,10 @@ class Opine::Native::Window < Opine::Window
15
15
  point[:y] = 220.0
16
16
  window.cascadeTopLeftFromPoint point
17
17
 
18
+ @content_view = Opine::View.new(window.contentView)
19
+
18
20
  instance_eval(&block) if block
21
+
19
22
  window.makeKeyAndOrderFront nil
20
23
  end
21
24
 
data/opine.gemspec CHANGED
@@ -2,16 +2,16 @@
2
2
  # DO NOT EDIT THIS FILE DIRECTLY
3
3
  # Instead, edit Jeweler::Tasks in Rakefile, and run 'rake gemspec'
4
4
  # -*- encoding: utf-8 -*-
5
- # stub: opine 0.0.4 ruby lib
5
+ # stub: opine 0.0.5 ruby lib
6
6
 
7
7
  Gem::Specification.new do |s|
8
8
  s.name = "opine"
9
- s.version = "0.0.4"
9
+ s.version = "0.0.5"
10
10
 
11
11
  s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
12
12
  s.require_paths = ["lib"]
13
13
  s.authors = ["Patrick Hanevold"]
14
- s.date = "2014-04-11"
14
+ s.date = "2014-04-13"
15
15
  s.description = "A ruby widget toolkit for everyone and every computer"
16
16
  s.email = "patrick.hanevold@gmail.com"
17
17
  s.extra_rdoc_files = [
@@ -25,63 +25,77 @@ Gem::Specification.new do |s|
25
25
  "Rakefile",
26
26
  "VERSION",
27
27
  "examples/hello_world.rb",
28
+ "examples/table.rb",
28
29
  "examples/themed_window.rb",
29
30
  "examples/window.rb",
30
31
  "lib/opine.rb",
32
+ "lib/opine/rect.rb",
31
33
  "lib/opine/widget.rb",
32
34
  "lib/opine/widgets/alert.rb",
33
35
  "lib/opine/widgets/application.rb",
34
36
  "lib/opine/widgets/application_osx.rb",
37
+ "lib/opine/widgets/table.rb",
38
+ "lib/opine/widgets/table_osx.rb",
39
+ "lib/opine/widgets/view_osx.rb",
35
40
  "lib/opine/widgets/window.rb",
36
41
  "lib/opine/widgets/window_dark.rb",
37
42
  "lib/opine/widgets/window_osx.rb",
38
43
  "opine.gemspec",
39
44
  "spec/opine/opine_spec.rb",
45
+ "spec/opine/widgets/application_spec.rb",
46
+ "spec/opine/widgets/table_spec.rb",
47
+ "spec/opine/widgets/window_spec.rb",
40
48
  "spec/spec_helper.rb",
41
49
  "tasks/bacon.rake",
42
50
  "tasks/setup.rake"
43
51
  ]
44
52
  s.homepage = "http://github.com/patrickhno/opine"
45
53
  s.licenses = ["MIT"]
46
- s.rubygems_version = "2.2.2"
54
+ s.rubygems_version = "2.2.0"
47
55
  s.summary = "Ruby widget toolkit"
48
56
 
49
57
  if s.respond_to? :specification_version then
50
58
  s.specification_version = 4
51
59
 
52
60
  if Gem::Version.new(Gem::VERSION) >= Gem::Version.new('1.2.0') then
53
- s.add_runtime_dependency(%q<cocoa>, [">= 0.1.5"])
61
+ s.add_runtime_dependency(%q<cocoa>, [">= 0.1.6"])
54
62
  s.add_runtime_dependency(%q<cairo>, [">= 0"])
63
+ s.add_runtime_dependency(%q<activesupport>, ["~> 4.0"])
55
64
  s.add_development_dependency(%q<opine>, [">= 0"])
56
65
  s.add_development_dependency(%q<sqlite3>, [">= 0"])
57
66
  s.add_development_dependency(%q<activerecord>, ["~> 4.0"])
58
- s.add_development_dependency(%q<activesupport>, ["~> 4.0"])
59
67
  s.add_development_dependency(%q<bacon>, [">= 0"])
68
+ s.add_development_dependency(%q<mocha-on-bacon>, [">= 0"])
69
+ s.add_development_dependency(%q<mocha>, [">= 0"])
60
70
  s.add_development_dependency(%q<rdoc>, ["~> 3.12"])
61
71
  s.add_development_dependency(%q<bundler>, ["~> 1.0"])
62
72
  s.add_development_dependency(%q<jeweler>, ["~> 2.0"])
63
73
  s.add_development_dependency(%q<simplecov>, [">= 0"])
64
74
  else
65
- s.add_dependency(%q<cocoa>, [">= 0.1.5"])
75
+ s.add_dependency(%q<cocoa>, [">= 0.1.6"])
66
76
  s.add_dependency(%q<cairo>, [">= 0"])
77
+ s.add_dependency(%q<activesupport>, ["~> 4.0"])
67
78
  s.add_dependency(%q<opine>, [">= 0"])
68
79
  s.add_dependency(%q<sqlite3>, [">= 0"])
69
80
  s.add_dependency(%q<activerecord>, ["~> 4.0"])
70
- s.add_dependency(%q<activesupport>, ["~> 4.0"])
71
81
  s.add_dependency(%q<bacon>, [">= 0"])
82
+ s.add_dependency(%q<mocha-on-bacon>, [">= 0"])
83
+ s.add_dependency(%q<mocha>, [">= 0"])
72
84
  s.add_dependency(%q<rdoc>, ["~> 3.12"])
73
85
  s.add_dependency(%q<bundler>, ["~> 1.0"])
74
86
  s.add_dependency(%q<jeweler>, ["~> 2.0"])
75
87
  s.add_dependency(%q<simplecov>, [">= 0"])
76
88
  end
77
89
  else
78
- s.add_dependency(%q<cocoa>, [">= 0.1.5"])
90
+ s.add_dependency(%q<cocoa>, [">= 0.1.6"])
79
91
  s.add_dependency(%q<cairo>, [">= 0"])
92
+ s.add_dependency(%q<activesupport>, ["~> 4.0"])
80
93
  s.add_dependency(%q<opine>, [">= 0"])
81
94
  s.add_dependency(%q<sqlite3>, [">= 0"])
82
95
  s.add_dependency(%q<activerecord>, ["~> 4.0"])
83
- s.add_dependency(%q<activesupport>, ["~> 4.0"])
84
96
  s.add_dependency(%q<bacon>, [">= 0"])
97
+ s.add_dependency(%q<mocha-on-bacon>, [">= 0"])
98
+ s.add_dependency(%q<mocha>, [">= 0"])
85
99
  s.add_dependency(%q<rdoc>, ["~> 3.12"])
86
100
  s.add_dependency(%q<bundler>, ["~> 1.0"])
87
101
  s.add_dependency(%q<jeweler>, ["~> 2.0"])
@@ -0,0 +1,14 @@
1
+ require_relative '../../spec_helper'
2
+ require 'opine'
3
+
4
+ describe 'Application' do |t|
5
+ it 'should have default parameters' do
6
+ Opine::Native::Application.expects(:new).with(:theme => :native)
7
+ Opine.app
8
+ end
9
+
10
+ it 'should override default parameters' do
11
+ Opine::Native::Application.expects(:new).with(:theme => :custom)
12
+ Opine.app :theme => :custom
13
+ end
14
+ end
@@ -0,0 +1,23 @@
1
+ require_relative '../../spec_helper'
2
+ require 'opine'
3
+
4
+ describe 'Table' do |t|
5
+ it 'should pass parameters' do
6
+ Opine::Application.new(:theme => :native).window do
7
+ Opine::Native::Table.expects(:new).with(self,{:columns => [:a, :b]},{})
8
+ table(:columns => [:a, :b])
9
+ end
10
+ end
11
+
12
+ it 'should accept hooks' do
13
+ records = mock('Records')
14
+ records.expects(:to_a).returns([])
15
+ Opine::Application.new(:theme => :native).window do
16
+ table(records, :columns => [:a, :b]) do
17
+ on_select_row do |i|
18
+ end
19
+ hooks[:on_select_row].class.should == Proc
20
+ end
21
+ end
22
+ end
23
+ end
@@ -0,0 +1,29 @@
1
+ require_relative '../../spec_helper'
2
+ require 'opine'
3
+
4
+ describe 'Window' do |t|
5
+ window = Opine::Window.new(:frame => Opine::Rect.new(x: 0, y: 0, width: 0, height: 0))
6
+
7
+ it 'should delegate to frame' do
8
+ window.x = 1
9
+ window.y = 2
10
+ window.width = 3
11
+ window.height = 4
12
+ window.frame.should == Opine::Rect.new(x: 1, y: 2, width: 3, height: 4)
13
+ window.frame = Opine::Rect.new(x: 5, y: 6, width: 7, height: 8)
14
+ window.x.should == 5
15
+ window.y.should == 6
16
+ window.width.should == 7
17
+ window.height.should == 8
18
+ end
19
+
20
+ it 'should have default parameters' do
21
+ Opine::Native::Window.expects(:new).with(:title => 'ruby', :frame => Opine::Rect.new(x: 0, y: 0, width: 320, height: 240))
22
+ Opine::Application.new(:theme => :native).window
23
+ end
24
+
25
+ it 'should override default parameters' do
26
+ Opine::Native::Window.expects(:new).with(:title => 'Yes it does', :frame => Opine::Rect.new(x: 0, y: 0, width: 320, height: 240))
27
+ Opine::Application.new(:theme => :native).window(:title => 'Yes it does')
28
+ end
29
+ end
data/spec/spec_helper.rb CHANGED
@@ -1,3 +1,4 @@
1
1
  $: << File.expand_path(File.join(File.dirname(__FILE__), '/../lib'))
2
2
 
3
3
  require 'bacon'
4
+ require 'mocha-on-bacon'
metadata CHANGED
@@ -1,167 +1,195 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: opine
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.4
4
+ version: 0.0.5
5
5
  platform: ruby
6
6
  authors:
7
7
  - Patrick Hanevold
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2014-04-11 00:00:00.000000000 Z
11
+ date: 2014-04-13 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: cocoa
15
15
  requirement: !ruby/object:Gem::Requirement
16
16
  requirements:
17
- - - ! '>='
17
+ - - ">="
18
18
  - !ruby/object:Gem::Version
19
- version: 0.1.5
19
+ version: 0.1.6
20
20
  type: :runtime
21
21
  prerelease: false
22
22
  version_requirements: !ruby/object:Gem::Requirement
23
23
  requirements:
24
- - - ! '>='
24
+ - - ">="
25
25
  - !ruby/object:Gem::Version
26
- version: 0.1.5
26
+ version: 0.1.6
27
27
  - !ruby/object:Gem::Dependency
28
28
  name: cairo
29
29
  requirement: !ruby/object:Gem::Requirement
30
30
  requirements:
31
- - - ! '>='
31
+ - - ">="
32
32
  - !ruby/object:Gem::Version
33
33
  version: '0'
34
34
  type: :runtime
35
35
  prerelease: false
36
36
  version_requirements: !ruby/object:Gem::Requirement
37
37
  requirements:
38
- - - ! '>='
38
+ - - ">="
39
39
  - !ruby/object:Gem::Version
40
40
  version: '0'
41
+ - !ruby/object:Gem::Dependency
42
+ name: activesupport
43
+ requirement: !ruby/object:Gem::Requirement
44
+ requirements:
45
+ - - "~>"
46
+ - !ruby/object:Gem::Version
47
+ version: '4.0'
48
+ type: :runtime
49
+ prerelease: false
50
+ version_requirements: !ruby/object:Gem::Requirement
51
+ requirements:
52
+ - - "~>"
53
+ - !ruby/object:Gem::Version
54
+ version: '4.0'
41
55
  - !ruby/object:Gem::Dependency
42
56
  name: opine
43
57
  requirement: !ruby/object:Gem::Requirement
44
58
  requirements:
45
- - - ! '>='
59
+ - - ">="
46
60
  - !ruby/object:Gem::Version
47
61
  version: '0'
48
62
  type: :development
49
63
  prerelease: false
50
64
  version_requirements: !ruby/object:Gem::Requirement
51
65
  requirements:
52
- - - ! '>='
66
+ - - ">="
53
67
  - !ruby/object:Gem::Version
54
68
  version: '0'
55
69
  - !ruby/object:Gem::Dependency
56
70
  name: sqlite3
57
71
  requirement: !ruby/object:Gem::Requirement
58
72
  requirements:
59
- - - ! '>='
73
+ - - ">="
60
74
  - !ruby/object:Gem::Version
61
75
  version: '0'
62
76
  type: :development
63
77
  prerelease: false
64
78
  version_requirements: !ruby/object:Gem::Requirement
65
79
  requirements:
66
- - - ! '>='
80
+ - - ">="
67
81
  - !ruby/object:Gem::Version
68
82
  version: '0'
69
83
  - !ruby/object:Gem::Dependency
70
84
  name: activerecord
71
85
  requirement: !ruby/object:Gem::Requirement
72
86
  requirements:
73
- - - ~>
87
+ - - "~>"
74
88
  - !ruby/object:Gem::Version
75
89
  version: '4.0'
76
90
  type: :development
77
91
  prerelease: false
78
92
  version_requirements: !ruby/object:Gem::Requirement
79
93
  requirements:
80
- - - ~>
94
+ - - "~>"
81
95
  - !ruby/object:Gem::Version
82
96
  version: '4.0'
83
97
  - !ruby/object:Gem::Dependency
84
- name: activesupport
98
+ name: bacon
85
99
  requirement: !ruby/object:Gem::Requirement
86
100
  requirements:
87
- - - ~>
101
+ - - ">="
88
102
  - !ruby/object:Gem::Version
89
- version: '4.0'
103
+ version: '0'
90
104
  type: :development
91
105
  prerelease: false
92
106
  version_requirements: !ruby/object:Gem::Requirement
93
107
  requirements:
94
- - - ~>
108
+ - - ">="
95
109
  - !ruby/object:Gem::Version
96
- version: '4.0'
110
+ version: '0'
97
111
  - !ruby/object:Gem::Dependency
98
- name: bacon
112
+ name: mocha-on-bacon
113
+ requirement: !ruby/object:Gem::Requirement
114
+ requirements:
115
+ - - ">="
116
+ - !ruby/object:Gem::Version
117
+ version: '0'
118
+ type: :development
119
+ prerelease: false
120
+ version_requirements: !ruby/object:Gem::Requirement
121
+ requirements:
122
+ - - ">="
123
+ - !ruby/object:Gem::Version
124
+ version: '0'
125
+ - !ruby/object:Gem::Dependency
126
+ name: mocha
99
127
  requirement: !ruby/object:Gem::Requirement
100
128
  requirements:
101
- - - ! '>='
129
+ - - ">="
102
130
  - !ruby/object:Gem::Version
103
131
  version: '0'
104
132
  type: :development
105
133
  prerelease: false
106
134
  version_requirements: !ruby/object:Gem::Requirement
107
135
  requirements:
108
- - - ! '>='
136
+ - - ">="
109
137
  - !ruby/object:Gem::Version
110
138
  version: '0'
111
139
  - !ruby/object:Gem::Dependency
112
140
  name: rdoc
113
141
  requirement: !ruby/object:Gem::Requirement
114
142
  requirements:
115
- - - ~>
143
+ - - "~>"
116
144
  - !ruby/object:Gem::Version
117
145
  version: '3.12'
118
146
  type: :development
119
147
  prerelease: false
120
148
  version_requirements: !ruby/object:Gem::Requirement
121
149
  requirements:
122
- - - ~>
150
+ - - "~>"
123
151
  - !ruby/object:Gem::Version
124
152
  version: '3.12'
125
153
  - !ruby/object:Gem::Dependency
126
154
  name: bundler
127
155
  requirement: !ruby/object:Gem::Requirement
128
156
  requirements:
129
- - - ~>
157
+ - - "~>"
130
158
  - !ruby/object:Gem::Version
131
159
  version: '1.0'
132
160
  type: :development
133
161
  prerelease: false
134
162
  version_requirements: !ruby/object:Gem::Requirement
135
163
  requirements:
136
- - - ~>
164
+ - - "~>"
137
165
  - !ruby/object:Gem::Version
138
166
  version: '1.0'
139
167
  - !ruby/object:Gem::Dependency
140
168
  name: jeweler
141
169
  requirement: !ruby/object:Gem::Requirement
142
170
  requirements:
143
- - - ~>
171
+ - - "~>"
144
172
  - !ruby/object:Gem::Version
145
173
  version: '2.0'
146
174
  type: :development
147
175
  prerelease: false
148
176
  version_requirements: !ruby/object:Gem::Requirement
149
177
  requirements:
150
- - - ~>
178
+ - - "~>"
151
179
  - !ruby/object:Gem::Version
152
180
  version: '2.0'
153
181
  - !ruby/object:Gem::Dependency
154
182
  name: simplecov
155
183
  requirement: !ruby/object:Gem::Requirement
156
184
  requirements:
157
- - - ! '>='
185
+ - - ">="
158
186
  - !ruby/object:Gem::Version
159
187
  version: '0'
160
188
  type: :development
161
189
  prerelease: false
162
190
  version_requirements: !ruby/object:Gem::Requirement
163
191
  requirements:
164
- - - ! '>='
192
+ - - ">="
165
193
  - !ruby/object:Gem::Version
166
194
  version: '0'
167
195
  description: A ruby widget toolkit for everyone and every computer
@@ -178,18 +206,26 @@ files:
178
206
  - Rakefile
179
207
  - VERSION
180
208
  - examples/hello_world.rb
209
+ - examples/table.rb
181
210
  - examples/themed_window.rb
182
211
  - examples/window.rb
183
212
  - lib/opine.rb
213
+ - lib/opine/rect.rb
184
214
  - lib/opine/widget.rb
185
215
  - lib/opine/widgets/alert.rb
186
216
  - lib/opine/widgets/application.rb
187
217
  - lib/opine/widgets/application_osx.rb
218
+ - lib/opine/widgets/table.rb
219
+ - lib/opine/widgets/table_osx.rb
220
+ - lib/opine/widgets/view_osx.rb
188
221
  - lib/opine/widgets/window.rb
189
222
  - lib/opine/widgets/window_dark.rb
190
223
  - lib/opine/widgets/window_osx.rb
191
224
  - opine.gemspec
192
225
  - spec/opine/opine_spec.rb
226
+ - spec/opine/widgets/application_spec.rb
227
+ - spec/opine/widgets/table_spec.rb
228
+ - spec/opine/widgets/window_spec.rb
193
229
  - spec/spec_helper.rb
194
230
  - tasks/bacon.rake
195
231
  - tasks/setup.rake
@@ -203,17 +239,17 @@ require_paths:
203
239
  - lib
204
240
  required_ruby_version: !ruby/object:Gem::Requirement
205
241
  requirements:
206
- - - ! '>='
242
+ - - ">="
207
243
  - !ruby/object:Gem::Version
208
244
  version: '0'
209
245
  required_rubygems_version: !ruby/object:Gem::Requirement
210
246
  requirements:
211
- - - ! '>='
247
+ - - ">="
212
248
  - !ruby/object:Gem::Version
213
249
  version: '0'
214
250
  requirements: []
215
251
  rubyforge_project:
216
- rubygems_version: 2.2.2
252
+ rubygems_version: 2.2.0
217
253
  signing_key:
218
254
  specification_version: 4
219
255
  summary: Ruby widget toolkit