opine 0.0.2

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml ADDED
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA1:
3
+ metadata.gz: b92c3b5183dfb778de5b03d32281df6730d3361c
4
+ data.tar.gz: 263620d873835f27de952410cdb6309330383b87
5
+ SHA512:
6
+ metadata.gz: 46a768038693960fd6238ee6d19d1d19cc2030f08ab72726039eeb3f18cab8cd26260f3ac7726bec9c84fcdb2f5758e4836e01bec4fc9d193b0453fdcc2965cc
7
+ data.tar.gz: a6eac6adf8dd2479449005927418990a29fc4c2e9b2f6f896352fec4c1056dc552fcff7c5e97f71dc156c57de0e687539a7661a05136e5f96d6cb272548cf33e
data/Gemfile ADDED
@@ -0,0 +1,19 @@
1
+ source "http://rubygems.org"
2
+
3
+ if RUBY_PLATFORM =~ /darwin/
4
+ gem 'cocoa', :path => '../cocoa'
5
+ end
6
+ gem 'cairo' #, :path => '../rcairo'
7
+
8
+ group :development do
9
+ gem 'sqlite3'
10
+ gem 'activerecord', '~> 4.0.4'
11
+ gem 'activesupport', '~> 4.0.4'
12
+
13
+ gem 'bacon'
14
+ # gem "shoulda", ">= 0"
15
+ gem "rdoc", "~> 3.12"
16
+ gem "bundler", "~> 1.0"
17
+ gem "jeweler", "~> 2.0.1"
18
+ gem "simplecov", ">= 0"
19
+ end
data/LICENSE ADDED
@@ -0,0 +1,21 @@
1
+ The MIT License (MIT)
2
+
3
+ Copyright (c) 2014 Patrick Hanevold
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in all
13
+ copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
+ SOFTWARE.
data/README.md ADDED
@@ -0,0 +1,22 @@
1
+ opine
2
+ =====
3
+
4
+ A pure ruby soon to be cross platform widget toolkit.
5
+
6
+ ### Installation
7
+
8
+ ```
9
+ gem install opine
10
+ ```
11
+
12
+ ### Usage
13
+
14
+ ```ruby
15
+ require 'opine'
16
+
17
+ Opine.app do
18
+ alert "Hello world!"
19
+ end
20
+ ```
21
+
22
+ ![alt tag](https://raw.githubusercontent.com/patrickhno/cocoa/gh-pages/hello_world.png)
data/Rakefile ADDED
@@ -0,0 +1,36 @@
1
+ # encoding: utf-8
2
+
3
+ PROJECT_SPECS = FileList['spec/**/*_spec.rb']
4
+
5
+ require 'jeweler'
6
+ Jeweler::Tasks.new do |gem|
7
+ gem.name = "opine"
8
+ gem.homepage = "http://github.com/patrickhno/opine"
9
+ gem.license = "MIT"
10
+ gem.summary = %Q{Ruby widget toolkit}
11
+ gem.description = %Q{A ruby widget toolkit for everyone and every computer}
12
+ gem.email = "patrick.hanevold@gmail.com"
13
+ gem.authors = ["Patrick Hanevold"]
14
+ # dependencies defined in Gemfile
15
+ end
16
+ Jeweler::RubygemsDotOrgTasks.new
17
+
18
+ desc "Code coverage detail"
19
+ task :simplecov do
20
+ ENV['COVERAGE'] = "true"
21
+ Rake::Task['bacon'].execute
22
+ end
23
+
24
+ require 'rdoc/task'
25
+ Rake::RDocTask.new do |rdoc|
26
+ version = File.exist?('VERSION') ? File.read('VERSION') : ""
27
+
28
+ rdoc.rdoc_dir = 'rdoc'
29
+ rdoc.title = "Opine #{version}"
30
+ rdoc.rdoc_files.include('README*')
31
+ rdoc.rdoc_files.include('lib/**/*.rb')
32
+ end
33
+
34
+ Dir['tasks/*.rake'].each{|f| import(f) }
35
+
36
+ task :default => [:bacon]
data/VERSION ADDED
@@ -0,0 +1 @@
1
+ 0.0.2
@@ -0,0 +1,5 @@
1
+ require 'opine'
2
+
3
+ Opine.app do
4
+ alert "Hello world!"
5
+ end
@@ -0,0 +1,5 @@
1
+ require 'opine'
2
+
3
+ Opine.app do
4
+ window
5
+ end
data/lib/opine.rb ADDED
@@ -0,0 +1,34 @@
1
+
2
+ module Opine
3
+ def self.platform
4
+ @platform ||= case RUBY_PLATFORM
5
+ when /darwin/
6
+ :osx
7
+ when /linux/
8
+ :gtk
9
+ when /win/
10
+ :win
11
+ end
12
+ end
13
+ def self.theme
14
+ :dark
15
+ end
16
+ end
17
+
18
+ case Opine.platform
19
+ when :osx
20
+ require 'cocoa'
21
+ end
22
+ require 'cairo'
23
+
24
+ require 'opine/widget'
25
+ [:application, :alert, :window].each do |widget|
26
+ [
27
+ "#{widget}",
28
+ "#{widget}_#{Opine.platform}",
29
+ "#{widget}_#{Opine.theme}",
30
+ "#{widget}_#{Opine.theme}_#{Opine.platform}"
31
+ ].each do |name|
32
+ require "opine/widgets/#{name}" if File.exists?(File.dirname(__FILE__) + "/opine/widgets/#{name}.rb")
33
+ end
34
+ end
@@ -0,0 +1,3 @@
1
+ class Opine::Widget
2
+ include Cocoa if Opine.platform == :osx
3
+ end
@@ -0,0 +1,8 @@
1
+ class Opine::Application
2
+ def alert text
3
+ application.activateIgnoringOtherApps true
4
+ alert = Cocoa::NSAlert.alloc.init.autorelease
5
+ alert.setMessageText text
6
+ alert.runModal
7
+ end
8
+ end
@@ -0,0 +1,56 @@
1
+ class MyApplication < Cocoa::NSObject
2
+ attr_accessor :block, :application
3
+
4
+ def applicationDidFinishLaunching notification
5
+ menubar = NSMenu.new.autorelease
6
+ app_menu_item = NSMenuItem.new.autorelease
7
+ menubar.addItem app_menu_item
8
+ application.setMainMenu menubar
9
+
10
+ app_menu = NSMenu.new.autorelease
11
+ quit_menu_item = NSMenuItem.alloc.initWithTitle("Quit",
12
+ action: :terminate,
13
+ keyEquivalent: 'q'
14
+ ).autorelease
15
+ app_menu.addItem quit_menu_item
16
+ app_menu_item.setSubmenu app_menu
17
+
18
+ application.activateIgnoringOtherApps true
19
+
20
+ block.call if block
21
+ end
22
+ end
23
+
24
+ class Opine::Application
25
+ attr_accessor :application
26
+ def initialize(&block)
27
+ Cocoa::NSAutoreleasePool.new
28
+ @application = Cocoa::NSApplication.sharedApplication
29
+ application.setActivationPolicy Cocoa::NSApplicationActivationPolicyRegular
30
+
31
+ @appDelegate = MyApplication.alloc.init.autorelease
32
+ @appDelegate.application = application
33
+ @appDelegate.block = ->() do
34
+ instance_eval(&block) if block
35
+ end
36
+ application.setDelegate @appDelegate
37
+ application.run
38
+ end
39
+
40
+ def running?
41
+ application.isRunning
42
+ end
43
+
44
+ def terminate
45
+ @application.terminate @application
46
+ end
47
+ def stop
48
+ @application.stop @application
49
+ end
50
+ end
51
+
52
+ module Opine
53
+ def self.app(&block)
54
+ Application.new(&block)
55
+ end
56
+ end
@@ -0,0 +1,118 @@
1
+
2
+ class MyView < Cocoa::NSView
3
+ def drawRect rect
4
+ width = frame[:size][:width]
5
+ height = frame[:size][:height]
6
+
7
+ # rounded corners
8
+ NSColor.clearColor.set
9
+ NSRectFill(NSMakeRect(0, height-1, 4, 1))
10
+ NSRectFill(NSMakeRect(0, height-2, 2, 1))
11
+ NSRectFill(NSMakeRect(0, height-4, 1, 2))
12
+ NSRectFill(NSMakeRect(width-4, height-1, 4, 1))
13
+ NSRectFill(NSMakeRect(width-2, height-2, 2, 1))
14
+ NSRectFill(NSMakeRect(width-1, height-4, 1, 2))
15
+
16
+ # NSRectFill(NSMakeRect(fw - 2, 22, 2, 1))
17
+ # NSRectFill(NSMakeRect(fw - 1, 21, 1, 1))
18
+
19
+ context = NSGraphicsContext.currentContext.graphicsPort
20
+
21
+ Cocoa::CGContextTranslateCTM(context, 0.0, rect[:size][:height])
22
+ Cocoa::CGContextScaleCTM(context, 1.0, -1.0)
23
+
24
+ Cairo::QuartzSurface.new(context, rect[:size][:width], rect[:size][:height]) do |surface|
25
+ cr = Cairo::Context.new(surface)
26
+ cr.push_group
27
+
28
+ # clip path
29
+ cr.move_to(0, height)
30
+ cr.line_to(0, 5)
31
+ cr.curve_to(0, 2, 2, 0, 5, 0)
32
+ cr.line_to(width-5, 0)
33
+ cr.curve_to(width-2, 0, width, 2, width, 5)
34
+ cr.line_to(width, height)
35
+ cr.clip
36
+ cr.new_path
37
+
38
+ # gradients in heading
39
+ pat = Cairo::LinearPattern.new(0.0, 0.0, 0.0, height/2.0)
40
+ pat.add_color_stop(0, 0.0, 0.0, 0.0)
41
+ pat.add_color_stop(1, 0.2, 0.2, 0.2)
42
+ cr.rectangle(0, 0, width, (height/2.0))
43
+ cr.set_source(pat)
44
+ cr.fill
45
+
46
+ pat = Cairo::LinearPattern.new(0.0, 0.0, 0.0, height/2.0)
47
+ pat.add_color_stop(0, :black)
48
+ pat.add_color_stop(1, :black)
49
+ cr.rectangle(0, height/2.0-1, width, height/2.0)
50
+ cr.set_source(pat)
51
+ cr.fill
52
+
53
+ # specular rim
54
+ cr.set_source_color([0.4,0.4,0.4])
55
+ cr.set_line_width(3)
56
+
57
+ cr.move_to(0, 5)
58
+ cr.curve_to(0, 2, 2, 0, 5, 0)
59
+ cr.line_to(width-5, 0)
60
+ cr.curve_to(width-2, 0, width, 2, width, 5)
61
+ cr.stroke
62
+
63
+ # outer rim
64
+ cr.set_source_color(:black)
65
+ cr.set_line_width(2)
66
+
67
+ cr.move_to(0, height-1)
68
+ cr.line_to(0, 5)
69
+ cr.curve_to(0, 2, 2, 0, 5, 0)
70
+ cr.line_to(width-5, 0)
71
+ cr.curve_to(width-2, 0, width, 2, width, 5)
72
+ cr.line_to(width, height-1)
73
+ cr.stroke
74
+
75
+ cr.pop_group_to_source
76
+ cr.paint
77
+ end
78
+ end
79
+
80
+ def mouseDragged theEvent
81
+ origin = window.frame[:origin]
82
+ window.setFrameOrigin NSMakePoint(origin[:x] + theEvent.deltaX, origin[:y] - theEvent.deltaY)
83
+ end
84
+
85
+ def isOpaque
86
+ true
87
+ end
88
+ end
89
+
90
+ module Opine
91
+ module Dark
92
+ class Window < Opine::Window
93
+ def initialize(&block)
94
+ super do |win|
95
+ win.window.setOpaque false
96
+ win.window.setHasShadow true
97
+
98
+ height = window.frame[:size][:height]
99
+ view = MyView.alloc.initWithFrame NSRect.new(x: 0, y: height-22, width: 200, height: 22)
100
+ window.contentView.addSubview view
101
+ view.setAutoresizingMask(NSViewWidthSizable | NSViewHeightSizable)
102
+
103
+ instance_eval(&block) if block
104
+ end
105
+ end
106
+ def native_style
107
+ NSResizableWindowMask | NSClosableWindowMask | NSMiniaturizableWindowMask
108
+ end
109
+ end
110
+ end
111
+ end
112
+
113
+
114
+ class Opine::Application
115
+ def window(&block)
116
+ Opine::Dark::Window.new(&block)
117
+ end
118
+ end
@@ -0,0 +1,44 @@
1
+ class Opine::Window < Opine::Widget
2
+ attr_accessor :window, :title
3
+ def initialize(&block)
4
+ @block = block
5
+
6
+ @window = Cocoa::NSWindow.alloc.initWithContentRect(NSRect.new(x: 0, y: 0, width: 200, height: 200),
7
+ styleMask: native_style,
8
+ backing: NSBackingStoreBuffered,
9
+ defer: false)
10
+ window.setMinSize NSSize.new(width: 200, height: 200)
11
+
12
+ point = CGPoint.new
13
+ point[:x] = 120.0
14
+ point[:y] = 220.0
15
+ window.cascadeTopLeftFromPoint point
16
+ self.title = 'Test app'
17
+
18
+ instance_eval(&block) if block
19
+
20
+ window.makeKeyAndOrderFront nil
21
+ end
22
+
23
+ def native_style
24
+ NSTitledWindowMask | NSResizableWindowMask | NSClosableWindowMask | NSMiniaturizableWindowMask
25
+ end
26
+
27
+ def canBecomeKeyWindow
28
+ true
29
+ end
30
+
31
+ def title= name
32
+ window.setTitle name
33
+ end
34
+
35
+ def visible?
36
+ window.isVisible
37
+ end
38
+ end
39
+
40
+ class Opine::Application
41
+ def window(&block)
42
+ Opine::Window.new(&block)
43
+ end
44
+ end
data/opine.gemspec ADDED
@@ -0,0 +1,85 @@
1
+ # Generated by jeweler
2
+ # DO NOT EDIT THIS FILE DIRECTLY
3
+ # Instead, edit Jeweler::Tasks in Rakefile, and run 'rake gemspec'
4
+ # -*- encoding: utf-8 -*-
5
+ # stub: opine 0.0.2 ruby lib
6
+
7
+ Gem::Specification.new do |s|
8
+ s.name = "opine"
9
+ s.version = "0.0.2"
10
+
11
+ s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
12
+ s.require_paths = ["lib"]
13
+ s.authors = ["Patrick Hanevold"]
14
+ s.date = "2014-04-10"
15
+ s.description = "A ruby widget toolkit for everyone and every computer"
16
+ s.email = "patrick.hanevold@gmail.com"
17
+ s.extra_rdoc_files = [
18
+ "LICENSE",
19
+ "README.md"
20
+ ]
21
+ s.files = [
22
+ "Gemfile",
23
+ "LICENSE",
24
+ "README.md",
25
+ "Rakefile",
26
+ "VERSION",
27
+ "examples/hello_world.rb",
28
+ "examples/window.rb",
29
+ "lib/opine.rb",
30
+ "lib/opine/widget.rb",
31
+ "lib/opine/widgets/alert.rb",
32
+ "lib/opine/widgets/application_osx.rb",
33
+ "lib/opine/widgets/window_dark.rb",
34
+ "lib/opine/widgets/window_osx.rb",
35
+ "opine.gemspec",
36
+ "spec/opine/opine_spec.rb",
37
+ "spec/spec_helper.rb",
38
+ "tasks/bacon.rake",
39
+ "tasks/setup.rake"
40
+ ]
41
+ s.homepage = "http://github.com/patrickhno/opine"
42
+ s.licenses = ["MIT"]
43
+ s.rubygems_version = "2.2.0"
44
+ s.summary = "Ruby widget toolkit"
45
+
46
+ if s.respond_to? :specification_version then
47
+ s.specification_version = 4
48
+
49
+ if Gem::Version.new(Gem::VERSION) >= Gem::Version.new('1.2.0') then
50
+ s.add_runtime_dependency(%q<cocoa>, [">= 0"])
51
+ s.add_runtime_dependency(%q<cairo>, [">= 0"])
52
+ s.add_development_dependency(%q<sqlite3>, [">= 0"])
53
+ s.add_development_dependency(%q<activerecord>, ["~> 4.0.4"])
54
+ s.add_development_dependency(%q<activesupport>, ["~> 4.0.4"])
55
+ s.add_development_dependency(%q<bacon>, [">= 0"])
56
+ s.add_development_dependency(%q<rdoc>, ["~> 3.12"])
57
+ s.add_development_dependency(%q<bundler>, ["~> 1.0"])
58
+ s.add_development_dependency(%q<jeweler>, ["~> 2.0.1"])
59
+ s.add_development_dependency(%q<simplecov>, [">= 0"])
60
+ else
61
+ s.add_dependency(%q<cocoa>, [">= 0"])
62
+ s.add_dependency(%q<cairo>, [">= 0"])
63
+ s.add_dependency(%q<sqlite3>, [">= 0"])
64
+ s.add_dependency(%q<activerecord>, ["~> 4.0.4"])
65
+ s.add_dependency(%q<activesupport>, ["~> 4.0.4"])
66
+ s.add_dependency(%q<bacon>, [">= 0"])
67
+ s.add_dependency(%q<rdoc>, ["~> 3.12"])
68
+ s.add_dependency(%q<bundler>, ["~> 1.0"])
69
+ s.add_dependency(%q<jeweler>, ["~> 2.0.1"])
70
+ s.add_dependency(%q<simplecov>, [">= 0"])
71
+ end
72
+ else
73
+ s.add_dependency(%q<cocoa>, [">= 0"])
74
+ s.add_dependency(%q<cairo>, [">= 0"])
75
+ s.add_dependency(%q<sqlite3>, [">= 0"])
76
+ s.add_dependency(%q<activerecord>, ["~> 4.0.4"])
77
+ s.add_dependency(%q<activesupport>, ["~> 4.0.4"])
78
+ s.add_dependency(%q<bacon>, [">= 0"])
79
+ s.add_dependency(%q<rdoc>, ["~> 3.12"])
80
+ s.add_dependency(%q<bundler>, ["~> 1.0"])
81
+ s.add_dependency(%q<jeweler>, ["~> 2.0.1"])
82
+ s.add_dependency(%q<simplecov>, [">= 0"])
83
+ end
84
+ end
85
+
@@ -0,0 +1,24 @@
1
+ require_relative '../spec_helper'
2
+ require 'opine'
3
+
4
+ describe 'Opine' do |t|
5
+ Opine.app do |app|
6
+ t.it 'should run applications' do
7
+ app.running?.should == true
8
+ end
9
+
10
+ t.it 'should open windows' do
11
+ app.window do
12
+ visible?.should == false
13
+ end.visible?.should == true
14
+ end
15
+
16
+ t.it 'should open windows twice' do
17
+ app.window do
18
+ visible?.should == false
19
+ end.visible?.should == true
20
+ end
21
+
22
+ terminate
23
+ end
24
+ end
@@ -0,0 +1,3 @@
1
+ $: << File.expand_path(File.join(File.dirname(__FILE__), '/../lib'))
2
+
3
+ require 'bacon'
data/tasks/bacon.rake ADDED
@@ -0,0 +1,66 @@
1
+ desc 'Run all bacon specs with pretty output'
2
+ task :bacon => :setup do
3
+ require 'open3'
4
+ require 'scanf'
5
+ require 'matrix'
6
+
7
+ specs = PROJECT_SPECS
8
+
9
+ some_failed = false
10
+ specs_size = specs.size
11
+ len = specs.map{|s| s.size }.sort.last
12
+ total_tests = total_assertions = total_failures = total_errors = 0
13
+ totals = Vector[0, 0, 0, 0]
14
+
15
+ red, yellow, green = "\e[31m%s\e[0m", "\e[33m%s\e[0m", "\e[32m%s\e[0m"
16
+ left_format = "%4d/%d: %-#{len + 11}s"
17
+ spec_format = "%d specifications (%d requirements), %d failures, %d errors"
18
+
19
+ specs.each_with_index do |spec, idx|
20
+ print(left_format % [idx + 1, specs_size, spec])
21
+
22
+ Open3.popen3('bacon', spec) do |sin, sout, serr|
23
+ out = sout.read.strip
24
+ err = serr.read.strip
25
+
26
+ # this is conventional, see spec/innate/state/fiber.rb for usage
27
+ if out =~ /^Bacon::Error: (needed .*)/
28
+ puts(yellow % ("%6s %s" % ['', $1]))
29
+ else
30
+ total = nil
31
+
32
+ out.each_line do |line|
33
+ scanned = line.scanf(spec_format)
34
+
35
+ next unless scanned.size == 4
36
+
37
+ total = Vector[*scanned]
38
+ break
39
+ end
40
+
41
+ if total
42
+ totals += total
43
+ tests, assertions, failures, errors = total_array = total.to_a
44
+
45
+ if tests > 0 && failures + errors == 0
46
+ puts((green % "%6d passed") % tests)
47
+ else
48
+ some_failed = true
49
+ puts(red % " failed")
50
+ puts out unless out.empty?
51
+ puts err unless err.empty?
52
+ end
53
+ else
54
+ some_failed = true
55
+ puts(red % " failed")
56
+ puts out unless out.empty?
57
+ puts err unless err.empty?
58
+ end
59
+ end
60
+ end
61
+ end
62
+
63
+ total_color = some_failed ? red : green
64
+ puts(total_color % (spec_format % totals.to_a))
65
+ exit 1 if some_failed
66
+ end
data/tasks/setup.rake ADDED
@@ -0,0 +1,12 @@
1
+ desc 'install all possible dependencies'
2
+ task :setup do
3
+ require 'rubygems'
4
+ require 'bundler'
5
+ begin
6
+ Bundler.setup(:default, :development)
7
+ rescue Bundler::BundlerError => e
8
+ $stderr.puts e.message
9
+ $stderr.puts "Run `bundle install` to install missing gems"
10
+ exit e.status_code
11
+ end
12
+ end
metadata ADDED
@@ -0,0 +1,203 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: opine
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.0.2
5
+ platform: ruby
6
+ authors:
7
+ - Patrick Hanevold
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2014-04-10 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: cocoa
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - ">="
18
+ - !ruby/object:Gem::Version
19
+ version: '0'
20
+ type: :runtime
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - ">="
25
+ - !ruby/object:Gem::Version
26
+ version: '0'
27
+ - !ruby/object:Gem::Dependency
28
+ name: cairo
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - ">="
32
+ - !ruby/object:Gem::Version
33
+ version: '0'
34
+ type: :runtime
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - ">="
39
+ - !ruby/object:Gem::Version
40
+ version: '0'
41
+ - !ruby/object:Gem::Dependency
42
+ name: sqlite3
43
+ requirement: !ruby/object:Gem::Requirement
44
+ requirements:
45
+ - - ">="
46
+ - !ruby/object:Gem::Version
47
+ version: '0'
48
+ type: :development
49
+ prerelease: false
50
+ version_requirements: !ruby/object:Gem::Requirement
51
+ requirements:
52
+ - - ">="
53
+ - !ruby/object:Gem::Version
54
+ version: '0'
55
+ - !ruby/object:Gem::Dependency
56
+ name: activerecord
57
+ requirement: !ruby/object:Gem::Requirement
58
+ requirements:
59
+ - - "~>"
60
+ - !ruby/object:Gem::Version
61
+ version: 4.0.4
62
+ type: :development
63
+ prerelease: false
64
+ version_requirements: !ruby/object:Gem::Requirement
65
+ requirements:
66
+ - - "~>"
67
+ - !ruby/object:Gem::Version
68
+ version: 4.0.4
69
+ - !ruby/object:Gem::Dependency
70
+ name: activesupport
71
+ requirement: !ruby/object:Gem::Requirement
72
+ requirements:
73
+ - - "~>"
74
+ - !ruby/object:Gem::Version
75
+ version: 4.0.4
76
+ type: :development
77
+ prerelease: false
78
+ version_requirements: !ruby/object:Gem::Requirement
79
+ requirements:
80
+ - - "~>"
81
+ - !ruby/object:Gem::Version
82
+ version: 4.0.4
83
+ - !ruby/object:Gem::Dependency
84
+ name: bacon
85
+ requirement: !ruby/object:Gem::Requirement
86
+ requirements:
87
+ - - ">="
88
+ - !ruby/object:Gem::Version
89
+ version: '0'
90
+ type: :development
91
+ prerelease: false
92
+ version_requirements: !ruby/object:Gem::Requirement
93
+ requirements:
94
+ - - ">="
95
+ - !ruby/object:Gem::Version
96
+ version: '0'
97
+ - !ruby/object:Gem::Dependency
98
+ name: rdoc
99
+ requirement: !ruby/object:Gem::Requirement
100
+ requirements:
101
+ - - "~>"
102
+ - !ruby/object:Gem::Version
103
+ version: '3.12'
104
+ type: :development
105
+ prerelease: false
106
+ version_requirements: !ruby/object:Gem::Requirement
107
+ requirements:
108
+ - - "~>"
109
+ - !ruby/object:Gem::Version
110
+ version: '3.12'
111
+ - !ruby/object:Gem::Dependency
112
+ name: bundler
113
+ requirement: !ruby/object:Gem::Requirement
114
+ requirements:
115
+ - - "~>"
116
+ - !ruby/object:Gem::Version
117
+ version: '1.0'
118
+ type: :development
119
+ prerelease: false
120
+ version_requirements: !ruby/object:Gem::Requirement
121
+ requirements:
122
+ - - "~>"
123
+ - !ruby/object:Gem::Version
124
+ version: '1.0'
125
+ - !ruby/object:Gem::Dependency
126
+ name: jeweler
127
+ requirement: !ruby/object:Gem::Requirement
128
+ requirements:
129
+ - - "~>"
130
+ - !ruby/object:Gem::Version
131
+ version: 2.0.1
132
+ type: :development
133
+ prerelease: false
134
+ version_requirements: !ruby/object:Gem::Requirement
135
+ requirements:
136
+ - - "~>"
137
+ - !ruby/object:Gem::Version
138
+ version: 2.0.1
139
+ - !ruby/object:Gem::Dependency
140
+ name: simplecov
141
+ requirement: !ruby/object:Gem::Requirement
142
+ requirements:
143
+ - - ">="
144
+ - !ruby/object:Gem::Version
145
+ version: '0'
146
+ type: :development
147
+ prerelease: false
148
+ version_requirements: !ruby/object:Gem::Requirement
149
+ requirements:
150
+ - - ">="
151
+ - !ruby/object:Gem::Version
152
+ version: '0'
153
+ description: A ruby widget toolkit for everyone and every computer
154
+ email: patrick.hanevold@gmail.com
155
+ executables: []
156
+ extensions: []
157
+ extra_rdoc_files:
158
+ - LICENSE
159
+ - README.md
160
+ files:
161
+ - Gemfile
162
+ - LICENSE
163
+ - README.md
164
+ - Rakefile
165
+ - VERSION
166
+ - examples/hello_world.rb
167
+ - examples/window.rb
168
+ - lib/opine.rb
169
+ - lib/opine/widget.rb
170
+ - lib/opine/widgets/alert.rb
171
+ - lib/opine/widgets/application_osx.rb
172
+ - lib/opine/widgets/window_dark.rb
173
+ - lib/opine/widgets/window_osx.rb
174
+ - opine.gemspec
175
+ - spec/opine/opine_spec.rb
176
+ - spec/spec_helper.rb
177
+ - tasks/bacon.rake
178
+ - tasks/setup.rake
179
+ homepage: http://github.com/patrickhno/opine
180
+ licenses:
181
+ - MIT
182
+ metadata: {}
183
+ post_install_message:
184
+ rdoc_options: []
185
+ require_paths:
186
+ - lib
187
+ required_ruby_version: !ruby/object:Gem::Requirement
188
+ requirements:
189
+ - - ">="
190
+ - !ruby/object:Gem::Version
191
+ version: '0'
192
+ required_rubygems_version: !ruby/object:Gem::Requirement
193
+ requirements:
194
+ - - ">="
195
+ - !ruby/object:Gem::Version
196
+ version: '0'
197
+ requirements: []
198
+ rubyforge_project:
199
+ rubygems_version: 2.2.0
200
+ signing_key:
201
+ specification_version: 4
202
+ summary: Ruby widget toolkit
203
+ test_files: []