tryphon-pige-client 0.0.2 → 0.0.3

Sign up to get free protection for your applications and to get access to all the features.
@@ -6,19 +6,25 @@ Pige::Client.box_url = "http://pigebox.local"
6
6
  include Pige::Client
7
7
 
8
8
  ChunkScheduler.define do |schedule|
9
- # Schedule Chunks for yesterday
10
- schedule.day = Date.today.prev_day
9
+ # Schedule Chunks for yesterday by default
10
+ day_back = ARGV.first ? ARGV.first.to_i : 1
11
+ schedule.day = Date.today - day_back
11
12
 
12
13
  # Doesn't really Chunks, only log orders
13
14
  schedule.dry_run = true
14
15
 
16
+ # Default Attributes
17
+ # can be overridden in each create
18
+ schedule.default_attributes[:margin] = 5.minutes
19
+ #schedule.default_attributes[:format] = "ogg"
20
+
15
21
  # Daily Chunks
16
22
  schedule.create :title => "Flash 13h %d_%m_%Y", :begin => "13:00", :duration => 15.minutes, :margin => 2.minutes
17
23
 
18
24
  # Only monday Chunks
19
25
  schedule.on(:monday) do
20
26
  create :title => "Emission Cinema lundi %d_%m_%Y", :begin => "17:00", :duration => 1.hour
21
- create :title => "Chronique 'A Table'", :begin => "13:00", :duration => 5.minutes, :margin => 5.minutes
27
+ create :title => "Chronique 'A Table'", :begin => "13:00", :duration => 5.minutes
22
28
  end
23
29
 
24
30
  # Only tuesday Chunks
@@ -27,25 +33,25 @@ ChunkScheduler.define do |schedule|
27
33
  end
28
34
 
29
35
  schedule.on(:wednesday) do
30
-
36
+ # ...
31
37
  end
32
38
 
33
39
  schedule.on(:thursday) do
34
-
40
+ # ...
35
41
  end
36
42
 
37
43
  schedule.on(:friday) do
38
-
44
+ # ...
39
45
  end
40
46
 
41
47
  schedule.on(:saturday) do
42
-
48
+ # ...
43
49
  end
44
50
 
45
51
  schedule.on(:sunday) do
46
-
52
+ # ...
47
53
  end
48
54
  end
49
55
 
50
-
51
-
56
+ # Remove oldest Chunks
57
+ #Pige::Client::Chunk.destroy_all(:older_than => 1.days.ago)
@@ -1,54 +1,8 @@
1
1
  module Pige::Client
2
- class Chunk
3
- include HTTParty
2
+ class Chunk < Resource
4
3
 
5
- # debug_output $stderr
6
- format :json
7
-
8
- attr_accessor :begin, :completion_rate, :created_at, :end, :format, :id, :source_id, :title, :updated_at
9
-
10
- def initialize(attributes = {})
11
- attributes.each { |k,v| send "#{k}=", v }
12
- end
13
-
14
- def older_than?(date)
15
- self.created_at < date
16
- end
17
-
18
- def destroy
19
- self.class.destroy(self)
20
- end
21
-
22
- def self.create(attributes = {})
23
- post "#{Pige::Client.box_url}/sources/1/chunks", :query => { :chunk => attributes }
24
- end
25
-
26
- def self.all
27
- get("#{Pige::Client.box_url}/sources/1/chunks.json").map do |attributes|
28
- Chunk.new attributes["chunk"]
29
- end
30
- end
31
-
32
- def self.older_than(date)
33
- all.select do |chunk|
34
- chunk.older_than?(date)
35
- end
36
- end
37
-
38
- def self.destroy_all(conditions = {})
39
- chunks =
40
- if older_than = conditions[:older_than]
41
- Chunk.older_than(older_than)
42
- else
43
- Chunk.all
44
- end
45
-
46
- chunks.each(&:destroy)
47
- end
48
-
49
- def self.destroy(chunk)
50
- delete "#{Pige::Client.box_url}/sources/1/chunks/#{chunk.id}.json"
51
- end
4
+ attr_accessor :begin, :completion_rate, :end, :format, :title
5
+ time_attribute :begin, :end
52
6
 
53
7
  end
54
8
  end
@@ -20,7 +20,8 @@ module Pige::Client
20
20
  end
21
21
  end
22
22
 
23
- def create(attributes = {})
23
+ def create(attributes = {}, options = {})
24
+ options = { :delay => 1 }.merge(options)
24
25
  attributes = default_attributes.merge(attributes)
25
26
 
26
27
  [:begin, :end].each do |endpoint|
@@ -45,7 +46,10 @@ module Pige::Client
45
46
  end
46
47
 
47
48
  puts "Create Chunk with #{attributes.inspect}"
48
- Pige::Client::Chunk.create attributes unless dry_run?
49
+ unless dry_run?
50
+ Pige::Client::Chunk.create attributes
51
+ sleep options[:delay].to_i if options[:delay]
52
+ end
49
53
  end
50
54
 
51
55
  end
@@ -1,7 +1,7 @@
1
1
  class Numeric
2
2
 
3
3
  def hours
4
- self * 3600
4
+ self.minutes * 60
5
5
  end
6
6
  alias_method :hour, :hours
7
7
 
@@ -10,4 +10,13 @@ class Numeric
10
10
  end
11
11
  alias_method :minute, :minutes
12
12
 
13
+ def days
14
+ self.hours * 24
15
+ end
16
+ alias_method :day, :days
17
+
18
+ def ago
19
+ Time.now - self
20
+ end
21
+
13
22
  end
@@ -0,0 +1,34 @@
1
+ module Pige::Client
2
+ class Label < Resource
3
+ attr_accessor :timestamp, :name
4
+ time_attribute :timestamp
5
+
6
+ def older_than?(date)
7
+ self.timestamp < date
8
+ end
9
+
10
+ def self.all
11
+ [].tap do |labels|
12
+ page = 1
13
+ empty_page = false
14
+
15
+ begin
16
+ labels_in_page = page(page)
17
+ unless labels_in_page.empty?
18
+ labels.push *labels_in_page
19
+ page += 1
20
+ else
21
+ empty_page = true
22
+ end
23
+ end until empty_page
24
+ end
25
+ end
26
+
27
+ def self.page(number)
28
+ get("#{Pige::Client.box_url}/sources/1/labels.json?page=#{number}").map do |attributes|
29
+ Label.new attributes["label"]
30
+ end
31
+ end
32
+
33
+ end
34
+ end
@@ -0,0 +1,74 @@
1
+ module Pige::Client
2
+ class Resource
3
+ include HTTParty
4
+
5
+ # debug_output $stderr
6
+ format :json
7
+
8
+ def initialize(attributes = {})
9
+ attributes.each { |k,v| send "#{k}=", v }
10
+ end
11
+
12
+ def self.time_attribute(*names)
13
+ names.each do |time_attribute|
14
+ define_method("#{time_attribute}=") do |value|
15
+ value = Time.parse(value) if String === value
16
+ instance_variable_set "@#{time_attribute}", value
17
+ end
18
+ end
19
+ end
20
+
21
+ attr_accessor :created_at, :updated_at
22
+ time_attribute :created_at, :updated_at
23
+
24
+ attr_accessor :id, :source_id
25
+
26
+ def older_than?(date)
27
+ self.created_at < date
28
+ end
29
+
30
+ def destroy
31
+ self.class.destroy(self)
32
+ end
33
+
34
+ def self.resource_name
35
+ name.downcase.split("::").last
36
+ end
37
+
38
+ def self.base_url
39
+ "#{Pige::Client.box_url}/sources/1/#{resource_name}s"
40
+ end
41
+
42
+ def self.create(attributes = {})
43
+ post "#{base_url}.json", :query => { resource_name => attributes }
44
+ end
45
+
46
+ def self.all
47
+ get("#{Pige::Client.box_url}/sources/1/chunks.json").map do |attributes|
48
+ Chunk.new attributes["chunk"]
49
+ end
50
+ end
51
+
52
+ def self.older_than(date)
53
+ all.select do |resource|
54
+ resource.older_than?(date)
55
+ end
56
+ end
57
+
58
+ def self.destroy_all(conditions = {})
59
+ resources =
60
+ if older_than = conditions[:older_than]
61
+ older_than(older_than)
62
+ else
63
+ all
64
+ end
65
+
66
+ resources.each(&:destroy)
67
+ end
68
+
69
+ def self.destroy(resource)
70
+ delete "#{base_url}/#{resource.id}.json"
71
+ end
72
+
73
+ end
74
+ end
@@ -1,6 +1,6 @@
1
1
  module Pige
2
2
  module Client
3
- VERSION = "0.0.2"
3
+ VERSION = "0.0.3"
4
4
  end
5
5
  end
6
6
 
@@ -2,6 +2,8 @@ require 'httparty'
2
2
 
3
3
  require "pige/client"
4
4
  require "pige/client/version"
5
+ require "pige/client/resource"
6
+ require "pige/client/label"
5
7
  require "pige/client/chunk"
6
8
  require "pige/client/chunk_scheduler"
7
9
  require "pige/client/core_ext"
@@ -0,0 +1 @@
1
+ [{"label":{"updated_at":"2011-05-26T12:14:06+02:00","source_id":1,"id":51,"name":"Test","timestamp":"2011-05-26T12:14:02+02:00","created_at":"2011-05-26T12:14:06+02:00"}},{"label":{"updated_at":"2011-05-26T11:55:25+02:00","source_id":1,"id":50,"name":"Test","timestamp":"2011-05-26T11:55:21+02:00","created_at":"2011-05-26T11:55:25+02:00"}},{"label":{"updated_at":"2011-03-04T22:16:10+01:00","source_id":1,"id":49,"name":"test","timestamp":"2011-03-04T22:16:10+01:00","created_at":"2011-03-04T22:16:10+01:00"}},{"label":{"updated_at":"2011-03-04T22:14:41+01:00","source_id":1,"id":48,"name":"test","timestamp":"2011-03-04T22:14:41+01:00","created_at":"2011-03-04T22:14:41+01:00"}},{"label":{"updated_at":"2011-03-04T22:13:33+01:00","source_id":1,"id":47,"name":"test","timestamp":"2011-03-04T22:13:33+01:00","created_at":"2011-03-04T22:13:33+01:00"}},{"label":{"updated_at":"2011-03-04T22:12:45+01:00","source_id":1,"id":46,"name":"test","timestamp":"2011-03-04T22:12:45+01:00","created_at":"2011-03-04T22:12:45+01:00"}},{"label":{"updated_at":"2011-03-04T22:09:37+01:00","source_id":1,"id":45,"name":"test","timestamp":"2011-03-04T22:09:37+01:00","created_at":"2011-03-04T22:09:37+01:00"}},{"label":{"updated_at":"2011-03-04T22:09:34+01:00","source_id":1,"id":44,"name":"test","timestamp":"2011-03-04T22:09:34+01:00","created_at":"2011-03-04T22:09:34+01:00"}},{"label":{"updated_at":"2011-03-04T22:09:32+01:00","source_id":1,"id":43,"name":"test","timestamp":"2011-03-04T22:09:32+01:00","created_at":"2011-03-04T22:09:32+01:00"}},{"label":{"updated_at":"2011-03-04T21:11:29+01:00","source_id":1,"id":42,"name":"test","timestamp":"2011-03-04T21:11:29+01:00","created_at":"2011-03-04T21:11:29+01:00"}}]
@@ -2,26 +2,12 @@ require 'spec_helper'
2
2
 
3
3
  describe Chunk do
4
4
 
5
- def fixture_file(file)
6
- File.expand_path("../../../fixtures/#{file}", __FILE__)
7
- end
8
-
9
- def fixture_content(file)
10
- File.read fixture_file(file)
11
- end
12
-
13
5
  describe ".all" do
14
6
 
15
7
  before do
16
8
  FakeWeb.register_uri(:get, "http://pigebox.local/sources/1/chunks.json", :body => fixture_content("chunks.json"))
17
9
  end
18
10
 
19
- RSpec::Matchers.define :be_an_array_of do |expected|
20
- match do |actual|
21
- Array === actual and actual.all? { |e| expected === e }
22
- end
23
- end
24
-
25
11
  it "should return a array of Chunks" do
26
12
  Chunk.all.should be_an_array_of(Chunk)
27
13
  end
@@ -0,0 +1,115 @@
1
+ require 'spec_helper'
2
+
3
+ describe Label do
4
+
5
+ describe ".page" do
6
+
7
+ before do
8
+ FakeWeb.register_uri(:get, "http://pigebox.local/sources/1/labels.json?page=2", :body => fixture_content("labels.json"))
9
+ end
10
+
11
+ it "should return a array of Labels" do
12
+ Label.page(2).should be_an_array_of(Label)
13
+ end
14
+
15
+ it "should create Labels with received data" do
16
+ Label.page(2).first.name.should == "Test"
17
+ end
18
+
19
+ end
20
+
21
+ describe ".all" do
22
+
23
+ let(:label) { mock }
24
+
25
+ it "should concat pages until an empty one" do
26
+ Label.should_receive(:page).with(1).and_return([label])
27
+ Label.should_receive(:page).with(2).and_return([label])
28
+ Label.should_receive(:page).with(3).and_return([])
29
+
30
+ Label.all.should == [label, label]
31
+ end
32
+
33
+ end
34
+
35
+ describe ".destroy_all" do
36
+
37
+ let(:label) { mock }
38
+
39
+ context "without conditions" do
40
+
41
+ it "should destroy all Labels returned by Label.all" do
42
+ Label.stub :all => [label]
43
+ label.should_receive(:destroy)
44
+ Label.destroy_all
45
+ end
46
+
47
+ end
48
+
49
+ context "with :older_than condition" do
50
+
51
+ let(:date) { Time.now }
52
+
53
+ it "should destroy all Labels returned by Label.older_than" do
54
+ Label.should_receive(:older_than).with(date).and_return([label])
55
+ label.should_receive(:destroy)
56
+ Label.destroy_all :older_than => date
57
+ end
58
+
59
+ end
60
+
61
+ end
62
+
63
+ describe "#older_than" do
64
+
65
+ let(:label) { Label.new }
66
+ let(:date) { Time.now }
67
+
68
+ it "should be true when the Label timestamp is before the given date" do
69
+ label.timestamp = date - 1
70
+ label.should be_older_than(date)
71
+ end
72
+
73
+ it "should be false when the Label timestamp is after the given date" do
74
+ label.timestamp = date + 1
75
+ label.should_not be_older_than(date)
76
+ end
77
+
78
+ end
79
+
80
+ describe ".older_than" do
81
+
82
+ let(:label) { mock }
83
+ let(:date) { Time.now }
84
+
85
+ before do
86
+ Label.stub :all => [label]
87
+ end
88
+
89
+ it "should select Labels older than specified date" do
90
+ label.should_receive(:older_than?).with(date).and_return(true)
91
+ Label.older_than(date).should include(label)
92
+ end
93
+
94
+ it "should ignore Labels not older than specified date" do
95
+ label.should_receive(:older_than?).with(date).and_return(false)
96
+ Label.older_than(date).should_not include(label)
97
+ end
98
+
99
+ end
100
+
101
+ describe "#destroy" do
102
+
103
+ let(:label) { Label.new :id => 1 }
104
+
105
+ it "should send a DELETE request with Label id" do
106
+ FakeWeb.register_uri :delete, "http://pigebox.local/sources/1/labels/#{label.id}.json", {}
107
+ label.destroy
108
+ end
109
+
110
+ end
111
+
112
+ end
113
+
114
+
115
+
@@ -0,0 +1,5 @@
1
+ RSpec::Matchers.define :be_an_array_of do |expected|
2
+ match do |actual|
3
+ Array === actual and actual.all? { |e| expected === e }
4
+ end
5
+ end
@@ -0,0 +1,7 @@
1
+ def fixture_file(file)
2
+ File.expand_path("../../fixtures/#{file}", __FILE__)
3
+ end
4
+
5
+ def fixture_content(file)
6
+ File.read fixture_file(file)
7
+ end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: tryphon-pige-client
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.2
4
+ version: 0.0.3
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -10,7 +10,7 @@ authors:
10
10
  autorequire:
11
11
  bindir: bin
12
12
  cert_chain: []
13
- date: 2012-12-06 00:00:00.000000000 Z
13
+ date: 2012-12-08 00:00:00.000000000 Z
14
14
  dependencies:
15
15
  - !ruby/object:Gem::Dependency
16
16
  name: fakeweb
@@ -144,12 +144,18 @@ files:
144
144
  - lib/pige/client/chunk.rb
145
145
  - lib/pige/client/chunk_scheduler.rb
146
146
  - lib/pige/client/core_ext.rb
147
+ - lib/pige/client/label.rb
148
+ - lib/pige/client/resource.rb
147
149
  - lib/pige/client/version.rb
148
150
  - lib/tryphon-pige-client.rb
149
151
  - spec/fixtures/chunks.json
152
+ - spec/fixtures/labels.json
150
153
  - spec/pige/client/chunk_spec.rb
154
+ - spec/pige/client/label_spec.rb
151
155
  - spec/spec_helper.rb
156
+ - spec/support/array_matchers.rb
152
157
  - spec/support/fakeweb.rb
158
+ - spec/support/fixtures.rb
153
159
  - tasks/rdoc.rake
154
160
  - tasks/rspec.rake
155
161
  - tryphon-pige-client.gemspec
@@ -167,7 +173,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
167
173
  version: '0'
168
174
  segments:
169
175
  - 0
170
- hash: 1808611327852964082
176
+ hash: 3105553272469934144
171
177
  required_rubygems_version: !ruby/object:Gem::Requirement
172
178
  none: false
173
179
  requirements:
@@ -176,7 +182,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
176
182
  version: '0'
177
183
  segments:
178
184
  - 0
179
- hash: 1808611327852964082
185
+ hash: 3105553272469934144
180
186
  requirements: []
181
187
  rubyforge_project:
182
188
  rubygems_version: 1.8.23
@@ -185,6 +191,10 @@ specification_version: 3
185
191
  summary: Tryphon PigeBox API ruby client
186
192
  test_files:
187
193
  - spec/fixtures/chunks.json
194
+ - spec/fixtures/labels.json
188
195
  - spec/pige/client/chunk_spec.rb
196
+ - spec/pige/client/label_spec.rb
189
197
  - spec/spec_helper.rb
198
+ - spec/support/array_matchers.rb
190
199
  - spec/support/fakeweb.rb
200
+ - spec/support/fixtures.rb