everyday-menu 1.3.2 → 1.3.3
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 +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
|
[](http://badge.fury.io/rb/everyday-menu)
|
4
|
+
[](https://travis-ci.org/henderea/everyday-menu)
|
5
|
+
[](https://gemnasium.com/henderea/everyday-menu)
|
6
|
+
[](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
|