suls-smsr 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.
- data/.autotest +3 -0
- data/.gitignore +4 -0
- data/History.txt +5 -0
- data/Manifest.txt +38 -0
- data/README.txt +70 -0
- data/Rakefile +70 -0
- data/bin/smsr +4 -0
- data/bin/smsr-config +4 -0
- data/bin/smsr-send +4 -0
- data/lib/providers/hispeed.rb +35 -0
- data/lib/providers/o2.rb +28 -0
- data/lib/providers/orange.rb +34 -0
- data/lib/providers/swisscom.rb +41 -0
- data/lib/smsr.rb +12 -0
- data/lib/smsr/actions.rb +110 -0
- data/lib/smsr/actions/config.rb +21 -0
- data/lib/smsr/actions/list.rb +21 -0
- data/lib/smsr/actions/send.rb +24 -0
- data/lib/smsr/config.rb +33 -0
- data/lib/smsr/extensions.rb +31 -0
- data/lib/smsr/providers.rb +54 -0
- data/lib/smsr/providers/provider.rb +14 -0
- data/lib/smsr/smsr.rb +97 -0
- data/lib/smsr/version.rb +10 -0
- data/smsr.gemspec +41 -0
- data/spec/providers/hispeed_spec.rb +11 -0
- data/spec/providers/orange_spec.rb +11 -0
- data/spec/providers/provider_helper.rb +16 -0
- data/spec/providers/swisscom_spec.rb +12 -0
- data/spec/smsr/actions/config_spec.rb +8 -0
- data/spec/smsr/actions/send_spec.rb +7 -0
- data/spec/smsr/actions_requirements_spec.rb +143 -0
- data/spec/smsr/actions_spec.rb +125 -0
- data/spec/smsr/config_spec.rb +81 -0
- data/spec/smsr/providers_spec.rb +84 -0
- data/spec/smsr/version_spec.rb +11 -0
- data/spec/smsr_spec.rb +40 -0
- data/spec/spec_helper.rb +18 -0
- metadata +122 -0
| @@ -0,0 +1,21 @@ | |
| 1 | 
            +
            module SmsR
         | 
| 2 | 
            +
            module Actions
         | 
| 3 | 
            +
             | 
| 4 | 
            +
              class Config < RunnableAction
         | 
| 5 | 
            +
                runnable do |provider, user, password|
         | 
| 6 | 
            +
                  SmsR.debug "Store entry for #{provider}"
         | 
| 7 | 
            +
                  SmsR.config[:"#{provider}"] = user, password
         | 
| 8 | 
            +
                  SmsR.config.save!
         | 
| 9 | 
            +
                  SmsR.info "Config for #{provider} added."
         | 
| 10 | 
            +
                end
         | 
| 11 | 
            +
             | 
| 12 | 
            +
                runnable :config do |provider|
         | 
| 13 | 
            +
                  p_c = SmsR.config[:"#{provider}"]
         | 
| 14 | 
            +
                  SmsR.info "Saved config for Provider '#{provider}':"
         | 
| 15 | 
            +
                  %w{user password}.each { |e|  SmsR.info "  #{e}: #{p_c.send e}"}
         | 
| 16 | 
            +
                end    
         | 
| 17 | 
            +
              
         | 
| 18 | 
            +
              end
         | 
| 19 | 
            +
              
         | 
| 20 | 
            +
            end
         | 
| 21 | 
            +
            end
         | 
| @@ -0,0 +1,21 @@ | |
| 1 | 
            +
            module SmsR
         | 
| 2 | 
            +
            module Actions
         | 
| 3 | 
            +
             | 
| 4 | 
            +
              class List < RunnableAction
         | 
| 5 | 
            +
                runnable :load_providers do
         | 
| 6 | 
            +
                  
         | 
| 7 | 
            +
                  SmsR.info "","Available providers:", ""
         | 
| 8 | 
            +
                  SmsR::Providers.providers.each do |name, prov|
         | 
| 9 | 
            +
                    if SmsR.config[name.to_sym]
         | 
| 10 | 
            +
                      has_config = ""
         | 
| 11 | 
            +
                    else 
         | 
| 12 | 
            +
                      has_config = "*"
         | 
| 13 | 
            +
                    end
         | 
| 14 | 
            +
                    SmsR.info "\t#{name} #{has_config}"
         | 
| 15 | 
            +
                  end
         | 
| 16 | 
            +
                  SmsR.info "","* indicates no config saved for the provider."
         | 
| 17 | 
            +
                end
         | 
| 18 | 
            +
              end
         | 
| 19 | 
            +
              
         | 
| 20 | 
            +
            end
         | 
| 21 | 
            +
            end
         | 
| @@ -0,0 +1,24 @@ | |
| 1 | 
            +
            require "rubygems"
         | 
| 2 | 
            +
            require "rake"
         | 
| 3 | 
            +
             | 
| 4 | 
            +
            module SmsR
         | 
| 5 | 
            +
            module Actions
         | 
| 6 | 
            +
              
         | 
| 7 | 
            +
                class Send < RunnableAction
         | 
| 8 | 
            +
                runnable :load_providers do 
         | 
| 9 | 
            +
                  SmsR.info "Available providers:"
         | 
| 10 | 
            +
                  SmsR::Providers.providers.each { |k,v| SmsR.info "  #{k}"}
         | 
| 11 | 
            +
                end
         | 
| 12 | 
            +
                
         | 
| 13 | 
            +
                runnable :load_providers, :config, :provider do |provider_name, number, message|
         | 
| 14 | 
            +
                    
         | 
| 15 | 
            +
                  SmsR.debug "using #{@provider} " +
         | 
| 16 | 
            +
                                          "with config #{@config}"
         | 
| 17 | 
            +
                  
         | 
| 18 | 
            +
                  @provider.call @config.user, @config.password, number, message      
         | 
| 19 | 
            +
                  
         | 
| 20 | 
            +
                end
         | 
| 21 | 
            +
              end
         | 
| 22 | 
            +
             | 
| 23 | 
            +
            end
         | 
| 24 | 
            +
            end
         | 
    
        data/lib/smsr/config.rb
    ADDED
    
    | @@ -0,0 +1,33 @@ | |
| 1 | 
            +
            require 'yaml'
         | 
| 2 | 
            +
             | 
| 3 | 
            +
            module SmsR
         | 
| 4 | 
            +
              OperatorConfig = Struct.new(:user, :password)
         | 
| 5 | 
            +
              
         | 
| 6 | 
            +
              class Config
         | 
| 7 | 
            +
                attr_reader :last_saved
         | 
| 8 | 
            +
                
         | 
| 9 | 
            +
                def self.load(file=ENV['HOME']+'/.smsr_config')
         | 
| 10 | 
            +
                  return File.open(file) { |f| YAML.load(f) } if File.exists? file
         | 
| 11 | 
            +
                  Config.new(file)
         | 
| 12 | 
            +
                end
         | 
| 13 | 
            +
                
         | 
| 14 | 
            +
                def save!(f_to_save=@config_file)
         | 
| 15 | 
            +
                  @last_saved = Time.now
         | 
| 16 | 
            +
                  File.open(f_to_save, "w") { |f| YAML.dump(self, f) }
         | 
| 17 | 
            +
                end
         | 
| 18 | 
            +
                
         | 
| 19 | 
            +
                def initialize(f=nil)
         | 
| 20 | 
            +
                  @config_file = f
         | 
| 21 | 
            +
                  @config = {}
         | 
| 22 | 
            +
                end
         | 
| 23 | 
            +
                
         | 
| 24 | 
            +
                def []=(key, params)
         | 
| 25 | 
            +
                  @config[key] = OperatorConfig.new(*params)
         | 
| 26 | 
            +
                end
         | 
| 27 | 
            +
                
         | 
| 28 | 
            +
                def [](key)
         | 
| 29 | 
            +
                  @config[key]
         | 
| 30 | 
            +
                end
         | 
| 31 | 
            +
                
         | 
| 32 | 
            +
              end
         | 
| 33 | 
            +
            end
         | 
| @@ -0,0 +1,31 @@ | |
| 1 | 
            +
            # from http://eigenclass.org/hiki/bounded+space+instance_exec
         | 
| 2 | 
            +
            class Object
         | 
| 3 | 
            +
              module InstanceExecHelper; end
         | 
| 4 | 
            +
              include InstanceExecHelper
         | 
| 5 | 
            +
              def instance_exec(*args, &block)
         | 
| 6 | 
            +
                begin
         | 
| 7 | 
            +
                  old_critical, Thread.critical = Thread.critical, true
         | 
| 8 | 
            +
                  n = 0
         | 
| 9 | 
            +
                  n += 1 while respond_to?(mname="__instance_exec#{n}")
         | 
| 10 | 
            +
                  InstanceExecHelper.module_eval{ define_method(mname, &block) }
         | 
| 11 | 
            +
                ensure
         | 
| 12 | 
            +
                  Thread.critical = old_critical
         | 
| 13 | 
            +
                end
         | 
| 14 | 
            +
                begin
         | 
| 15 | 
            +
                  ret = send(mname, *args)
         | 
| 16 | 
            +
                ensure
         | 
| 17 | 
            +
                  InstanceExecHelper.module_eval{ remove_method(mname) } rescue nil
         | 
| 18 | 
            +
                end
         | 
| 19 | 
            +
                ret
         | 
| 20 | 
            +
              end
         | 
| 21 | 
            +
            end
         | 
| 22 | 
            +
             | 
| 23 | 
            +
            # http://whytheluckystiff.net/articles/seeingMetaclassesClearly.html
         | 
| 24 | 
            +
            class Object
         | 
| 25 | 
            +
              # The hidden singleton lurks behind everyone
         | 
| 26 | 
            +
              def eigenclass; class << self; self; end; end
         | 
| 27 | 
            +
              
         | 
| 28 | 
            +
              def add_instance_method(name, blk)
         | 
| 29 | 
            +
                eigenclass.send :define_method, name, blk
         | 
| 30 | 
            +
              end
         | 
| 31 | 
            +
            end
         | 
| @@ -0,0 +1,54 @@ | |
| 1 | 
            +
            module SmsR  
         | 
| 2 | 
            +
            module Providers
         | 
| 3 | 
            +
              
         | 
| 4 | 
            +
              DEFAULT_PROVIDERS = File.dirname(__FILE__) + 
         | 
| 5 | 
            +
                                      '/../providers'
         | 
| 6 | 
            +
              
         | 
| 7 | 
            +
              extend self
         | 
| 8 | 
            +
              
         | 
| 9 | 
            +
              def provider(provider_name, &block)
         | 
| 10 | 
            +
                SmsR.debug "registering #{provider_name}"
         | 
| 11 | 
            +
                providers[provider_name] = Provider.new(block)
         | 
| 12 | 
            +
              end
         | 
| 13 | 
            +
             | 
| 14 | 
            +
              def providers
         | 
| 15 | 
            +
                @providers ||= {}
         | 
| 16 | 
            +
              end
         | 
| 17 | 
            +
              
         | 
| 18 | 
            +
              def reset
         | 
| 19 | 
            +
                @providers = {}
         | 
| 20 | 
            +
              end
         | 
| 21 | 
            +
              
         | 
| 22 | 
            +
              def load(*files)
         | 
| 23 | 
            +
                files.each do |file|
         | 
| 24 | 
            +
                  if File.exists? file
         | 
| 25 | 
            +
                    SmsR.debug "Loading providers from: #{file}"
         | 
| 26 | 
            +
                    data = File.read(file)
         | 
| 27 | 
            +
                    # @providers = {} if drop_existing
         | 
| 28 | 
            +
                    module_eval data, file
         | 
| 29 | 
            +
                  else
         | 
| 30 | 
            +
                    SmsR.debug "Provider file #{file} doesn't exist."
         | 
| 31 | 
            +
                  end
         | 
| 32 | 
            +
                end
         | 
| 33 | 
            +
                providers
         | 
| 34 | 
            +
              end
         | 
| 35 | 
            +
              
         | 
| 36 | 
            +
            end
         | 
| 37 | 
            +
             | 
| 38 | 
            +
            module ProviderHelper
         | 
| 39 | 
            +
             | 
| 40 | 
            +
              def find_form_with_field(page, fieldname)
         | 
| 41 | 
            +
                page.forms.each do |form|
         | 
| 42 | 
            +
                  if form.fields.find{|f| f.name == fieldname}
         | 
| 43 | 
            +
                    yield form
         | 
| 44 | 
            +
                  end
         | 
| 45 | 
            +
                end
         | 
| 46 | 
            +
              end
         | 
| 47 | 
            +
              
         | 
| 48 | 
            +
              def to_ISO_8859_1(msg)
         | 
| 49 | 
            +
                require "iconv"
         | 
| 50 | 
            +
                Iconv.conv("ISO-8859-1", "UTF-8", message)
         | 
| 51 | 
            +
              end
         | 
| 52 | 
            +
              
         | 
| 53 | 
            +
            end
         | 
| 54 | 
            +
            end
         | 
    
        data/lib/smsr/smsr.rb
    ADDED
    
    | @@ -0,0 +1,97 @@ | |
| 1 | 
            +
            require "ostruct"
         | 
| 2 | 
            +
            require "optparse"
         | 
| 3 | 
            +
             | 
| 4 | 
            +
            module SmsR
         | 
| 5 | 
            +
             | 
| 6 | 
            +
              extend self
         | 
| 7 | 
            +
              
         | 
| 8 | 
            +
              def start(args, io=STDOUT)
         | 
| 9 | 
            +
                @io = io
         | 
| 10 | 
            +
                args_copy = args.dup
         | 
| 11 | 
            +
                @options = parse_options(args)
         | 
| 12 | 
            +
                
         | 
| 13 | 
            +
                info ""
         | 
| 14 | 
            +
                debug "args: ", args_copy << " "
         | 
| 15 | 
            +
                debug "options: ", options
         | 
| 16 | 
            +
                
         | 
| 17 | 
            +
                debug "SmsR #{VERSION::STRING} started .."
         | 
| 18 | 
            +
                
         | 
| 19 | 
            +
                invoke_action(args.shift, args) if args.size > 0 if args
         | 
| 20 | 
            +
                
         | 
| 21 | 
            +
                debug ".. exiting SmsR"
         | 
| 22 | 
            +
                info ""
         | 
| 23 | 
            +
              end
         | 
| 24 | 
            +
              
         | 
| 25 | 
            +
              def debug?
         | 
| 26 | 
            +
                !!@debug
         | 
| 27 | 
            +
              end
         | 
| 28 | 
            +
              
         | 
| 29 | 
            +
              # FIXME: duplication!
         | 
| 30 | 
            +
              def debug(*messages)
         | 
| 31 | 
            +
                @io.puts messages.map { |m| "** #{m}" } if debug?
         | 
| 32 | 
            +
              end
         | 
| 33 | 
            +
              
         | 
| 34 | 
            +
              # FIXME: duplication!
         | 
| 35 | 
            +
              def info(*messages)
         | 
| 36 | 
            +
                @io.puts messages.map { |m| " #{m}" }
         | 
| 37 | 
            +
              end
         | 
| 38 | 
            +
              
         | 
| 39 | 
            +
              def parse_options(args)
         | 
| 40 | 
            +
                options = OpenStruct.new
         | 
| 41 | 
            +
                options.debug = false
         | 
| 42 | 
            +
                
         | 
| 43 | 
            +
                begin
         | 
| 44 | 
            +
                  OptionParser.new do |opts|
         | 
| 45 | 
            +
                    opts.banner = <<BANNER
         | 
| 46 | 
            +
            Usage: smsr [action] [parameters] [options]
         | 
| 47 | 
            +
             | 
| 48 | 
            +
              To send a sms:
         | 
| 49 | 
            +
              
         | 
| 50 | 
            +
                $ smsr-send provider_name 079xx "this is my message"
         | 
| 51 | 
            +
              
         | 
| 52 | 
            +
              Provider 'provider_name' must exist. To see what providers exist:
         | 
| 53 | 
            +
              
         | 
| 54 | 
            +
                $ smsr list
         | 
| 55 | 
            +
              
         | 
| 56 | 
            +
            BANNER
         | 
| 57 | 
            +
             | 
| 58 | 
            +
                    opts.on("-d", "--debug", "Show debug log statements") do |d|
         | 
| 59 | 
            +
                      options.debug = d 
         | 
| 60 | 
            +
                    end
         | 
| 61 | 
            +
                    
         | 
| 62 | 
            +
                    opts.on_tail("--version", "Show version") do
         | 
| 63 | 
            +
                      @io.puts VERSION::STRING
         | 
| 64 | 
            +
                      exit
         | 
| 65 | 
            +
                    end
         | 
| 66 | 
            +
                  end.parse!(args)
         | 
| 67 | 
            +
                rescue OptionParser::InvalidOption => e
         | 
| 68 | 
            +
                  @io.puts e
         | 
| 69 | 
            +
                  exit
         | 
| 70 | 
            +
                end
         | 
| 71 | 
            +
                
         | 
| 72 | 
            +
                @debug = options.debug
         | 
| 73 | 
            +
                
         | 
| 74 | 
            +
                options
         | 
| 75 | 
            +
              end
         | 
| 76 | 
            +
              
         | 
| 77 | 
            +
              def options
         | 
| 78 | 
            +
                @options
         | 
| 79 | 
            +
              end
         | 
| 80 | 
            +
              
         | 
| 81 | 
            +
              def config
         | 
| 82 | 
            +
                @config ||= Config.load 
         | 
| 83 | 
            +
              end
         | 
| 84 | 
            +
              
         | 
| 85 | 
            +
              def invoke_action(action, args)
         | 
| 86 | 
            +
                action = action.capitalize
         | 
| 87 | 
            +
                available_actions = (Actions.constants - ['RunnableAction'])
         | 
| 88 | 
            +
                debug "available actions: ", *(available_actions.map{|e| "\t"+e}) << " "
         | 
| 89 | 
            +
                
         | 
| 90 | 
            +
                if available_actions.include?(action)
         | 
| 91 | 
            +
                  Actions.const_get(action).run(args)
         | 
| 92 | 
            +
                else
         | 
| 93 | 
            +
                  debug "selected action not available: #{action}"
         | 
| 94 | 
            +
                end
         | 
| 95 | 
            +
              end
         | 
| 96 | 
            +
              
         | 
| 97 | 
            +
            end
         | 
    
        data/lib/smsr/version.rb
    ADDED
    
    
    
        data/smsr.gemspec
    ADDED
    
    | @@ -0,0 +1,41 @@ | |
| 1 | 
            +
            # -*- encoding: utf-8 -*-
         | 
| 2 | 
            +
             | 
| 3 | 
            +
            Gem::Specification.new do |s|
         | 
| 4 | 
            +
              s.name = %q{smsr}
         | 
| 5 | 
            +
              s.version = "0.0.1"
         | 
| 6 | 
            +
             | 
| 7 | 
            +
              s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
         | 
| 8 | 
            +
              s.authors = ["Mathias Sulser"]
         | 
| 9 | 
            +
              s.date = %q{2008-11-04}
         | 
| 10 | 
            +
              s.description = %q{Simple commandline utility for sending sms.}
         | 
| 11 | 
            +
              s.email = ["suls@suls.org"]
         | 
| 12 | 
            +
              s.executables = ["smsr", "smsr-config", "smsr-send"]
         | 
| 13 | 
            +
              s.extra_rdoc_files = ["History.txt", "Manifest.txt", "README.txt"]
         | 
| 14 | 
            +
              s.files = [".autotest", ".gitignore", "History.txt", "Manifest.txt", "README.txt", "Rakefile", "bin/smsr", "bin/smsr-config", "bin/smsr-send", "lib/providers/hispeed.rb", "lib/providers/o2.rb", "lib/providers/orange.rb", "lib/providers/swisscom.rb", "lib/smsr.rb", "lib/smsr/actions.rb", "lib/smsr/actions/config.rb", "lib/smsr/actions/list.rb", "lib/smsr/actions/send.rb", "lib/smsr/config.rb", "lib/smsr/extensions.rb", "lib/smsr/providers.rb", "lib/smsr/providers/provider.rb", "lib/smsr/smsr.rb", "lib/smsr/version.rb", "smsr.gemspec", "spec/providers/hispeed_spec.rb", "spec/providers/orange_spec.rb", "spec/providers/provider_helper.rb", "spec/providers/swisscom_spec.rb", "spec/smsr/actions/config_spec.rb", "spec/smsr/actions/send_spec.rb", "spec/smsr/actions_requirements_spec.rb", "spec/smsr/actions_spec.rb", "spec/smsr/config_spec.rb", "spec/smsr/providers_spec.rb", "spec/smsr/version_spec.rb", "spec/smsr_spec.rb", "spec/spec_helper.rb"]
         | 
| 15 | 
            +
              s.has_rdoc = true
         | 
| 16 | 
            +
              s.homepage = %q{http://sulsarts.ch/p/smsr}
         | 
| 17 | 
            +
              s.rdoc_options = ["--main", "README.txt"]
         | 
| 18 | 
            +
              s.require_paths = ["lib"]
         | 
| 19 | 
            +
              s.rubyforge_project = %q{smsr}
         | 
| 20 | 
            +
              s.rubygems_version = %q{1.3.1}
         | 
| 21 | 
            +
              s.summary = %q{SmsR version 0.0.1}
         | 
| 22 | 
            +
             | 
| 23 | 
            +
              if s.respond_to? :specification_version then
         | 
| 24 | 
            +
                current_version = Gem::Specification::CURRENT_SPECIFICATION_VERSION
         | 
| 25 | 
            +
                s.specification_version = 2
         | 
| 26 | 
            +
             | 
| 27 | 
            +
                if Gem::Version.new(Gem::RubyGemsVersion) >= Gem::Version.new('1.2.0') then
         | 
| 28 | 
            +
                  s.add_runtime_dependency(%q<mechanize>, [">= 0.7.8"])
         | 
| 29 | 
            +
                  s.add_runtime_dependency(%q<rspec>, [">= 1.1.4"])
         | 
| 30 | 
            +
                  s.add_development_dependency(%q<hoe>, [">= 1.8.2"])
         | 
| 31 | 
            +
                else
         | 
| 32 | 
            +
                  s.add_dependency(%q<mechanize>, [">= 0.7.8"])
         | 
| 33 | 
            +
                  s.add_dependency(%q<rspec>, [">= 1.1.4"])
         | 
| 34 | 
            +
                  s.add_dependency(%q<hoe>, [">= 1.8.2"])
         | 
| 35 | 
            +
                end
         | 
| 36 | 
            +
              else
         | 
| 37 | 
            +
                s.add_dependency(%q<mechanize>, [">= 0.7.8"])
         | 
| 38 | 
            +
                s.add_dependency(%q<rspec>, [">= 1.1.4"])
         | 
| 39 | 
            +
                s.add_dependency(%q<hoe>, [">= 1.8.2"])
         | 
| 40 | 
            +
              end
         | 
| 41 | 
            +
            end
         | 
| @@ -0,0 +1,16 @@ | |
| 1 | 
            +
            require File.dirname(__FILE__) + '/../spec_helper'
         | 
| 2 | 
            +
             | 
| 3 | 
            +
            def running(cmd, *args, &block)
         | 
| 4 | 
            +
              SmsR::Providers.load File.dirname(__FILE__) + 
         | 
| 5 | 
            +
                                      "/../../lib/providers/#{cmd}.rb"
         | 
| 6 | 
            +
                                      
         | 
| 7 | 
            +
              # rcov hack
         | 
| 8 | 
            +
              begin
         | 
| 9 | 
            +
                require File.dirname(__FILE__) + 
         | 
| 10 | 
            +
                                        "/../../lib/providers/#{cmd}.rb"
         | 
| 11 | 
            +
              rescue NoMethodError => e
         | 
| 12 | 
            +
              end
         | 
| 13 | 
            +
              
         | 
| 14 | 
            +
              block.call
         | 
| 15 | 
            +
              SmsR::Providers.providers[cmd].call args
         | 
| 16 | 
            +
            end
         | 
| @@ -0,0 +1,12 @@ | |
| 1 | 
            +
            require File.dirname(__FILE__) + '/provider_helper'
         | 
| 2 | 
            +
             | 
| 3 | 
            +
            describe SmsR::Providers::Provider, "Swisscom" do
         | 
| 4 | 
            +
              it "should test the swisscom provider" do
         | 
| 5 | 
            +
                running :swisscom, "usr", "pwd", "num", "msg" do
         | 
| 6 | 
            +
                  WWW::Mechanize.stub!(:new)
         | 
| 7 | 
            +
                end
         | 
| 8 | 
            +
                
         | 
| 9 | 
            +
                pending
         | 
| 10 | 
            +
              end
         | 
| 11 | 
            +
              
         | 
| 12 | 
            +
            end
         | 
| @@ -0,0 +1,8 @@ | |
| 1 | 
            +
            require File.dirname(__FILE__) + '/../../spec_helper'
         | 
| 2 | 
            +
             | 
| 3 | 
            +
            describe SmsR::Actions::Config do
         | 
| 4 | 
            +
              it "should respond to the config action"
         | 
| 5 | 
            +
              it "should list the configs entries when run with 0 argument"
         | 
| 6 | 
            +
              it "should list the provider's config entry when run with 1 argument"
         | 
| 7 | 
            +
              it "should save the provider's config entry when run with 3 argument"
         | 
| 8 | 
            +
            end
         | 
| @@ -0,0 +1,7 @@ | |
| 1 | 
            +
            require File.dirname(__FILE__) + '/../../spec_helper'
         | 
| 2 | 
            +
             | 
| 3 | 
            +
            describe SmsR::Actions::Send do
         | 
| 4 | 
            +
              it "should respond to the send action"
         | 
| 5 | 
            +
              it "should list the available providers when run with 0 argument"
         | 
| 6 | 
            +
              it "should send the sms using the give provider when run with 3 arguments"
         | 
| 7 | 
            +
            end
         | 
| @@ -0,0 +1,143 @@ | |
| 1 | 
            +
            require File.dirname(__FILE__) + '/../spec_helper'
         | 
| 2 | 
            +
             | 
| 3 | 
            +
            describe SmsR::Actions::Requirements do
         | 
| 4 | 
            +
              
         | 
| 5 | 
            +
              before(:each) do
         | 
| 6 | 
            +
                Object.send(:remove_const, :SubTest) if defined? SubTest
         | 
| 7 | 
            +
              end
         | 
| 8 | 
            +
              
         | 
| 9 | 
            +
              after(:each) do
         | 
| 10 | 
            +
                Object.send(:remove_const, :SubTest) if defined? SubTest
         | 
| 11 | 
            +
              end
         | 
| 12 | 
            +
              
         | 
| 13 | 
            +
              
         | 
| 14 | 
            +
              it "should run the defined requirements in sequence" do
         | 
| 15 | 
            +
                helper = mock("RequirementsFoo")  
         | 
| 16 | 
            +
                helper.should_receive(:first).and_return(true)
         | 
| 17 | 
            +
                helper.should_receive(:second).and_return(false)
         | 
| 18 | 
            +
                helper.should_not_receive(:third)
         | 
| 19 | 
            +
                
         | 
| 20 | 
            +
                helper_mod = MixinMock.new(helper)
         | 
| 21 | 
            +
                
         | 
| 22 | 
            +
                SmsR::Actions.stub!(:requirements).and_return(helper_mod)
         | 
| 23 | 
            +
               
         | 
| 24 | 
            +
                class SubTest < SmsR::Actions::RunnableAction
         | 
| 25 | 
            +
                  runnable :first, :second, :third do |needed|
         | 
| 26 | 
            +
                  end
         | 
| 27 | 
            +
                end
         | 
| 28 | 
            +
                
         | 
| 29 | 
            +
                st = SubTest.new :p
         | 
| 30 | 
            +
                st.requirements = [:first, :second, :third]
         | 
| 31 | 
            +
                st.check.should be(false)
         | 
| 32 | 
            +
              end
         | 
| 33 | 
            +
            end
         | 
| 34 | 
            +
             | 
| 35 | 
            +
            describe SmsR::Actions::Requirements, "requirement #config" do
         | 
| 36 | 
            +
             | 
| 37 | 
            +
              before(:all) do
         | 
| 38 | 
            +
                Test = Class.new do
         | 
| 39 | 
            +
                  attr_accessor :provider_name, :error
         | 
| 40 | 
            +
                  include SmsR::Actions::Requirements
         | 
| 41 | 
            +
                  
         | 
| 42 | 
            +
                  def initialize
         | 
| 43 | 
            +
                    @error = []
         | 
| 44 | 
            +
                  end
         | 
| 45 | 
            +
                end
         | 
| 46 | 
            +
                @tester = Test.new
         | 
| 47 | 
            +
                @config = mock("Config")
         | 
| 48 | 
            +
              end
         | 
| 49 | 
            +
              
         | 
| 50 | 
            +
              after(:each) do
         | 
| 51 | 
            +
                @tester = nil
         | 
| 52 | 
            +
                @config = nil
         | 
| 53 | 
            +
                SmsR::Config.stub!(:load).and_return(nil)
         | 
| 54 | 
            +
              end
         | 
| 55 | 
            +
              
         | 
| 56 | 
            +
              it "should return false if no config for provider :nonexisting_provider exists" do
         | 
| 57 | 
            +
                @tester.provider_name = :nonexisting_provider
         | 
| 58 | 
            +
                
         | 
| 59 | 
            +
                @config.should_receive(:[]).
         | 
| 60 | 
            +
                       with(:nonexisting_provider).
         | 
| 61 | 
            +
                       and_return(nil)
         | 
| 62 | 
            +
                
         | 
| 63 | 
            +
                SmsR.stub!(:config).and_return(@config)
         | 
| 64 | 
            +
                
         | 
| 65 | 
            +
                @tester.config.should be(false)
         | 
| 66 | 
            +
              end
         | 
| 67 | 
            +
             | 
| 68 | 
            +
              it "should return 'true' if config for :existing_provider_1 exists" do
         | 
| 69 | 
            +
                @tester.provider_name = :existing_provider
         | 
| 70 | 
            +
                
         | 
| 71 | 
            +
                @config.should_receive(:[]).
         | 
| 72 | 
            +
                         with(:existing_provider).
         | 
| 73 | 
            +
                         and_return(true)
         | 
| 74 | 
            +
             | 
| 75 | 
            +
                SmsR.stub!(:config).and_return(@config)    
         | 
| 76 | 
            +
                
         | 
| 77 | 
            +
                @tester.config.should be(true)
         | 
| 78 | 
            +
              end
         | 
| 79 | 
            +
                    
         | 
| 80 | 
            +
              it "should add an error to @error when failing" do
         | 
| 81 | 
            +
                @tester.provider_name = :nonexisting_provider
         | 
| 82 | 
            +
             | 
| 83 | 
            +
                @config.should_receive(:[]).
         | 
| 84 | 
            +
                         with(:nonexisting_provider).
         | 
| 85 | 
            +
                         and_return(nil)
         | 
| 86 | 
            +
             | 
| 87 | 
            +
                SmsR.stub!(:config).and_return(@config)    
         | 
| 88 | 
            +
             | 
| 89 | 
            +
                @tester.config
         | 
| 90 | 
            +
                
         | 
| 91 | 
            +
                @tester.error.size.should_not be(0) 
         | 
| 92 | 
            +
              end
         | 
| 93 | 
            +
            end
         | 
| 94 | 
            +
             | 
| 95 | 
            +
            describe SmsR::Actions::Requirements, "requirement #provider" do  
         | 
| 96 | 
            +
              
         | 
| 97 | 
            +
              include SmsR::Actions::Requirements
         | 
| 98 | 
            +
              
         | 
| 99 | 
            +
              before(:each) do
         | 
| 100 | 
            +
                @providers = mock("Providers")
         | 
| 101 | 
            +
                @provider_name = :blubb
         | 
| 102 | 
            +
                @error = []
         | 
| 103 | 
            +
              end
         | 
| 104 | 
            +
              
         | 
| 105 | 
            +
              it "should return false if no provider :nonexisting_provider exists" do
         | 
| 106 | 
            +
                
         | 
| 107 | 
            +
                @providers.should_receive(:[]).
         | 
| 108 | 
            +
                       with(:nonexisting_provider).
         | 
| 109 | 
            +
                       and_return(nil)
         | 
| 110 | 
            +
                       
         | 
| 111 | 
            +
                SmsR::Providers.stub!(:providers).and_return(@providers)
         | 
| 112 | 
            +
                
         | 
| 113 | 
            +
                @provider_name = :nonexisting_provider
         | 
| 114 | 
            +
                
         | 
| 115 | 
            +
                provider.should be(false)
         | 
| 116 | 
            +
                
         | 
| 117 | 
            +
              end
         | 
| 118 | 
            +
              
         | 
| 119 | 
            +
              it "should return 'true' if provider :existing_provider exists" do
         | 
| 120 | 
            +
                @providers.should_receive(:[]).
         | 
| 121 | 
            +
                       with(:existing_provider).
         | 
| 122 | 
            +
                       and_return(true)
         | 
| 123 | 
            +
                       
         | 
| 124 | 
            +
                SmsR::Providers.stub!(:providers).and_return(@providers)
         | 
| 125 | 
            +
                
         | 
| 126 | 
            +
                @provider_name = :existing_provider
         | 
| 127 | 
            +
                
         | 
| 128 | 
            +
                provider.should be(true)
         | 
| 129 | 
            +
              end
         | 
| 130 | 
            +
              
         | 
| 131 | 
            +
              it "should add an error to @error when failing" do
         | 
| 132 | 
            +
                @providers.should_receive(:[]).
         | 
| 133 | 
            +
                       with(:existing_provider).
         | 
| 134 | 
            +
                       and_return(true)
         | 
| 135 | 
            +
                       
         | 
| 136 | 
            +
                SmsR::Providers.stub!(:providers).and_return(@providers)
         | 
| 137 | 
            +
                
         | 
| 138 | 
            +
                @provider_name = :existing_provider
         | 
| 139 | 
            +
                provider
         | 
| 140 | 
            +
                
         | 
| 141 | 
            +
                @error.size.should >= 1    
         | 
| 142 | 
            +
              end
         | 
| 143 | 
            +
            end
         |