imessage 0.1.1 → 0.2.0

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,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: daf8c0ba467145de9550f33f588536ccd42ebcbf
4
- data.tar.gz: 9c1ebbeb7170042fef1131c1ddb8ef8d990d6a08
3
+ metadata.gz: 719afa93b7a4faddb701be1378360054ee6cc3f8
4
+ data.tar.gz: 0b1bcc95053547eb357114164f94f90a0fc4181e
5
5
  SHA512:
6
- metadata.gz: 38497957a3158ab72cf337a651a448fb7126b4814d9362cf5748b5e105bd2c0a9680a1199414a79c4da7f541775ca1dbf1f8edf53ae0c6dbfb91539f8deea3a4
7
- data.tar.gz: cb885e1137527cae11ec475e30930e785e820bed279bafe0fcfba497508cdd5e56425bf5d0882896f945ba880259ce4365613c5fffad30e674783db4db6b1876
6
+ metadata.gz: 5806aa4ccb91ee8ca67666cad3d7ee74e9de5649d58875dc3198d14ad29e89a422a537f4fd13ab47a845476a2f76f6e0fcf612877be3e6bbf6a6f4425cca9015
7
+ data.tar.gz: 6e2ad71c81fb861dd07b971c8359a2a9e03d9a94e076aec159580b3be0cb03d5a0ae14c5fcd6fac79524c565356be3a54cb4afbcf82ccd0bc077185f9f5e582a
data/.gitignore CHANGED
@@ -15,3 +15,4 @@ spec/reports
15
15
  test/tmp
16
16
  test/version_tmp
17
17
  tmp
18
+ build
@@ -1,5 +1,5 @@
1
1
  language: ruby
2
- script: "bundle exec rspec spec"
2
+ script: "bundle exec rake -f Rakefile.dev"
3
3
  rvm:
4
4
  - 2.0.0
5
5
  - ruby-head
@@ -2,6 +2,10 @@
2
2
 
3
3
  ## master
4
4
 
5
+ ## [v0.2.0](https://github.com/linjunpop/imessage/tree/v0.2.0)
6
+
7
+ * Make it possible to run imessage standalone.
8
+
5
9
  ## [v0.1.1](https://github.com/linjunpop/imessage/tree/v0.1.1)
6
10
 
7
11
  * Fixes fail to send messages without attachment. [#3](https://github.com/linjunpop/imessage/issues/3)
@@ -17,4 +21,3 @@
17
21
  ## [v0.0.1](https://github.com/linjunpop/imessage/tree/v0.0.1)
18
22
 
19
23
  * Implement send iMessage.
20
-
data/README.md CHANGED
@@ -23,8 +23,23 @@ Or install it yourself as:
23
23
 
24
24
  ## Usage
25
25
 
26
+ ```shell
27
+ Usage: imessage [options]
28
+
29
+ Specific options:
30
+ -t, --text [TEXT] The TEXT to deliver
31
+ -a, --attachment [ATTACHMENT] Add an attachment
32
+ -c, --contacts x,y,z Develier message to these CONTACTS
33
+
34
+ Common options:
35
+ -h, --help Prints this help
36
+ --version Show version
37
+ ```
38
+
39
+ ## Example
40
+
26
41
  ```
27
- $ imessage send "hello" --to "foo@example.com" --attachment 'bar.png'
42
+ $ imessage --text "hello" --contacts "foo@example.com" --attachment 'bar.png'
28
43
  ```
29
44
 
30
45
  ## [Changelog](CHANGELOG.md)
data/Rakefile CHANGED
@@ -1,7 +1,27 @@
1
- require "bundler/gem_tasks"
2
- require 'rspec/core/rake_task'
1
+ desc "Build standalone version of imessage"
2
+ task :standalone do
3
+ mkdir_p "build"
4
+ File.open("build/imessage", "w") do |f|
5
+ f.puts "#!/usr/bin/env ruby"
6
+ f.puts "# This file is generated from https://github.com/linjunpop/imessage using `rake standalone`"
7
+ f.puts "# any changes will be overwritten."
3
8
 
4
- RSpec::Core::RakeTask.new(:spec)
9
+ f.puts File.read("lib/imessage.rb").gsub(/^require_relative.*\n/, '')
10
+ f.puts File.read("lib/imessage/version.rb")
11
+ f.puts File.read("lib/imessage/parser.rb")
12
+ f.puts File.read("lib/imessage/sender.rb")
5
13
 
6
- task default: :spec
14
+ f.puts File.read("bin/imessage")
15
+ .gsub(/^require_relative.*\n/, '')
16
+ .gsub(%r{#!/usr/bin/env ruby}, '')
17
+ end
18
+ sh 'chmod +x build/imessage'
19
+ end
7
20
 
21
+ desc "Install standalone script"
22
+ task :install => :standalone do
23
+ prefix = ENV['PREFIX'] || ENV['prefix'] || '/usr/local'
24
+
25
+ FileUtils.mkdir_p "#{prefix}/bin"
26
+ FileUtils.cp "build/imessage", "#{prefix}/bin"
27
+ end
@@ -0,0 +1,6 @@
1
+ require "bundler/gem_tasks"
2
+ require 'rspec/core/rake_task'
3
+
4
+ RSpec::Core::RakeTask.new(:spec)
5
+
6
+ task default: :spec
@@ -1,58 +1,14 @@
1
1
  #!/usr/bin/env ruby
2
- require 'gli'
3
- require 'imessage'
4
2
 
5
- include GLI::App
3
+ require_relative '../lib/imessage'
6
4
 
7
- program_desc 'Command line tool to send iMessage.'
5
+ ARGV << '--help' if ARGV.empty?
8
6
 
9
- version Imessage::VERSION
7
+ options = Imessage::Parser.parse(ARGV)
10
8
 
11
- desc 'Send iMessage'
12
- long_desc <<-EOS
13
- Example: $ imessage send "hello" --to "foo@example.com" --attachment 'oh.png'
14
- EOS
15
-
16
- command :send do |c|
17
- c.desc 'Contacts'
18
- c.flag [:to, :contacts], type: Array
19
- c.flag [:a, :attachment], type: String
20
-
21
- c.action do |global_options, options, args|
22
- help_now!('Message or Attachment is required') if !options[:attachment] && args.empty?
23
- help_now!('Contacts is required') unless options[:contacts]
24
-
25
- if attachment = options[:attachment]
26
- if File.exists?(attachment)
27
- attachment = File.expand_path(attachment)
28
- else
29
- exit_now!("Can not find file #{attachment}")
30
- end
31
- end
32
-
33
- sender = Imessage::Sender.new
34
- sender.deliver(
35
- text: args.first,
36
- attachment: attachment,
37
- contacts: options[:contacts]
38
- )
39
- end
40
- end
41
-
42
- pre do |global,command,options,args|
43
- true
44
- end
45
-
46
- post do |global,command,options,args|
47
- # Post logic here
48
- # Use skips_post before a command to skip this
49
- # block on that command only
50
- end
51
-
52
- on_error do |exception|
53
- # Error logic here
54
- # return false to skip default error handling
55
- true
56
- end
57
-
58
- exit run(ARGV)
9
+ sender = Imessage::Sender.new
10
+ sender.deliver({
11
+ text: options.text,
12
+ attachment: options.attachment,
13
+ contacts: options.contacts
14
+ })
@@ -21,6 +21,5 @@ Gem::Specification.new do |spec|
21
21
  spec.add_development_dependency "bundler", "~> 1.3"
22
22
  spec.add_development_dependency "rake"
23
23
  spec.add_development_dependency "rspec", '~> 2.14'
24
-
25
- spec.add_runtime_dependency 'gli','~> 2.8.1'
24
+ spec.add_development_dependency "pry"
26
25
  end
@@ -1,5 +1,6 @@
1
- require 'imessage/version'
2
- require 'imessage/sender'
1
+ require_relative 'imessage/version'
2
+ require_relative 'imessage/parser'
3
+ require_relative 'imessage/sender'
3
4
 
4
5
  module Imessage
5
6
  end
@@ -0,0 +1,60 @@
1
+ require 'optparse'
2
+ require 'ostruct'
3
+
4
+ module Imessage
5
+ class Parser
6
+ class << self
7
+ def parse(options)
8
+ OpenStruct.new.tap do |args|
9
+ args.contacts = []
10
+ args.text = nil
11
+ args.attachment = nil
12
+ args.verbose = false
13
+
14
+ opt_parser(args).parse!(options)
15
+ end
16
+ end
17
+
18
+ private
19
+
20
+ def opt_parser(args)
21
+ OptionParser.new do |opts|
22
+ opts.banner = "Usage: imessage [options]"
23
+
24
+ opts.separator ""
25
+ opts.separator "Specific options:"
26
+
27
+ opts.on("-t", "--text [TEXT]", String, "The TEXT to deliver") do |text|
28
+ args.text = text
29
+ end
30
+
31
+ opts.on("-a", "--attachment [ATTACHMENT]", String, "Add an attachment") do |attachment|
32
+ if File.exists?(attachment)
33
+ args.attachment = File.expand_path(attachment)
34
+ else
35
+ puts "Can not find file #{attachment}"
36
+ exit(1)
37
+ end
38
+ end
39
+
40
+ opts.on("-c", "--contacts x,y,z", Array, "Develier message to these CONTACTS") do |contacts|
41
+ args.contacts = contacts
42
+ end
43
+
44
+ opts.separator ""
45
+ opts.separator "Common options:"
46
+
47
+ opts.on("-h", "--help", "Prints this help") do
48
+ puts opts
49
+ exit
50
+ end
51
+
52
+ opts.on_tail("--version", "Show version") do
53
+ puts "imessage v#{Imessage::VERSION}"
54
+ exit
55
+ end
56
+ end
57
+ end
58
+ end
59
+ end
60
+ end
@@ -1,7 +1,5 @@
1
1
  module Imessage
2
2
  class Sender
3
- TYPES = [:text, :attachment]
4
-
5
3
  def deliver(options = {text:nil, attachment:nil, contacts: []})
6
4
  options[:contacts].each do |contact|
7
5
  _deliver(options[:text], options[:attachment], contact)
@@ -12,13 +10,36 @@ module Imessage
12
10
 
13
11
  def _deliver(text, attachment, contact)
14
12
  unless text.nil?
15
- apple_script_file = File.join(File.dirname(File.expand_path(__FILE__)), 'scripts/send_text.applescript')
16
- `osascript #{apple_script_file} '#{contact}' '#{text}'`
13
+ script = <<-SCRIPT
14
+ on run argv
15
+ set toAddress to first item of argv
16
+ set message to second item of argv
17
+ tell application "Messages"
18
+ send message to buddy toAddress of (service 1 whose service type is iMessage)
19
+ end tell
20
+ end run
21
+ SCRIPT
22
+ `osascript -e '#{script}' '#{contact}' '#{text}'`
17
23
  end
18
24
 
19
25
  unless attachment.nil?
20
- apple_script_file = File.join(File.dirname(File.expand_path(__FILE__)), 'scripts/send_attachment.applescript')
21
- `osascript #{apple_script_file} '#{contact}' '#{attachment}'`
26
+ script = <<-SCRIPT
27
+ on run argv
28
+ set toAddress to first item of argv
29
+ set theFilePath to second item of argv
30
+ set theFile to POSIX file theFilePath
31
+ tell application "System Events"
32
+ if exists file theFilePath then
33
+ tell application "Messages"
34
+ send theFile to buddy toAddress of (service 1 whose service type is iMessage)
35
+ end tell
36
+ else
37
+ error "File not exist."
38
+ end if
39
+ end tell
40
+ end run
41
+ SCRIPT
42
+ `osascript -e'#{script}' '#{contact}' '#{attachment}'`
22
43
  end
23
44
  end
24
45
  end
@@ -1,3 +1,3 @@
1
1
  module Imessage
2
- VERSION = "0.1.1"
2
+ VERSION = "0.2.0"
3
3
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: imessage
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.1
4
+ version: 0.2.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Jun Lin
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2015-07-05 00:00:00.000000000 Z
11
+ date: 2015-08-07 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler
@@ -53,19 +53,19 @@ dependencies:
53
53
  - !ruby/object:Gem::Version
54
54
  version: '2.14'
55
55
  - !ruby/object:Gem::Dependency
56
- name: gli
56
+ name: pry
57
57
  requirement: !ruby/object:Gem::Requirement
58
58
  requirements:
59
- - - "~>"
59
+ - - ">="
60
60
  - !ruby/object:Gem::Version
61
- version: 2.8.1
62
- type: :runtime
61
+ version: '0'
62
+ type: :development
63
63
  prerelease: false
64
64
  version_requirements: !ruby/object:Gem::Requirement
65
65
  requirements:
66
- - - "~>"
66
+ - - ">="
67
67
  - !ruby/object:Gem::Version
68
- version: 2.8.1
68
+ version: '0'
69
69
  description: Command line tool to send iMessage.
70
70
  email:
71
71
  - linjunpop@gmail.com
@@ -82,11 +82,11 @@ files:
82
82
  - LICENSE.txt
83
83
  - README.md
84
84
  - Rakefile
85
+ - Rakefile.dev
85
86
  - bin/imessage
86
87
  - imessage.gemspec
87
88
  - lib/imessage.rb
88
- - lib/imessage/scripts/send_attachment.applescript
89
- - lib/imessage/scripts/send_text.applescript
89
+ - lib/imessage/parser.rb
90
90
  - lib/imessage/sender.rb
91
91
  - lib/imessage/version.rb
92
92
  - spec/spec_helper.rb
@@ -116,3 +116,4 @@ specification_version: 4
116
116
  summary: Command line tool to send iMessage.
117
117
  test_files:
118
118
  - spec/spec_helper.rb
119
+ has_rdoc:
@@ -1,15 +0,0 @@
1
- on run argv
2
- set toAddress to first item of argv
3
- set theFilePath to second item of argv
4
- set theFile to POSIX file theFilePath
5
-
6
- tell application "System Events"
7
- if exists file theFilePath then
8
- tell application "Messages"
9
- send theFile to buddy toAddress of (service 1 whose service type is iMessage)
10
- end tell
11
- else
12
- error "File not exist."
13
- end if
14
- end tell
15
- end run
@@ -1,7 +0,0 @@
1
- on run argv
2
- set toAddress to first item of argv
3
- set message to second item of argv
4
- tell application "Messages"
5
- send message to buddy toAddress of (service 1 whose service type is iMessage)
6
- end tell
7
- end run