ruby语法 三

144 阅读2分钟

http

require 'uri'
require 'net/http'

url = URI('http://www.weather.com.cn/data/sk/101010100.html')
http = Net::HTTP.new(url.host,url.port);
request = Net::HTTP::Get.new(url)
request["Cookie"] = "HttpOnly"

response = http.request(request)
puts response.read_body

#输出结果:
{"weatherinfo":{"city":"北京","cityid":"101010100","temp":"27.9","WD":"南风","WS":"小于3级","SD":"28%","AP":"1002hPa","njd":"暂无实况","WSE":"<3","time":"17:55","sm":"2.1","isRadar":"1","Radar":"JC_RADAR_AZ9010_JB"}}

get

require 'uri'
require 'net/http'
require 'json'
require 'pp'

uri = URI('http://www.weather.com.cn/data/sk/101010100.html')
response = Net::HTTP.get(uri);

puts response.class
dict = JSON.parse(response)
pp dict

#输出结果:
String
{"weatherinfo"=>
  {"city"=>"北京",
   "cityid"=>"101010100",
   "temp"=>"27.9",
   "WD"=>"南风",
   "WS"=>"小于3级",
   "SD"=>"28%",
   "AP"=>"1002hPa",
   "njd"=>"暂无实况",
   "WSE"=>"<3",
   "time"=>"17:55",
   "sm"=>"2.1",
   "isRadar"=>"1",
   "Radar"=>"JC_RADAR_AZ9010_JB"}}

post

require 'net/http'

uri = URI('http://www.weather.com.cn/data/sk/101010100.html')
request = Net::HTTP::Post.new(uri);
request.set_form_data('username' => 'tangge')
response = Net::HTTP.start(uri.hostname,uri.port) do |http| 
    http.request(request)
end

case response
when Net::HTTPSuccess, Net::HTTPRedirection
    puts 'succes'
else
    puts 'faild'
end

curl

安装

brew install curl

get

curl http://www.weather.com.cn/data/sk/101010100.html

post

curl http://www.weather.com.cn/register -d "username=tangge&password=123456"

upload

curl http://www.weather.com.cn/upload -F "file=@main.rb"

封装upload工具类

====================upload.rb====================

def upload(url, file_path)
    raise 'url 必须传递' unless  url
    raise 'file_path 必须传递' unless file_path
    raise 'file_path 不存在' unless File.exist?(file_path)

    cmds = ['curl']
    cmds << url
    cmds << "-F \"file=@#{file_path}\""
    cmds_to_s = cmds.join(' ')
    #执行拼接命令
    system(cmds_to_s)
end

rake

安装rake

gem install rake

Rakefile

desc('这是一个测试 task')
task(:test) do
  ruby 'main.rb'
end

task(default:%w[test])

#输出结果:
/Users/yutangzhao/.rvm/rubies/ruby-2.7.2/bin/ruby main.rb
rakefile .....
desc('这是一个测试 task')
task(:test_01) do
  puts 'test_01....'
end

task(:test_02) do
  puts 'test_02....'
end

task(:test_03) do
  puts 'test_03.....'
end

task(default:%i[test_01 test_02])

#执行命令:
rake 、 rake test_03

task依赖

desc('这是一个测试 task')
task(:test_01) do
  puts 'test_01....'
end

task(:test_02) do
  puts 'test_02....'
end

#test_03 依赖test_01 test_02
task(:test_03 => %i[test_01 test_02]) do
  puts 'test_03.....'
end

task(default:%i[test_03])

#输出结果:
test_01....
test_02....
test_03.....

namespace

desc('这是一个测试 task')
task(:test_01) do
  puts 'test_01....'
end

namespace(:my_name) do
task(:test_01) do
  puts 'my_name:test_01....'
end
end

#执行命令:
rake test_01 、rake my_name:test_01

#运行结果:
test_01....
my_name:test_01....
task(:test_01) do
  puts 'test_01....'
end

namespace(:my_name) do
task(:test_01) do
  puts 'my_name:test_01....'
end
end

task(:test_02) do
  Rake::Task['test_01'].invoke
  Rake::Task['my_name:test_01'].invoke
end

#输出结果:
test_01....
my_name:test_01....

task参数

require 'pp'
require 'rake'

task(:task_1, [:arg1, :arg2]) do |task, args| 
  puts args[:arg1].to_i + args[:arg2].to_i
end

#输出结果:
3

task环境变量

require 'pp'
require 'rake'

task(:task_1) do |task| 
  puts ENV['arg1'].to_i + ENV['arg2'].to_i
end

#执行命令
arg1=1 arg2=3 rake task_1

#输出结果:
4

OptionParser解析参数

require 'pp'
require 'rake'
require 'optparse' 

task(:task_1) do 

  map = {} #接受参数
  opts = OptionParser.new
  opts.banner = "Usage: rake add [options]"
  opts.on("-o", "--one ARG", Integer) { |num1| map[:num1] = num1 }
  opts.on("-t","--two ARG", Integer) { |num2| map[:num2] = num2 }
  
  args = opts.order!(ARGV) {}
  opts.parse!(args)

  pp map
  puts map[:num1].to_i + map[:num2].to_i

  #退出
  exit
end

# 执行命令
rake task_1 -- -o 1 -t 2
# 输出结果:
3

erb

=====================config.rb.erb====================

//this file generated by script, don't edit it !
<%="name: #{@name};\n"%>
<%="debug: #{@debug};\n"%>
<%="adhoc: #{@adhoc};\n"%>
<%="release: #{@release};\n"%>

=====================main.rb====================
require 'pp'
require 'erb'

class Config

 include(ERB::Util)

 attr_accessor :name, :debug, :adhoc , :release
 
 #将 erb文件实例化, 绑定到当前对象的上线文环境
    def config_file
        ERB.new(File.read('config.h.erb'), nil, '>').result(binding)
    end

    def initialize(header_file_path, name, debug, adhoc, release)
        @name = name
        @debug = debug
        @adhoc = adhoc
        @release = release

        File.open(header_file_path, 'w+') do |f|
            f.puts(config_file)
        end
    end
end

Config.new('Config.h', 'tangge', 'debug-001', 'adhoc-002', 'release-003')

指定gemset环境,进入文件夹就会自动切换

#指定ruby版本
echo '2.7.2' > .ruby-version
#指定gemset
echo 'cocoapods' > .ruby-gemset