itunes-client 0.0.2 → 0.0.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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 5645b5129783ab41989f48719cc052f25a5f835b
4
- data.tar.gz: 7253a509ac6e66791d49dc71dca6acad9a7f4dd3
3
+ metadata.gz: 17d1042e67a74536457080f89d209446fae44ac2
4
+ data.tar.gz: 751e7a6dd53f7caeca542d1d3fd09f8b283a3669
5
5
  SHA512:
6
- metadata.gz: 9a57212b58a551bbc99ca4d70027ad5ffa308cbae0f121932c3e8e0e2b04a672fab0ed95f0a54762192b6d06df31301a2c4144cfee2fbcdfa067ed89695d463c
7
- data.tar.gz: a89c43842d98e6f0a22d06348907c1ea9ae78be9c7579b6a3272489863c870d1d0f57da57ea60c8f211d9fde9b8e104c10a13b183b49cdd09cd58e6a6fa51054
6
+ metadata.gz: 01743c0db4c302fd96ace4fa2d844414e30884392262b6f9db525f05bf2344f905944ea39f6e18b9718ad44c332e73d046f3e784e1a267832f496a34aa3bf8ee
7
+ data.tar.gz: 8e6795ebb879c1cae8e7c8678bde1c26f9255cda3677d0bb4ccf7f0d1d5fc9ab9904f0c697ccb713f9fa19602b9f268585e1cc32f87db49c2a65a129f7f8de19
data/lib/itunes/track.rb CHANGED
@@ -58,6 +58,17 @@ module Itunes
58
58
  self
59
59
  end
60
60
 
61
+ def update_attributes(attributes)
62
+ raise ArgumentError.new('Invalid argument is given') unless attributes.is_a?(Hash)
63
+
64
+ records = update_attribute_records(attributes)
65
+ update_targets = { persistent_id: self.persistent_id, update_records: records }
66
+ script_name = generate_script_from_template('track/updater.tmpl.scpt', update_targets)
67
+ execute_template_based_script(script_name)
68
+ attributes.each { |key, val| send("#{key}=", val) }
69
+ self
70
+ end
71
+
61
72
  def assign_attributes_by(track_attributes)
62
73
  ATTRIBUTES.each { |attr| send("#{attr}=", track_attributes[attr.to_s]) }
63
74
  end
@@ -94,5 +105,14 @@ module Itunes
94
105
  Application.instance
95
106
  end
96
107
 
108
+ def update_attribute_records(args)
109
+ records = []
110
+ args.each do |key, val|
111
+ if ATTRIBUTES.include?(key)
112
+ records << "set #{key.to_s.gsub('_', ' ')} of specified_track to \"#{val}\""
113
+ end
114
+ end
115
+ records.join("\n")
116
+ end
97
117
  end
98
118
  end
@@ -1,3 +1,3 @@
1
1
  module Itunes
2
- VERSION = "0.0.2"
2
+ VERSION = "0.0.3"
3
3
  end
@@ -0,0 +1,4 @@
1
+ tell application "iTunes"
2
+ set specified_track to (some track whose persistent ID is "#{persistent_id}")
3
+ #{update_records}
4
+ end tell
@@ -5,9 +5,13 @@ require 'itunes-client'
5
5
  include Itunes
6
6
 
7
7
  describe Track do
8
- let(:track) { Track.new(persistent_id: base_persistent_id) }
8
+ let(:track) do
9
+ Track.new(persistent_id: base_persistent_id, name: base_name, album: base_album)
10
+ end
9
11
  let(:app) { Application.instance }
10
12
  let(:base_persistent_id) { 'foo' }
13
+ let(:base_name) { 'base name' }
14
+ let(:base_album) { 'base album' }
11
15
 
12
16
  describe '#initialize' do
13
17
  subject(:init) { Track.new(args) }
@@ -84,6 +88,42 @@ describe Track do
84
88
  end
85
89
  end
86
90
 
91
+ describe '#update_attributes' do
92
+ subject(:update) { track.update_attributes(attributes) }
93
+
94
+ context 'when nil argument is given' do
95
+ let(:attributes) { nil }
96
+ it 'raises an ArgumentError' do
97
+ expect { update }.to raise_error(ArgumentError)
98
+ end
99
+ end
100
+
101
+ context 'when hash argument is given' do
102
+ let(:new_scpt) { 'new.scpt' }
103
+ let(:new_name) { 'new name' }
104
+ let(:new_album) { 'new album' }
105
+ let(:attributes) { { name: new_name, album: new_album } }
106
+
107
+ before do
108
+ track.stub(:generate_script_from_template).
109
+ with('track/updater.tmpl.scpt', persistent_id: track.persistent_id, update_records: "set name of specified_track to \"#{new_name}\"\nset album of specified_track to \"#{new_album}\"").
110
+ and_return(new_scpt)
111
+ track.stub(:execute_template_based_script).
112
+ with(new_scpt)
113
+ end
114
+
115
+ it 'updates given attributes' do
116
+ update
117
+ expect(track.name).to be_eql(new_name)
118
+ expect(track.album).to be_eql(new_album)
119
+ end
120
+
121
+ it 'does not update persistent_id' do
122
+ expect { update }.not_to change { track.persistent_id }.from(base_persistent_id)
123
+ end
124
+ end
125
+ end
126
+
87
127
  describe '.find_by' do
88
128
  subject(:find) { Track.find_by(arg) }
89
129
  let(:finder_scpt) { 'track/finder.tmpl.scpt' }
@@ -102,7 +142,7 @@ describe Track do
102
142
  let(:name) { 'Hey Jude' }
103
143
 
104
144
  before do
105
- Track.stub(:generate_script_from_templae).
145
+ Track.stub(:generate_script_from_template).
106
146
  and_return(new_scpt)
107
147
 
108
148
  Track.stub(:execute_template_based_script).
@@ -42,7 +42,29 @@ describe Itunes::Util::Executor do
42
42
  File.exist?(script_full_path)
43
43
  }.from(true).to(false)
44
44
  end
45
-
46
45
  end
47
46
 
47
+ describe '#generate_script_from_template' do
48
+ subject(:generate_script_from_template) { klass.generate_script_from_template(path, args) }
49
+
50
+ let(:path) { 'spec.scpt' }
51
+ let(:args) { { target: 'bar' } }
52
+
53
+ before do
54
+ script_path = "#{klass.script_base_dir}/#{path}"
55
+ open(script_path, 'w') { |f| f.write('#{target}') }
56
+ end
57
+
58
+ after do
59
+ FileUtils.rm("#{klass.script_base_dir}/#{path}")
60
+ end
61
+ it 'returns script path which replaces template key' do
62
+ script_path = generate_script_from_template
63
+ body = ''
64
+ open("#{klass.script_tmp_dir}/#{script_path}", 'r') do |f|
65
+ f.each { |line| body << line }
66
+ end
67
+ expect(body).to eq('bar')
68
+ end
69
+ end
48
70
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: itunes-client
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.2
4
+ version: 0.0.3
5
5
  platform: ruby
6
6
  authors:
7
7
  - ryo katsuma
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2013-06-09 00:00:00.000000000 Z
11
+ date: 2013-06-16 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rake
@@ -181,6 +181,7 @@ files:
181
181
  - scripts/track/delete.scpt
182
182
  - scripts/track/finder.tmpl.scpt
183
183
  - scripts/track/play.scpt
184
+ - scripts/track/updater.tmpl.scpt
184
185
  - spec/itunes/application_spec.rb
185
186
  - spec/itunes/track_spec.rb
186
187
  - spec/itunes/util/executor_spec.rb