simple_tumblr 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.
@@ -0,0 +1,3 @@
1
+ class SimpleTumblr
2
+ VERSION = '0.0.1'
3
+ end
@@ -0,0 +1,89 @@
1
+ require 'active_support/core_ext'
2
+ require 'httparty'
3
+
4
+ class SimpleTumblr
5
+ include Enumerable, HTTParty
6
+
7
+ attr_accessor :options
8
+ base_uri 'api.tumblr.com'
9
+
10
+ def initialize(options = {})
11
+ self.options = options
12
+ end
13
+
14
+ def posts(options = {})
15
+ self.options = self.options.merge(options)
16
+ self
17
+ end
18
+
19
+ %w[text quote link answer video audio photo].each do |type|
20
+ define_method(type) do
21
+ posts(type: type)
22
+ end
23
+
24
+ define_method(type.pluralize) do
25
+ posts(type: type)
26
+ end
27
+ end
28
+
29
+ %w[id limit offset tag type].each do |scope|
30
+ define_method(scope) do |arg|
31
+ posts(scope.to_sym => arg)
32
+ end
33
+ end
34
+
35
+ def each(&block)
36
+ response = self.class.get("/v2/blog/#{self.options.delete(:hostname)}/posts", query: @options)
37
+ raise response['meta']['msg'] unless response.success?
38
+
39
+ response['response']['posts'].map { |data| Post.new(data) }.each(&block)
40
+ end
41
+
42
+ class << self
43
+ def method_missing(*args)
44
+ method, options = args
45
+
46
+ new.respond_to?(method) ? new(options).send(method) : super
47
+ end
48
+ end
49
+
50
+ class Post
51
+ def initialize(data)
52
+ self.data = data.with_indifferent_access
53
+ end
54
+
55
+ delegate :inspect, :[], to: :data
56
+
57
+ def <=>(other)
58
+ self[:timestamp] <=> other[:timestamp]
59
+ end
60
+
61
+ def method_missing(*args)
62
+ method = args.first.to_sym
63
+ data.has_key?(method) ? data[method] : super
64
+ end
65
+
66
+ def title
67
+ attribute_presence(:title, :caption, :text)
68
+ end
69
+ alias_method :to_s, :title
70
+
71
+ def body
72
+ attribute_presence(:body)
73
+ end
74
+
75
+ def url
76
+ attribute_presence(:url, :link_url, :post_url)
77
+ end
78
+
79
+ private
80
+ attr_accessor :data
81
+
82
+ def attribute_presence(*attributes)
83
+ begin
84
+ attribute = self[attributes.shift]
85
+ end while attribute.blank?
86
+ attribute
87
+ end
88
+ end
89
+ end
metadata ADDED
@@ -0,0 +1,136 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: simple_tumblr
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.0.1
5
+ prerelease:
6
+ platform: ruby
7
+ authors:
8
+ - Mario Uher
9
+ autorequire:
10
+ bindir: bin
11
+ cert_chain: []
12
+ date: 2012-01-09 00:00:00.000000000 Z
13
+ dependencies:
14
+ - !ruby/object:Gem::Dependency
15
+ name: activesupport
16
+ requirement: &70121662354260 !ruby/object:Gem::Requirement
17
+ none: false
18
+ requirements:
19
+ - - ~>
20
+ - !ruby/object:Gem::Version
21
+ version: 3.x
22
+ type: :runtime
23
+ prerelease: false
24
+ version_requirements: *70121662354260
25
+ - !ruby/object:Gem::Dependency
26
+ name: httparty
27
+ requirement: &70121662353340 !ruby/object:Gem::Requirement
28
+ none: false
29
+ requirements:
30
+ - - ! '>='
31
+ - !ruby/object:Gem::Version
32
+ version: '0'
33
+ type: :runtime
34
+ prerelease: false
35
+ version_requirements: *70121662353340
36
+ - !ruby/object:Gem::Dependency
37
+ name: i18n
38
+ requirement: &70121662352300 !ruby/object:Gem::Requirement
39
+ none: false
40
+ requirements:
41
+ - - ! '>='
42
+ - !ruby/object:Gem::Version
43
+ version: '0'
44
+ type: :development
45
+ prerelease: false
46
+ version_requirements: *70121662352300
47
+ - !ruby/object:Gem::Dependency
48
+ name: minitest
49
+ requirement: &70121662351260 !ruby/object:Gem::Requirement
50
+ none: false
51
+ requirements:
52
+ - - ! '>='
53
+ - !ruby/object:Gem::Version
54
+ version: '0'
55
+ type: :development
56
+ prerelease: false
57
+ version_requirements: *70121662351260
58
+ - !ruby/object:Gem::Dependency
59
+ name: purdytest
60
+ requirement: &70121662350620 !ruby/object:Gem::Requirement
61
+ none: false
62
+ requirements:
63
+ - - ! '>='
64
+ - !ruby/object:Gem::Version
65
+ version: '0'
66
+ type: :development
67
+ prerelease: false
68
+ version_requirements: *70121662350620
69
+ - !ruby/object:Gem::Dependency
70
+ name: rake
71
+ requirement: &70121662349840 !ruby/object:Gem::Requirement
72
+ none: false
73
+ requirements:
74
+ - - ! '>='
75
+ - !ruby/object:Gem::Version
76
+ version: '0'
77
+ type: :development
78
+ prerelease: false
79
+ version_requirements: *70121662349840
80
+ - !ruby/object:Gem::Dependency
81
+ name: vcr
82
+ requirement: &70121662365120 !ruby/object:Gem::Requirement
83
+ none: false
84
+ requirements:
85
+ - - ! '>='
86
+ - !ruby/object:Gem::Version
87
+ version: '0'
88
+ type: :development
89
+ prerelease: false
90
+ version_requirements: *70121662365120
91
+ - !ruby/object:Gem::Dependency
92
+ name: webmock
93
+ requirement: &70121662364280 !ruby/object:Gem::Requirement
94
+ none: false
95
+ requirements:
96
+ - - ! '>='
97
+ - !ruby/object:Gem::Version
98
+ version: '0'
99
+ type: :development
100
+ prerelease: false
101
+ version_requirements: *70121662364280
102
+ description: SimpleTumblr provides a simple – ActiveRecord::Relation like – way to
103
+ interact with the Tumblr API.
104
+ email: uher.mario@gmail.com
105
+ executables: []
106
+ extensions: []
107
+ extra_rdoc_files: []
108
+ files:
109
+ - lib/simple_tumblr/version.rb
110
+ - lib/simple_tumblr.rb
111
+ homepage: https://www.github.com/haihappen/simple_tumblr
112
+ licenses: []
113
+ post_install_message:
114
+ rdoc_options: []
115
+ require_paths:
116
+ - lib
117
+ required_ruby_version: !ruby/object:Gem::Requirement
118
+ none: false
119
+ requirements:
120
+ - - ! '>='
121
+ - !ruby/object:Gem::Version
122
+ version: '0'
123
+ required_rubygems_version: !ruby/object:Gem::Requirement
124
+ none: false
125
+ requirements:
126
+ - - ! '>='
127
+ - !ruby/object:Gem::Version
128
+ version: '0'
129
+ requirements: []
130
+ rubyforge_project:
131
+ rubygems_version: 1.8.13
132
+ signing_key:
133
+ specification_version: 3
134
+ summary: A simple way to use the Tumblr™ API in Ruby.
135
+ test_files: []
136
+ has_rdoc: