flickraw_objects 0.0.1

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: df7408e7add3e776767afd2eca89d358acca1dd0
4
+ data.tar.gz: 78a0f0d0149323c9b0f08d5911a0a71bfe91d84f
5
+ SHA512:
6
+ metadata.gz: fb5dbad31880564a5b5b01aece7d02a2527efafc5a609466380f9e44e81d9221f554754792c579b70a3c8bfd9cfb4524d0391f12e32ea69e8644aa82fa8899a4
7
+ data.tar.gz: 3218518629387806727fd88793a76950dc2d71fda8edf2f84e612317eb92d894096d2c8b7197252d5e42063fd4cef5c47c32af874321f78b6d6ee9c65878caee
data/README.md ADDED
@@ -0,0 +1,55 @@
1
+ # FlickrawObjects
2
+
3
+ Use this gem as a simple way to map Flickraw results to a object-orientated "data model".
4
+ Classes for People and Photos are included: These are there by way of an example. I anticipate
5
+ users of this Gem will map the data they need - it's easy to do.
6
+
7
+ ## Installation
8
+
9
+ Add this line to your application's Gemfile:
10
+
11
+ gem 'flickraw_objects'
12
+
13
+ And then execute:
14
+
15
+ $ bundle
16
+
17
+ Or install it yourself as:
18
+
19
+ $ gem install flickraw_objects
20
+
21
+ ## Usage
22
+
23
+ Create an initializer where you set your Flickr credentials.
24
+
25
+ ```ruby
26
+ FlickrawObjects.configure do |config|
27
+ config.api_key = "Your Api Key"
28
+ config.shared_secret = "Shared Secret"
29
+ end
30
+ ```
31
+ If you don't have them yet, you can apply for them [here](http://www.flickr.com/services/apps/create/apply).
32
+
33
+
34
+ Example usage:
35
+
36
+ ```ruby
37
+ person = FlickrawObjects::Person.find_by_username "chrisfield1968"
38
+ puts "realname: #{person.realname}" # get_info api call happens automatically
39
+
40
+ puts "photos_count #{person.photos_count}" # returns as an Integer
41
+ puts "person.first_date_taken #{person.first_date_taken}" # returns as a Date
42
+ puts "professional?: #{person.professional?}" # returns as a true/false
43
+
44
+ person.get_photos.each_with_index do |item,i|
45
+ puts "item #{i}: #{item.title} - #{item.url} - #{item.public?}"
46
+ end
47
+ ```
48
+
49
+ ## Contributing
50
+
51
+ 1. Fork it ( http://github.com/<my-github-username>/flickraw_objects/fork )
52
+ 2. Create your feature branch (`git checkout -b my-new-feature`)
53
+ 3. Commit your changes (`git commit -am 'Add some feature'`)
54
+ 4. Push to the branch (`git push origin my-new-feature`)
55
+ 5. Create new Pull Request
@@ -0,0 +1,115 @@
1
+ require "flickraw_objects/version"
2
+ require "flickraw_objects/attributes"
3
+ require "flickraw"
4
+ require 'date'
5
+
6
+ module FlickrawObjects
7
+
8
+ class Person
9
+ include Attributes
10
+
11
+ def self.find_by_username(username)
12
+ response = flickr.people.findByUsername username: username
13
+ Person.new(response)
14
+ end
15
+
16
+ def get_photos(params = {})
17
+ result = Array.new
18
+ response = flickr.people.getPhotos user_id: id
19
+ response.each do |photo|
20
+ result << Photo.new(photo)
21
+ end
22
+ result
23
+ end
24
+ alias photos get_photos
25
+
26
+ def get_photosets(params = {})
27
+ result = Array.new
28
+ response = flickr.photosets.getList user_id: id
29
+ response.each do |photoset|
30
+ result << Photoset.new(photoset)
31
+ end
32
+ result
33
+ end
34
+ alias photosets get_photosets
35
+
36
+ def get_info
37
+ @get_info ||= flickr.people.getInfo user_id: id
38
+ end
39
+
40
+
41
+ attribute :id
42
+ attribute :username
43
+
44
+ attribute_source :get_info
45
+ attribute :realname, path: [:realname]
46
+ attribute :photos_count, type: Integer, path: [:photos, :count]
47
+ attribute :professional, type: Boolean, path: [:ispro]
48
+ attribute :first_date_taken ,type: Time, path: [:photos, :firstdatetaken]
49
+ attribute :first_date, type: Time, path: [:firstdate]
50
+
51
+ end
52
+
53
+ class Photoset
54
+ include Attributes
55
+
56
+ def get_photos(params = {})
57
+ result = Array.new
58
+ response = flickr.photosets.getPhotos(photoset_id: id)
59
+ response["photo"].each do |photo|
60
+ result << Photo.new(photo)
61
+ end
62
+ result
63
+ end
64
+
65
+ alias photos get_photos
66
+
67
+ def get_info
68
+ @get_info ||= flickr.photosets.getInfo photoset_id: id
69
+ end
70
+
71
+ attribute :id
72
+ attribute :title
73
+ attribute :description
74
+
75
+ attribute_source :get_info
76
+ attribute :primary
77
+
78
+
79
+ end
80
+
81
+ class Photo
82
+ include Attributes
83
+ attribute :id
84
+ attribute :owner
85
+ attribute :secret
86
+ attribute :server
87
+ attribute :farm
88
+ attribute :title
89
+ attribute :public, type: Boolean, path: [:ispublic]
90
+ attribute :friend, type: Boolean, path: [:isfriend]
91
+ attribute :family, type: Boolean, path: [:isfamily]
92
+
93
+ def url_medium
94
+ FlickRaw.url(init)
95
+ end
96
+
97
+ def self.url(letter, meaning)
98
+ define_method("url_#{meaning}") do
99
+ FlickRaw.send("url_#{letter}", init)
100
+ end
101
+ end
102
+
103
+ url :s , :square
104
+ url :q , :large_square
105
+ url :t , :thumbnail
106
+ url :m , :small
107
+ url :n , :small_320
108
+ url :z , :medium_640
109
+ url :c , :medium_800
110
+ url :b , :large
111
+ url :o , :original
112
+
113
+ end
114
+
115
+ end
@@ -0,0 +1,119 @@
1
+ require "flickraw_objects/version"
2
+ require 'date'
3
+ require "flickraw_objects/configuration"
4
+ require "flickraw_objects/attributes"
5
+
6
+ module FlickrawObjects
7
+
8
+ class Person
9
+ include Attributes
10
+
11
+ def self.find_by_username(username)
12
+ response = flickr.people.findByUsername username: username
13
+ Person.new(response)
14
+ end
15
+
16
+ def get_info
17
+ @get_info ||= flickr.people.getInfo user_id: id
18
+ end
19
+
20
+ def get_photos
21
+ result = Array.new
22
+ response = flickr.people.getPhotos user_id: id
23
+ response.each do |photo|
24
+ result << Photo.new(photo)
25
+ end
26
+ result
27
+ end
28
+ alias photos get_photos
29
+
30
+ def get_photosets
31
+ PhotoSet.list(id)
32
+ end
33
+
34
+
35
+ attribute :id
36
+ attribute :username
37
+
38
+ attribute_source :get_info
39
+ attribute :realname, path: [:realname]
40
+ attribute :photos_count, type: Integer, path: [:photos, :count]
41
+ attribute :professional, type: Boolean, path: [:ispro]
42
+ attribute :first_date_taken ,type: Time, path: [:photos, :firstdatetaken]
43
+ attribute :first_date, type: Time, path: [:firstdate]
44
+
45
+ end
46
+
47
+ class PhotoSet
48
+ include Attributes
49
+
50
+ def self.list(user_id)
51
+ result = Array.new
52
+ response = flickr.photosets.getList user_id: user_id
53
+ response.each do |item|
54
+ result << PhotoSet.new(item)
55
+ end
56
+ result
57
+ end
58
+
59
+ def self.find(photoset_id)
60
+ info = flickr.photosets.getInfo photoset_id: photoset_id
61
+ result = PhotoSet.new(info)
62
+ result.get_info = info
63
+ result
64
+ end
65
+
66
+ attr_writer :get_info
67
+ def get_info
68
+ @get_info ||= flickr.photosets.getInfo photoset_id: id
69
+ end
70
+
71
+ def get_photos
72
+ result = Array.new
73
+ response = flickr.photosets.getPhotos photoset_id: id
74
+ puts response.inspect
75
+ response.photo.each do |photo|
76
+ result << Photo.new(photo)
77
+ end
78
+ result
79
+ end
80
+ alias photos get_photos
81
+
82
+ attribute :id
83
+ attribute :primary
84
+ attribute :secret
85
+ attribute :server
86
+ attribute :photos_count, type: Integer, path: [:count_photos]
87
+ attribute :views_count, type: Integer, path: [:count_views]
88
+ attribute :comments_count, type: Integer, path: [:count_comments]
89
+ attribute :videos_count, type: Integer, path: [:count_videos]
90
+ attribute :can_comment, type: Boolean
91
+ attribute :created, type: Time, path: [:date_create]
92
+ attribute :updated, type: Time, path: [:date_update]
93
+ attribute :title
94
+ attribute :description
95
+
96
+ attribute_source :get_info
97
+ attribute :owner
98
+
99
+ end
100
+
101
+ class Photo
102
+ include Attributes
103
+ attribute :id
104
+ attribute :owner
105
+ attribute :secret
106
+ attribute :server
107
+ attribute :farm
108
+ attribute :title
109
+ attribute :public, type: Boolean, path: [:ispublic]
110
+ attribute :friend, type: Boolean, path: [:isfriend]
111
+ attribute :family, type: Boolean, path: [:isfamily]
112
+
113
+ def url
114
+ "http://farm#{farm}.staticflickr.com/#{server}/#{id}_#{secret}.jpg"
115
+ end
116
+ end
117
+
118
+
119
+ end
@@ -0,0 +1,67 @@
1
+ module FlickrawObjects
2
+
3
+ module Attributes
4
+ def self.included(base)
5
+ base.extend(ClassMethods)
6
+ end
7
+
8
+ module Boolean
9
+ end
10
+
11
+ COERCIONS = {
12
+ String => lambda { |value| String(value) },
13
+ Boolean => lambda { |value| Integer(value) == 1 },
14
+ Integer => lambda { |value| Integer(value) },
15
+ Float => lambda { |value| Float(value) },
16
+ Time => lambda { |value|
17
+ begin
18
+ Time.at(Integer(value))
19
+ rescue
20
+ DateTime.parse(value).to_time
21
+ end
22
+ }
23
+ }
24
+
25
+ module ClassMethods
26
+
27
+ def attribute_source(value)
28
+ @attribute_source = value
29
+ end
30
+
31
+ def attribute(name, type: nil, path: [])
32
+ source = "@#{(@attribute_source || :init)}"
33
+ define_method(name) do
34
+ response = instance_variable_get(source)
35
+ if path.empty?
36
+ value = response.send name
37
+ else
38
+ value = path.inject(response) {|result, element| result.send element}
39
+ end
40
+ COERCIONS.fetch(type || String).call(value)
41
+ end
42
+ alias_method "#{name}?", name if type == Boolean
43
+ if @attribute_source
44
+ alias_method_chain(@attribute_source, name)
45
+ end
46
+
47
+ name
48
+ end
49
+
50
+ def alias_method_chain(first_method, second_method)
51
+ define_method("#{second_method}_with_#{first_method}") do
52
+ method(first_method).call
53
+ method("#{second_method}_without_#{first_method}").call
54
+ end
55
+ alias_method "#{second_method}_without_#{first_method}", second_method
56
+ alias_method second_method, "#{second_method}_with_#{first_method}"
57
+ end
58
+
59
+ end
60
+
61
+ attr_reader :init
62
+
63
+ def initialize(response)
64
+ @init = response
65
+ end
66
+ end
67
+ end
@@ -0,0 +1,70 @@
1
+ module FlickrawObjects
2
+
3
+ module Attributes
4
+ def self.included(base)
5
+ base.extend(ClassMethods)
6
+ end
7
+
8
+ module Boolean
9
+ end
10
+
11
+ module ClassMethods
12
+
13
+ def attribute_source(value)
14
+ @attribute_source = value
15
+ end
16
+
17
+ COERCIONS = {
18
+ Boolean => lambda { |value| Integer(value) == 1 },
19
+ Integer => lambda { |value| Integer(value) },
20
+ Float => lambda { |value| Float(value) },
21
+ Time =>
22
+ lambda { |value|
23
+ begin
24
+ Time.at(Integer(value))
25
+ rescue
26
+ DateTime.parse(value).to_time
27
+ end
28
+ },
29
+ String => lambda { |value| String(value) }
30
+ }
31
+
32
+ def attribute(name, type: nil, path: [])
33
+ source = "@#{(@attribute_source || :init)}"
34
+ coercion = COERCIONS.fetch(type || String)
35
+
36
+ define_method(name) do
37
+ response = instance_variable_get(source)
38
+ if path.empty?
39
+ value = response.send name
40
+ else
41
+ value = path.inject(response) {|result, element| result.send element}
42
+ end
43
+ coercion.call(value)
44
+ end
45
+ if @attribute_source
46
+ alias_method_chain(@attribute_source, name)
47
+ end
48
+ alias_method "#{name}?", name if type == Boolean
49
+
50
+ name
51
+ end
52
+
53
+ def alias_method_chain(first_method, second_method)
54
+ define_method("#{second_method}_with_#{first_method}") do
55
+ method(first_method).call
56
+ method("#{second_method}_without_#{first_method}").call
57
+ end
58
+ alias_method "#{second_method}_without_#{first_method}", second_method
59
+ alias_method second_method, "#{second_method}_with_#{first_method}"
60
+ end
61
+
62
+ end
63
+
64
+ attr_reader :init
65
+
66
+ def initialize(response)
67
+ @init = response
68
+ end
69
+ end
70
+ end
@@ -0,0 +1,3 @@
1
+ module FlickrawObjects
2
+ VERSION = "0.0.1"
3
+ end
metadata ADDED
@@ -0,0 +1,96 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: flickraw_objects
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.0.1
5
+ platform: ruby
6
+ authors:
7
+ - Chris Field
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2015-03-10 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: flickraw
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - "~>"
18
+ - !ruby/object:Gem::Version
19
+ version: '0.9'
20
+ type: :runtime
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - "~>"
25
+ - !ruby/object:Gem::Version
26
+ version: '0.9'
27
+ - !ruby/object:Gem::Dependency
28
+ name: bundler
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - "~>"
32
+ - !ruby/object:Gem::Version
33
+ version: '1.5'
34
+ type: :development
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - "~>"
39
+ - !ruby/object:Gem::Version
40
+ version: '1.5'
41
+ - !ruby/object:Gem::Dependency
42
+ name: rake
43
+ requirement: !ruby/object:Gem::Requirement
44
+ requirements:
45
+ - - ">="
46
+ - !ruby/object:Gem::Version
47
+ version: '0'
48
+ type: :development
49
+ prerelease: false
50
+ version_requirements: !ruby/object:Gem::Requirement
51
+ requirements:
52
+ - - ">="
53
+ - !ruby/object:Gem::Version
54
+ version: '0'
55
+ description: "Use this gem as a simple way to use Flickraw but with an object-orientated
56
+ \"data model\".\n Classes for Person, Photoset and Photos are included. I anticipate
57
+ \n users of this Gem will map other data they need. It's easy to do."
58
+ email:
59
+ - chris@christopherfield.co.uk
60
+ executables: []
61
+ extensions: []
62
+ extra_rdoc_files: []
63
+ files:
64
+ - README.md
65
+ - lib/flickraw_objects.rb
66
+ - lib/flickraw_objects.rb~
67
+ - lib/flickraw_objects/attributes.rb
68
+ - lib/flickraw_objects/attributes.rb~
69
+ - lib/flickraw_objects/version.rb
70
+ homepage: https://github.com/chrisfield/flickraw_objects
71
+ licenses:
72
+ - MIT
73
+ metadata: {}
74
+ post_install_message:
75
+ rdoc_options: []
76
+ require_paths:
77
+ - lib
78
+ required_ruby_version: !ruby/object:Gem::Requirement
79
+ requirements:
80
+ - - ">="
81
+ - !ruby/object:Gem::Version
82
+ version: '0'
83
+ required_rubygems_version: !ruby/object:Gem::Requirement
84
+ requirements:
85
+ - - ">="
86
+ - !ruby/object:Gem::Version
87
+ version: '0'
88
+ requirements: []
89
+ rubyforge_project:
90
+ rubygems_version: 2.2.1
91
+ signing_key:
92
+ specification_version: 4
93
+ summary: A slim, customisable object-oriented Flickr api that uses flickraw to do
94
+ all the communication.
95
+ test_files: []
96
+ has_rdoc: