vj-sdk 0.2.1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (88) hide show
  1. data/.gitignore +4 -0
  2. data/LICENSE +20 -0
  3. data/README.markdown +0 -0
  4. data/README.rdoc +7 -0
  5. data/Rakefile +70 -0
  6. data/VERSION.yml +4 -0
  7. data/lib/core_ext/cgi.rb +12 -0
  8. data/lib/core_ext/hash.rb +52 -0
  9. data/lib/core_ext/object.rb +15 -0
  10. data/lib/core_ext/string.rb +11 -0
  11. data/lib/sdk_connection_harness.rb +101 -0
  12. data/lib/videojuicer/asset/audio.rb +13 -0
  13. data/lib/videojuicer/asset/base.rb +80 -0
  14. data/lib/videojuicer/asset/flash.rb +8 -0
  15. data/lib/videojuicer/asset/image.rb +10 -0
  16. data/lib/videojuicer/asset/text.rb +8 -0
  17. data/lib/videojuicer/asset/video.rb +22 -0
  18. data/lib/videojuicer/campaign.rb +19 -0
  19. data/lib/videojuicer/campaign_policy.rb +116 -0
  20. data/lib/videojuicer/criterion/base.rb +56 -0
  21. data/lib/videojuicer/criterion/date_range.rb +15 -0
  22. data/lib/videojuicer/criterion/geolocation.rb +18 -0
  23. data/lib/videojuicer/criterion/request.rb +15 -0
  24. data/lib/videojuicer/criterion/time.rb +15 -0
  25. data/lib/videojuicer/criterion/week_day.rb +20 -0
  26. data/lib/videojuicer/oauth/multipart_helper.rb +96 -0
  27. data/lib/videojuicer/oauth/proxy_factory.rb +18 -0
  28. data/lib/videojuicer/oauth/request_proxy.rb +280 -0
  29. data/lib/videojuicer/presentation.rb +38 -0
  30. data/lib/videojuicer/preset.rb +29 -0
  31. data/lib/videojuicer/promo/base.rb +72 -0
  32. data/lib/videojuicer/resource/base.rb +175 -0
  33. data/lib/videojuicer/resource/collection.rb +36 -0
  34. data/lib/videojuicer/resource/embeddable.rb +30 -0
  35. data/lib/videojuicer/resource/errors.rb +17 -0
  36. data/lib/videojuicer/resource/inferrable.rb +141 -0
  37. data/lib/videojuicer/resource/property_registry.rb +145 -0
  38. data/lib/videojuicer/resource/relationships/belongs_to.rb +39 -0
  39. data/lib/videojuicer/resource/types.rb +28 -0
  40. data/lib/videojuicer/session.rb +74 -0
  41. data/lib/videojuicer/shared/configurable.rb +103 -0
  42. data/lib/videojuicer/shared/exceptions.rb +32 -0
  43. data/lib/videojuicer/user.rb +43 -0
  44. data/lib/videojuicer.rb +110 -0
  45. data/spec/assets/audio_spec.rb +25 -0
  46. data/spec/assets/flash_spec.rb +24 -0
  47. data/spec/assets/image_spec.rb +25 -0
  48. data/spec/assets/text_spec.rb +24 -0
  49. data/spec/assets/video_spec.rb +25 -0
  50. data/spec/belongs_to_spec.rb +45 -0
  51. data/spec/campaign_policy_spec.rb +41 -0
  52. data/spec/campaign_spec.rb +25 -0
  53. data/spec/collection_spec.rb +31 -0
  54. data/spec/criterion/date_range_spec.rb +24 -0
  55. data/spec/criterion/geolocation_spec.rb +23 -0
  56. data/spec/criterion/request_spec.rb +23 -0
  57. data/spec/criterion/time_spec.rb +23 -0
  58. data/spec/criterion/week_day_spec.rb +23 -0
  59. data/spec/files/audio.mp3 +0 -0
  60. data/spec/files/empty_file +0 -0
  61. data/spec/files/flash.swf +0 -0
  62. data/spec/files/image.jpg +0 -0
  63. data/spec/files/text.txt +1 -0
  64. data/spec/files/video.mov +0 -0
  65. data/spec/helpers/be_equal_to.rb +26 -0
  66. data/spec/helpers/spec_fixtures.rb +227 -0
  67. data/spec/helpers/spec_helper.rb +53 -0
  68. data/spec/presentation_spec.rb +25 -0
  69. data/spec/preset_spec.rb +30 -0
  70. data/spec/promos/audio_spec.rb +23 -0
  71. data/spec/promos/image_spec.rb +24 -0
  72. data/spec/promos/text_spec.rb +23 -0
  73. data/spec/promos/video_spec.rb +23 -0
  74. data/spec/property_registry_spec.rb +130 -0
  75. data/spec/request_proxy_spec.rb +90 -0
  76. data/spec/session_spec.rb +98 -0
  77. data/spec/shared/asset_spec.rb +39 -0
  78. data/spec/shared/configurable_spec.rb +75 -0
  79. data/spec/shared/dependent_spec.rb +40 -0
  80. data/spec/shared/embeddable_spec.rb +34 -0
  81. data/spec/shared/model_spec.rb +74 -0
  82. data/spec/shared/resource_spec.rb +140 -0
  83. data/spec/spec.opts +3 -0
  84. data/spec/user_spec.rb +42 -0
  85. data/spec/videojuicer_spec.rb +122 -0
  86. data/tasks/vj-core.rb +72 -0
  87. data/vj-sdk.gemspec +168 -0
  88. metadata +209 -0
@@ -0,0 +1,103 @@
1
+ =begin
2
+
3
+ Configurable is a mixin intended for internal use within the SDK.
4
+
5
+ It provides a suite of helper methods to objects that use the scoped configuration
6
+ system within the root Videojuicer module.
7
+
8
+ Objects that are Configurable have a local configuration, which will always be
9
+ respected, and a shared configuration object which merges the current configuration
10
+ scope with the local configuration.
11
+
12
+ For instance:
13
+
14
+ # Assuming that the Videojuicer default configuration is a simple hash containing {:in_a_scope=>false}
15
+
16
+ a_configurable.configure! :foo=>"bar" # config[:foo] will ALWAYS == "bar" for this object.
17
+ a_configurable.local_config #=> {:foo=>"bar"}
18
+ a_configurable.config #=> {:in_a_scope=>false, :foo=>"bar"}
19
+
20
+ # Now let's enter a scope:
21
+ Videojuicer.enter_scope :in_a_scope=>true, :foo=>"not bar"
22
+
23
+ a_configurable.local_config #=> {:foo=>"bar"}
24
+ a_configurable.config #=> {:in_a_scope=>true, :foo=>"bar"}
25
+
26
+ # And leave it again..
27
+ Videojuicer.exit_scope
28
+
29
+ a_configurable.local_config #=> {:foo=>"bar"}
30
+ a_configurable.config #=> {:in_a_scope=>false, :foo=>"bar"}
31
+
32
+ =end
33
+
34
+ module Videojuicer
35
+ module Configurable
36
+
37
+ attr_accessor :local_config
38
+
39
+ # Sets the local configuration for this Configurable.
40
+ # The local configuration will always be respected regardless of the
41
+ # current controller scope.
42
+ def configure!(options={})
43
+ self.local_config = options
44
+ end
45
+
46
+ # Returns the shared configuration, which is the current
47
+ # controller scope merged with the local config.
48
+ def config
49
+ Videojuicer.current_scope.merge(local_config || {})
50
+ end
51
+
52
+ # Executes a block of code within the scope of this Configurable's
53
+ # local configuration.
54
+ #
55
+ # This is achieved by pushing the local configuration onto the controller's
56
+ # scope stack, executing the given block and then exiting the scope. During
57
+ # this procedure the local configuration on this object will remain unchanged.
58
+ #
59
+ # Example:
60
+ # Videojuicer.configure! :bar=>"baz"
61
+ # configurable_a.configure! :foo=>"a"
62
+ # configurable_b.configure! :foo=>"b"
63
+ #
64
+ # configurable_a.scope do |config|
65
+ # config[:bar] #=> "baz"
66
+ # config[:foo] #=> "a"
67
+ #
68
+ # configurable_b.scope do |config|
69
+ # config[:foo] #=> "b"
70
+ # end
71
+ #
72
+ # config[:foo] #=> "a"
73
+ # end
74
+ def scope(&block)
75
+ Videojuicer.enter_scope local_config
76
+ block_out = block.call(Videojuicer.current_scope)
77
+ Videojuicer.exit_scope
78
+ return block_out
79
+ end
80
+
81
+ # Retrieves the host from the configuration options.
82
+ def host; config[:host]; end
83
+ # Retrieves the port from the configuration options.
84
+ def port; config[:port]; end
85
+ # Retrieves the consumer_key from the configuration options.
86
+ def consumer_key; config[:consumer_key]; end
87
+ # Retrieves the consumer_secret from the configuration options.
88
+ def consumer_secret; config[:consumer_secret]; end
89
+ # Retrieves the token from the configuration options.
90
+ def token; config[:token]; end
91
+ # Retrieves the token_secret from the configuration options.
92
+ def token_secret; config[:token_secret]; end
93
+ # Retrieves the api_version from the configuration options.
94
+ def api_version; config[:api_version]; end
95
+ # Retrieves the protocol from the configuration options.
96
+ def protocol; config[:protocol]; end
97
+ # Retrieves the seed name from the configuration options.
98
+ def seed_name; config[:seed_name]; end
99
+ # Retrieves the user_id from the configuration options. Master tokens can be used to authenticate as any user.
100
+ def user_id; config[:user_id]; end
101
+
102
+ end
103
+ end
@@ -0,0 +1,32 @@
1
+ module Videojuicer
2
+ module Exceptions
3
+
4
+ class NotAuthorised < ::StandardError; end
5
+
6
+ # Raised when a method requiring instance-specific data from the remote API
7
+ # is called on an object that does not exist remotely.
8
+ class NoResource < ::RuntimeError; end
9
+
10
+ # Raised when a record cannot be saved because it has attributes that are well rubbish.
11
+ class InvalidRecord < ::RuntimeError; end
12
+
13
+ # Raised when a request is completely buggered by the remote API.
14
+ class RemoteApplicationError < ::StandardError; end
15
+
16
+ # Raised when the remote resource refuses to carry out an action.
17
+ class Forbidden < ::StandardError; end
18
+
19
+ # Raised when status is 401
20
+ class Unauthenticated < ::StandardError; end
21
+
22
+ # Raised when status is 406
23
+ class NotAcceptable < ::StandardError; end
24
+
25
+ # Raised when status is 411
26
+ class ContentLengthRequired < ::StandardError; end
27
+
28
+ # Raised on an unclassified exception
29
+ class UnhandledHTTPStatus < ::StandardError; end
30
+
31
+ end
32
+ end
@@ -0,0 +1,43 @@
1
+ module Videojuicer
2
+ class User
3
+ include Videojuicer::Resource
4
+ include Videojuicer::Exceptions
5
+
6
+ property :name, String
7
+ property :login, String
8
+ property :email, String
9
+ property :password, String
10
+ property :password_confirmation, String
11
+ property :created_at, DateTime
12
+ property :updated_at, DateTime
13
+
14
+ # Authenticates the given login and password and returns
15
+ # a user if the details are correct. Requires a Master token.
16
+ def self.authenticate(login, password)
17
+ proxy = Videojuicer::OAuth::RequestProxy.new
18
+ begin
19
+ jobj = JSON.parse(proxy.get("/users/authenticate.json", :login=>login, :password=>password).body)
20
+ o = new(:id=>jobj["id"])
21
+ o.reload
22
+ return o
23
+ rescue NoResource =>e
24
+ return nil
25
+ end
26
+ end
27
+
28
+ # Manage virtual attributes that are not sent back to the API
29
+ attr_accessor :roles
30
+ def has_role?(symbol)
31
+ roles.include?(symbol.to_s)
32
+ end
33
+
34
+ def add_role(*symbols)
35
+ symbols.each {|r| proxy_for(config).post(resource_path(:add_role), :role=>r) }
36
+ end
37
+
38
+ def remove_role(*symbols)
39
+ symbols.each {|r| proxy_for(config).post(resource_path(:remove_role), :role=>r) }
40
+ end
41
+
42
+ end
43
+ end
@@ -0,0 +1,110 @@
1
+ $:.unshift File.dirname(__FILE__) # For use/testing when no gem is installed
2
+
3
+ # Gem and stdlib dependencies
4
+ require 'rubygems'
5
+ require 'cgi'
6
+ require 'json'
7
+ require 'hmac-sha1'
8
+ require 'net/http'
9
+
10
+ # Core ext
11
+ require 'core_ext/hash'
12
+ require 'core_ext/string'
13
+ require 'core_ext/object'
14
+ require 'core_ext/cgi'
15
+ # Core mixins
16
+ require 'videojuicer/shared/exceptions'
17
+ require 'videojuicer/shared/configurable'
18
+ # Authentication and authorisation
19
+ require 'videojuicer/oauth/request_proxy'
20
+ require 'videojuicer/oauth/proxy_factory'
21
+ # Resource handling
22
+ require 'videojuicer/resource/embeddable'
23
+ require 'videojuicer/resource/types'
24
+ require 'videojuicer/resource/relationships/belongs_to'
25
+ require 'videojuicer/resource/errors'
26
+ require 'videojuicer/resource/collection'
27
+ require 'videojuicer/resource/inferrable'
28
+ require 'videojuicer/resource/property_registry'
29
+ require 'videojuicer/resource/base'
30
+ require 'videojuicer/session'
31
+ # Frontend models
32
+ require 'videojuicer/user'
33
+ require 'videojuicer/campaign'
34
+ require 'videojuicer/campaign_policy'
35
+ require 'videojuicer/presentation'
36
+ require 'videojuicer/asset/audio'
37
+ require 'videojuicer/asset/flash'
38
+ require 'videojuicer/asset/image'
39
+ require 'videojuicer/asset/text'
40
+ require 'videojuicer/asset/video'
41
+ require 'videojuicer/promo/base'
42
+ require 'videojuicer/criterion/date_range'
43
+ require 'videojuicer/criterion/geolocation'
44
+ require 'videojuicer/criterion/request'
45
+ require 'videojuicer/criterion/time'
46
+ require 'videojuicer/criterion/week_day'
47
+ require 'videojuicer/promo/base'
48
+ require 'videojuicer/preset'
49
+
50
+ module Videojuicer
51
+
52
+ DEFAULTS = {
53
+ :consumer_key => nil,
54
+ :consumer_secret => nil,
55
+ :token => nil,
56
+ :token_secret => nil,
57
+ :api_version => nil,
58
+ :seed_name => nil,
59
+ :user_id => nil,
60
+ :protocol => "http",
61
+ :host => "api.videojuicer.com",
62
+ :port => 80
63
+ }.freeze
64
+
65
+ @default_options = {}
66
+ @scope_stack = []
67
+
68
+ class << self
69
+
70
+ def scopes
71
+ ([default_options]+@scope_stack).compact
72
+ end
73
+
74
+ def in_scope?
75
+ !@scope_stack.empty?
76
+ end
77
+
78
+ def current_scope
79
+ scopes.last
80
+ end
81
+
82
+ def enter_scope(config)
83
+ @scope_stack.push current_scope.merge(config)
84
+ end
85
+
86
+ def exit_scope
87
+ @scope_stack.pop
88
+ end
89
+
90
+ def exit_all!
91
+ @scope_stack = []
92
+ end
93
+
94
+ def [](key)
95
+ @default_options[key]
96
+ end
97
+
98
+ def configure!(options={})
99
+ @default_options = DEFAULTS.merge(@default_options.merge(options))
100
+ end
101
+
102
+ def unconfigure!
103
+ @default_options = DEFAULTS
104
+ end
105
+
106
+ def default_options
107
+ @default_options
108
+ end
109
+ end # class << self
110
+ end # module Videojuicer
@@ -0,0 +1,25 @@
1
+ require File.join(File.dirname(__FILE__), "..", "helpers", "spec_helper")
2
+
3
+ describe Videojuicer::Asset::Audio do
4
+
5
+ before(:all) do
6
+ @klass = Videojuicer::Asset::Audio
7
+ @preset_params = {:derived_type => "Audio", :file_format => "mp3"}
8
+ configure_test_settings
9
+ end
10
+
11
+ describe "instantiation" do
12
+ it_should_behave_like "a configurable"
13
+ end
14
+
15
+ describe "general interface:" do
16
+ before(:all) do
17
+ @singular_name = "asset"
18
+ @plural_name = "assets/audio"
19
+ end
20
+
21
+ it_should_behave_like "a RESTFUL resource model"
22
+ end
23
+
24
+ it_should_behave_like "an asset"
25
+ end
@@ -0,0 +1,24 @@
1
+ require File.join(File.dirname(__FILE__), "..", "helpers", "spec_helper")
2
+
3
+ describe Videojuicer::Asset::Flash do
4
+
5
+ before(:all) do
6
+ @klass = Videojuicer::Asset::Flash
7
+ configure_test_settings
8
+ end
9
+
10
+ describe "instantiation" do
11
+ it_should_behave_like "a configurable"
12
+ end
13
+
14
+ describe "general interface:" do
15
+ before(:all) do
16
+ @singular_name = "asset"
17
+ @plural_name = "assets/flash"
18
+ end
19
+
20
+ it_should_behave_like "a RESTFUL resource model"
21
+ end
22
+
23
+ it_should_behave_like "an asset"
24
+ end
@@ -0,0 +1,25 @@
1
+ require File.join(File.dirname(__FILE__), "..", "helpers", "spec_helper")
2
+
3
+ describe Videojuicer::Asset::Image do
4
+
5
+ before(:all) do
6
+ @klass = Videojuicer::Asset::Image
7
+ @preset_params = {:derived_type => "Image", :file_format => "png"}
8
+ configure_test_settings
9
+ end
10
+
11
+ describe "instantiation" do
12
+ it_should_behave_like "a configurable"
13
+ end
14
+
15
+ describe "general interface:" do
16
+ before(:all) do
17
+ @singular_name = "asset"
18
+ @plural_name = "assets/image"
19
+ end
20
+
21
+ it_should_behave_like "a RESTFUL resource model"
22
+ end
23
+
24
+ it_should_behave_like "an asset"
25
+ end
@@ -0,0 +1,24 @@
1
+ require File.join(File.dirname(__FILE__), "..", "helpers", "spec_helper")
2
+
3
+ describe Videojuicer::Asset::Text do
4
+
5
+ before(:all) do
6
+ @klass = Videojuicer::Asset::Text
7
+ configure_test_settings
8
+ end
9
+
10
+ describe "instantiation" do
11
+ it_should_behave_like "a configurable"
12
+ end
13
+
14
+ describe "general interface:" do
15
+ before(:all) do
16
+ @singular_name = "asset"
17
+ @plural_name = "assets/text"
18
+ end
19
+
20
+ it_should_behave_like "a RESTFUL resource model"
21
+ end
22
+
23
+ it_should_behave_like "an asset"
24
+ end
@@ -0,0 +1,25 @@
1
+ require File.join(File.dirname(__FILE__), "..", "helpers", "spec_helper")
2
+
3
+ describe Videojuicer::Asset::Video do
4
+
5
+ before(:all) do
6
+ @klass = Videojuicer::Asset::Video
7
+ @preset_params = {:derived_type => "Video", :file_format => "mp4"}
8
+ configure_test_settings
9
+ end
10
+
11
+ describe "instantiation" do
12
+ it_should_behave_like "a configurable"
13
+ end
14
+
15
+ describe "general interface:" do
16
+ before(:all) do
17
+ @singular_name = "asset"
18
+ @plural_name = "assets/video"
19
+ end
20
+
21
+ it_should_behave_like "a RESTFUL resource model"
22
+ end
23
+
24
+ it_should_behave_like "an asset"
25
+ end
@@ -0,0 +1,45 @@
1
+ require File.join(File.dirname(__FILE__), "helpers", "spec_helper")
2
+
3
+ describe Videojuicer::Resource::Relationships::BelongsTo do
4
+
5
+ after(:all) do
6
+ Videojuicer.exit_scope
7
+ end
8
+
9
+ before(:all) do
10
+ configure_test_settings
11
+ Videojuicer.enter_scope :seed_name => fixtures.seed.name,
12
+ :consumer_key=>fixtures["write-master"].consumer.consumer_key,
13
+ :consumer_secret=>fixtures["write-master"].consumer.consumer_secret,
14
+ :token=>fixtures["write-master"].authorized_token.oauth_token,
15
+ :token_secret=>fixtures["write-master"].authorized_token.oauth_token_secret
16
+
17
+ @user = Videojuicer::User.first
18
+ @user.should be_kind_of(Videojuicer::User)
19
+
20
+ class ::BelongsToExample
21
+ include Videojuicer::Resource
22
+
23
+ property :user_id, Integer
24
+ belongs_to :user, :class=>Videojuicer::User
25
+ end
26
+
27
+ @example = ::BelongsToExample.new
28
+ @example.user_id = @user.id
29
+ end
30
+
31
+ it "retrieves the user" do
32
+ @example.user.id.should == @user.id
33
+ end
34
+
35
+ it "returns nil when the user_id is nonsense" do
36
+ bad_example = ::BelongsToExample.new(:user_id=>9900000000)
37
+ bad_example.user.should be_nil
38
+ end
39
+
40
+ it "sets the user" do
41
+ @example.user = @user
42
+ @example.user_id.should == @user.id
43
+ end
44
+
45
+ end
@@ -0,0 +1,41 @@
1
+ require File.join(File.dirname(__FILE__), "helpers", "spec_helper")
2
+
3
+ describe Videojuicer::Campaign::CampaignPolicy do
4
+
5
+ before(:all) do
6
+ @klass = Videojuicer::Campaign::CampaignPolicy
7
+ configure_test_settings
8
+ end
9
+
10
+ describe "instantiation" do
11
+ it_should_behave_like "a configurable"
12
+ end
13
+
14
+ describe "general interface:" do
15
+ before(:all) do
16
+ @singular_name = "campaign_policy"
17
+ @plural_name = "campaign_policies"
18
+ @fixed_attributes = [:campaign_id]
19
+ end
20
+
21
+ it_should_behave_like "a RESTFUL resource model"
22
+ end
23
+
24
+ describe "adding policies" do
25
+
26
+ end
27
+
28
+ describe "removing policies" do
29
+
30
+ end
31
+
32
+ describe "adding promos" do
33
+
34
+ end
35
+
36
+ describe "removing promos" do
37
+
38
+ end
39
+
40
+
41
+ end
@@ -0,0 +1,25 @@
1
+ require File.join(File.dirname(__FILE__), "helpers", "spec_helper")
2
+
3
+ describe Videojuicer::Campaign do
4
+
5
+ before(:all) do
6
+ @klass = Videojuicer::Campaign
7
+ configure_test_settings
8
+ end
9
+
10
+ describe "instantiation" do
11
+ it_should_behave_like "a configurable"
12
+ end
13
+
14
+ describe "general interface:" do
15
+ before(:all) do
16
+ string_mash = (("A".."z").to_a + ("a".."z").to_a)
17
+ @singular_name = "campaign"
18
+ @plural_name = "campaigns"
19
+ end
20
+
21
+ it_should_behave_like "a RESTFUL resource model"
22
+ end
23
+
24
+
25
+ end
@@ -0,0 +1,31 @@
1
+ require File.join(File.dirname(__FILE__), "helpers", "spec_helper")
2
+
3
+ describe Videojuicer::Resource::Collection do
4
+
5
+ before(:all) do
6
+ @objects = [:foo]*100
7
+ @collection = Videojuicer::Resource::Collection.new(@objects[0..9], 155, 17, 10)
8
+ end
9
+
10
+ it "is instantiated correctly" do
11
+ @collection.should be_kind_of(Videojuicer::Resource::Collection)
12
+ @collection.total.should == 155
13
+ @collection.offset.should == 17
14
+ @collection.limit.should == 10
15
+ end
16
+
17
+ it "can count the number of pages" do
18
+ @collection.page_count.should == 16
19
+ end
20
+
21
+ it "can tell the current page" do
22
+ @collection.page_number.should == 2
23
+ end
24
+
25
+ it "pagination copes with a nil limit" do
26
+ collection = Videojuicer::Resource::Collection.new(@objects[0..9], 155, 17, nil)
27
+ collection.page_count.should == 1
28
+ collection.page_number.should == 1
29
+ end
30
+
31
+ end
@@ -0,0 +1,24 @@
1
+ require File.join(File.dirname(__FILE__), "..", "helpers", "spec_helper")
2
+
3
+ describe Videojuicer::Criterion::DateRange do
4
+
5
+ before(:all) do
6
+ @klass = Videojuicer::Criterion::DateRange
7
+ configure_test_settings
8
+ end
9
+
10
+ describe "instantiation" do
11
+ it_should_behave_like "a configurable"
12
+ end
13
+
14
+ describe "general interface:" do
15
+ before(:all) do
16
+ @singular_name = "criterion"
17
+ @plural_name = "criteria/date_range"
18
+ end
19
+
20
+ it_should_behave_like "a dependent non-resource object"
21
+ end
22
+
23
+ end
24
+
@@ -0,0 +1,23 @@
1
+ require File.join(File.dirname(__FILE__), "..", "helpers", "spec_helper")
2
+
3
+ describe Videojuicer::Criterion::Geolocation do
4
+
5
+ before(:all) do
6
+ @klass = Videojuicer::Criterion::Geolocation
7
+ configure_test_settings
8
+ end
9
+
10
+ describe "instantiation" do
11
+ it_should_behave_like "a configurable"
12
+ end
13
+
14
+ describe "general interface:" do
15
+ before(:all) do
16
+ @singular_name = "criterion"
17
+ @plural_name = "criteria/geolocation"
18
+ end
19
+
20
+ it_should_behave_like "a dependent non-resource object"
21
+ end
22
+
23
+ end
@@ -0,0 +1,23 @@
1
+ require File.join(File.dirname(__FILE__), "..", "helpers", "spec_helper")
2
+
3
+ describe Videojuicer::Criterion::Request do
4
+
5
+ before(:all) do
6
+ @klass = Videojuicer::Criterion::Request
7
+ configure_test_settings
8
+ end
9
+
10
+ describe "instantiation" do
11
+ it_should_behave_like "a configurable"
12
+ end
13
+
14
+ describe "general interface:" do
15
+ before(:all) do
16
+ @singular_name = "criterion"
17
+ @plural_name = "criteria/request"
18
+ end
19
+
20
+ it_should_behave_like "a dependent non-resource object"
21
+ end
22
+
23
+ end
@@ -0,0 +1,23 @@
1
+ require File.join(File.dirname(__FILE__), "..", "helpers", "spec_helper")
2
+
3
+ describe Videojuicer::Criterion::Time do
4
+
5
+ before(:all) do
6
+ @klass = Videojuicer::Criterion::Time
7
+ configure_test_settings
8
+ end
9
+
10
+ describe "instantiation" do
11
+ it_should_behave_like "a configurable"
12
+ end
13
+
14
+ describe "general interface:" do
15
+ before(:all) do
16
+ @singular_name = "criterion"
17
+ @plural_name = "criteria/time"
18
+ end
19
+
20
+ it_should_behave_like "a dependent non-resource object"
21
+ end
22
+
23
+ end
@@ -0,0 +1,23 @@
1
+ require File.join(File.dirname(__FILE__), "..", "helpers", "spec_helper")
2
+
3
+ describe Videojuicer::Criterion::WeekDay do
4
+
5
+ before(:all) do
6
+ @klass = Videojuicer::Criterion::WeekDay
7
+ configure_test_settings
8
+ end
9
+
10
+ describe "instantiation" do
11
+ it_should_behave_like "a configurable"
12
+ end
13
+
14
+ describe "general interface:" do
15
+ before(:all) do
16
+ @singular_name = "criterion"
17
+ @plural_name = "criteria/week_day"
18
+ end
19
+
20
+ it_should_behave_like "a dependent non-resource object"
21
+ end
22
+
23
+ end
Binary file
File without changes