motion-assets-library 1.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 ADDED
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA1:
3
+ metadata.gz: 3633cf26f6c7037696ca2ec5601588fd14d94a80
4
+ data.tar.gz: 00b355138600626ccba4df0bbd200d4771b26ba6
5
+ SHA512:
6
+ metadata.gz: d2415865906e9841d62c0ad0425ea562a5cca6c5efd7e82f20cb36becd6eb449a8f43598ba2088b68004b8d2aec7eabb39175deb90c9e6b875d51b833284ba1f
7
+ data.tar.gz: 7adf72433abdbc6f84a0fc4c78561366b13f90f0b6c842c840b99842fe67ffb7b63ee1c57ea9674564d22e5f51abbf1ef363cdbc9421b6e1352b7c20bc05d33d
data/README.md ADDED
@@ -0,0 +1,45 @@
1
+ # motion-assets-library
2
+
3
+ Access iOS media via ALAssetsLibrary
4
+
5
+ ## Usage
6
+
7
+ Instantiate a loader and set a delegate:
8
+
9
+ ``` ruby
10
+ Motion::AssetsLibrary::Loader.new.tap do |loader|
11
+ loader.delegate = self
12
+ end
13
+ ```
14
+
15
+ Implement the delegate method:
16
+
17
+ ``` ruby
18
+ def did_load_assets(assets)
19
+ self.assets = assets
20
+
21
+ colletion_view.reloadData
22
+ end
23
+ ```
24
+
25
+ ## Setup
26
+
27
+ Add this line to your application's Gemfile:
28
+
29
+ gem 'motion-assets-library'
30
+
31
+ And then execute:
32
+
33
+ $ bundle
34
+
35
+ Or install it yourself as:
36
+
37
+ $ gem install motion-assets-library
38
+
39
+ ## Contributing
40
+
41
+ 1. Fork it
42
+ 2. Create your feature branch (`git checkout -b my-new-feature`)
43
+ 3. Commit your changes (`git commit -am 'Add some feature'`)
44
+ 4. Push to the branch (`git push origin my-new-feature`)
45
+ 5. Create new Pull Request
@@ -0,0 +1,8 @@
1
+ unless defined?(Motion::Project::Config)
2
+ raise 'This file must be required within a RubyMotion project Rakefile.'
3
+ end
4
+
5
+ lib_dir_path = File.dirname(File.expand_path(__FILE__))
6
+ Motion::Project::App.setup do |app|
7
+ app.files.unshift(Dir.glob(File.join(lib_dir_path, 'project/**/*.rb')))
8
+ end
@@ -0,0 +1,6 @@
1
+ class Motion
2
+ class AssetsLibrary
3
+ VERSION = '1.0'
4
+ DelegateMethodUnimplemented = Class.new(RuntimeError)
5
+ end
6
+ end
@@ -0,0 +1,35 @@
1
+ class Motion
2
+ class AssetsLibrary
3
+ class AssetWrapper
4
+ attr_accessor :asset
5
+
6
+ def initialize(asset)
7
+ self.asset = asset
8
+ end
9
+
10
+ def asset_url
11
+ asset.valueForProperty('ALAssetPropertyAssetURL')
12
+ end
13
+
14
+ def thumbnail
15
+ asset.thumbnail
16
+ end
17
+
18
+ def filename
19
+ default_representation.filename
20
+ end
21
+
22
+ def cgi_image
23
+ default_representation.CGImageWithOptions(nil)
24
+ end
25
+
26
+ def type
27
+ asset.valueForProperty('ALAssetPropertyType')
28
+ end
29
+
30
+ def default_representation
31
+ asset.defaultRepresentation
32
+ end
33
+ end
34
+ end
35
+ end
@@ -0,0 +1,84 @@
1
+ class Motion
2
+ class AssetsLibrary
3
+ class Loader
4
+ attr_accessor :delegate, :observer
5
+
6
+ def initialize
7
+ listen_to_asset_library
8
+ end
9
+
10
+ def load_assets
11
+ assets_library.enumerateGroupsWithTypes(
12
+ ALAssetsGroupSavedPhotos,
13
+ usingBlock: album_block,
14
+ failureBlock: album_failure_block)
15
+ end
16
+
17
+ def reset_assets
18
+ @_assets = []
19
+
20
+ load_assets
21
+ end
22
+
23
+ def assets
24
+ @_assets ||= []
25
+ end
26
+
27
+ private
28
+
29
+ def listen_to_asset_library
30
+ self.observer = notification_center.addObserver(
31
+ WeakRef.new(self),
32
+ selector: 'asset_library_did_change:',
33
+ name: ALAssetsLibraryChangedNotification,
34
+ object: nil)
35
+ end
36
+
37
+ def asset_library_did_change(notification)
38
+ reset_assets
39
+ end
40
+
41
+ def dealloc
42
+ notification_center.removeObserver(observer)
43
+ end
44
+
45
+ def album_block
46
+ lambda { |group, stop| group.enumerateAssetsUsingBlock(asset_block) if group }
47
+ end
48
+
49
+ def album_failure_block
50
+ lambda { |error| p "Error: #{error[0].description}" }
51
+ end
52
+
53
+ def asset_block
54
+ lambda do |asset, index, stop|
55
+ if asset
56
+ add_asset(asset)
57
+ else
58
+ notify_load
59
+ end
60
+ end
61
+ end
62
+
63
+ def notify_load
64
+ unless delegate.respondsToSelector 'did_load_assets:'
65
+ raise DelegateMethodUnimplemented, 'did_load_assets: must be implemented'
66
+ end
67
+
68
+ delegate.did_load_assets(assets)
69
+ end
70
+
71
+ def add_asset(asset)
72
+ assets << AssetsLibrary::AssetWrapper.new(asset)
73
+ end
74
+
75
+ def assets_library
76
+ @_assets_library ||= ALAssetsLibrary.alloc.init
77
+ end
78
+
79
+ def notification_center
80
+ NSNotificationCenter.defaultCenter
81
+ end
82
+ end
83
+ end
84
+ end
metadata ADDED
@@ -0,0 +1,63 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: motion-assets-library
3
+ version: !ruby/object:Gem::Version
4
+ version: '1.0'
5
+ platform: ruby
6
+ authors:
7
+ - Devon Blandin
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2013-07-05 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: rake
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - '>='
18
+ - !ruby/object:Gem::Version
19
+ version: '0'
20
+ type: :development
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - '>='
25
+ - !ruby/object:Gem::Version
26
+ version: '0'
27
+ description: Easy access to iOS media assets via ALAssetsLibrary
28
+ email:
29
+ - dblandin@gmail.com
30
+ executables: []
31
+ extensions: []
32
+ extra_rdoc_files: []
33
+ files:
34
+ - README.md
35
+ - lib/motion-assets-library.rb
36
+ - lib/project/assets_library/asset_wrapper.rb
37
+ - lib/project/assets_library/loader.rb
38
+ - lib/project/assets_library.rb
39
+ homepage: https://github.com/dblandin/motion-assets-library
40
+ licenses:
41
+ - MIT
42
+ metadata: {}
43
+ post_install_message:
44
+ rdoc_options: []
45
+ require_paths:
46
+ - lib
47
+ required_ruby_version: !ruby/object:Gem::Requirement
48
+ requirements:
49
+ - - '>='
50
+ - !ruby/object:Gem::Version
51
+ version: '0'
52
+ required_rubygems_version: !ruby/object:Gem::Requirement
53
+ requirements:
54
+ - - '>='
55
+ - !ruby/object:Gem::Version
56
+ version: '0'
57
+ requirements: []
58
+ rubyforge_project:
59
+ rubygems_version: 2.0.0
60
+ signing_key:
61
+ specification_version: 4
62
+ summary: Easy access to iOS media assets via ALAssetsLibrary
63
+ test_files: []