facy 1.2.9.rc1

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.
@@ -0,0 +1,35 @@
1
+ module Facy
2
+ module InputQueue
3
+ def printed_item
4
+ @printed_item ||= Set.new
5
+ end
6
+
7
+ def stream_print_queue
8
+ @stream_print_queue ||= []
9
+ end
10
+
11
+ def notification_print_queue
12
+ @notification_print_queue ||= []
13
+ end
14
+
15
+ def item_print_queue
16
+ @item_print_queue ||= []
17
+ end
18
+
19
+ def insert_lock
20
+ @insert_lock ||= Monitor.new
21
+ end
22
+
23
+ def insert_item(item)
24
+ insert_lock.synchronize do
25
+ _insert_item(item)
26
+ end
27
+ end
28
+
29
+ def _insert_item(item)
30
+ item_print_queue << item
31
+ end
32
+ end
33
+
34
+ extend InputQueue
35
+ end
@@ -0,0 +1,26 @@
1
+ module Facy
2
+ module Logger
3
+ def log_file
4
+ File.expand_path(config[:log_file_name], config[:log_folder])
5
+ end
6
+
7
+ def log_queue
8
+ @log_queue ||= []
9
+ end
10
+
11
+ def log(info, message)
12
+ return unless config[:debug_log]
13
+ log_queue << {info: info.to_s, message: message}
14
+ end
15
+
16
+ def dump_log
17
+ File.open(log_file, "w") do |f|
18
+ log_queue.each {|m| f.write "#{m[:info]} #{m[:message]} \n"}
19
+ end
20
+ rescue Exception => e
21
+ error e
22
+ end
23
+ end
24
+
25
+ extend Logger
26
+ end
@@ -0,0 +1,23 @@
1
+ module Facy
2
+ module OptParser
3
+ def parse(argv)
4
+ OptionParser.new do |opt|
5
+ # -h, --h, --help is show usage.
6
+ # -v, --v, --version is show version.
7
+
8
+ # short option with require argument
9
+ opt.on('--debug_log VALUE') do |v|
10
+ config[:debug_log] = v
11
+ end
12
+
13
+ opt.on('--enable_img_view VALUE') do |v|
14
+ config[:enable_img_view] = v
15
+ end
16
+
17
+ opt.parse!(argv)
18
+ end
19
+ end
20
+ end
21
+
22
+ extend OptParser
23
+ end
@@ -0,0 +1,183 @@
1
+ # coding: utf-8
2
+
3
+ module Facy
4
+ module Output
5
+ def periodic_output
6
+ return if (items = not_yet_print_items).empty?
7
+ new_line
8
+ items.each {|item| instant_output(item)}
9
+ clear_line
10
+ end
11
+
12
+ def not_yet_print_items
13
+ items = []
14
+ while !stream_print_queue.empty?
15
+ post = stream_print_queue.pop
16
+ items << post unless printed_item.include? post.id
17
+ end
18
+
19
+ while !notification_print_queue.empty?
20
+ notify = notification_print_queue.pop
21
+ items << notify unless printed_item.include? notify.id
22
+ end
23
+ return items
24
+ end
25
+
26
+ def instant_output(item)
27
+ printed_item << item.id if item.id
28
+ info = item.info
29
+ print_registers.each do |pattern|
30
+ if info == pattern[:name]
31
+ pattern[:block].call(item)
32
+ end
33
+ end
34
+ rescue
35
+ end
36
+
37
+ def print_registers
38
+ @print_registers ||= []
39
+ end
40
+
41
+ def print_register(item_name, &block)
42
+ print_registers << {name: item_name, block: block}
43
+ end
44
+
45
+ def stop_animation
46
+ @stop_animation ||= true
47
+ end
48
+
49
+ def error(text)
50
+ instant_output(Item.new(info: :error, content: text))
51
+ end
52
+
53
+ def new_line
54
+ puts ''
55
+ end
56
+
57
+ def clear_line
58
+ Readline.refresh_line
59
+ end
60
+
61
+ def username_color_map
62
+ @username_color_map ||= {}
63
+ end
64
+
65
+ def username_color_table
66
+ @username_color_table ||= []
67
+ end
68
+
69
+ def username_color_table_load
70
+ max_range = 256
71
+ step = 9
72
+ start = current = 1
73
+ (1..max_range).each do |col|
74
+ username_color_table << [38,5,current]
75
+ current = current + step
76
+ current = current % max_range if current > max_range
77
+ end
78
+ end
79
+
80
+ def username_color(uname)
81
+ return username_color_map[uname] if username_color_map[uname]
82
+ username_color_table_load if username_color_table.empty?
83
+ return (username_color_map[uname] = username_color_table.pop)
84
+ end
85
+
86
+ def post_code(item)
87
+ post_id = item.id
88
+
89
+ return post_code_map[post_id] if post_code_map[post_id]
90
+ post_code_table_load if post_code_table.empty?
91
+ code = post_code_table.pop
92
+
93
+ post_code_reverse_map[code] = item
94
+ post_code_map[post_id] = code
95
+
96
+ return code
97
+ end
98
+
99
+ def post_code_table
100
+ @post_code_table ||= []
101
+ end
102
+
103
+ def post_code_map
104
+ @post_code_map ||= {}
105
+ end
106
+
107
+ def post_code_reverse_map
108
+ @post_code_reverse_map ||= {}
109
+ end
110
+
111
+ def post_code_table_load
112
+ max_length = 3
113
+ _post_code_table_loop('$', max_length)
114
+ post_code_table.sort!
115
+ end
116
+
117
+ def _post_code_table_loop(prefix, max_length)
118
+ post_code_table << prefix if prefix.length > 0
119
+ if prefix.length < max_length
120
+ ('a'..'z').each do |char|
121
+ _post_code_table_loop(prefix + char, max_length)
122
+ end
123
+ end
124
+ end
125
+ end
126
+
127
+ init do
128
+ print_registers.clear
129
+ username_color_table_load
130
+ post_code_table_load
131
+
132
+ print_register :feed do |item|
133
+ code = post_code(item).colorize(38,5,8).strip
134
+ info = "♡ #{item.info.to_s.capitalize}".colorize(38,5,118).strip
135
+ type = item.data.type.colorize(38,5,238)
136
+ uname = item.data.user
137
+ like_count = item.data.like_count.to_s.colorize(36,48,5,0)
138
+ comment_count = item.data.comment_count.to_s.colorize(36,48,5,0)
139
+ uname = uname.colorize(username_color(uname))
140
+ content = item.data.content.colorize(0,55)
141
+ date = item.data.date
142
+
143
+ puts "[#{code}][#{info}] #{uname} #{content} {#{type}} L:#{like_count} C:#{comment_count}"
144
+ end
145
+
146
+ print_register :notification do |item|
147
+ info = "☢ #{item.info.to_s.capitalize}".colorize(0,31)
148
+ uname = item.data.user
149
+ uname = uname.colorize(username_color(uname))
150
+ content = item.data.content.colorize(0,55)
151
+
152
+ puts "[#{info}] #{uname} #{content}"
153
+ end
154
+
155
+ print_register :info do |item|
156
+ new_line
157
+ info = item.info.to_s.capitalize.colorize(0,31)
158
+ content = item.content
159
+ puts "[#{info}] #{content}"
160
+ end
161
+
162
+ print_register :error do |item|
163
+ new_line
164
+ info = "Error".colorize(0,31)
165
+ puts "[#{info}] #{item.content}"
166
+ end
167
+
168
+ print_register :help do |item|
169
+ puts item.content
170
+ puts "example: #{item.extra}" if item.extra
171
+ end
172
+
173
+ print_register :comment do |item|
174
+ puts " #{item.from} => #{item.message}"
175
+ end
176
+
177
+ print_register :like do |item|
178
+ puts " ♥ #{item.from}"
179
+ end
180
+ end
181
+
182
+ extend Output
183
+ end
@@ -0,0 +1,3 @@
1
+ module Facy
2
+ VERSION = "1.2.9.rc1"
3
+ end
metadata ADDED
@@ -0,0 +1,153 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: facy
3
+ version: !ruby/object:Gem::Version
4
+ version: 1.2.9.rc1
5
+ platform: ruby
6
+ authors:
7
+ - dxhuy1988
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2014-08-19 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: bundler
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - "~>"
18
+ - !ruby/object:Gem::Version
19
+ version: '1.5'
20
+ type: :runtime
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - "~>"
25
+ - !ruby/object:Gem::Version
26
+ version: '1.5'
27
+ - !ruby/object:Gem::Dependency
28
+ name: koala
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - "~>"
32
+ - !ruby/object:Gem::Version
33
+ version: '1.10'
34
+ type: :runtime
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - "~>"
39
+ - !ruby/object:Gem::Version
40
+ version: '1.10'
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'
55
+ - !ruby/object:Gem::Dependency
56
+ name: launchy
57
+ requirement: !ruby/object:Gem::Requirement
58
+ requirements:
59
+ - - "~>"
60
+ - !ruby/object:Gem::Version
61
+ version: '2.4'
62
+ type: :runtime
63
+ prerelease: false
64
+ version_requirements: !ruby/object:Gem::Requirement
65
+ requirements:
66
+ - - "~>"
67
+ - !ruby/object:Gem::Version
68
+ version: '2.4'
69
+ - !ruby/object:Gem::Dependency
70
+ name: eventmachine
71
+ requirement: !ruby/object:Gem::Requirement
72
+ requirements:
73
+ - - "~>"
74
+ - !ruby/object:Gem::Version
75
+ version: '1.0'
76
+ type: :runtime
77
+ prerelease: false
78
+ version_requirements: !ruby/object:Gem::Requirement
79
+ requirements:
80
+ - - "~>"
81
+ - !ruby/object:Gem::Version
82
+ version: '1.0'
83
+ - !ruby/object:Gem::Dependency
84
+ name: rmagick
85
+ requirement: !ruby/object:Gem::Requirement
86
+ requirements:
87
+ - - "~>"
88
+ - !ruby/object:Gem::Version
89
+ version: '2.13'
90
+ type: :runtime
91
+ prerelease: false
92
+ version_requirements: !ruby/object:Gem::Requirement
93
+ requirements:
94
+ - - "~>"
95
+ - !ruby/object:Gem::Version
96
+ version: '2.13'
97
+ description: 'facy: first colorful terminal client for facebook'
98
+ email:
99
+ - doxuanhuy@gmail.com
100
+ executables:
101
+ - facy
102
+ extensions: []
103
+ extra_rdoc_files: []
104
+ files:
105
+ - ".gitignore"
106
+ - Gemfile
107
+ - LICENSE.txt
108
+ - README.md
109
+ - Rakefile
110
+ - bin/facy
111
+ - config.yml
112
+ - facy.gemspec
113
+ - lib/facy.rb
114
+ - lib/facy/command.rb
115
+ - lib/facy/converter.rb
116
+ - lib/facy/core.rb
117
+ - lib/facy/core_ext.rb
118
+ - lib/facy/exception.rb
119
+ - lib/facy/facebook.rb
120
+ - lib/facy/get_token.rb
121
+ - lib/facy/help.rb
122
+ - lib/facy/image_viewer.rb
123
+ - lib/facy/input_queue.rb
124
+ - lib/facy/logger.rb
125
+ - lib/facy/option_parser.rb
126
+ - lib/facy/output.rb
127
+ - lib/facy/version.rb
128
+ homepage: https://github.com/huydx/facy
129
+ licenses:
130
+ - MIT
131
+ metadata: {}
132
+ post_install_message:
133
+ rdoc_options: []
134
+ require_paths:
135
+ - lib
136
+ required_ruby_version: !ruby/object:Gem::Requirement
137
+ requirements:
138
+ - - ">="
139
+ - !ruby/object:Gem::Version
140
+ version: '0'
141
+ required_rubygems_version: !ruby/object:Gem::Requirement
142
+ requirements:
143
+ - - ">"
144
+ - !ruby/object:Gem::Version
145
+ version: 1.3.1
146
+ requirements: []
147
+ rubyforge_project:
148
+ rubygems_version: 2.2.2
149
+ signing_key:
150
+ specification_version: 4
151
+ summary: 'facy: terminal client for facebook'
152
+ test_files: []
153
+ has_rdoc: