everyday-menu 1.3.2 → 1.3.3
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/.coveralls.yml +2 -0
- data/.rspec +3 -0
- data/.travis.yml +5 -0
- data/README.md +3 -0
- data/Rakefile +13 -2
- data/everyday-menu.gemspec +2 -0
- data/examples/basic_main_menu/app_delegate.rb +36 -20
- data/examples/basic_main_menu/main_menu.rb +49 -43
- data/lib/everyday-menu/menu.rb +37 -26
- data/lib/everyday-menu/menu_builder.rb +12 -6
- data/lib/everyday-menu/menu_item.rb +48 -29
- data/lib/everyday-menu/utils.rb +67 -60
- data/lib/everyday-menu/version.rb +1 -1
- metadata +6 -3
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: ca89f47e4c5aca7b923f7141db58f6394c62932f
|
4
|
+
data.tar.gz: ca4a8c33eaa97afa48ce70633fc082d394a94c1b
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 8958117eb899bfb0fd09e75112c1603a242b4db54d7a45f39a1ab9d989675253337f33cd27b909398b850d2d65ce2125fdfbd2e844cdf087c35fe8726ba49cce
|
7
|
+
data.tar.gz: b987b901ee0e4dba44f649a4437a777ce01fe4618b36bac7cc7d931c2afbeea7af77557f8f8ea62fa39ca4a10ac3149cb2fed6011a75bdb85ce954c547216daf
|
data/.coveralls.yml
ADDED
data/.rspec
ADDED
data/.travis.yml
ADDED
data/README.md
CHANGED
@@ -1,6 +1,9 @@
|
|
1
1
|
# EverydayMenu
|
2
2
|
|
3
3
|
[![Gem Version](https://badge.fury.io/rb/everyday-menu.png)](http://badge.fury.io/rb/everyday-menu)
|
4
|
+
[![Build Status](https://travis-ci.org/henderea/everyday-menu.png?branch=master)](https://travis-ci.org/henderea/everyday-menu)
|
5
|
+
[![Dependency Status](https://gemnasium.com/henderea/everyday-menu.png)](https://gemnasium.com/henderea/everyday-menu)
|
6
|
+
[![Code Climate](https://codeclimate.com/github/henderea/everyday-menu.png)](https://codeclimate.com/github/henderea/everyday-menu)
|
4
7
|
|
5
8
|
## Updates
|
6
9
|
* 0.2.0:
|
data/Rakefile
CHANGED
@@ -1,6 +1,17 @@
|
|
1
1
|
$:.unshift('/Library/RubyMotion/lib')
|
2
2
|
|
3
|
-
|
3
|
+
if ARGV[0] == 'spec'
|
4
|
+
#ENV['CI'] = 'true'
|
5
|
+
ENV['platform'] = 'osx'
|
6
|
+
# begin
|
7
|
+
# require 'simplecov'
|
8
|
+
# rescue LoadError
|
9
|
+
## ignored
|
10
|
+
# end
|
11
|
+
#
|
12
|
+
# require 'coveralls'
|
13
|
+
# Coveralls.wear!
|
14
|
+
end
|
4
15
|
|
5
16
|
if ENV['platform'] == 'osx'
|
6
17
|
require 'motion/project/template/osx'
|
@@ -23,4 +34,4 @@ Motion::Project::App.setup do |app|
|
|
23
34
|
if ENV['example']
|
24
35
|
app.files << Dir["examples/#{ENV['example']}/**/*.rb"]
|
25
36
|
end
|
26
|
-
end
|
37
|
+
end
|
data/everyday-menu.gemspec
CHANGED
@@ -19,6 +19,8 @@ Gem::Specification.new do |spec|
|
|
19
19
|
|
20
20
|
spec.add_development_dependency 'bundler', '~> 1.3'
|
21
21
|
spec.add_development_dependency 'rake', '~> 10.0'
|
22
|
+
#spec.add_development_dependency 'simplecov', '>= 0.8.2'
|
23
|
+
#spec.add_development_dependency 'coveralls', '>= 0.7.0'
|
22
24
|
|
23
25
|
spec.add_dependency 'rm-digest'
|
24
26
|
end
|
@@ -4,14 +4,25 @@ class AppDelegate
|
|
4
4
|
@started = false
|
5
5
|
MainMenu.build!
|
6
6
|
|
7
|
-
|
8
|
-
|
9
|
-
|
7
|
+
subscribe_new
|
8
|
+
subscribe_close
|
9
|
+
subscribe_open
|
10
|
+
subscribe_start_stop
|
11
|
+
puts "start_stop subscribe 1 parent label: #{MainMenu[:file].items[:start_stop][:commands][:start_stop_command_id].label}"
|
12
|
+
end
|
13
|
+
|
14
|
+
def subscribe_start_stop
|
15
|
+
MainMenu[:file].subscribe(:start_stop, :start_stop_command_id) { |command, _|
|
16
|
+
@started = !@started
|
17
|
+
command.parent[:title] = @started ? 'Stop' : 'Start'
|
18
|
+
puts "start_stop subscribe 1 command id: #{command.command_id}"
|
10
19
|
}
|
11
|
-
MainMenu[:file].subscribe(:
|
12
|
-
|
13
|
-
|
14
|
-
|
20
|
+
MainMenu[:file].subscribe(:start_stop, :start_stop_command_id2) { |command, _|
|
21
|
+
puts "start_stop subscribe 2 command id: #{command.command_id}"
|
22
|
+
}
|
23
|
+
end
|
24
|
+
|
25
|
+
def subscribe_open
|
15
26
|
MainMenu[:file].subscribe(:open) { |command, _|
|
16
27
|
@has_open = true
|
17
28
|
puts 'open'
|
@@ -20,26 +31,31 @@ class AppDelegate
|
|
20
31
|
MainMenu[:file].subscribe(:open) { |command, _|
|
21
32
|
puts "open subscribe 2 command id: #{command.command_id}"
|
22
33
|
}
|
23
|
-
MainMenu[:
|
24
|
-
@started = !@started
|
25
|
-
command.parent[:title] = @started ? 'Stop' : 'Start'
|
26
|
-
puts "start_stop subscribe 1 command id: #{command.command_id}"
|
27
|
-
}
|
28
|
-
MainMenu[:file].subscribe(:start_stop, :start_stop_command_id2) { |command, _|
|
29
|
-
puts "start_stop subscribe 2 command id: #{command.command_id}"
|
30
|
-
}
|
31
|
-
MainMenu[:statusbar].subscribe(:status_new) { |_, _|
|
34
|
+
MainMenu[:statusbar].subscribe(:status_open) { |_, _|
|
32
35
|
@has_open = true
|
33
|
-
puts 'status-
|
36
|
+
puts 'status-open'
|
34
37
|
}
|
38
|
+
end
|
39
|
+
|
40
|
+
def subscribe_close
|
41
|
+
MainMenu[:file].subscribe(:close) { |_, _|
|
42
|
+
@has_open = false
|
43
|
+
puts 'close'
|
44
|
+
}.canExecuteBlock { |_| @has_open }
|
35
45
|
MainMenu[:statusbar].subscribe(:status_close) { |_, _|
|
36
46
|
@has_open = false
|
37
47
|
puts 'status-close'
|
38
48
|
}.canExecuteBlock { |_| @has_open }
|
39
|
-
|
49
|
+
end
|
50
|
+
|
51
|
+
def subscribe_new
|
52
|
+
MainMenu[:file].subscribe(:new) { |_, _|
|
40
53
|
@has_open = true
|
41
|
-
puts '
|
54
|
+
puts 'new'
|
55
|
+
}
|
56
|
+
MainMenu[:statusbar].subscribe(:status_new) { |_, _|
|
57
|
+
@has_open = true
|
58
|
+
puts 'status-new'
|
42
59
|
}
|
43
|
-
puts "start_stop subscribe 1 parent label: #{MainMenu[:file].items[:start_stop][:commands][:start_stop_command_id].label}"
|
44
60
|
end
|
45
61
|
end
|
@@ -1,47 +1,53 @@
|
|
1
1
|
class MainMenu
|
2
2
|
extend EverydayMenu::MenuBuilder
|
3
3
|
|
4
|
-
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
-
|
37
|
-
|
38
|
-
|
39
|
-
|
40
|
-
|
41
|
-
|
42
|
-
|
43
|
-
|
44
|
-
|
45
|
-
|
46
|
-
|
4
|
+
def self.def_items
|
5
|
+
menuItem :hide_others, 'Hide Others', preset: :hide_others
|
6
|
+
menuItem :show_all, 'Show All', preset: :show_all
|
7
|
+
menuItem :quit, 'Quit', preset: :quit
|
8
|
+
|
9
|
+
menuItem :services_item, 'Services', preset: :services
|
10
|
+
|
11
|
+
menuItem :open, 'Open', key_equivalent: 'o'
|
12
|
+
menuItem :new, 'New'
|
13
|
+
menuItem :close, 'Close', key_equivalent: 'w'
|
14
|
+
menuItem :start_stop, 'Start'
|
15
|
+
|
16
|
+
menuItem :status_open, 'Open', key_equivalent: 'o'
|
17
|
+
menuItem :status_new, 'New'
|
18
|
+
menuItem :status_close, 'Close', key_equivalent: 'w'
|
19
|
+
menuItem :status_quit, 'Quit', preset: :quit
|
20
|
+
end
|
21
|
+
|
22
|
+
def self.def_menus
|
23
|
+
mainMenu(:app, 'Blah') {
|
24
|
+
hide_others
|
25
|
+
show_all
|
26
|
+
___
|
27
|
+
services_item
|
28
|
+
___
|
29
|
+
quit
|
30
|
+
}
|
31
|
+
|
32
|
+
mainMenu(:file, 'File') {
|
33
|
+
new
|
34
|
+
open
|
35
|
+
___
|
36
|
+
close
|
37
|
+
___
|
38
|
+
start_stop
|
39
|
+
}
|
40
|
+
|
41
|
+
statusbarMenu(:statusbar, 'Statusbar Menu') {
|
42
|
+
status_new
|
43
|
+
status_open
|
44
|
+
___
|
45
|
+
status_close
|
46
|
+
___
|
47
|
+
status_quit
|
48
|
+
}
|
49
|
+
end
|
50
|
+
|
51
|
+
def_menus
|
52
|
+
def_items
|
47
53
|
end
|
data/lib/everyday-menu/menu.rb
CHANGED
@@ -2,22 +2,18 @@ module EverydayMenu
|
|
2
2
|
class Menu
|
3
3
|
include MyAccessors
|
4
4
|
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
5
|
+
def self.def_accessors
|
6
|
+
my_attr_writer :label
|
7
|
+
my_attr_accessor_bool :servicesMenu, :windowsMenu, :helpMenu, :mainMenu
|
8
|
+
my_attr_reader_bool :statusMenu
|
9
|
+
my_attr_reader :statusItemTitle, :statusItemIcon, :statusItemViewClass, :statusItemLength
|
10
|
+
attr_reader :menu, :builder
|
11
|
+
end
|
12
12
|
|
13
|
-
|
13
|
+
def_accessors
|
14
14
|
|
15
15
|
def self.create(label, title, options = {}, &block)
|
16
|
-
new(label, &block).tap { |menu|
|
17
|
-
menu[:label] = label
|
18
|
-
menu[:title] = title
|
19
|
-
options.each { |option| menu[option[0]] = option[1] }
|
20
|
-
}
|
16
|
+
new(label, &block).tap { |menu| setup_obj(menu, label, title, options) }
|
21
17
|
end
|
22
18
|
|
23
19
|
def initialize(label, &block)
|
@@ -33,6 +29,7 @@ module EverydayMenu
|
|
33
29
|
@statusItemTitle = nil
|
34
30
|
@statusItemIcon = nil
|
35
31
|
@statusItemViewClass = nil
|
32
|
+
@statusItemLength = nil
|
36
33
|
end
|
37
34
|
|
38
35
|
def menuItemFromMenu!
|
@@ -71,10 +68,14 @@ module EverydayMenu
|
|
71
68
|
@@buildBlocks[field] = block
|
72
69
|
end
|
73
70
|
|
74
|
-
|
75
|
-
|
76
|
-
|
77
|
-
|
71
|
+
def self.def_build_blocks
|
72
|
+
registerBuildBlock(:services_menu) { |menu| NSApp.servicesMenu = menu.menu }
|
73
|
+
registerBuildBlock(:windows_menu) { |menu| NSApp.windowsMenu = menu.menu }
|
74
|
+
registerBuildBlock(:help_menu) { |menu| NSApp.helpMenu = menu.menu }
|
75
|
+
registerBuildBlock(:status_menu) { |menu| menu.createStatusItem! }
|
76
|
+
end
|
77
|
+
|
78
|
+
def_build_blocks
|
78
79
|
|
79
80
|
def label
|
80
81
|
@label ||= nil
|
@@ -86,30 +87,27 @@ module EverydayMenu
|
|
86
87
|
@statusMenu = true unless title.nil?
|
87
88
|
end
|
88
89
|
|
89
|
-
alias :statusItemTitle= :setStatusItemTitle
|
90
|
-
alias :status_item_title= :setStatusItemTitle
|
91
|
-
|
92
90
|
def setStatusItemIcon(icon)
|
93
91
|
@mainMenu = false unless icon.nil?
|
94
92
|
@statusItemIcon = icon
|
95
93
|
@statusMenu = true unless icon.nil?
|
96
94
|
end
|
97
95
|
|
98
|
-
alias :statusItemIcon= :setStatusItemIcon
|
99
|
-
alias :status_item_icon= :setStatusItemIcon
|
100
|
-
|
101
96
|
def setStatusItemViewClass(viewClass)
|
102
97
|
@mainMenu = false unless viewClass.nil?
|
103
98
|
@statusItemViewClass = viewClass
|
104
99
|
@statusMenu = true unless viewClass.nil?
|
105
100
|
end
|
106
101
|
|
107
|
-
|
108
|
-
|
102
|
+
def setStatusItemLength(length)
|
103
|
+
@mainMenu = false unless length.nil?
|
104
|
+
@statusItemLength = length
|
105
|
+
@statusMenu = true unless length.nil?
|
106
|
+
end
|
109
107
|
|
110
108
|
def createStatusItem!
|
111
109
|
statusBar = NSStatusBar.systemStatusBar
|
112
|
-
@statusItem = statusBar.statusItemWithLength(NSSquareStatusItemLength)
|
110
|
+
@statusItem = statusBar.statusItemWithLength(@statusItemLength || NSSquareStatusItemLength)
|
113
111
|
@statusItem.highlightMode = true
|
114
112
|
|
115
113
|
@statusItem.menu = self.menu
|
@@ -134,6 +132,19 @@ module EverydayMenu
|
|
134
132
|
item = self.items[label]
|
135
133
|
item.execute
|
136
134
|
end
|
135
|
+
|
136
|
+
def self.def_aliases
|
137
|
+
alias :statusItemTitle= :setStatusItemTitle
|
138
|
+
alias :status_item_title= :setStatusItemTitle
|
139
|
+
|
140
|
+
alias :statusItemIcon= :setStatusItemIcon
|
141
|
+
alias :status_item_icon= :setStatusItemIcon
|
142
|
+
|
143
|
+
alias :statusItemViewClass= :setStatusItemViewClass
|
144
|
+
alias :status_item_view_class= :setStatusItemViewClass
|
145
|
+
end
|
146
|
+
|
147
|
+
def_aliases
|
137
148
|
end
|
138
149
|
|
139
150
|
class MenuItemList
|
@@ -58,17 +58,23 @@ module EverydayMenu
|
|
58
58
|
|
59
59
|
def build!
|
60
60
|
@menus.values.each do |menu|
|
61
|
-
|
62
|
-
|
63
|
-
if menu.is :main_menu
|
64
|
-
@mainMenu ||= NSMenu.new
|
65
|
-
@mainMenu.addItem menu.menuItemFromMenu!.menuItem
|
66
|
-
end
|
61
|
+
build_menu(menu)
|
62
|
+
add_main_menu(menu) if menu.is :main_menu
|
67
63
|
menu.runOnBuild
|
68
64
|
end
|
69
65
|
setupMainMenu if @mainMenu
|
70
66
|
end
|
71
67
|
|
68
|
+
def build_menu(menu)
|
69
|
+
context = Context.new(menu, @menuItems.dup)
|
70
|
+
context.instance_eval(&menu.builder) if menu.builder
|
71
|
+
end
|
72
|
+
|
73
|
+
def add_main_menu(menu)
|
74
|
+
@mainMenu ||= NSMenu.new
|
75
|
+
@mainMenu.addItem menu.menuItemFromMenu!.menuItem
|
76
|
+
end
|
77
|
+
|
72
78
|
private
|
73
79
|
|
74
80
|
def setupMainMenu
|
@@ -3,11 +3,7 @@ module EverydayMenu
|
|
3
3
|
include MyAccessors
|
4
4
|
|
5
5
|
def self.create(label, title, options = {})
|
6
|
-
new.tap { |item|
|
7
|
-
item[:label] = label
|
8
|
-
item[:title] = title
|
9
|
-
options.each { |option| item[option[0]] = option[1] }
|
10
|
-
}
|
6
|
+
new.tap { |item| setup_obj(item, label, title, options) }
|
11
7
|
end
|
12
8
|
|
13
9
|
def self.separator
|
@@ -77,35 +73,58 @@ module EverydayMenu
|
|
77
73
|
@@presets[label] = block
|
78
74
|
end
|
79
75
|
|
80
|
-
|
81
|
-
|
82
|
-
|
83
|
-
|
76
|
+
def self.def_presets
|
77
|
+
def_hide_preset
|
78
|
+
def_hide_others_preset
|
79
|
+
def_show_all_preset
|
80
|
+
def_quit_preset
|
81
|
+
def_close_preset
|
82
|
+
def_services_preset
|
83
|
+
end
|
84
|
+
|
85
|
+
def self.fill_preset(item, options = {}, &block)
|
86
|
+
fill_options(item, options)
|
87
|
+
item.subscribe &block
|
88
|
+
end
|
89
|
+
|
90
|
+
def self.def_hide_preset
|
91
|
+
definePreset(:hide) { |item|
|
92
|
+
fill_preset(item, key_equivalent: 'h') { |_, _| NSApp.hide(item) }
|
93
|
+
}
|
94
|
+
end
|
95
|
+
|
96
|
+
def self.def_hide_others_preset
|
97
|
+
definePreset(:hide_others) { |item|
|
98
|
+
fill_preset(item, key_equivalent: 'H', key_equivalent_modifier_mask: NSCommandKeyMask|NSAlternateKeyMask) { |_, _| NSApp.hideOtherApplications(item) }
|
99
|
+
}
|
100
|
+
end
|
84
101
|
|
85
|
-
|
86
|
-
|
87
|
-
|
88
|
-
|
89
|
-
|
102
|
+
def self.def_show_all_preset
|
103
|
+
definePreset(:show_all) { |item|
|
104
|
+
item.subscribe { |_, _| NSApp.unhideAllApplications(item) }
|
105
|
+
}
|
106
|
+
end
|
90
107
|
|
91
|
-
|
92
|
-
|
93
|
-
|
108
|
+
def self.def_quit_preset
|
109
|
+
definePreset(:quit) { |item|
|
110
|
+
fill_preset(item, key_equivalent: 'q') { |_, _| NSApp.terminate(item) }
|
111
|
+
}
|
112
|
+
end
|
94
113
|
|
95
|
-
|
96
|
-
|
97
|
-
|
98
|
-
|
114
|
+
def self.def_close_preset
|
115
|
+
definePreset(:close) { |item|
|
116
|
+
fill_preset(item, key_equivalent: 'w') { |_, _| NSApp.keyWindow.performClose(item) }
|
117
|
+
}
|
118
|
+
end
|
99
119
|
|
100
|
-
|
101
|
-
|
102
|
-
|
103
|
-
|
120
|
+
def self.def_services_preset
|
121
|
+
definePreset(:services) { |item|
|
122
|
+
item[:submenu] = Menu.create(:services_menu, item[:title], services_menu: true)
|
123
|
+
item.registerOnBuild { NSApp.servicesMenu = item[:submenu] }
|
124
|
+
}
|
125
|
+
end
|
104
126
|
|
105
|
-
|
106
|
-
item[:submenu] = Menu.create(:services_menu, item[:title], services_menu: true)
|
107
|
-
item.registerOnBuild { NSApp.servicesMenu = item[:submenu] }
|
108
|
-
}
|
127
|
+
def_presets
|
109
128
|
|
110
129
|
def runOnBuild
|
111
130
|
onBuild.each { |block| block.call }
|
data/lib/everyday-menu/utils.rb
CHANGED
@@ -67,43 +67,41 @@ module EverydayMenu
|
|
67
67
|
end
|
68
68
|
|
69
69
|
module MyAccessors
|
70
|
+
def get_val(name)
|
71
|
+
self.respond_to?(name) ? self.send(name) : self.containedObject.send(name)
|
72
|
+
end
|
73
|
+
|
74
|
+
def set_val(name, value)
|
75
|
+
self.respond_to?(name) ? self.send(name, value) : self.containedObject.send(name, value)
|
76
|
+
end
|
77
|
+
|
70
78
|
def has(key)
|
71
|
-
|
72
|
-
if self.respond_to?(name)
|
73
|
-
self.send(name)
|
74
|
-
else
|
75
|
-
self.containedObject.send(name)
|
76
|
-
end
|
79
|
+
get_val(self.class.key_to_name(key, 'has'))
|
77
80
|
end
|
78
81
|
|
79
82
|
def is(key)
|
80
|
-
|
81
|
-
if self.respond_to?(name)
|
82
|
-
self.send(name)
|
83
|
-
else
|
84
|
-
self.containedObject.send(name)
|
85
|
-
end
|
83
|
+
get_val(self.class.key_to_name(key, 'is'))
|
86
84
|
end
|
87
85
|
|
88
86
|
def [](key)
|
89
|
-
|
90
|
-
if self.respond_to?(name)
|
91
|
-
self.send(name)
|
92
|
-
else
|
93
|
-
self.containedObject.send(name)
|
94
|
-
end
|
87
|
+
get_val(self.class.key_to_name(key))
|
95
88
|
end
|
96
89
|
|
97
90
|
def []=(key, value)
|
98
|
-
|
99
|
-
if self.respond_to?(name)
|
100
|
-
self.send(name, value)
|
101
|
-
else
|
102
|
-
self.containedObject.send(name, value)
|
103
|
-
end
|
91
|
+
set_val(self.class.key_to_name(key, 'set'), value)
|
104
92
|
end
|
105
93
|
|
106
94
|
class << self
|
95
|
+
def self.setup_obj(obj, label, title, options)
|
96
|
+
obj[:label] = label
|
97
|
+
obj[:title] = title
|
98
|
+
fill_options(obj, options)
|
99
|
+
end
|
100
|
+
|
101
|
+
def self.fill_options(obj, options)
|
102
|
+
options.each { |option| obj[option[0]] = option[1] }
|
103
|
+
end
|
104
|
+
|
107
105
|
def self.key_to_name(key, prefix = nil)
|
108
106
|
rval = key.to_s.gsub(/_(\w)/) { |_| $1.upcase }
|
109
107
|
prefix.nil? ? rval : "#{prefix}#{rval[0].upcase}#{rval[1..-1]}"
|
@@ -113,64 +111,73 @@ module EverydayMenu
|
|
113
111
|
name.to_s.gsub(/A-Z/) { |c| c.downcase }.to_sym
|
114
112
|
end
|
115
113
|
|
114
|
+
def self.getter_names(name)
|
115
|
+
name2, var_name = common_names(name)
|
116
|
+
isName = :"#{key_to_name(name, 'is')}"
|
117
|
+
name2_is = :"#{name2.to_s}?"
|
118
|
+
return var_name, isName, name2, name2_is
|
119
|
+
end
|
120
|
+
|
121
|
+
def self.setter_names(name)
|
122
|
+
name2, var_name = common_names(name)
|
123
|
+
setName = :"#{key_to_name(name, 'set')}"
|
124
|
+
name_e = :"#{name.to_s}="
|
125
|
+
name2_e = :"#{name2.to_s}="
|
126
|
+
return var_name, setName, name_e, name2_e
|
127
|
+
end
|
128
|
+
|
129
|
+
def self.common_names(name)
|
130
|
+
var_name = :"@#{name.to_s}"
|
131
|
+
name2 = name_to_key(name)
|
132
|
+
return name2, var_name
|
133
|
+
end
|
134
|
+
|
135
|
+
def self.define_methods(*names, &block)
|
136
|
+
names.each { |name| define_method(name, &block) }
|
137
|
+
end
|
138
|
+
|
139
|
+
def self.def_getter(name, do_is = false)
|
140
|
+
var_name, isName, name2, name2_is = getter_names(name)
|
141
|
+
block = ->() { self.instance_variable_get(var_name) }
|
142
|
+
define_methods(name, name2, &block)
|
143
|
+
define_methods(isName, name2_is, &block) if do_is
|
144
|
+
end
|
145
|
+
|
146
|
+
def self.def_setter(name)
|
147
|
+
var_name, setName, name_e, name2_e = setter_names(name)
|
148
|
+
block = ->(val) { self.instance_variable_set(var_name, val) }
|
149
|
+
define_methods(name_e, setName, name2_e, &block)
|
150
|
+
end
|
151
|
+
|
116
152
|
def self.my_attr_accessor(*names)
|
117
153
|
names.each { |name|
|
118
|
-
|
119
|
-
|
120
|
-
define_method(:"#{name.to_s}=") { |val| self.instance_variable_set(var_name, val) }
|
121
|
-
setName = :"set#{name.to_s[0].upcase}#{name.to_s[1..-1]}"
|
122
|
-
define_method(setName) { |val| self.instance_variable_set(var_name, val) }
|
123
|
-
name2 = name_to_key(name)
|
124
|
-
define_method(name2) { self.instance_variable_get(var_name) }
|
125
|
-
define_method(:"#{name2.to_s}=") { |val| self.instance_variable_set(var_name, val) }
|
154
|
+
def_getter(name)
|
155
|
+
def_setter(name)
|
126
156
|
}
|
127
157
|
end
|
128
158
|
|
129
159
|
def self.my_attr_accessor_bool(*names)
|
130
160
|
names.each { |name|
|
131
|
-
|
132
|
-
|
133
|
-
define_method(:"#{name.to_s}=") { |val| self.instance_variable_set(var_name, val) }
|
134
|
-
isName = :"#{key_to_name(name, 'is')}"
|
135
|
-
define_method(isName) { self.instance_variable_get(var_name) }
|
136
|
-
setName = :"#{key_to_name(name, 'set')}"
|
137
|
-
define_method(setName) { |val| self.instance_variable_set(var_name, val) }
|
138
|
-
name2 = name_to_key(name)
|
139
|
-
define_method(name2) { self.instance_variable_get(var_name) }
|
140
|
-
define_method(:"#{name2.to_s}?") { self.instance_variable_get(var_name) }
|
141
|
-
define_method(:"#{name2.to_s}=") { |val| self.instance_variable_set(var_name, val) }
|
161
|
+
def_getter(name, true)
|
162
|
+
def_setter(name)
|
142
163
|
}
|
143
164
|
end
|
144
165
|
|
145
166
|
def self.my_attr_reader(*names)
|
146
167
|
names.each { |name|
|
147
|
-
|
148
|
-
define_method(name) { self.instance_variable_get(var_name) }
|
149
|
-
name2 = name_to_key(name)
|
150
|
-
define_method(name2) { self.instance_variable_get(var_name) }
|
168
|
+
def_getter(name)
|
151
169
|
}
|
152
170
|
end
|
153
171
|
|
154
172
|
def self.my_attr_reader_bool(*names)
|
155
173
|
names.each { |name|
|
156
|
-
|
157
|
-
define_method(name) { self.instance_variable_get(var_name) }
|
158
|
-
isName = :"#{key_to_name(name, 'is')}"
|
159
|
-
define_method(isName) { self.instance_variable_get(var_name) }
|
160
|
-
name2 = name_to_key(name)
|
161
|
-
define_method(name2) { self.instance_variable_get(var_name) }
|
162
|
-
define_method(:"#{name2.to_s}?") { self.instance_variable_get(var_name) }
|
174
|
+
def_getter(name, true)
|
163
175
|
}
|
164
176
|
end
|
165
177
|
|
166
178
|
def self.my_attr_writer(*names)
|
167
179
|
names.each { |name|
|
168
|
-
|
169
|
-
define_method(:"#{name.to_s}=") { |val| self.instance_variable_set(var_name, val) }
|
170
|
-
setName = :"#{key_to_name(name, 'set')}"
|
171
|
-
define_method(setName) { |val| self.instance_variable_set(var_name, val) }
|
172
|
-
name2 = name_to_key(name)
|
173
|
-
define_method(:"#{name2.to_s}=") { |val| self.instance_variable_set(var_name, val) }
|
180
|
+
def_setter(name)
|
174
181
|
}
|
175
182
|
end
|
176
183
|
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: everyday-menu
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.3.
|
4
|
+
version: 1.3.3
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Eric Henderson
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2014-
|
11
|
+
date: 2014-07-17 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bundler
|
@@ -61,7 +61,10 @@ executables: []
|
|
61
61
|
extensions: []
|
62
62
|
extra_rdoc_files: []
|
63
63
|
files:
|
64
|
+
- ".coveralls.yml"
|
64
65
|
- ".gitignore"
|
66
|
+
- ".rspec"
|
67
|
+
- ".travis.yml"
|
65
68
|
- Gemfile
|
66
69
|
- LICENSE.txt
|
67
70
|
- README.md
|
@@ -98,7 +101,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
98
101
|
version: '0'
|
99
102
|
requirements: []
|
100
103
|
rubyforge_project:
|
101
|
-
rubygems_version: 2.2.
|
104
|
+
rubygems_version: 2.2.2
|
102
105
|
signing_key:
|
103
106
|
specification_version: 4
|
104
107
|
summary: A more ruby way to create OS X menus in RubyMotion
|